今回のテーマは、Webカメラをネットワーク越しに動画をストリーミングすることのできるmjpg-streamerを、CuBox-iで動作させることです。以前は旧CuBoxでの検証を行っていました。やり方としては、CuBox-iでもほぼ同様なのですが、時間が経つとソフトウェアのバージョンも変わり、CuBox-iでサポート可能なハードウェアの違いもあるので、再度ここでまとめなおしておきます。
mjpg-streamerとは、UVCカメラ (Universal Video Class、UVCに対応したカメラは、ホストドライバ不要で動作します)を使い、ネットへストリーミング配信ができます。ハードウェア構成もソフトウェアも見直します
[CPU]
CuBox-iの場合、CPU/GPUの性能とメモリの容量に応じて4段階あります。このmjpg-streamerのソフトではCPUの処理で動画処理を行う都合上、CuBox(HummingBoard)-i2eXかCuBox-i4Proを使いたい。
[OS]
ここでの前提は UBUNTU12.04 となります。
ペタピココラム参照:
(15) HummingBoardでUbuntu12.04(Linaro)
http://goo.gl/m1uisb
[Web カメラ]
USB接続のUVC対応Webカメラならば大体はみな同じ、というような考えを持っていたのですが、これが大きく裏切られました。
これまでに旧CuBoxの検証にも使ってきたBuffalo, ELECOMのものが全部使えませんでした。UBUNTUのサイトで検証されているものならどうか、ということで
https://wiki.ubuntu.com/SkypeWebCams
を参考にし、Linux系で一番標準的なLogicool C270を取り寄せて試験をしました。その結果、これではちゃんと動作することが確認できました。
UBUNTUばかりか、Androidでも使えることが確認できました。
準備と確認:
guvcviewでは重い上に準備に時間がかかりすぎるので、まず簡単な luvcview でチェックしてみます。
$ apt-get install luvcview $ luvcview |
ウィンドウが開いてWebカメラの映像が表示されたでしょうか。Logicool C270では大丈夫でした。ところが先に記述の通り、UVCカメラであってもこの時点で何も表示されない、模様パターンが表示される、色抜けしたネガ映像のようなものが表示される、等の症状があります。使えるものを探す、としか対処の方法はないようです。
[MJPG-STREAMER]
ソースからコンパイルすることになるので、基本はsvn coでダウンロードしてきて(サブバージョン、バージョン管理をするツール)使うのがスジ。
$ sudo apt-get update $ sudo apt-get install subversion imagemagick libjpeg-dev $ svn co https://svn.code.sf.net/p/mjpg-streamer/code/ mjpg-streamer $ cd mjpg-streamer
$ make |
・以前はsourceforgeが
svn co https://mjpg-streamer.svn.sourceforge.net/svnroot/mjpg-streamer mjpg-streamer
たったのですが、relocateされたようです。
・(R)eject, accept (t)emporarily or accept (p)ermanently? と聞かれた場合は、一時的でOKなので t で返します。
・make でさらにエラーがでるようであれば、何かが変更になったせいです。各自でそれを突き止めてください。
Makefile の中を多少いじることも必要になるかもしれません。
undefined reference to `pthread_create' というあるはずのライブラリがない、というような理不尽なメッセージでmakeがエラーしたりします。(このあたりは、環境がかわっていくのでいつもそうなる、とも言い切れない)
Makefile中のApplication、とある部分
$(APP_BINARY): mjpg_streamer.c mjpg_streamer.h mjpg_streamer.o utils.c utils.h utils.o
$(CC) $(CFLAGS) $(OBJECTS) $(LFLAGS) -o $(APP_BINARY)
chmod 755 $(APP_BINARY)
では、$(OBJECTS) $(LFLAGS) の順を入れ替える、( $(CFLAGS) $(LFLAGS) $(OBJECTS)とする)などで対処します。
mjpg-streamerを使用するには以下のコマンドを入力します。表示の確認にはブラウザを使いますが、IEでは表示できません。Chrome, Firefox, MacOS/iOSのSafariは表示できます。
$ ./mjpg_streamer --help |
でヘルプが見られるのでオプション設定を確認されたい。
$ ./mjpg_streamer -i "./input_uvc.so -d /dev/video0 -y" -o "./output_http.so -w ./www -p 8080 -c username:password" -b |
(# ./mjpg_streamer -i "入力側 -d 使用するデバイス -y YUYV(&disable MPEG)" -o "出力側 -w Web表示用のファイルプレース -p ポート -c ユーザ名:パスワード(パスワード設定をしている場合のみ)")
ストリーミング動画画面だけを表示するなら
http://ドメイン名:8080/?Action=streaming |
(なお、一枚画像のみだと =snapshot )
なお、http://ドメイン名:8080/ とすると以下のようなデモ解説画面で表示される。メニューのStreamを選ぶとmjpgストリームをみることができる。