Linux ·

通过RTCP进行媒体流实时丢包重传的方法

在RTP/RTCP传输媒体流的过程中,RTCP报文的主要作用在于RR(ReceiverReport),即接收者报告,来反馈统计收到包的数量,丢包数量等信息,来使发送者来及时的调整编码策略,但是由于RTCP的发送间隔为固定间隔,通常为分配给RTCP的连接带宽固定为5%,大致为2-5秒左右一包,并不能用于实时的丢包反馈。

但是,在RTCP的SDES(SourceDescription)报文中,有Type为NOTE类型的报文,此报文可以添加自定义的内容,发送端借助分析报文,可以实现实时的丢包重传机制。

在RTCP添加的Text中定位为30个字节,其中ea8a为60042,表示接收的端口,01表示一个包,fccc为包序号,为64716。含义为:“再给接收端为60042端口上发1个序号为64716的rtp包”,如下图所示

通过RTCP进行媒体流实时丢包重传的方法 Linux 第1张

发送端,可以解析这个RTCP的text包,来重传序号为64716的rtp包,如下:

通过RTCP进行媒体流实时丢包重传的方法 Linux 第2张

在RTCP之后,可见Seq为64716的RTP包。

由于RTCP基于UDP实现,时延较小,但是与传统的基于tcp传输的丢包重传机制相比,RTCP存在丢包的风险。

参与评论