重新连接 Gstreamer 管道中的 RTSP 流

har*_*ums 5 c gstreamer gstreamer-1.0 nvidia-deepstream

我有一个使用 RTSP 输入流的工作 Gstreamer 管道。为了处理这些给定的 RTSP 输入流,使用了 uridecobin 元素。

我的目标是当互联网连接不稳定时重新连接到 RTSP 输入流。当互联网连接仅断开几秒钟然后又恢复时,管道再次开始接收帧,一切正常。当互联网连接中断超过 20 秒时,我会收到 GST_MESSAGE_EOS。我试图在 uridecodebin 生成的每个元素中找到一些超时变量,但没有找到。您是否有任何提示哪个元素具有此超时变量以及如何设置它?

如果无法设置这样的超时变量,有没有办法阻止GST_MESSAGE_EOS?因为当我在总线中收到 GST_MESSAGE_EOS 时,我尝试从管道中删除 uridecodebin 并创建一个新管道。但当收到 GST_MESSAGE_EOS 时,它对我不起作用(当我尝试从管道中删除 uridecodebin 并在正常状态下创建一个新管道时,它起作用)。

har*_*ums 2

我找到了阻止 GST_MESSAGE_EOS 的方法。

创建以下函数来删除 GST_EVENT_EOS:

GstPadProbeReturn eos_probe_cb(GstPad *pad, GstPadProbeInfo *info, gpointer u_data)
{
    if (GST_EVENT_TYPE(GST_PAD_PROBE_INFO_DATA(info)) == GST_EVENT_EOS)
    {
        return GST_PAD_PROBE_DROP;
    }
    return GST_PAD_PROBE_OK;
}
Run Code Online (Sandbox Code Playgroud)

然后将此函数添加到元素的某些 GstPad 中:

gst_pad_add_probe(src_pad, GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM, eos_probe_cb,  (gpointer) user_data, NULL);
Run Code Online (Sandbox Code Playgroud)