我正在尝试通过C API初始化gstreamer管道。代码看起来类似于:
[...]
pipeline = (GstPipeline*)gst_pipeline_new(nullptr);
if(!pipeline) {
//error
return;
}
[...]
sink = gst_element_factory_make("autoaudiosink", nullptr);
if(!sink) {
//error
return;
}
if(!gst_bin_add((GstBin*)pipeline, sink)) {
//error
return;
}
[...]
GstBus* bus = gst_pipeline_get_bus(pipeline);
gst_bus_add_watch(bus, (GstBusFunc)bus_callback, this);
gst_object_unref(bus);
GstStateChangeReturn state = gst_element_set_state((GstElement*)pipeline, GST_STATE_PLAYING);
if(!state) {
//error2
return;
}
[...]
虽然错误出现在cout中,但我希望将错误检索为C字符串(或我可以处理的任何格式)。我该怎么做?
我已经读过错误被发布到管道的总线,但是当调用gst_element_set_state时,我的总线回调没有被调用。也许是因为glib主循环尚未运行?
抱歉,我对gstreamer / glib库很新,我在(压倒性的)文档中找不到明确的答案。
答案 0 :(得分:0)
一种解决方案是设置一个接收消息并检查错误的侦听器。示例:http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-helloworld.html。 (GError是用于错误的数据类型。)