实时通信与带宽大小网络质量息息相关,根据香农定理和奈奎斯特定理其实很容易知道,码率、延迟和服务质量本身就是相悖的。而再加上信号传输本身的带宽有限(排除WebRtc中使用的架构),更加难以达到一个均衡。

那么为了提高音视频服务质量又该如何下手呢。有以下五个方面,这篇文章主要记录每个方面的一些重要算法。

  1. 增加带宽
  2. 减少数据量
  3. 适当增加时延
  4. 提高网络质量
  5. 快速准确评估带宽

增加带宽

首先应该提到的肯定不是WebRtc中的一些算法,而是譬如5G网络,星链,新型传输材料,波分复用,时分复用,频分复用,等等通信方向的知识。但这并不在将要探讨的WebRtc框架体系之内。

在WR内,客户端方面主要使用了一种极妙的选路方案来提高整体通信的带宽,即TURN-STUN结构。

STUN-TURN架构

减少数据量

  1. 压缩算法,通过更好的压缩算法可以实现更高的码率
  2. SVC技术,将视频按照时间、空间、质量分成多层编码、,然后将他们装在同一路发送给服务端,服务端收到后再根据每个用户的带宽情况不同来选择不同的层下发。
  3. simulcast,将视频编码分成多个不同分辨率的多路码流,然后上传至服务端,服务端在根据客户的不同情况来进行下发。
  4. 动态码率
  5. 甩帧,减少业务

增加时延

实际上增加时延是增加一个缓冲区,先把到来的数据方法队列中缓冲一下,这样的话就可以减少网络抖动造成的卡断、快播、吞音等现象。一般而言对于实时音视频延迟应该控制在500ms以内。例如Jitterbuffer

提高网络质量

对于网络质量主要有三个影响因素

  1. 丢包,优质网络丢包率应该小于2%,对于WR丢包率应该限制在2%-10%
  2. 延迟,拥塞
  3. 抖动,抖动较小的情况下,可以通过循环队列将其消除,抖动过大就会将乱序包作为丢包处理。在WR中抖动时长不能超过10ms,超过10ms会被视为丢包

解决上面问题的方法:

  1. NACK/RTX NACK是RTCP的一种消息类型,向接收端报告一段时间内有哪些包丢失了,RTX是指向发送端重新发送丢失包
  2. 前向纠错,使用异或方式进行发送,以便在丢包时可以通过这种机制恢复丢失的包
  3. NetEQ 用于音频的防抖动

本站由 Edison.Chen 创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

undefined