3

我正在尝试通过 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 库还很陌生,在(压倒性的)文档中找不到明确的答案。

4

1 回答 1

0

一种解决方案是设置一个侦听器来接收消息并检查错误。示例: http: //gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-helloworld.html。(GError 是用于错误的数据类型。)

于 2013-06-18T13:43:25.943 回答