2016-08-02 33 views
2

私はgstreamerの初心者ですので、助けていただければ幸いです。送信者がgstreamerでデータを送信しない場合でもパイプラインを記録する方法

私はパイプラインを聞いて、フレームにファイルを記録しようとしています。 私は、次のパイプラインを試してみました:私は、送信者が任意のフレームデータを提供していない場合でも、全体のタイムラインを記録したい

gst-launch-1.0 udpsrc port=5600 do-timestamp=true ! application/x-rtp, payload=96 ! rtph264depay ! avdec_h264 ! clockoverlay ! jpegenc ! avimux ! filesink location=stream.avi 

を。 デフォルトでは、パイプラインがいくつかの有効なフレームを受信すると、レコーダーによってフレームが追加されます。しかし、送信者がデータを送信しないときに黒いフレームがいくつか見えます。

答えて

1

私はちょっと実験しましたが、普通のgst-launchコマンドでこれを行うことはできません。残念ながら、おそらくそれは、パケット/バッファーがそれ以上入ってこないときを検出し、パイプラインを変更するアプリケーションを書くことです。それから私は、入力セレクタにストリームを取り付けるためのメソッドを作成したい

gst-launch-1.0 videotestsrc pattern=black ! video/x-raw ! input-selector name=selector ! clockoverlay ! jpegenc ! avimux ! filesink location=stream.avi

あなたはそれを行くを与えたい場合は、私はこのようなものでinput-selector要素をお勧めしたいですで来て何のパケットを検出しないようにudpsrc port=5600 do-timestamp=true ! application/x-rtp, payload=96 ! rtph264depay ! avdec_h264 ! identity name=buffer-checker

、あなたはidentity要素にhandoff信号をリッスンして、ときにタイムアウトするストリームを削除し、使用してvideotestsrcから黒のテストパターンに切り替えることができますinput-selectoractive-padプロパティ

videomixer要素を使用すると、がほぼになりますが、ストリームの複数の停止と開始を処理するとは思いません。

とにかく、他の誰かがより良いアイデアを考えてくれることを願っています。また、トップレベルのアプローチを再分析し、複数のビデオクリップで作業する方法があるかどうかを確認することもできます。

+0

私はvideomixerが動作すると言うでしょう..ストリームの複数の一時停止/停止時に正確に何をしていますか? IDシングルセグメントを使用するのはどうですか? – nayana

+0

ストリームがvideomixerに接続されると、videomixerはそれが動作してフレームを配信することを期待しているようです。 1つの着信シンクによってフレームが配信されない場合は、送信元を停止します。私はシングルセグメントで読んでいなければならない、それは私にとって初めてのことだ。 – mpr

関連する問題