FEC冗余算法介绍与封包说明

FEC(Forward Error/Erasure Correction)称为前向纠错技术,通常结合Reed-Solomon算法(RS算法),由发送方进行FEC编码后,引入冗余包,接收方进行FEC解码并恢复丢失的数据包,以解决由于UDP的丢包引起通话双方的卡顿,花屏等QOS问题;根据互联网成熟的案例,增加冗余包是对抗丢包常用且有效方法,在合适的冗余比下,能显著提升UDP传输的丢包、乱序抵抗力,为上层音视频服务提供有力保障。

主要的逻辑如下图1:

呱牛笔记

图1 FEC主要逻辑图

为兼容性考虑,在RTP包的payload的前两个字节标识该包为FEC包,结构示意图如下:

RTP Header

0xFF 0xF7

FEC

 

FEC算法的主要原理如下图:

呱牛笔记

图2 FEC算法的原理图

图2说明如下:K个原始数据包,经过编码后得到n个包(其中包括K个源包和(n-k)个冗余包),只要接收端能接收到至少K个包,则能重建出K个原始包;这里以20个源包+10个冗余包的FEC编码进行说明,即20个源包经过FEC编码后,会得到30个FEC包,将30个FEC包发送出去,接收端如果收到了至少20个包,则可以恢复出20个源包,如果接收端收到的包少于20个,则只能解码源包,而不能恢复剩余的包。

 

FEC算法引入的问题主要是增加了对带宽的需求(如20:10的策略下需要1.5倍的流量),以及由于FEC编码和解码算法产生的时延;对带宽的增加需求多少由源包和冗余包的比例决定,根据FEC官方文档说明,FEC丢包率计算方法如下图:

呱牛笔记

图3 FEC丢包率计算方法

图3描述说明如下:f(20,10,10%)=0.0089% 表示10%丢包率的情况下20+10个包中丢失10个以上的概率为0.0089%。也就是说,网络本身的丢包率为10%,使用-f20:10参数后(--mode 0模式),丢包率可以降低到0.0089%。

 

参考:

https://blog.csdn.net/mediapro/article/details/50393685

https://github.com/wangyu-/UDPspeeder/

http://info.iet.unipi.it/~luigi/fec.html




请先登录后发表评论
  • 最新评论
  • 总共0条评论