概述
质量服务(QOS/Quality of Service)是指利用各种技术方案提高网络通信质量的技术,网络通信质量需要解决下面两个问题:
- 网络问题:UDP/不稳定网络/弱网下的丢包/延时/乱序/抖动
- 数据量问题:发送数据量超带宽负载和平滑发送
拥塞控制是各种技术方案的数据基础,丢包恢复解决丢包问题,抗乱序抖动解决网络乱序抖动问题,流量控制解决平滑发送数据/数据超带宽负载/延时问题。
拥塞控制(Congestion Control)
实现算法:基于发送端的带宽估算算法(Sender Side BWE)
实现模块:YangTwcc/YangAckEstimate/YangSendEstimate/YangBandWidth等模块
经过多年实践证明基于发送端的带宽估算优于基于接收端的带宽估算,metaRTC选用基于发送端的带宽估算算法。在发送端依靠丢包、延迟、抖动等网络参数来预估当前的带宽。
- 收到RR包计算得到RTT值
- 计算丢包率和Ack码率并更新
- 计算拥塞状态和码率控制状态
- 计算发送码率并实时更新
丢包恢复
实现模块:YangNack/YangFec/YangProtection/YangPLC/YangRtcp等模块
丢包恢复策略
- RTT较低时启用Nack,禁用Fec
- RTT较高时禁用Nack,启用Fec
- RTT中等时同步启用Nack和Fec
- Nack和Fec恢复失败使用PLI恢复(仅适用于视频)
- Nack和Fec恢复失败使用PLC恢复(仅适用于音频)
Nack
Nack作用是丢包重传,谷歌libwebrtc因有等待发送和网络等延时导致重传时间为1.5RTT+10或20ms,metaR