在Gstreamer传输管道中重新连接RTSP流

5
我有一个使用RTSP输入流的工作中Gstreamer管道。为了处理这些给定的RTSP输入流,使用了uridecodebin元素。
我的目标是在互联网连接不稳定时重新连接到RTSP输入流。当互联网连接仅中断几秒钟,然后恢复时,管道开始再次接收帧并且一切正常。当互联网连接断开超过20秒时,我会收到GST_MESSAGE_EOS。我尝试在uridecodebin生成的每个元素中查找某些超时变量,但我没有找到它。您是否有任何提示哪个元素具有此超时变量以及如何设置它?
如果无法设置此类超时变量,是否有任何方法阻止GST_MESSAGE_EOS?因为当我在总线中收到GST_MESSAGE_EOS时,我尝试从管道中删除uridecodebin并创建一个新的uridecodebin。但是当接收到GST_MESSAGE_EOS时,对我来说这种方法无效(当我在正常状态下尝试从管道中删除uridecodebin并创建一个新的uridecodebin时,它可以正常工作) 。

1
正在调试此问题。25秒的超时似乎是RTCP超时的5倍,此时将触发GstRTSPSrcTimeout。这个25秒的超时似乎无法配置。 - Brian
1个回答

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;
}

然后只需将此函数添加到您的元素的某个GstPad中:

gst_pad_add_probe(src_pad, GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM, eos_probe_cb,  (gpointer) user_data, NULL);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接