Webカメラを使ってUbuntuで動画をストリーミング配信(mjpg-streamer使用)&Home Assistantで監視
たぶんRaspberry piでも出来ると思うけど、自宅の環境がUbuntuなのでそれで。
Webカメラを用いて、動画のストリーミング配信をしたいと思った。比較的安い構成で実施することができたので、その方法を紹介したい。
使用するWebカメラ
UVCというWebカメラの規格に即しているものであれば何でも大丈夫なのだが、今回はLogicoolのC270というかなり安いカメラを使用した。というか、これくらい安いカメラで十分である。
一応720p・30fpsまで対応している。
lsusbを使ってWebカメラを認識しているか確認する
カメラをPCのUSbポートに差し込み、lsusbコマンドを打ち込むと、Webカメラが認識されているはずである。
$ lsusb
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 1b1c:0c09 Corsair
Bus 001 Device 005: ID 046d:0825 Logitech, Inc. Webcam C270
Bus 001 Device 004: ID 0c45:0828 Microdia
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
私がほかに何をUSBで使用しているのか丸見えなのだが、ここで出てきている「Logitech, Inc. Webcam C270」がウェブカメラ。無事認識されていることが分かる。
動画ストリーミングソフト「mjpg-streamer」をUbuntuにインストールする
今回は「mjpg-streamer」というソフトウェアを利用する。有名な動画ストリーミング配信ソフトに「motion」というものがあるのだが、こちらは若干不安定かつ画質がよろしくないため、個人的にはmjpg-streamerのほうがオススメ。
mjpg-streamerは公式サイトがsvnを公開している。
$ sudo apt-get install subversion imagemagick libjpeg-dev$ svn checkout svn://svn.code.sf.net/p/mjpg-streamer/code/ mjpg-streamer$cd mjpg-streamer/mjpg-streamer/$ make$ sudo make install
mjpg-streamerを起動する
起動するコマンドはつぎのような形になる。
$ mjpg_streamer -i "/usr/local/lib/input_uvc.so -y -q 100 -r [
解像度] -f [FPS]" -o "/usr/local/lib/output_http.so -w ./www -p [動作ポート
]"
バックグラウンドで動作させる場合は最後に -b をつける。
また、「-w」オプションで指定しているディレクトリにmjpg-streamerのサンプルHTMLが入っているため今回は指定しているが、サンプルを使用しない場合はなくても大丈夫(別の場所に移動させた場合は、「./www」ではなく移動先を記載する。
今回はつぎのような形で、解像度を1280×720、fpsを30、ポートを14230として起動してみた。
$ mjpg_streamer -i "/usr/local/lib/input_uvc.so -y -q 100 -r 1280x720 -f 30" -o "/usr/local/lib/output_http.so -w ./www -p 14230" -b
mjpg-streamerにアクセスする
アクセスは、http://[サーバーのIPアドレス]:[指定したポート(今回は14230)]で大丈夫。こんな感じで、mjpg-streamerのサンプルページが現れる。
サンプルページにはたいしたことは書いていないが、ひととおり動画の取り出し方が解説されている。
といっても、下記の通りであるが。
- 「http://[サーバーのアドレス]:[ポート]/?action=snapshot」で、スナップショット(写真)を取り出せる
- 「http://[サーバーのアドレス]:[ポート]/?action=stream」で、モーションJPEG形式の動画を取り出せる
mjpg-streamerで取り出してみた画像
比較的綺麗に映ってくれる。また、今回はアップロードをしないが、動画もきちんと30fpsで動作しており、水の揺れをきちんと表現できていた。
Home Assistantへの登録
Home Assistantにも簡単に登録することができる。「platform: mjpeg」として、そのままconfiguration.yamlに登録をする。
camera: - platform:mjpeg mjpeg_url:http://[サーバーのアドレス]:[ポート]/?action=stream name:MyCamera
(映り込みがあったのでモザイク)
自宅の監視などに役立てるかも。
※Home Assistant特集はこちらから。