所以我要解决的问题是对传入的URI流进行未知处理,然后将它们混合成一个传出的流。我现在基本上要做的是为每个循环使用一个,在该循环中我创建一个源代码,添加诸如videoscale和capsfilter之类的元素,然后将其链接到videomixer。目前,如果我只是通过autovideosrc传入一个USB网络摄像头,我就可以正常工作。但是,由于链接错误,当我尝试使用uridecodebin时,它完全崩溃了。
我知道,通常在创建uridecodebin时,您必须将带有填充垫的信号用于本示例。
#!/usr/bin/python
import pygst
pygst.require('0.10')
import gst
import pygtk
pygtk.require('2.0')
import gtk
# this is very important, without this, callbacks from gstreamer thread
# will messed our program up
gtk.gdk.threads_init()
def on_new_decoded_pad(dbin, pad, islast):
decode = pad.get_parent()
pipeline = decode.get_parent()
convert = pipeline.get_by_name('convert')
decode.link(convert)
pipeline.set_state(gst.STATE_PLAYING)
print "linked!"
def main():
pipeline = gst.Pipeline('pipleline')
filesrc = gst.element_factory_make("filesrc", "filesrc")
filesrc.set_property('location', 'C:/a.mp3')
decode = gst.element_factory_make("decodebin", "decode")
convert = gst.element_factory_make('audioconvert', 'convert')
sink = gst.element_factory_make("autoaudiosink", "sink")
pipeline.add(filesrc, decode, convert, sink)
gst.element_link_many(filesrc, decode)
gst.element_link_many(convert, sink)
decode.connect("new-decoded-pad", on_new_decoded_pad)
pipeline.set_state(gst.STATE_PAUSED)
gtk.main()
main()
但是,我发现的每个示例都假设我将始终将一个uridecodebin连接到另一个元素。在每次调用该函数时,如何实现本示例中以“ convert”表示的元素不同的东西?