Webカメラを使ってUbuntuで動画をストリーミング配信(mjpg-streamer使用)&Home Assistantで監視

2018年7月8日Home AssistantLinux, Home Assistant, Ubuntu, Webカメラ, mjpg-streamer

たぶんRaspberry piでも出来ると思うけど、自宅の環境がUbuntuなのでそれで。
Webカメラを用いて、動画のストリーミング配信をしたいと思った。比較的安い構成で実施することができたので、その方法を紹介したい。

使用するWebカメラ

UVCというWebカメラの規格に即しているものであれば何でも大丈夫なのだが、今回はLogicoolのC270というかなり安いカメラを使用した。というか、これくらい安いカメラで十分である。

LOGICOOL ウェブカム HD画質 120万画素 C270

LOGICOOL ウェブカム HD画質 120万画素 C270

1,080円(08/14 08:31時点)
Amazonの情報を掲載しています

一応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を公開している。

MJPG-streamer
Download MJPG-streamer for free. Project abandoned! Sorry, I havent found the time to keep this project updated.
$ 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のサンプルページが現れる。

mjpg-streame

サンプルページにはたいしたことは書いていないが、ひととおり動画の取り出し方が解説されている。
といっても、下記の通りであるが。

  • 「http://[サーバーのアドレス]:[ポート]/?action=snapshot」で、スナップショット(写真)を取り出せる
  • 「http://[サーバーのアドレス]:[ポート]/?action=stream」で、モーションJPEG形式の動画を取り出せる

mjpg-streamerで取り出してみた画像

streamer-2

比較的綺麗に映ってくれる。また、今回はアップロードをしないが、動画もきちんと30fpsで動作しており、水の揺れをきちんと表現できていた。

Home Assistantへの登録

Home Assistantにも簡単に登録することができる。「platform: mjpeg」として、そのままconfiguration.yamlに登録をする。

camera:
 - platform: mjpeg
   mjpeg_url: http://[サーバーのアドレス]:[ポート]/?action=stream
   name: My Camera

camera
(映り込みがあったのでモザイク)

自宅の監視などに役立てるかも。

※Home Assistant特集はこちらから。