1

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

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

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

4

1 回答 1

0

我找到了阻止 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);
于 2022-01-28T12:30:27.377 回答