概述
当使用uridecodebin插件打开多输入源时,发现在打开任一源失败时,在消息监听回调会返回GST_MESSAGE_ERROR错误消息从而退出管道,详细错误信息是
gstrtspsrc.c(7469): gst_rtspsrc_retrieve_sdp (): /GstPipeline:StreamTogetherProcess/GstBin:decode-bin-1/GstURIDecodeBin:uri-decode-bin1/GstRTSPSrc:source:Failed to connect. (Generic error)
初衷是想通过返回错误消息携带的GstMessage * msg中 GstObject *src的对象名src->name来确定是哪个流打开失败,但是通过打印发现每一个对象名都是source完全相同,很无奈。
但是GstRTSPSrc:source这个element对象是在uridecodebin插件中动态创建的,我甚至想在动态创建后对这个对象重新设置name属性,但是更改无效。
最后发现可以通过GstRTSPSrc:source父类parent属性的name来确定哪一个数据源打开失败。
如下:
case GST_MESSAGE_ERROR:
{
gchar *debug;
GError *error;
gst_message_parse_error(msg, &error, &debug);
dzlog_error("element :%s,element parent:%s,message:%s", msg->src->name, msg->src->parent->name,error->message);
if (debug)
dzlog_error("Error details: %sn", debug);
g_free(debug);
g_error_free(error);
g_main_loop_quit(loop);
break;
}
打印结果如下:
[2022-05-16 11:10:00.179][INFO ][AIStreamTask.cpp:969]Decodebin child added:source
[2022-05-16 11:10:00.180][INFO ][AIStreamTask.cpp:969]Decodebin child added:source
[2022-05-16 11:10:00.183][INFO ][AIStreamTask.cpp:796]Running...
[2022-05-16 11:10:00.250][ERROR ][AIStreamTask.cpp:909]element:source,element parent:uri-decode-bin1,message:Could not open resource for reading and writing.
[2022-05-16 11:10:00.250][ERROR][AIStreamTask.cpp:911]Error details: gstrtspsrc.c(7469): gst_rtspsrc_retrieve_sdp (): /GstPipeline:StreamTogetherProcess/GstBin:decode-bin-1/GstURIDecodeBin:uri-decode-bin1/GstRTSPSrc:source:
Failed to connect. (Generic error)
我们可以看到这个uri-decode-bin1里面的数字1就是源ID这个是自己定义的这个是在:
g_snprintf(bin_name, 32, "uri-decode-bin%d", nStreamID);
dzlog_info("bin_name:%s", bin_name);
uri_decode_bin = gst_element_factory_make("uridecodebin", bin_name);
时添加进去的。接下来我们就可以根据这个流ID进行相关元件的gst_bin_remove操作了。
最后
以上就是含糊大米为你收集整理的Gstreamer/Deepstream 多输入源输入,打开失败源判断的全部内容,希望文章能够帮你解决Gstreamer/Deepstream 多输入源输入,打开失败源判断所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复