FEC 前向纠错

FEC 提供概率修复,只有当丢包是非连续的数据包造成时,它才有可能纠正5%的包。不同接受方的丢包率肺部均匀,不可能用单一的FEC流满足所有的丢包率。

奇偶校验FEC包格式

版本号、有效负载类型、序列号和时间戳以通常的方式分配。根据使用的RTP配置文件 动态分配有效负载类型;每发送一个FEC包,序列号增加1;时间戳设置为在传送FEC包时RTP媒体时钟的值。(时间戳不太可能等于前后RTP包的时间戳。)因此,FEC包中的时间戳是单调增加的,与FEC方案无关。

SSRC值与原始数据包的SSRC值相同。

填充、扩展、CC和标记位被计算为原始数据包中等效位的XOR。这允许在原始数据包  丢失时对这些字段进行重覆盖。

CSRC列表和头扩展不存在,与CC字段和X位的值无关。如果它们存在于原始数据分组  中,则它们作为FEC分组的有效负载部分(在FEC有效负载包头之后)被包括。

在FEC包的RTP包头中未受保护的原始RTP包头的字段中,有效负载包头被保护了。这是有 效负载头部的六个字段:

  1. 序列号基数(Sequence number base)。组成此FEC包的原始包的最小序列号。
  2. 长度恢复(Length recovery)。原始数据包长度的异或。长度计算为有效负载数据、CSRC列表、头扩展和原始数据包的填充的总长度。此计算允许即使在媒体包的长度不 相同时也应用FEC过程。
  3. 扩展(Extension). FEC有效负载包头中存在附加字段的指示符。它通常设置为0,表示不存在扩展(本章后面描述的ULP格式使用扩展字段来指示是否存在额外的分层FEC)
  4. 有效负载类型(PT)恢复(Payload type recovery)。原始数据包的有效负载类型字段的异或。
  5. 掩码(Mask)。一种位掩码,指示在奇偶校验FEC操作中包括序列号基之后的哪些包。如果掩码中的位i被设置为1,则序列号为N+i的原始数据包与该FEC包相关联,其中N是序   列号基数。最低有效位对应于i=0,最高有效位对应于i=23,允许在最多24个包上计   算奇偶校验FEC,这可能是非连续的。
  6. 时间戳恢复(Timestamp recovery。原始数据包的时间戳的异或(XOR)。

有效负载数据导出了CSRC列表的XOR(如果存在)、包头扩展(如果存在),以及要保护   的包的有效负载数据。如果数据包的长度不同,则计算异或时就好像短数据包被填充以匹  配最大数据包的长度一样(填充位的内容不重要,只要每次处理特定数据包时使用相同的  值;可能最容易的就是填充0)。

非均匀错误保护

里德-所罗门码 

里德-所罗门码是奇偶校验码的一个替代方案,它以更少的带宽开销提供保护,但以增加复 杂性为代价。特别是,在传统奇偶校验码效率较低的情况下,它们提供了很好的抗突发丢  失保护。

音频冗余编码

冗余副本通常比祝福本压缩得更狠,所以修复不会是精确的。但在感觉上比流中的有间隙要好。

冗余音频包格式

指示这是冗余编码还是主编码的单个位。冗余编码的有效负载类型。

以10位无符号整数存储的八字节冗余编码的长度。

时间戳偏移量,存储为14位无符号整数。该值从包的时间戳中减去,以指示冗余数据 的原始播放时间。

最后的有效负载包头是一个单一的八位字节,由一个位组成,表示这是最后的包头,以及   主数据的7位有效负载类型。有效负载包头之后紧跟着数据块,数据块按与包头相同的顺序 存储。数据块之间没有填充或其他分隔符,它们通常不是32位对齐的(尽管它们是八位对齐 的)。

猜你喜欢

转载自blog.csdn.net/Doubao93/article/details/122053581