2015年9月30日水曜日

motion : いろいろな罠

試しに一晩動かしてみていろいろとはまりました。
やっぱりOpenWRTで騙し騙し使っているのとはちょっと違いますね(笑)


まずそもそもコマンドラインで直接実行させる場合の注意として、motionはmotionユーザー権限で動くことが前提となっています。

ですので直接実行して様子を見たい場合は
sudo motion motion -n
として実行すると素直に動き出します。

サービスとして起動させるためには、デーモンモードの設定(/etc/default/motion start_motion_daemon=no→yesを設定するのと、/etc/motion/motion.conf daemon off→onに変更)をした後、
sudo service motion start
とすると、設定に従って動き出します。

あとwebコントロールでいろいろと操作ができたり設定した状態をsetで保存したりできますが、ドキュメント的に残されている設定値や、不要な設定値がバッサリ削られて上書きされてします。
変な設定値が残っていると様々な条件が発生するのでこのような仕様になったのだと思います。設定値をwebコントロールでsetする前にあらかじめ/etc/motion/*.confをどこかにバックアップしておいたほうが身のためでしょう。

こんな感じで少しづつですがmotionのあるべき姿がようやくわかってきたのですが、一晩動かしてみてみると片方のカメラが停止状態に。

syslogを見ると「Corrupt JPEG data: premature end of data segment」というメッセージが。
一度停止させて、コマンドラインから実行すると結構な頻度で表示さそのうち止まっていました。
さらにいろいろと設定を変えているうちに
[1] Error requesting buffers 4 for memory map. VIDIOC_REQBUFS: Device or resource busy
[1] ioctl (VIDIOCGCAP): Inappropriate ioctl for device
とか。このエラーが出るとシステムを再起動しなければなりませんでした。

複数動かしているので、一つだけにしても状況は変わらず。

解像度を落とすとエラーの頻度は下がるもののやはり気が付くと「Corrupt JPEG data: premature end of data segment」 が出ていました。

カメラの自体結構古いもので、しかも室内用なのに外に出しっぱなしのままもう5年以上は経っているんじゃないでしょうかね(笑)ハード的に壊れている感じもありますが、もしかするとデバイスのファーム自体のバグがあるのかもしれません。そもそも純粋なuvcvideoデバイスではないので昔のバージョンのmotionでは動かすことはできず、その影響なのかもしれません。


具体的にこのエラーがどこで出ているのかわからないのですが、カメラのフォーマットをV4L2_PIX_FMT_RGB24などに変えると出なくなるので単純なハードウェアレベルのエラーな気がします。
ただ生データだと処理負荷が結構上がるようなので問題の出ないフォーマットを見つけることが必要になりそうではあります。

昨日書いた内容も少し書き換えないといけないなぁ…


参考になった記事
RaspiにUSBカメラをつないでみるTHE LAST DAY http://ngw.jp/~tato/wp/?p=3545 

0 件のコメント:

コメントを投稿