GStreamer - 向元素发出信号

GStreamer - Emit a signal to an element

我有一个写入 C 程序的管道,它将视频流从标准输入重定向到多个 UDP 客户端。我希望动态添加或删除这些客户端,因此无法在编译时定义它们中的哪些以及将有多少。这是我的管道(如果我添加一个固定的 clients 参数它工作正常):

fdsrc name=origin \
! video/x-h264,width=320,height=240,framerate=30/1,profile=baseline,stream-format=avc,alignment=au \
! h264parse \
! rtph264pay \
    config-interval=1 \
    pt=96 \
! multiudpsink name=dest \
     sync=false

根据 GStreamer 文档,我可以通过发送信号来动态添加或删除客户端来实现它。在这种情况下,它应该是 add signal.

但是我找不到任何关于向元素发送信号(在本例中为multiudpsink 元素)的信息。很容易获得对我的元素的引用:

GstElement *sink = gst_bin_get_by_name(GST_BIN(pipeline), "dest");
/* TODO: send a signal to add a client */
g_object_unref(sink);

但是现在我怎样才能向那个元素发出信号呢?

终于明白了。使用 g_signal_emit_by_name 您可以向任何 GStreamer 元素发送消息。

代码如下:

GstElement *sink = gst_bin_get_by_name(GST_BIN(pipeline), "dest");
g_signal_emit_by_name(sink, "add", "192.168.1.25", 5004, NULL);
g_object_unref(sink);

感谢 Tim Müller,来自 GStreamer-devel 邮件列表,他为我提供了 right example 如何继续。