gstreamer管道EOS问题

时间:2018-09-07 15:36:30

标签: gstreamer

我正在编写一个程序来模仿我从命令行工作的gsteramer管道。

我已经能够成功捕获一些信号,例如:

g_signal_connect (data2.source, "pad-added", G_CALLBACK (pad_added_handler), &data2);
g_signal_connect (data2.source, "drained", G_CALLBACK (eos_cb), &data);

添加键盘,并告知url阅读器何时到达流的末尾— EOS。

我正在尝试创建陷阱以查找总线何时到达EOS,但出现问题。我已经看到了从总线捕获错误的示例,如下所示:

g_signal_connect (G_OBJECT (bus), "message::error", (GCallback)error_cb, &data);

我在想这样的事情应该起作用:

g_signal_connect (G_OBJECT (bus), "message::eos", (GCallback)eos_cb_bus, &data);

但是我不确切知道要寻​​找什么(“ message :: eos”部分)。

有人可以帮助我吗?非常感谢!

2 个答案:

答案 0 :(得分:0)

GStreamer你好世界示例是了解如何处理此问题的良好起点:

https://gstreamer.freedesktop.org/documentation/application-development/basics/helloworld.html

基本上,您设置了一个GstBus回调并从那里选择您感兴趣的消息。在您的情况下,它将是EOS。

答案 1 :(得分:0)

将您的代码与How to use a bus进行比较。从此处复制示例代码:

bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline);
gst_bus_add_signal_watch (bus);
g_signal_connect (bus, "message::error", G_CALLBACK (cb_message_error), NULL);
g_signal_connect (bus, "message::eos", G_CALLBACK (cb_message_eos), NULL);

因此,“ message :: eos”是正确的信号名称。可能您忘记了代码中的gst_bus_add_signal_watch()吗?

还比较Difference between gst_bus_add_watch() and g_signal_connect()