gstreamer:没有来自自定义管道的输出(替换playbin)

时间:2016-10-07 20:57:15

标签: video-streaming gstreamer python-gstreamer

我正在尝试使用自己的管道替换应用程序中的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,即打开输出窗口并显示视频。使用我的自定义管道没有任何反应 - 没有打开窗口,当然我看不到任何东西。

为什么会这样,我该如何解决?

我还尝试删除所有音频内容并仅使用视频元素,结果相同。我甚至不需要这个应用程序的音频。

1 个答案:

答案 0 :(得分:1)

Uridecodebin有动态垫。它们仅在流式传输开始时创建,因为它需要解复用/解码才能知道需要暴露多少个焊盘。查看AppSettings from custom files

对于调试,最好查看gstreamer日志或检查管道总线是否有错误消息。它可能会报告一个未链接的错误。或者检查链接调用的返回值会告诉您它失败了。

无论如何,您只需使用playbin并设置video-filter属性。