如何为RTSP服务器添加缓冲区?

问题描述

我正在尝试创建以下管道:

在Jetson上

1.1)相机->…-> udpsink 1.2)udpsrc-> rtspserver

在主机PC上

2.1)rtspsrc->抖动缓冲区->检测->跟踪器->分析

主要问题是 我的 Jetson 通过本地WiFi网络连接到主机PC 。我选择了网状WiFi Tenda Nova MW3。当 Jetson 一个WiFi接入点重新连接到另一个WiFi接入点时,我丢失了一些帧(从0.5秒到10秒的流)。我了解我们无法获得理想的无缝WiFi网络,并且系统在重新连接期间会“丢失一些帧”。

我尝试在udpsrc和udpsink上设置缓冲区,我尝试在rtspsrc上设置do-retransmission,但是它不起作用,或者可能是我做错了。

  1. 如何在RTSP服务器中设置缓冲区以在 Jetson 客户端上重新连接到另一个WiFi点并继续从最后一个点向 Host PC 发送帧? li>
  2. 我应该在udpsink还是udpsrc或rtspserver上设置缓冲区?
  3. 如何配置rtpsrc以从“丢失的时间”发送帧?

解决方法

我丢了一些帧(流的0.5到10秒)

可能是因为Host流水线中的解码器错过了I帧,而应该等待下一个I帧,所以0.5〜10s取决于GOP中的第一帧位置(可以通过编码器属性更改GOP)。

  1. 您可以使用rtmp服务器而不是rtsp,srs是不错的选择,然后打开gop缓存。 Pipeine想成为相机->编码器-> flvmux-> rtmpsink

     vhost __defaultVhost__ {
         gop_cache       on;
     }
    
  2. 启用gop缓存时,延迟会增加,因此编码器的GOP不应太大,可能是2s。

  3. 主机PC上的管道可能会接收重新连接wifi之前已处理的视频数据,并且与禁用gop相比,延迟更大。如果任何一个都算在内,则应在解码后丢弃过时的帧。