c - GStreamer - 向元素发出信号

标签 c udp video-streaming signals gstreamer

我有一个写入 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 - GStreamer - 向元素发出信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41870834/

相关文章:

python - 如何同时分析和流式传输 RaspberryPi 视频

C: 函数返回地址(mac)

c - 2路udp聊天应用

java - CPU-Wise,如何优化UDP数据包发送?

google-cloud-platform - 如何使用GCP设计可扩展的视频流架构?

node.js - 使用 nodejs ffmpeg 流式传输网络摄像头

c - OpenGL 扩展,如何在 C 和 glsl 中正确使用它们

c - 无限 while 循环和 control-c

objective-c - 将 C 转换为 Objective C

android - Android 中的 Gstreamer。 UDP流