我正在编写一个程序来模拟我从命令行运行的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‘部分)。
有人能帮我吗?非常感谢!
发布于 2018-09-08 02:38:56
GStreamer hello world示例是一个很好的开始,可以了解应该如何处理此问题:
https://gstreamer.freedesktop.org/documentation/application-development/basics/helloworld.html
基本上,您设置了一个GstBus回调,并从中挑选出您感兴趣的消息。在您的情况下,它将是EOS。
发布于 2018-09-27 18:30:48
将您的代码与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()。
https://stackoverflow.com/questions/52225739
复制相似问题