USBウェブカメラとubuntuで簡単ストリーミングサーバー構築

 最近のUSBウェブカメラ(UVC対応)は非常にお安くなってきました。私の住む田舎の量販店でも1000円程度で130万画素のウェブカメラが買えます。amazonでも沢山売っているし非常に手頃です。
 今回はMJPG-streamer、USBウェブカメラ、ubuntu(Linux)を使って簡単にストリーミングサーバーを作ってみます。

 ちなみに私の場合、生まれた娘を外出先から見るのに使ってます。ハムスターや猫などを見たりするのもいいかもしれません。

スクリーンショット(2010-11-07 20.48.36).jpg

準備

  • ubuntuがインストールされたパソコン(ここではubuntu 12.04.2で検証)
  • USBのウェブカメラ(UVC対応)

確認

 まず、LinuxのカーネルがUVCに対応しているか、USBのウェブカメラがUVC対応か、を確認しておくと後で残念な気分になりません。
 Linuxのカーネルはバージョンが2.6.26以上(くらいだったはず)であれば標準で組み込まれているので、それ以上であればOKです。最近のubuntuであればまず大丈夫です。
 USBのウェブカメラがUVCに対応しているかはウェブカメラのパッケージを確認するか、実際にLinuxのパソコンに接続してみます。接続してdmesgでログを確認して、以下のような「uvcvideo: Found UVC 1.00 device・・・」のようなログがあればOKです。

[text]
[ 4845.583764] usb 2-1: new full speed USB device using ohci_hcd and address 4
[ 4845.815824] usb 2-1: configuration #1 chosen from 1 choice
[ 4845.821053] uvcvideo: Found UVC 1.00 device BUFFALO BSW13K07H Webcam (0c45:62e0)
[ 4845.832366] input: BUFFALO BSW13K07H Webcam as /devices/pci0001:10/0001:10:19.0/usb2/2-1/2-1:1.0/input/input10
[/text]

 ここでデバイスが接続されたパス(/dev/video0など)を確認しておきましょう。
 他にビデオデバイスが接続されていなければ/dev/video0ですが、他にUSBウェブカメラやビデオキャプチャーボードが接続されている場合は/dev/video1かもしれませんので、接続の前後で、/dev/video*がどうなるか確認してみてください。もし、このデバイス名を毎回固定したい場合は「デバイス名を固定する」を試してみてください。

手順(2013/6/10に更新)

ライブラリのインストール〜ビルドまで

しばらくするとmakeが終わりmjpg_streamerなどの実行ファイルが生成されます。

2.MJPG-streamerを起動する

 MJPG-streamerは、実行ファイルのmjpg_streamerにいくつかの引数を与えて起動します。
 とりあえず、以下のコマンドで起動してみてください。

 起動できなかった場合、”./input_uvc.so -d /dev/video0 -y”の -y を削除して再度実行してみてください。また、ウェブカメラが/dev/video0かどうか確認して下さい。
 sudoで起動するのも忘れないで下さい。/dev/video0がパーミッションがroot:videoなので、そのままではアクセスできません。

 起動したらブラウザで http://(mjpg_streamerを起動したホスト):8080 を開いてみてください。以下のような画面が表示されたらOKです。

スクリーンショット(2010-11-07 20.48.10).jpg

起動パラメータについて

 主要なパラメータについて説明します。細かいパラメータは最後の付録を見てください。

mjpg_streamerのパラメータ
|~パラメータ|~説明|
|-i|入力ソースに関するパラメータを指定|
|-o|出力に関するパラメータを指定|
|-b|デーモンモードで起動。終了するときはプロセスIDをKILLする|

入力(-i)のパラメータ
|~パラメータ|~説明|
|-d|デバイス名。例) -d /dev/video0 |
|-r|サイズ。例) -r 640×320、-r 320×240|
|-f|FPS。例)-f 5|
|-q|画質 例) -q 50|
|-y|YUYVフォーマットを有効化。|

出力(-o)のパラメータ
|~パラメータ|~説明|
|-w|ウェブページデータへのパス|
|-p|ポート|
|-c|認証設定。「ユーザー名:パスワード」で指定|

 例えば、サイズが320×240で、FPSが5で、画質が50で、YUYVで、ポート8080で、ユーザー名hogeとパスワードhogeで認証をかけるなら以下のような感じです。

 その他の使い方は「start.sh」が同梱されているので中身を確認してみるといいです。

ウェブカメラがない、またはUVC非対応の場合

 今のところ、UVC対応カーネルとUVCウェブカメラが揃っていればどんなディストリビューションでも動いている気がしますが、ウェブカメラがUVC非対応のウェブカメラの場合、ちょっと面倒な上、ドライバが余りよろしくなくて画質がちょ〜悪かったりします。頑張ってみてもいいですが、おとなしくここで対応がはっきりしているウェブカメラを買った方が楽です。
 今のところ私が購入して大丈夫だったUVC対応ウェブカメラはBUFFALO BSW13K07HLOGICOOL C200ELECOM UCAM-DLG200HBKです。まぁ、「UVC対応」であればまず大丈夫だと思います。

付録:mjpg_streamer help

mjpg-streamer -h

./mjpg_streamer -i “pwd/input_uvc.so -h”

output_http.soのヘルプ(出し方がわからずソースから抜粋・・・)


3 thoughts to “USBウェブカメラとubuntuで簡単ストリーミングサーバー構築”

  1. こんにちは
    このサイト通りにやってみたのですが、makeをした時に

    gcc -O2 -DLINUX -D_GNU_SOURCE -Wall -lpthread -ldl mjpg_streamer.o utils.o -o mjpg_streamer
    mjpg_streamer.o: In function signal_handler':
    mjpg_streamer.c:(.text+0x122): undefined reference to
    dlclose’
    mjpg_streamer.c:(.text+0x144): undefined reference to dlclose'
    mjpg_streamer.o: In function
    main’:
    mjpg_streamer.c:(.text.startup+0x2e9): undefined reference to dlopen'
    mjpg_streamer.c:(.text.startup+0x308): undefined reference to
    dlsym’
    mjpg_streamer.c:(.text.startup+0x32a): undefined reference to dlsym'
    mjpg_streamer.c:(.text.startup+0x34c): undefined reference to
    dlsym’
    mjpg_streamer.c:(.text.startup+0x36e): undefined reference to dlsym'
    mjpg_streamer.c:(.text.startup+0x3eb): undefined reference to
    dlopen’
    mjpg_streamer.c:(.text.startup+0x407): undefined reference to dlsym'
    mjpg_streamer.c:(.text.startup+0x424): undefined reference to
    dlsym’
    mjpg_streamer.c:(.text.startup+0x441): undefined reference to dlsym'
    mjpg_streamer.c:(.text.startup+0x45e): undefined reference to
    dlsym’
    mjpg_streamer.c:(.text.startup+0x5e5): undefined reference to dlerror'
    mjpg_streamer.c:(.text.startup+0x7ed): undefined reference to
    dlerror’
    collect2: ld はステータス 1 で終了しました
    make: *** [mjpg_streamer] エラー 1

    とエラーが吐かれました
    どうすれば良いのでしょうか?
    環境はUbuntu12.04です
    ご回答よろしくおねがいします。

  2. >岡村さん
    ものすごい遅いコメントで申し訳ありませんm(__)m
    おそらく圧縮ファイルの方をダウンロードしてmakeされたと思いますが、そちらの方では最近はmakeが通らないようですね。
    記事をsubversionを利用したインストール方法のみに変更しましたので、もしよかったら試してみてください。

コメントを残す

メールアドレスが公開されることはありません。