Python 如何向总线发送EOS消息

Python 如何向总线发送EOS消息,python,gstreamer,Python,Gstreamer,好的,我有这样的东西: self.pipeline = gst.Pipeline() self.tee = gst.element_factory_make self.source = gst.element_factory_make('subdevsrc') self.source.set_property('viewfinder-mode', 1) self.source.set_property('camera-device', 1)

好的,我有这样的东西:

    self.pipeline = gst.Pipeline()

    self.tee = gst.element_factory_make

    self.source = gst.element_factory_make('subdevsrc')
    self.source.set_property('viewfinder-mode', 1)
    self.source.set_property('camera-device', 1)

    self.capsfilter = gst.element_factory_make('capsfilter')
    caps = 'video/x-raw-yuv, width=640, height=480'
    self.capsfilter.set_property('caps', gst.caps_from_string(caps))

    self.tee = gst.element_factory_make('tee')

    self.queue1 = gst.element_factory_make('queue')
    self.queue2 = gst.element_factory_make('queue')

    self.encoder = gst.element_factory_make('dsphdmp4venc')
    self.muxer = gst.element_factory_make('mp4mux')
    self.imagesink = gst.element_factory_make('xvimagesink')

    self.filesink = gst.element_factory_make('filesink')
    self.filesink.set_property('location', '/dev/null')

    self.pipeline.add(self.source, self.capsfilter, self.tee, self.queue1, self.queue2, self.encoder, self.muxer, self.imagesink, self.filesink)
    gst.element_link_many(self.source, self.capsfilter, self.tee, self.queue1, self.imagesink)
    gst.element_link_many(self.tee, self.queue2, self.encoder, self.muxer, self.filesink)

    self.bus = self.pipeline.get_bus()
我想停止(EOS)处于就绪状态的流,更改位置等。。 帮忙

self.bus.emit('eos'))
给我类型错误::未知信号名称:eos

我不知怎么解决了它:

我补充说

self.bus=self.pipeline.get_bus()
self.bus.connect('message::eos',self.on_eos)
self.loop=gobject.MainLoop()
和三种方法:

def位置(self,filename):
self.ready()
gst.element\u unlink\u many(self.muxer、self.filesink)
self.filesink.set_state(gst.state_NULL)
self.filesink.set_属性('location',filename)
self.filesink.set_状态(gst.state_READY)
gst.element\u link\u many(self.muxer、self.filesink)
self.run()
如果self.pipeline.get_state()[1]!=gst.STATE_播放:
self.stop()
def eos(自我):
self.bus.add_signal_watch()
self.pipeline.send_事件(gst.event_new_eos())
尝试:
self.loop.run()
除键盘中断外:
self.on_eos(无,无)
eos上的def(自身、总线、消息):
self.loop.quit()
self.bus.remove_信号_watch()
self.location(“/dev/null”)

所以我必须调用gst\u元素\u send\u event()和send gst\u event\u new\u eos(),但方法gst\u element\u send\u event在哪里?所以我调用了self.pipeline.send\u event(gst.event\u new\u eos())并得到了输出循环:紧急eos触发。但是我必须改变位置,不必用力去空状态我不知道你到底想做什么。如果要更改管道状态,
gst\u元素\u设置\u状态(管道,gst\u状态\u就绪)就可以了。如果要向总线发送eos消息,请使用
gst\u message\u new\u eos()
创建它。在哪里调用
eos
函数?我不明白你为什么要发送EOS信息和一切。。。你不能直接调用eos上的
函数吗?