mjpg-streamerでストリーミング配信

※Linux関連記事についてはsnagplaces on @wikiにまとめていますので、そちらをご参照ください。

この記事自体はだいぶ前に書いたものですが、投稿するのをわすれてました。

mjpg-streamerは、一部独自送信方式があるものの、UVCカメラを使ったストリーミング配信ができます。

ダウンロードするときにuvc-streamerとmjpg-streamerの2種類がセットで来ますが、メインで使用するのはmjpeg-streamerでよさそうです(mjpg-streamerはuvc-streamerの後継らしい)。

mjpegとあるだけにjpeg変換ができないと使えないので、あらかじめlibjpeg-develはインストールしてください(libjpegだけでは駄目、yumで拾える)。

mjpg-streamerのダウンロードとコンパイル

mjpg-streamerのダウンロード(svnなので常に最新版です)

# svn co https://mjpg-streamer.svn.sourceforge.net/svnroot/mjpg-streamer

コンパイル

# cd mjpg-streamer/mjpg-streamer/
# make

ちなみに、今回はmake installはしていません。installしても問題はありませんがプラグインのパスがうまく通っていないので結局フルパスで設定することになります。

mjpg-streamerの使用

mjpg-streamerを使用するには以下のコマンドを入力します。表示の確認にはブラウザを使いますが、別途Apacheを用意する必要はありません。

# ./mjpg_streamer -i "./input_uvc.so -d /dev/video0 -y" -o "./output_http.so -w ./www -p 8080 -c hoge:hoge"
(# ./mjpg_streamer -i "入力側 -d 使用するデバイス" -o "出力側 -w Web表示用のファイル置場 -p ポート -c ユーザ名:パスワード")

README等を参照して適当にいじってわかったオプションは以下の通り。
-hで出る設定例で「-i "input_uvc.so –help"」とかやってもプラグインのヘルプは出ませんでした。これがわかれば設定の幅が広がるんですけどね。

mjpg_streamer
    -b:バックグラウンドとして起動(終了するにはpsでID確認してkill)
    -i:入力側の指定(""で囲む)
    input_uvc.so ※インストールした場合は/usr/local/lib/input_uvc.so
        -d:UVCデバイスの指定
        -y:不明、指定しないとエラーが出る
        -r:画面解像度(縦x横)UVCデバイスによって設定可能な解像度があるので注意(luvcview等で有効解像度を確認すること)
        -q:画像クオリティ(1~100)
   -o:出力側の指定(""で囲む)
   output_http.so ※インストールした場合は/usr/local/lib/input_uvc.so
       -w:Webで表示する時のテンプレート ※インストールした場合は/usr/local/www
       -p:使用ポート
       -c:認証ユーザ名とパスワード(ユーザ名:パスワード)

通常の使用ポートに8080を使用するので、Linuxファイアウォールでポート8080を許可するようにしましょう(HTTPの解放は80番だけ)。

ブラウザ上では以下のアドレスでアクセスするとデモページが表示されます。

http://ドメイン名:8080

ちなみに、ポートが明示できるためhttpのポート(80番)が指定できますが、Apacheが起動しているとポートの競合を起こして使用できないので、80番ポートを使用してmjpg-streamerを起動するときはhttpdのサービスを切っておきましょう。

ストリーミングの表示形態としては、5種類の方法が用意されています。

  • 一枚画像のみ
  • サーバプッシュ方式で画像の連続転送
  • Javaアプレット
  • Javascriptを使用して連続的に画像を読み込む
  • メディアプレイヤー等を使用しての配信

サーバプッシュ方式のはNetscape時代から使用されている技術なようで、IEでは表示できませんがiPod TouchのSafariでは表示できます。ただ、結構CPUを食うようなので他の作業をしたりとかはちょっと厳しいかもしれません(LOOX Rで表示させてると常時60%もCPUを使用してました)。Javascriptの方式は汎用性がありますがコマ落ち画像になります。Javaアプレット のほうはサーバプッシュのより若干負荷が軽いので無難なのはJavaアプレット方式でしょうね。

エラー対策

mjpg-streamerを構築する際、いくつかのエラーがありましたので、その対策法を載せておきます。

エラー例1:プラグインが見つからない

MJPG Streamer Version.: 2.0
ERROR: could not find input plugin
       Perhaps you want to adjust the search path with:
       # export LD_LIBRARY_PATH=/path/to/plugin/folder
       dlopen: input_uvc.so: cannot open shared object file: No such file or directory

対応:Input側のプラグインファイルなどをちゃんと明示(フルパス等)しましょう。

エラー例2:V4L2が動かない

MJPG Streamer Version.: 2.0
 i: Using V4L2 device.: /dev/video0
 i: Desired Resolution: 640 x 480
 i: Frames Per Second.: 5
 i: Format…………: MJPEG
Unable to set format: Invalid argument
 Init v4L2 failed !! exit fatal
 i: init_VideoIn failed

対応:Input側のデバイス指定で「-y」を付加しましょう。/dev/video0だけではダメなようです。もしくは別パッケージがデバイスを使用していたときもこのエラーが出ます。

その他のエラー対応例は「MJPG-Streamer › Wiki › ubuntuusers.de」に詳しく載ってます。

番外:JavaApplet版ビューアCambozolaをアップデートしてみる

mjpeg-streamerが持つCambozolaはバージョンが0.68で、これを配布しているサイトを見に行くと0.70になってました。

どれほど機能が向上しているのかわかりませんが、試しにアップデートしてみます。

Cambozolaのダウンロードとインストール

# cd www/
# wget http://www.charliemouse.com:8080/code/cambozola/cambozola-latest.tar.gz
# tar -zxcf cambozola-latest.tar.gz
# cp cambozola-0.70/dist/cambozola.jar cambozola.jar

こんだけ。見た目も使用感も特に変わりませんでした。

音声が拾えないのがネックですが、設定の幅が広く使い勝手はなかなかよいです。Cambozolaに至ってはLa fonera2.0のWebカメラプラグインでも採用されましたしね。

mjpg-streamerでストリーミング配信” への1件のフィードバック

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中