2011年3月19日土曜日

mjpg_streamer 計画停電対応

停電から復旧時は自動的に起動させたい

mjpg_streamer設定

  1. source forge (http://sourceforge.net/projects/mjpg-streamer/develop)のfileからmjpg-streamer_r94-1_i386.debを入手しインストール(普通に sudo dpkg -i jpg-streamer_r94-1_i386.deb)
  2. 利用しているJava applet cambozola.jar は同梱よりちょっと新しいのがあるので http://www.charliemouse.com/code/cambozola/ から持ってくる(cambozola.jar だけでOK)
  3. 適当なディレクトリにcambozola.jarを配置。/var/wwwとかでも構わない。ここでは/home/httpd/mjpg_streamer/とした。
  4. Webカメラを接続してみる。lsusbして接続を確認。 ls /dev/video* としてモノがあるのを確認。ここでは /dev/video0だったとする。複数ある場合はデバイス名を固定する方法があったはず....スマンがそれはgoogle先生に聞いてください。
  5. ログインしているユーザで mjpg_stremaer をとりあえず起動してみる。
    /usr/bin/mjpg_streamer -i input_uvc.so -d /dev/video0 -o output_http.so -p 9999 -www /home/httpd/mjpg_streamer
  6. パーミッションが無いと怒られた場合は、ls /dev/video0 で表示されたグループが現在のユーザのグループに入ってない。usermodなどでそのユーザを追加し、再ログインする。
  7. ちょっと本格的に。Webカメラに合わせてフレームレートとサイズを指定している。ここでは1FPS、サイズは1280x720。どんなサイズを指定できるかはカメラに依存する。各自調査されたし。
    /usr/bin/mjpg_streamer -i input_uvc.so -d /dev/video0 -f 1 -r 1280x720 -o output_http.so -p 9999 -www /home/httpd/mjpg_streamer
    ちゃんとうごきだすとCTRL+Cでストップするまで端末に戻ってこない。








  8. このままでWebブラウザから閲覧する。motion-jpegに対応したブラウザなら直接ストリームを見れる。google chromeとか。 http://《ipアドレス》:9999/?action=stream とする。自分自身なら当然 http://127.0.0.1:9999/?action=stream








  9. 試しにcambozola.jarを使ってみる場合は、手元にcambozola.jarを持ってきた後、
    java -jar cambozola.jar http://《ipアドレス》:9999/?action=stream -width=1280 -height=720 -accessorystyle=overlay
    mjpg_streamerと違うサイズを変更することもできるが、mjpg_streamer側から送られている画像を指定サイズに変換しているだけみたい。通信が軽くなる訳ではない。左肩に表示されるコントロールはデジタルズーム相当の機能







共存

mjpg_streamerはhttpサーバの機能を持っているが、これを80番ポートで運用するとApacheとかと競合する。

競合を避けるため、mjpg_streamerは9999ポートでリッスンし、Apacheの方で工夫してやる。

今回はApacheのproxy機能を使って /stream/ へのアクセスがあったら 《mjpg_streamerマシンのipアドレス》:9999へ渡すようにした。



# If you want to use apache2 as a forward proxy, uncomment the
# 'ProxyRequests On' line and the  block below.
# WARNING: Be careful to restrict access inside the  block.
# Open proxy servers are dangerous both to your network and to the
# Internet at large.
#
# If you only want to use apache2 as a reverse proxy/gateway in
# front of some web application server, you DON'T need
# 'ProxyRequests On'.

#ProxyRequests On
#
#        AddDefaultCharset off
#        Order deny,allow
#        Deny from all
#        #Allow from .example.com
#

# Enable/disable the handling of HTTP/1.1 "Via:" headers.
# ("Full" adds the server version; "Block" removes all outgoing Via: headers)
# Set to one of: Off | On | Full | Block
#ProxyVia Off

        ProxyRequests Off
        
               Order deny,allow
               Allow from all
        
        ProxyPass /stream http://《mjpg_streamerマシンのipアドレス》:9999
        ProxyPassReverse /stream http://《mjpg_streamerマシンのipアドレス》:9999

        ProxyVia On



ubuntu(10.10)の場合は /etc/apache2/mods-available/proxy.conf に追記する必要がある。

これで、 http://《webサーバのアドレス》/stream/?action=stream でストリームが見れるようになった。職場のF/W越えも出来てウハウハである。

自動起動対応

  1. マシンのBIOS設定を変更し、停電後は起動するようにする。AC RECOVERYとか。
    停電から復帰時にどうするかの設定。Onは電源On。Offは電源Off。Lastは停電前の状態にする。今回はOnとした。

/etc/rc.local

(/bin/su - 《ユーザ名》 《実行するスクリプト》> 《logファイル名へのフルパス》 2>&1 ) &

フルパスで指定する。

スクリプトは最初に30秒スリープさせている。/etc/rc.localの走るタイミングが早過ぎるらしく、スリープ無しで実行するとV4Lのエラーとなったため。カメラの認識前なのかな?

#!/bin/sh
echo `date '+%Y/%m/%d (%a) %H:%M:%S (%Z)'`: delay 30 sec for start mjpg_streamer
/bin/sleep 30
echo `date '+%Y/%m/%d (%a) %H:%M:%S (%Z)'`: start mjpg_streamer
/usr/bin/mjpg_streamer -i "input_uvc.so -d /dev/video0 -f 1 -r 1280x720" -o "output_http.so -p 9999 -www /home/httpd/mjpg_streamer"

http://d.hatena.ne.jp/DGL/20080119 を参考にさせて頂いた。

0 件のコメント: