首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GstBus未获取EOS事件

GstBus未获取EOS事件
EN

Stack Overflow用户
提问于 2019-10-22 19:19:09
回答 1查看 512关注 0票数 0

我是GStreamer新手,我已经创建了一个小示例,其中我正在录制网络摄像头,并使用appsink获取样本,但当我试图通过将其状态设置为null并发送EOS事件来停止管道时,我的总线回调函数从未为EOS调用过。

伙计们,请帮帮我

class Main: shutdown = False

代码语言:javascript
复制
def __init__(self):
    signal.signal(signal.SIGINT, self.keyboardInterruptHandler)

    self._pipeline = Gst.parse_launch("avfvideosrc name=avfvideosrc ! x264enc name=x264enc ! appsink name=appsink max-buffers=1 drop=false sync=false emit-signals=true wait-on-eos=false")
    bus = self._pipeline.get_bus()
    bus.add_signal_watch()
    bus.connect("message::eos", self._on_eos_from_sink_pipeline)
    bus.connect("message", self.on_status_changed)
    appsink = self._pipeline.get_by_name('appsink')
    appsink.connect('new-sample', self.on_new_sample)
    appsink.connect('eos', self.eos)

    #bus.connect('message', self.on_status_changed)
    self._pipeline.set_state(Gst.State.PLAYING)

def on_new_sample(self, appsink):
    return Gst.FlowReturn.OK

def _on_eos_from_sink_pipeline(self, _bus, _message):
    print("Got EOS from sink pipeline")
    exit()

def eos(self, sink):
    print("SINK EOS")
    return True

def on_status_changed(self, bus, message):
    print('Status: ', message.type)
    print('Object: ', message.src)
    print('Parsed Message: ', message.parse_state_changed())

def keyboardInterruptHandler(self,signal, frame):
    print("KeyboardInterrupt (ID: {}) has been caught. Cleaning up...".format(signal))
    self.shutdown = True
    self.stopFetching()

def stopFetching(self):
    print("AT THE START OF STOP FETCHING")       
    self._pipeline.set_state(Gst.State.NULL)
    self._pipeline.send_event(Gst.Event.new_eos())
    print("AT THE END OF STOP FETCHING")

start = Main() Gtk.main()

EN

回答 1

Stack Overflow用户

发布于 2019-10-23 06:48:41

您需要发送EOS并等待它到达您的处理程序。一旦发生这种情况,您可以将管道设置为NULL以完全关闭管道。

在您当前的代码中,当您将其设置为NULL,然后发送一个事件时,管道已经关闭(设置为NULL会同步发生),事件将不会被发送。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58503100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档