我正在编写一个程序来模仿我从命令行工作的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”部分)。
有人可以帮助我吗?非常感谢!
答案 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()。