Gstreamer 事件

Gstremer Events

我在理解事件在 Gstreamer 中的工作方式时遇到一些问题。我知道您可以将事件传递给应用程序中的元素以结束流或阻止 pad 等,但是当我查看 here 中的示例代码时,程序似乎没有发送任何特定事件,只是通过探头听他们。如果程序只是通过探测器监听事件,那么这些事件必须在某些事情之后以某种方式在元素之间自动发送。但是,我找不到与此相关的任何信息。这些事件在 Gstreamer 中如何运作?

可以在此处找到有关 gstreamer 事件设计的更多信息 (https://github.com/GStreamer/gstreamer/blob/master/docs/random/events)。本文档描述了各种事件如何通过管道传播。

在提供的示例代码中,EOS 事件被发送到具有以下功能的元素: gst_pad_send_event (sinkpad, gst_event_new_eos ()); 然后该元素继续刷新其所有缓冲区,并通过在其 src pad 上发布事件将 EOS 事件下游转发到下一个元素。此事件继续通过元素,直到它到达安装的探测器,该探测器包含特殊逻辑,用于在收到 EOS 事件时操纵管道。

此示例显示了与您的问题有关的几件事: - 事件本质上是在 gstreamer 管道内处理的。 gstreamer 元素会自动处理它们。 - 当事件通过管道传播时,Pad Probes 可用于外部 observe/modify 事件。 - 可以使用函数 gst_pad_send_eventgst_element_send_event

将事件直接插入到管道中