TCP协议的重传机制不适合实时音视频传输,实时音视频传输协议一般采用UDP(应用层基于UDP的RTP协议),UDP具有高吞吐和低延时的特点。
基于UDP的RTP传输在复杂的公网环境下,面临丢包、乱序、重复、抖动等问题。
FEC (Forward Error Correction,前向纠错):位于应用层的一项有效防止丢包的技术,是一种实时视频传输的有效可靠的解决方案。
传送的数据流包括以下三种:
1.前向纠错ES流: 也叫基本码流,包含视频、音频或数据的连续码流。
2.前向纠错PES流:也叫打包的基本码流,是将基本码流ES流根据需要分成长度不等的数据包,并加上包头形成了打包的基本码流PES流。
3.前向纠错TS流: 也叫传输流,有固定长度的188字节的包组成,含有独立时基的一个或多个节目,适用于误码较多的环境。
影响FEC性能的三个主要因素:
FEC的使用可以有效的提高系统的性能,根据香农定理可以得到噪声信道无误码传输的极限性能(香农限),FEC方案的性能主要由编码开销、判决方式、码字方案这三个主要因素决定。
(1)编码开销:校验位长度(n-k)与信息长度k的比值,称为编码开销。开销越大,FEC方案的理论极限性能越高,但增加并不是线性的,开销越大,开销增加带来的性能提高越小。开销的选择,需要根据具体系统设计的需求来确定。
(2)判决方式:FEC的译码方式分为硬判决译码和软判决译码两种。
(3) 码字档案:当确定开销和判决方式后,设计优异码字方案,使性能更接近香农极限,是FEC的主要研究课题。软判决LDPC码,由于其良好的纠错性能,且非常适合高并行实现,逐步称为高速光通信领域主流FEC的方案。
http://openfec.org/accueil.html
前向纠错FEC算法
前向纠错(FEC)算法被广泛使用在实时音视频领域提升音视频的弱网抗性,只要收到FEC分组内的冗余包和一定数量的数据包,就能根据FEC算法恢复出对应的冗余包。
常见的FEC实现包括M+1系列的异或算法、M+N系列的RS矩阵算法,这2种实现算法各有优缺点。
异或算法实现相对简单,将M个数据包逐字节进行异或计算,计算得到的结果即为冗余包。这种算法只需要进行异常运算,复杂度低。但是抗丢包能力弱,例如 4+1算法,5个包里面最多只能丢1个包,否则就无法恢复。
在实时音视频领域主要采用M+N系列的CRS矩阵算法。
FEC在不需要保障可靠性的网络中也有应用:
12=encoder(10)
接收方不需要获取全部数据包,只收到部分数据包就可以开始解析
12=decoder(10)
基于奇偶校验码
数据包个数尽可能相同
CRS算法
https://www.smiletoyou.cn/?p=319
在实时音视频领域主要采用M+N系列的CRS矩阵算法
M个数据包,N个冗余包。如果直接用编码矩阵(M+N)*矩阵M,就可以得到一个M+N行的编码输出矩阵,其中L为原始数据包的长度。
一、CRS矩阵编码
(1)构造生成矩阵:生成矩阵前M项是一个单位阵,后R项是一个柯西矩阵(便于求逆)。
(2)生成冗余数据:将M个原始数据包与生成矩阵做伽罗华域上的矩阵运算,即可得到N个冗余包。
将数据包与冗余包通过网络发送,FEC恢复最多带来(M+1)个数据包间隔。
二、RS矩阵解码恢复
(1)求解恢复矩阵:在生成矩阵里面根据收到的数据包以及冗余包,(填充丢失数据包的位置)构成生成矩阵的子矩阵,对子矩阵求逆,得到恢复矩阵。
(2)数据包恢复:选取收到的数据包以及冗余数据与恢复矩阵进行伽罗华域上的矩阵运算,求解出丢失的数据包。
柯西矩阵
https://www.pianshen.com/article/52041940317/