Raspberry Pi 4 と mjpg-streamer でウェブカメラ配信する
Raspberry Pi 4 にカメラモジュールを CSI 接続したものの、はて、このカメラで何をしようかなーと思っていた。というか、カメラの映像が外から確認できないことには使い勝手悪いよなー。ウェブ配信できるといいなー。
そう思って調べたところ、mjpg-streamer というツールで配信ができるらしいので、試してみた。
目次
mjpg-streamer をインストールする
インストールする mjpg-streamer は、ラズパイに対応した以下の Fork 版を使う。
# 依存モジュールを先にインストールしておく
$ sudo apt-get install -y cmake libv4l-dev libjpeg-dev imagemagick
# Git リポジトリを Clone する
$ git clone https://github.com/jacksonliam/mjpg-streamer.git
# 以下のディレクトリに移動する
$ cd mjpg-streamer/mjpg-streamer-experimental
# make してインストールする
$ make
$ sudo make install
# 以下にインストールされている
$ cd /usr/local/lib/mjpg-streamer
$ ls -l
-rw-r--r-- 1 root root 17928 2020-11-29 14:49 input_file.so
-rw-r--r-- 1 root root 18604 2020-11-29 14:49 input_http.so
-rw-r--r-- 1 root root 39248 2020-11-29 14:49 input_raspicam.so
-rw-r--r-- 1 root root 50844 2020-11-29 14:49 input_uvc.so
-rw-r--r-- 1 root root 18752 2020-11-29 14:49 output_file.so
-rw-r--r-- 1 root root 35892 2020-11-29 14:49 output_http.so
-rw-r--r-- 1 root root 13264 2020-11-29 14:49 output_rtsp.so
-rw-r--r-- 1 root root 13656 2020-11-29 14:49 output_udp.so
こんな感じ。
mjpg-streamer を実行する
mjpg-streamer を実行する時は以下のように叩く。
$ cd /usr/local/lib/mjpg-streamer
$ mjpg_streamer -o './output_http.so -w ./www -p 8080' -i './input_raspicam.so -x 640 -y 480 -fps 30 -q 10'
なんとなく分かると思うが、-i
オプションでラズパイに接続されているカメラを取得して、解像度や画質を指定している。-o
は HTTP サーバを 8080
ポートで起動して、そこに出力している、ということ。
出力されているページを見るには、ブラウザで以下の URL を開く。クエリパラメータが必要なので注意。
http://localhost:8080/?action=stream
ほとんどラグなく表示されている。
ラズパイ以外の PC から参照する時は、localhost
部分をラズパイの Private IP に変えてやれば良い。ローカルネットワーク内であれば、目立った遅延もなく、ほぼほぼ 30fps を維持している。以下の動画で実際の挙動を見ていただける。
自分は今のところ LAN 内で見えていれば良いので試さなかったが、ルータからラズパイへのポートを開放するか、ngrok 等でトンネルを作ってやれば、インターネット公開もできるだろう。