【问题标题】:EOS on pipeline not executing管道上的 EOS 未执行
【发布时间】:2020-02-14 05:17:03
【问题描述】:

我是 GStreamer 的新手,我正在尝试创建一个简单的示例,我从网络摄像头获取视频并使用 filesink 保存它。我在总线上添加了一个手表来获取 EOS 事件,但它永远不会被执行。有人能告诉我我在这里做错了什么吗?如何停止管道并让 EOS Event 正常工作?

导入 gi 进口时间

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

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

Gst.init(无)

类主要: def 初始化(自我): signal.signal(signal.SIGINT, self.keyboardInterruptHandler)

    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")

开始 = Main() gtk.main()

【问题讨论】:

    标签: python gstreamer


    【解决方案1】:

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

    【讨论】:

    • 嗨,我也面临同样的问题。将 EOS 事件发送到 src 元素是什么意思?你能用一些示例代码更新你的答案吗?谢谢。
    猜你喜欢
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    相关资源
    最近更新 更多