2014-06-09 08:56:55 +0000 2014-06-09 08:56:55 +0000
18
18

IPカメラからRTSPストリームをキャプチャして保存

RTSP(h264 mpeg4)ストリームを出力するIPカメラをいくつか持っています。

VLC経由でローカルにURLを打つ: rtsp://192.168.0.21:554/mpeg4

カメラをストリーミングしてディスク(デスクトップ)にダンプすることができます。しかし、私はこれらのファイルをNAS(FreeNAS)に保存したいと思います。RTSPストリームをキャプチャしてディスクにダンプする方法を探していましたが、何も見つかりません。

FreeBSDやLinux(RaspberryPi)でストリームをキャプチャして、LinuxやFreeBSDのローカルのディスクにストリームされたコンテンツをダンプすることは可能でしょうか - できれば30分ごとに?

EDIT: NASはヘッドレス(HP N55Lか何か)で、RaspberryPiのもヘッドレスです。

ZoneMinderについては既に調べたが、何か小さいものが必要だ。Motionを使ってストリーム上の動きを検出できればいいなと思っていたのですが、それは後ほど。

回答 (4)

30
30
30
2015-05-29 22:33:16 +0000

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 ストリームとはうまく競合していないようです。

7
7
7
2017-06-26 12:49:23 +0000

ご質問の内容が正しければ、Linux システム (RPi) で以下のコマンドを試してみてはいかがでしょうか。(クリップの長さは入力と出力のフレームレートに依存することに注意してください)

7
7
7
2015-04-01 22:52:30 +0000

私の2セントを追加して、BjornRさんの回答を補足しようと思いました。

定期的にVLCプロセスを終了させるためにcronジョブを実行する代わりに、VLCを指定した時間だけ実行して、その後に終了させることができます。

これは私のボックスで実行しているコマンドです。

/usr/bin/vlc -vvv rtsp://192.168.1.128:1554/11 --sout=file/ts:/media/path/to/save/location/recording-$(date +"%Y%m%d%H%M%S").ts -I dummy --stop-time=480 vlc://quit

これは、VLC を指定した時間だけ実行し、その後終了します。VLC は録画を停止して開いたままになるので、vlc://quit パラメータは必須です。このコマンドはループ内に配置する必要があります。

私が今のところ見つけた唯一の問題は、新しい録画が始まるたびに数秒を見逃すかもしれないことです。

5
5
5
2014-06-09 12:06:59 +0000

VLCはストリームを処理するのに理想的な候補になりそうです。 ストリームをキャプチャする基本的な方法はVideolanのサイトに記載されています。D-Link DCS-5222のネットワークカメラの出力を以下のコマンドで記録することに成功しました。

vlc rtsp://user:password@ip/play1.sdp --sout=file/ogg:mystream.ogv

あなたの場合は、これで出力をローカルに保存できるかもしれません。

vlc rtsp://192.168.0.21:554/mpeg4 --sout=file/ts:mystream.mpg

私はこのVLCプロセスを終了させるスクリプトを実行して、30分ごとに新しいインスタンスを起動することをお勧めします。

関連する質問

6
10
5
37
3