コンテンツにスキップ

Top

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
のようにrオプションでできるし、デバイスを変更したいなら、
-d /dev/video0
のようにdオプションで切り替えればよい。

結構簡単なうえに、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

使ったことないけど。

以上!