MJPG-streamer
パソコンのUSBカメラの映像を、同一LAN上のPCやスマホから簡単に確認したい、と思ったときにどうしたらよいか調べたら、MJPG-streamerというアプリケーションがあることがわかったのでそれについて解説する。
なお、HTTPS通信はできない ので注意が必要である。
アクセス制限としてのベーシック認証はできるが、通信が暗号化されないので盗聴のリスクが少なからずある。
HTTPS通信による同一LAN内でのストリーミングをしたい場合、WebRTCを使ったほうが良い。
WebRTCを使って動画配信(同一LAN内) その1
公式サイト
どうも、下記が現在の公式サイトみたい。
公式サイト
Ubuntuにインストール
以下の手順でインストールする。
(公式ページは古いのか、libjpeg8-devとか見つからなかったりするので以下で)
$ sudo apt install -y cmake build-essential imagemagick libv4l-dev libjpeg-dev
$ git clone https://github.com/jacksonliam/mjpg-streamer.git
$ cd mjpg-streamer/mjpg-streamer-experimental
$ make
$ sudo make install
実行
起動は make したディレクトリにあるstart.shをたたくととりあえず起動する。
$ ./start.sh
MJPG Streamer Version: git rev: 310b29f4a94c46652b20c4b7b6e5cf24e532af39
i: Using V4L2 device.: /dev/video0
i: Desired Resolution: 640 x 480
i: Frames Per Second.: -1
i: Format............: JPEG
i: TV-Norm...........: DEFAULT
UVCIOC_CTRL_ADD - Error at Pan (relative): Inappropriate ioctl for device (25)
UVCIOC_CTRL_ADD - Error at Tilt (relative): Inappropriate ioctl for device (25)
UVCIOC_CTRL_ADD - Error at Pan Reset: Inappropriate ioctl for device (25)
UVCIOC_CTRL_ADD - Error at Tilt Reset: Inappropriate ioctl for device (25)
UVCIOC_CTRL_ADD - Error at Pan/tilt Reset: Inappropriate ioctl for device (25)
UVCIOC_CTRL_ADD - Error at Focus (absolute): Inappropriate ioctl for device (25)
UVCIOC_CTRL_MAP - Error at Pan (relative): Inappropriate ioctl for device (25)
UVCIOC_CTRL_MAP - Error at Tilt (relative): Inappropriate ioctl for device (25)
UVCIOC_CTRL_MAP - Error at Pan Reset: Inappropriate ioctl for device (25)
UVCIOC_CTRL_MAP - Error at Tilt Reset: Inappropriate ioctl for device (25)
UVCIOC_CTRL_MAP - Error at Pan/tilt Reset: Inappropriate ioctl for device (25)
UVCIOC_CTRL_MAP - Error at Focus (absolute): Inappropriate ioctl for device (25)
UVCIOC_CTRL_MAP - Error at LED1 Mode: Inappropriate ioctl for device (25)
UVCIOC_CTRL_MAP - Error at LED1 Frequency: Inappropriate ioctl for device (25)
UVCIOC_CTRL_MAP - Error at Disable video processing: Inappropriate ioctl for device (25)
UVCIOC_CTRL_MAP - Error at Raw bits per pixel: Inappropriate ioctl for device (25)
o: www-folder-path......: ./www/
o: HTTP TCP port........: 8080
o: HTTP Listen Address..: (null)
o: username:password....: disabled
o: commands.............: enabled
^Csetting signal to stop
i: cleaning up resources allocated by input thread
force cancellation of threads and cleanup resources
o: cleaning up resources allocated by server thread #00
done
これで、 /dev/video0 につながっている USBカメラの映像を、以下のURLにアクセスすることによりストリーミングで見ることができるようになる。
http://[PCのアドレス]:8080
いや、これじゃない、もっと、ストリーミングの画像だけがみたいんだ!という人は、
http://[PCのアドレス]:8080/?action=stream
と、
/?action=stream
おそらく期待通りの画像がでてくるだろう。
設定
640x480じゃなく、1920x1080にしたい!とか、/dev/video1のデバイスの画像を見たい!とか、いろいろあると思う。
そもそもだが、start.sh内で何をやっているのかというと、以下のコマンドをたたいているだけ。
./mjpg_streamer -i "./input_uvc.so" -o "./output_http.so -w ./www"
サイズを変えたければ、
-r 1280x960
-d /dev/video0
結構簡単なうえに、start.sh内にコメントアウトされたサンプル実行コードがたくさん書かれているのですぐわかるはず。
HTTPS通信
最初にも書いたが、HTTPS通信はできない。
nginxをリバースプロキシにしてhttps通信にしている人もいるが、そもそもhttpsでの通信が必要であればmpeg-streamerを使わない、というのが正解だろう。
Windows で MPEG-Streamer
今までのはすべてUbuntu上での方法だったが、Windows版のMPEG-Streamerも有志が作ってはいる。
https://github.com/flyinggorilla/MJPEG-Streamer-Universal-Windows-App
使ったことないけど。
以上!