IP カメラの品質は様々ですが、私の経験上、一部のカメラは異常な動作をしています。それらのRTSPストリームを扱うには、フォールトトレランスが必要である。
Live555プロジェクトは、比較的フォールトトレランスの高いRTSPクライアント実装であるopenRTSPを提供しており、CLI経由でRTSPオーディオ/ビデオストリームを引っ張ってくることができます: http://www.live555.com/openRTSP/
例えば、カメラのRTSPオーディオ/ビデオをQuickTimeフォーマット(AVIとMP4も利用可能)のファイルに保存するには、15分ごとに1つのファイルを保存します。
$ openRTSP -D 1 -c -B 10000000 -b 10000000 -q -Q -F cam_eight -d 28800 -P 900 -t -u admin 123456 rtsp://192.168.1.108:554/11
これらのオプションは以下を意味します。
-D 1 # Quit if no packets for 1 second or more
-c # Continuously record, after completion of -d timeframe
-B 10000000 # Input buffer of 10 MB
-b 10000000 # Output buffer 10MB (to file)
-q # Produce files in QuickTime format
-Q # Display QOS statistics
-F cam_eight # Prefix output filenames with this text
-d 28800 # Run openRTSP this many seconds
-P 900 # Start a new output file every -P seconds
-t # Request camera end stream over TCP, not UDP
-u admin 123456 # Username and password expected by camera
rtsp://192.168.1.108:554/11 # Camera's RTSP URL
-t オプションを削除すると、openRTSP はデフォルトで UDP を使用するようになり、ネットワークトラフィックを少し減らすことができます。自分に合った組み合わせを見つけるためには、オプションを弄る必要があります。
率直に言って、カメラ自体が信頼性に欠けることもありますし、単にdifferentに実装されているだけで、ソケットが不意に閉じてしまうことはそれほど珍しいことではありません。
時々、openRTSPクライアントがこれらの不具合をキャッチしないことがあります。そこで、私は'subprocesses'モジュールを使ってPythonでコントローラをコーディングし、各openRTSPクライアントインスタンスのstdoutを呼び出して監視し、ファイルのサイズが増え続けているかどうかもチェックすることにしました。
これは、CCTV業界のローエンドが規格を弄っていることの副産物のようです。
幸いなことに、通常はこれらの問題を回避することができます。IPカメラとコントローラがうまく連携して動作するように設計されていない限り、ONVIFは一度だけのディスカバリーと設定管理にのみ使用してください。
私はRaspbianを実行しているいくつかのRaspberry Pi B+でopenRTSPを使用しています。各1280x1024のストリームはCPUの時間の8~10%程度を占めており、RPiごとに最大8台のカメラを動作させ、NASストレージにファイルを書き込むことに成功しています。もう一つのRPiでは、完成したファイルをffmpegで処理し、動きを検索して、それらのフレームのインデックスPNGを作成して、侵入者の発見を支援しています。
ZoneMinderというオープンソースの取り組みがありますが、私のカメラでは動作させることができませんでした。ONVIF のサポートは ZM の中では新しく、まだ始まったばかりで、100ドル以下の IP カメラで生成されるスポット的な RTSP ストリームとはうまく競合していないようです。