FEC前向纠错用于丢包恢复,对媒体包进行异或或其他算法生成冗余包进行发送。如果接收端出现丢包,可以通过冗余包恢复出原始的媒体包。FEC的代价是增加码率带宽,所以一般会根据网络状况、丢包率来动态调整FEC冗余系数,也会结合NACK/ARQ丢包重传使用。WebRTC使用的FEC包括:ULP、flex、RED三种协议。接下来,我们主要分析ULP的协议结构。
ULP全称为Uneven Level Protection,不均匀级别保护,权衡网络带宽和保护力度。FEC冗余包越多,丢包恢复能力越强,但是带宽消耗越多。并不是所有媒体包的优先级都相同,因此可根据优先级来划分保护等级,比如优先分配给音频包,然后是视频的I帧包,接着是P帧、B帧。
1、ULP结构
基于ULP的FEC包有一个或多个保护等级。如下图所示,FEC包#1只有一个等级,用于保护媒体包A和B;而FEC包#2有两个等级,0级用于保护媒体包C和D,1级用于保护媒体包A、B、C、D。

2、FEC数据包结构
FEC数据包由RTP头、FEC头、FEC等级、FEC载荷组成,如下图所示。

3、FEC头结构
FEC头的结构由:扩展位E、长掩码L、填充位P
订阅专栏 解锁全文
1351

被折叠的 条评论
为什么被折叠?



