WebRTC 的FEC(前向纠错编码) 是其QoS的重要组成部分, 用于网络丢包的时候恢复原始数据包, 减少重传次数, 减少延时, 改善视频质量. 它是RFC 5109标准的实现. 下文, 我们将深入剖析其原理.
Redundant Coding
要理解WebRTC中的FEC, 首先需要先了解Red Packet. 所谓Red Packet, 就是Redundant Coding 产生的包. 其定义非常简单, 下面来看Block Header的格式:
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |F| block PT | timestamp offset | block length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
其定义如下:
F: 1 bit, 1 表示后面跟着其他的Block Header, 0 表示这个Block Header就是最后一个.
Block PT: 7 bits, 是这个block payload的 payload type
Timestamp Offset: 14 bits, 无符号数, 是RTP 的Timestamp 到这个Data block的时间偏移
Block Lenth: 10 bits, 是Data Block 长度.
另一种Primary Data Header, 之需要1byte
|F| Block PT|
用来描述最后的一个Data Block, 其TimeStamp 就是RTP Header的Timestap.
WebRTC的Red Packet, 编码时, 用一个rtp packet 产生 1个red packet, 所以使用了 Primary Data

WebRTC中的前向纠错编码(FEC)是提高服务质量的关键,通过Red Packet(冗余编码)在丢包时恢复数据,减少重传,降低延迟并优化视频质量。Red Packet的Block Header包含F、Block PT、Timestamp Offset和Block Length等字段。在编码时,1个RTP packet对应1个Red Packet,通过Primary Data Header描述。FEC的协商在SDP中完成,如音频Session的Payload Type。本文深入探讨FEC的实现及标准引用。
最低0.47元/天 解锁文章
1091

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



