2016-08-16 29 views
0

Gstreamer 1.8.2は、C920を使用して組み込みデバイスにインストールされています。 Debian Linux。私は、新しいsplitmuxsinkを使用し、ほぼ動作する素敵なGstreamerパイプラインを持っています。 splitmuxsinkは基本的なパイプラインでうまく動作しています。Pythonでasync = falseをGstreamer splitmuxsink要素に追加するにはどうすればいいですか?

第1パイプライン工事とは、一つの長いファイルのMP4、オーディオおよびビデオを書き込み、同時に、別々に処理に働くappsinkプレビューJPEGストリームを渡します。これは誰にとってもどんな場合でも便利ですと思います。

self.pipeline=Gst.parse_launch('uvch264src auto-start=true iframe-period=1000 name=src1 src1.vfsrc ! queue ! appsink drop=true name=asink max-buffers=2 emit-signals=true sync=false src1.vidsrc ! video/x-h264,width=1280,height=720,framerate=30/1,stream-format=byte-stream ! queue ! h264parse ! muxout.video_0 alsasrc do-timestamp=true device="plughw:CARD=C920,DEV=0" ! audio/x-raw,format=S16LE,rate=32000,depth=16,channels=1 ! queue ! voaacenc ! queue ! aacparse ! muxout.audio_0 mp4mux name=muxout ! filesink sync=false location=%s' % location1) 

しかし、私は「splitmuxsink」にfilesinkを変換する際に、それだけでプレビューを作成し、ストリームのファイル記録側を開始しません。私はファイル同期プラグインでやっているsync = falseを複製するためにsplitmuxsinkの属性を設定する方法(Pythonではプログラム的に)はわかりません。 splitmuxsinkのパッドに接続するか、シンク= xxxラベルとget_static_padまたは要素を設定して、その '子'要素のプロパティを調整しますか?私は、この問題が、パイプラインのファイル分割部分が失敗する原因であると考えています。この回答に基づいて How to resume playing after paused using gstreamer? :私のようなものを探していますgstreamer pipeline with VADER element stalls on PAUSE when used with a tee

パイプラインV2(appsink側を実行しますが、splitmuxsink滞在が一時停止)

self.pipeline=Gst.parse_launch('uvch264src auto-start=true async-handling=false message-forward=true iframe-period=1000 name=src1 src1.vfsrc ! queue ! appsink drop=true name=asink max-buffers=200 emit-signals=true sync=true src1.vidsrc ! video/x-h264,width=1280,height=720,framerate=30/1,stream-format=byte-stream ! queue ! h264parse ! queue ! splitmuxsink max-size-time=20000000000 max-size-bytes=5000000 name=muxout location=video2%05d.mp4 alsasrc do-timestamp=true device="plughw:CARD=C920,DEV=0" ! audio/x-raw,forma=S16LE,rate=32000,depth=16,channels=1 ! queue ! voaacenc ! queue ! aacparse ! muxout.audio_0 

あなたが見ることができるように、パイプラインv2は明示的なを持っていませんsplitmuxsinkにはそのプロパティがないため、sync = falseを参照してください。そして、PAUSEDの後にその側が始まらないように。

私はこれがちょうどラベルを作成し、偽の非同期する子要素を設定するために、私の

self.muxp = self.pipeline.get_by_name('muxout') 

後にその属性を設定するための小さな調整になるだろうと確信していますが、私はちょうど見ることができませんそれはmuxout要素(splitmuxsinkのmyラベル)にはasyncプロパティがありません。

答えて

0

問題の1つは、mp4muxのSINKパッドのフォーマットになると思います。 splitmuxsinkは、デフォルト設定ではmp4muxfilesinkで構成されています。あなたのパイプラインでストリーム形式=バイトストリームパラメータでH264を生成しますが、mp4muxは、ストリーム形式= avcだけを予期しています(のみ)。

1

は、開発チームに対応した後、私は、開発者が1.8.3で修正スプリットmuxsinkにバグがあったと言われました。 1.8.3へのアップデートがこの問題を解決しました。

関連する問題