WebRTC之FEC前向纠错协议

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、扩展标志X、CSRC计数、标志位M 、PT载荷类型、基本序列号、时间戳、长度组成,占8个字节。如下图所示:

E:扩展位,占1 bit,默认为0;

L:长掩码,占1 bit,L=0时掩码长度为16 bits,L=1时掩码长度为48 bits;

P、X、CC、M、PT与RTP头的数值一致;

SN base:基本序列号,占16 bits;

TS recovery:恢复包的时间戳,占32 bits;

length recovery:恢复包的长度,占16 bits; 

4、 FEC的ULP等级

FEC的等级头占4或8字节,当L=0时头部长度为4字节,当L=1时头部长度为8字节。其中,保护长度占16 bits,mask掩码占16 bits,当L=1时有扩展mask占32 bits。

掩码的设置需要符合以下条件:

(1)、保护等级大于0的媒体包只会被保护一次,保护等级等于0的媒体包可以被多次保护; 

(2)、假设媒体包的保护等级为p,它可以被等级为p-1的任意FEC包进行保护;

(3)、假设FEC包包含保护等级p,它必须包含保护等级p-1;

5、生成FEC包

FEC包由媒体包逐位异或得到,并且根据每个等级生成不同的FEC包。假如RTP媒体包之间长度不同,需要以最长的媒体包为基准,其他媒体包添加填充位。

单个保护等级的FEC包示例如下,这里以媒体包D长度为准,其他媒体包后面填充0:

 两个保护等级的FEC包示例如下:

6、FEC应用SDP会话

如下图所示,分为2个FEC组:第一组为"a=group:FEC 1 2",由音频流1和ulpfec流2组成;第二组为"a=group:FEC 3 4",由视频流3和ulpfec流4组成。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐福记456

您的鼓励和肯定是我创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值