2016年12月25日の日記(Sun Dec 25 14:02:08 +0900 2016)

2016-12-25T14:02:08+09:00

子供ができると監視したい、と思うことはあると思うのですが（例えば料理しているとか、ちょっと部屋を離れて食事をするとか）、我が家では Rasberry Pi3（以降、pi3）と USB カメラでそのような環境を作っています。配信と表示、録画をまとめておきます。

構成。

配信サーバ

pi3 + USB camera (HD Pro Webcam C920r)

リアルタイム受信

Windows + VLC

iOS (iPhone or iPad) + VLC client

録画用受信

Linux (Debian)

まず配信側の pi3。ふつーにつなぐ。uvc だっけ、その辺の設定は、なんかしたかなぁ？　とくに困らなかった。配信オプションで色々悩んだんだけど、結局、/etc/rc.local に

sudo -u pi screen -d -m dash -c 'sleep 10; cvlc -vvv v4l2:///dev/video0:chroma=h264:width=800:height=600 :input-slave="alsa://hw:1,0" --sout "#rtp{sdp=rtsp://:8554/}" :demux=h264; bash'

こう書くことで、rtsp で 8554 番ポートで配信することができるようになった（cvlc オプション自体は、どこかのサイトにあった）。/etc/rc.local に置いているので、pi3 の電源を刺したら 15 秒くらいで配信サーバになるようにしている。そのため、部屋を移動するのが楽。pi ユーザで screen しているので、何か必要があれば、screen -r でログを確認できる。

受信側。リアルタイム受信は、vlc で rtsp://pi3addr:8554/ に接続しにいけば良い。rtsp を受信できる人だったら、多分受信できるんじゃないか。

受信側、録画。これが難儀だったんだけど、

cvlc rtsp://pi3addr:8554/  --sout "#transcode{vcodec=h264,acodec=mp4a}:file{dst=test.mp4}" --sout-mux-caching 10000

今のところ、これでうまく動いているようだ。

最初の引数で入力ソースを決める。

--sout でどこに出力するかを指定する。

#transcode で変換方法を指定するようだ

vcode はビデオコーデック。h264 で配信しているので、それをそのまま使う。

acode はオーディオコーデック。s16b ってので配信しているらしい（よくわからんが、pcm 生音源？）ので、これを mp4 としてまとめるのは出来なかった、ため、mp4a に変換している。

--sout-mux-caching 10000 が無いと、変換がおっつかなくて死亡（vlc プロセスは起動しっぱなしだけど、なんか動画ファイル作成は失敗する。音だけのファイルができあがっていた）ので、付けておく。最初、もっと小さな数値だったが、失敗したんでどんどん数値が大きくなった。

これで、mp4 が出来る。結構ファイルはでかいので、6TB の HDD をつなげた。が、そんなに撮って見るのか、バックアップどうするか、などの問題がある。人工知能がきっとダイジェストしてくれるはず...！

感想。

配信はコンセント突っ込めばいいので楽。三脚に USB カメラ付くタイプなので、配置も楽。pi3 を三脚に巻き付けているので、取り回しも楽。

リアルタイム受信は、そこそこ楽。必要なときに iPad で監視している。ワンタッチで受信までいけないので（vlc viewer 側で操作が必要）、そこそこ面倒。

録画はわざわざ linux 機に ssh でつないで上記コマンドを打つ必要があるため、面倒。気合いを入れないとやらない。もうちょっと、気軽に録画を開始する方法（UI）が必要。物理スイッチとか、カメラに対してのジェスチャーとか。

pi3 の無線Lan で飛ばすので、電子レンジに弱い。電子レンジ起動すると（ほ乳瓶殺菌のため、頻繁に起動する）、リアルタイム受信および録画が失敗する。リアルタイム受信は、見たいときに再起動すればいいだけだが、録画は録画プロセスが残りっぱなしになるので困る。さっさと死んで欲しい（が、それはそれで、適当なパケロスには弱いんだろうなぁ）。vlc に再接続オプションはあるんだろうか。

リアルタイムで見ていると、若干遅れるのがわかる（３秒くらい？）が、実用に問題はない。

音に、高周波のノイズが入っているが、なんか調整する方法あるんかいな。

とりあえず、パンダを一人にする、というシチュエーション時に使うと、安心感が全然違う。

本当は、受信してうつぶせ検知とか、生存確認とかしたいんだけど。画像とか音声とか、扱うの難しい（面倒くさい）よね。

というわけで、メリークリスマス。

まだ、なんで泣いているのかわからないなぁ。