首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >管道上的EOS未执行

管道上的EOS未执行
EN

Stack Overflow用户
提问于 2019-10-17 10:05:04
回答 1查看 933关注 0票数 1

我是GStreamer的新手,我试图创建一个简单的例子,在这个例子中,我从网络摄像头获取视频并使用文件墨水保存它。我在总线上添加了一个手表来获取EOS事件,但它从未被执行。有人能告诉我,我在这里做错了什么,我如何停止管道,并使EOS事件工作?

进口进口时间

gi.require_version('Gst','1.0') gi.require_version('Gtk','3.0')

从gi.repository导入GObject,Gst,Gtk导入信号

Gst.init(无)

主类: def init(self):signal.signal(signal.SIGINT,self.keyboardInterruptHandler)

代码语言:javascript
复制
    self._pipeline = Gst.parse_launch("avfvideosrc name=avfvideosrc ! x264enc ! queue ! mp4mux ! filesink name=filesink location=output.mp4")
    bus = self._pipeline.get_bus()
    bus.add_signal_watch()
    bus.connect("message::eos", self._on_eos_from_sink_pipeline)
    self._pipeline.set_state(Gst.State.PLAYING)

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

def keyboardInterruptHandler(self,signal, frame):
    print("KeyboardInterrupt (ID: {}) has been caught. Cleaning up...".format(signal))
    self.stopFetching()
    time.sleep(5)
    exit()

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-17 12:37:56

回答我自己的问题。解决方案是只将EOS事件发送到src元素,而不是发送到管道中的每个元素或管道。

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

https://stackoverflow.com/questions/58430003

复制
相关文章

相似问题

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