カメラからRTSP経由でビデオストリームを取得し、ファイルに保存する必要があります。これはすべて、gstreamerを介して行う必要があります。
いくつかのグーグル検索の後、私は以下を試しました:
gst-launch-1.0 rtspsrc location=rtsp://192.168.1.184/live2.sdp ! queue ! rtph264depay ! avdec_h264 ! mp4mux ! filesink location=result3.mp4
しかし、それはエラーを与えます:「誤ったパイプライン:avdec_h264-0をmp4mux0にリンクできませんでした」
gst-launch-1.0 rtspsrc location=rtsp://192.168.1.184/live2.sdp ! queue ! rtph264depay ! h264parse ! mp4mux ! filesink location=result3.mp4
作業を開始しますが、結果ファイルはVLC経由で再生できません。
行うべき正しいコマンドは何ですか?また、h264parseとavdec_h264のどちらかを選択した場合、その理由を説明していただけますか?
Mp4muxがファイルをファイナライズできるように、-eフラグ(ストリームの終わり)を追加する必要があります。そうしないと、再生できないファイルが破損します。
gst-launch -e rtspsrc location=url ! decodebin ! x264enc ! mp4mux ! filesink location=file.mp4
2番目のコマンドは正しいように見えます。生のh264ビデオデータには、「配置」と「ストリーム形式」という2つの特性があり、変化する可能性があるため、少し注意が必要です。 h264parseは、h264データをさまざまなh264関連のGStreamer要素に必要な形式に変換できます。
avdec_h264はデコーダー要素です。どうやらデータを表示していないので、データをデコードしたくありません。エンコードされたh264データをRTSPストリームからmp4コンテナファイルに入れています。
ファイルが再生されない場合は、ストリームが良好であることを確認するか、他のメディアプレーヤーを試して、それらが機能するかどうかを確認する必要があります(mplayer、Media Player、Quicktimeなど)。
「matroskamux」要素を使用して、matroskaコンテナファイルに多重化することもできます。
RtspsrcストリームがすでにH264でエンコードされている場合は、コーデックプロセスを実行する代わりに、mp4コンテナに直接書き込むだけです。
Rtspをmp4に記録するためのgst-launch-1.0コマンドは次のとおりです。
$ gst-launch-1.0 -e rtspsrc location=rtsp://admin:[email protected]/rtsph2641080p protocols=tcp ! rtph264depay ! h264parse ! mp4mux ! filesink location=~/camera.mp4
幅、高さ(videoscaleを使用)、色空間(videoconvertを使用)、フレームレート(capsfilterを使用)などを変更する場合は、video/x-rawタイプの機能に基づいて行う必要があり、ビデオからデコードする必要があります。/x-h264からvideo/x-rawへ。
また、変更後、mux要素(mp4mux、mpegtsmux、matroskamuxなど)にリンクする前に、再度エンコードする必要があります。
ビデオデコーダーをいつ使用するかわからないようです。ここでは、ビデオコーデックの使用経験を簡単に共有します。
ソースがエンコードされていて、同じエンコードでコンテナーに書き込みたい場合、パイプラインは次のようになります。
src ! ... ! mux ! filesink
ソースがエンコードされていて、別のエンコードでコンテナーに書き込みたい場合、またはビデオシンクで再生したい場合、パイプラインは次のようになります。
src ! decode ! ... ! encode ! mux ! filesink src ! decode ! ... ! videosink
ソースがエンコードされておらず(videotestsrcのように)、コンテナーに書き込みたい場合、パイプラインは次のようになります。
src ! encode ! mux ! filesink
注:コーデックを実行すると、CPUリソースが高くなります!したがって、コーデックの作業を行う必要がない場合は、それを行わないでください。
便利なツールgst-inspect-1.を使用して、src、sink、mux、demux、enc、dec、convert、...などの要素をチェックアウトできます。例えば:
$ gst-inspect-1.0 | grep mux
使用可能なすべてのマルチプレクサ要素を表示します。