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 如何继续。
我有一个写入 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 如何继续。