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


17

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

VLCを介してローカルでURLを押す:rtsp://192.168.0.21:554 / mpeg4

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

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

編集:NASはヘッドレス(HP N55Lなど)であり、RaspberryPiもヘッドレスです。

ZoneMinderについては既に調べましたが、小さなものが必要です。私は多分Motionを使ってストリーム上の動きを検出することを望んでいましたが、それは後ほど来るでしょう。


なぜVLC for Linuxを使用しないのですか?
LatinSuD 14年

1
おっと、FreeNASサーバーとRaspberryPiの両方がヘッドレスであることを忘れていました!

VLCはコマンドラインから使用できます。簡単ではありませんが、可能です。
LatinSuD 14年

RTSPは単なるプロトコルであるため、h264コンテンツをダンプするだけですか、それともVLCにトランスコードさせる必要がありますか?

1
それはVLCコマンドラインブードゥー教の一部です。申し訳ありませんが、ここで完全な答えを提供していません。完全にトランスコーディングする必要はないと思いますが、コンテナを変更する可能性があります。ここにVLCの専門家が現れることを願っています。
LatinSuD 14年

回答:


28

IPカメラの品質はさまざまですが、私の経験では不規則に動作するものもあります。RTSPストリームを処理するには、フォールトトレランスが必要です。

Live555プロジェクトは、CLI経由でRTSPオーディオ/ビデオストリームをプルするための比較的フォールトトレラントなRTSPクライアント実装であるopenRTSPを提供します。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になります。これにより、ネットワークトラフィックを少し減らすことができます。自分に合った組み合わせを見つけるには、オプションを試す必要があります。

率直に言って、カメラ自体の信頼性が低い場合や、実装が異なる場合があります-ソケットを予期せず閉じることはそれほど珍しいことではありません。

openRTSPクライアントがこれらのグリッチをキャッチしない場合があります。そこで、「openprocess」モジュールを使用して各openRTSPクライアントインスタンスの標準出力を呼び出して監視し、ファイルのサイズが増え続けることを確認するために、Pythonでコントローラーをコーディングすることを選択しました。

これは、CCSP業界のローエンドが規格に迅速かつ緩い対応をしているため、RTSPとONVIFが最も頻繁に悪用されている副産物のようです。

幸いなことに、通常はこれらの問題を回避できます。IPカメラとコントローラーがすべて一緒にうまく動作するように設計されていない限り、ONVIFを使用するのは1回限りの検出と設定管理のみにしてください。

Raspbianを実行しているいくつかのRaspberry Pi B +でopenRTSPを使用しています。各1280x1024ストリームはCPU時間の約8〜10%を占有し、RPiごとに最大8台のカメラを正常に実行し、ファイルをNASストレージに書き込みました。別のRPiは、完了したファイルをffmpegで処理し、モーションを検索し、それらのフレームのインデックスPNGを生成して、侵入の発見を支援します。

この後の部分を行うZoneMinderと呼ばれるオープンソースの取り組みがありますが、カメラで動作させることができませんでした。ONVIFのサポートはZMで新しく生まれたばかりであり、$ 100未満のIPカメラのメナジェリーによって生成されたむらのあるRTSPストリームとはうまく競合していないようです。


優れたソリューションKevin、モーション検索/ pngインデックスソリューションでもっと共有してください。
イゴール

@ Kevin-Prichard 1.アナログSD CVSBをIPストリームに変換できるとしたら、ソリューションは機能しますか。(各ソースから1時間単位でmp4ビデオをキャプチャしたい)そして、24時間365日、単一のネットワークで300のそのようなストリームを記録できますか?2.アナログSD / CVSBをIPストリームに変換できますか?
CP3O

7

私はちょうど2セントを追加して、BjornRの答えを補完すると思いました。

cronジョブを実行して定期的にVLCプロセスを強制終了する代わりに、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パラメーターが必要です。このコマンドはループ内に配置する必要があります。

私がこれまでに発見した唯一の問題は、新しい録音が始まるたびに数秒を見逃す可能性があることです。


7

あなたの質問に正しく従ったら、Linuxシステム(RPi)で次のコマンドを試してみてはいかがですか。

ffmpeg -i rtsp://192.168.0.21:554/mpeg4 -vcodec copy -acodec copy -map 0 -f segment -segment_time 300 -segment_format mp4 "ffmpeg_capture-%03d.mp4"

これにより、ビデオが300秒単位で保存されます。(クリップの長さは、入力および出力フレームレートに依存することに注意してください)


5

VLCは、ストリームを処理する理想的な候補のようです。 ストリームをキャプチャする基本的な方法は、Videolan Webサイトで説明されています。次のコマンドを使用して、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がこれを実行できるかどうかわからないため、このvlcプロセスを終了し、30分ごとに新しいインスタンスを起動するスクリプトを実行することをお勧めします。

NASに保存する場合は、ローカルファイルシステムにマウントするだけです。


1
FFMPEGを使用してまったく同じジョブを実行することもできます。答えが示すとおり、NASをマウントする必要があります。
キネクトゥス14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.