WebRTC:音频QoS中的前向纠错 (FEC) 技术解析

本文介绍了WebRTC中音频传输的前向纠错(FEC)技术,包括其工作原理和实现方式。FEC通过冗余数据包来补偿丢失的语音包,减少卡顿,提高语音质量。WebRTC的Opus编码器内置了FEC功能,但对外部无FEC的编解码器提供了额外支持。实现主要在audio_encoder_copy_red.cc文件中,通过复制前一个包的冗余信息到后续包来确保连续丢包时的语音流畅性。
摘要由CSDN通过智能技术生成

转载请标明出处:https://blog.csdn.net/qq_29621351

1. 前言

       WebRTC语音传输中保证传输质量的主要措施分为丢包重传 (NACK) 和前向纠错 (FEC),其中NACK主要是接收端在检测到数据包RTP序列号不连续的时候,发送重传请求,发送端接收到重传请求后重新向接收端发送丢失的数据。FEC主要通过后一个数据包携带前一个数据包的冗余包,这样当前一个数据包丢失时,可以用后一个数据包的冗余数据恢复前一个数据包,降低丢包率的同时,也增大了数据传输的带宽。

2. 原理

       WebRTC中音频前向纠错与视频前向纠错的方式不同,音频前向纠错遵循RFC2198标准,视频前向纠错遵循RFC5109标准。两者有差异的原因是音频传输所占据的带宽比较小,即使增加1倍的带宽冗余,也不会造成太大的影响,而视频的一帧比较大,通常需要几个RTP数据包才能完全发送,因此不能像音频一样具有较大的冗余力度。

       WebRTC内置的opus音频编码器内置了前向纠错功能,可以在初始化编码器的时候通过接口设置开启,反馈的丢包率没有大但设置开启后在接收端于特定阈值时,opus也不会启用内置的FEC。具体的阈值详见我之前文章的测试结果 编解码器:Opus编码器内置FEC功能测试,如果使用了opus编码,那么就没必要再使用外置的FEC,因为两者的实现方式是一样的。外置的音频前向纠错主要是为了没有内置FEC功能的音频编解码器。

在网络中发送连续的语音包时,假设给每个语音包编号1,2,3,......

       如图1所示,语音包按照序号递增的顺序由发送端发出并经过网络传输到达接收端

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值