2016-10-07 5 views
0

ビデオにフィルタを追加する必要があるため、アプリケーション内でplaybinを自分のパイプラインに置き換えようとしています。ここに私が試したものです:gstreamer:カスタムパイプラインからの出力がありません(再生ビンを交換する)

#  self.pipeline = gst.ElementFactory.make("playbin", None) 
#  self.pipeline.set_property("uri", "appsrc://") 
self.pipeline = gst.Pipeline.new("player") 
source = gst.ElementFactory.make("uridecodebin", "decodebin") 
source.set_property("uri", "appsrc://") 
self.pipeline.add(source) 

aqueue = gst.ElementFactory.make("queue", "aqueue")   
aconverter = gst.ElementFactory.make("audioconvert", "aconverter")   
asink = gst.ElementFactory.make("autoaudiosink", "audiosink") 
self.pipeline.add(aqueue) 
self.pipeline.add(aconverter) 
self.pipeline.add(asink) 
source.link(aqueue) 
aqueue.link(aconverter) 
aconverter.link(asink) 

vqueue = gst.ElementFactory.make("queue", "vqueue")   
vconverter = gst.ElementFactory.make("videoconvert", "vconverter") 
vsink = gst.ElementFactory.make("autovideosink", "videosink") 
self.pipeline.add(vqueue) 
self.pipeline.add(vconverter) 
self.pipeline.add(vsink) 
source.link(vqueue) 
vqueue.link(vconverter) 
vconverter.link(vsink) 

後、私は、ソースのsource-setup信号に接続し、need-data信号にデータとそれを養うために。これはplaybinで動作します。出力ウィンドウが開き、動画が表示されます。私のカスタムパイプラインでは何も起こりません。ウィンドウは開かず、もちろん何も見えません。

どうして私はそれを修正できますか?

私はまた、すべてのオーディオ素材を削除し、同じ結果でビデオ要素のみを使用してみました。私は本当にこのアプリケーションのためのオーディオを必要としません。

答えて

1

Uridecodebinにはダイナミックパッドがあります。ストリーミング開始時にのみ作成されるのは、デモ/デコードして公開する必要のあるパッドの数を知る必要があるためです。チェックhttps://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-pads.html#section-pads-dynamic

デバッグの場合は、gstreamerログを参照するか、パイプラインバスでエラーメッセージを確認することをお勧めします。リンクされていないエラーが報告されている可能性があります。または、リンクの呼び出しの戻り値を確認すると、失敗していることがわかります。

とにかく、playbinを使用して、video-filterプロパティを設定することができます。

+0

ダイナミックにうまくリンクすると、出力ウィンドウが表示されます。プレイバンのプロパティを設定してもうまくいきませんでしたが、どちらの方が自分のアプリケーションに適しているかを確認するだけです。 – Christoph

+0

デバッグログを調べて、プロパティーの問題の理解に役立つかどうかを確認してください。 – thiagoss

+0

デバッグそのような財産はないという。私はそれが別の質問に行くはずだと思います。 – Christoph

関連する問題