0

playbinビデオにフィルターを追加する必要があるため、アプリケーションを独自のパイプラインに置き換えようとしています。これが私が試したものです:

#     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ます。つまり、出力ウィンドウが開き、ビデオが表示されます。私のカスタム パイプラインでは何も起こりません。ウィンドウは開かれず、もちろん何も見えません。

それはなぜですか、どうすれば修正できますか?

また、すべてのオーディオ要素を削除して、ビデオ要素のみを使用しようとしましたが、同じ結果が得られました。このアプリケーションにオーディオは必要ありません。

4

1 に答える 1

1

Uridecodebin には動的パッドがあります。それらは、公開する必要があるパッドの数を知るためにデマルチプレクサー/デコードする必要があるため、ストリーミングの開始時にのみ作成されます。https://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-pads.html#section-pads-dynamic を確認してください

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

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

于 2016-10-08T12:22:45.243 に答える