实时音视频通信的主要矛盾及解决方法

实时音视频通信的主要矛盾及解决方法

  • 实时音视频通信的主要矛盾及解决方法
    • 实时音视频通信的主要矛盾
    • 矛盾的解决方法
      • 增加带宽
      • 减少数据量
      • 适当增加延时
      • 提高网络质量
      • 快速准确地评估带宽
    • 总结
    • 参考

实时音视频通信的主要矛盾及解决方法

实时音视频通信的主要矛盾

实时音视频通信的主要矛盾就在于音视频服务质量与带宽大小、网络质量、实时性之间的矛盾。

矛盾的解决方法

增加带宽

增加带宽是最有效解决问题的根本。只要用户带宽足够,一切的问题可能就不是问题了。

可现实中我们很少能希望用户去提升带宽,且在多用户实时通信场景下,单个用户对带宽的提升对整体服务而言影响也不大,因为在这种场景下通信服务质量的好坏是由网络最差的那个用户决定的。所以这里增加带宽是指所有用户的带宽都增加。

增加带宽的具体方法:

  1. 首先,可以期待的是5G网络的普及。这会整体的提升所有接入5G网络设备的用户的网络能力。
  2. 然后,在客户端方面,WebRTC支持的选路方案是一个很好的方案,它可以按优先级选择最优质的网络连接线路。
  3. 最后,在服务端方面,可以通过提供更优质的接入服务、保证云端网络的带宽和质量、更合理的路由调度策略来提供更优秀的带宽。

1是被动方法,2和3是主动方法。

减少数据量

当网络带宽无法增加时,最有效的解决这一矛盾的方法就是减少音视频的数据量,虽然会牺牲音视频服务的质量。

通常有5种方法来减少数据量,分别是:

  1. 采用更好的压缩算法:比如使用H265,AV1等压缩率更高的编解码器。
  2. 使用SVC技术:SVC技术就是将视频按时间、空间及质量分成多层编码,然后将它们装在一路流中发给服务端。服务端收到后,再根据每个用户的带宽情况选择不同的层下发。
  3. 使用Simulcast技术:与SVC的分层思想类似,但它的实现更简单。就是将视频编码出不同分辨率的多路码流,上传给服务器。服务器则根据每个用户带宽情况选择一路最合适的流下发。
  4. 使用动态码率:当网络带宽评估用户带宽不足时,则通过编译器让其减小输出码率;而当评估带宽增大时,则增加输出码率。
  5. 甩帧或减少业务:这是一种下下策的方法,只有在用户网络非常差的情况下才可能使用。

上述方法中,使用最多的是Simulcast技术和动态码率。

适当增加延时

在网络抖动的情况下,使用缓冲队列来平滑处理数据,这种适当增加延时的方法也是可以解决部分业务质量和网络之间的矛盾的。

对于实时音视频直播而言,必须把时延控制在一定范围内。由于音视频的采集、编解码、渲染等时间是固定的,所以只要把网络时延算出来,就可以确定缓冲区的时延。

这种方式在WebRTC中也是有应用的,比如PacedSender。

提高网络质量

提高网络质量的前提是网络没有发生拥塞。可以从丢包、延迟、抖动三个方面来评价网络质量的好坏。

  • 丢包:是网络传输过程中对网络影响最大的指标,优质的网络丢包率不超过2%。对于WebRTC而言,大于2%且小于10%的丢包率是正常网络。
  • 延迟:相对丢包来说对网络影响要小点。如果网络中延迟持续增大,则可能是网络中发生了拥塞。
  • 抖动:对网络影响最小。一般的抖动都可以通过缓冲队列来解决。

在WebRTC中有很多提高网络质量的方法,比如NACK/RTX、FEC前向纠错、JitterBuffer防抖动、NetEQ等。

  • NACK/RTX:NACK是RTCP的一种消息类型,由接收端向发送端报告一段时间内有哪些包丢失了;RTX指发送端重传丢失的包,并使用新的SSRC(将音视频包与重传包进行区分)。
  • FEC前向纠错:使用异或操作传输数据,以便丢包时恢复丢失的包。FEC特别适合随机少量丢包的场景。
  • JitterBuffer:用于防抖动,可以将抖动较小的乱序包恢复有序。
  • NetEQ:包括JitterBuffer,专用于音频控制,可以实现音频的防抖动。
  • 拥塞控制:它需要控制两个点:第一个点是Pacer,降低发送码率。当然仅降低发送码率还不够,因为如果编码器仍然输出大量码流给Pacer,那么Pacer 的缓冲区迟早会被撑爆。所以在控制Pacer让它减少发送码率的同时,一定要降低音视频的编码器的输出码率,从而保持平衡,进而使数据平缓下行。

快速准确地评估带宽

网络质量提升的前提是网络没有拥塞。

只要能够快速准确地评估出带宽,通常就能有效的防止网络拥塞的发生。

在实时通信领域,有4种常见的带宽评估方法:

  1. Goog-REMB
  2. Goog-TCC
  3. NADA
  4. SCReAM

目前在WebRTC中Google最新的Transport-CC算法(Goog-TCC)是表现最优秀的。

总结

在这里插入图片描述

总结一下,对于服务质量保障,首先提高网络质量,NACK和FEC解决丢包问题,JitterBuffer解决视频的乱序与抖动,NetEQ解决音频的乱序与抖动;带宽评估通过Goog-REMB和Goog-TCC,还有丢包的带宽评估;为了保障实时性,需要选择更优质的线路,比如客户端与服务端通信的时候选择更好的路线节点,保证云端网络带宽等等;从业务上,减少数据量可以用AV1、SVC、Simulcast、动态码率,减少业务;在防拥塞上,通过Pacer进行流控,只要能控制在500ms之内,适当增加时延也是可以接收的。

参考

  1. https://zhuanlan.zhihu.com/p/575264502
  2. https://avdancedu.com/2763ac60/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/671975.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手机运营商二要素验证接口:确保业务操作安全可靠

手机运营商二要素验证接口是一种通过与电信运营商合作的方式,检验手机用户的手机号码与姓名是否一致的服务。这个接口可以广泛应用于各种需要用户实名认证的场景,例如电商、游戏、直播以及金融等行业。 这个接口的作用非常重要,它可以帮助企…

材料物理 笔记-7

原内容请参考哈尔滨工业大学何飞教授:https://www.bilibili.com/video/BV18b4y1Y7wd/?p12&spm_id_frompageDriver&vd_source61654d4a6e8d7941436149dd99026962 或《材料物理性能及其在材料研究中的应用》(哈尔滨工业大学出版社) 文章…

【微磁学3D绘图工具探索】Excalibur

文章目录 概要调查报告技术名词解释主要特点 技术和算法实现他能够画出怎样酷炫的图 小结 概要 微磁学中的磁学结构同时包括二维和三维,想要绘制得好看,结果清晰,那么就需要一些自己写的绘图代码之外的额外渲染功能,尤其是对于三…

英语学习笔记2——Is this your ...?

Is this your …? 这是你的 … 吗? 词汇 Vocabulary pen n. 笔 不仅指钢笔,是笔的统称 相关:ball pen n. 圆珠笔    pencil n. 铅笔    marker n. 记号笔 book n. 书 横着翻的本子或书 补充:pad n. 本子 竖着翻的本子或…

Prometheus 2: 一个专门评估其他语言模型的开源语言模型(续集)

普罗米修斯的续集来了。 专有的语言模型如 GPT-4 经常被用来评估来自各种语言模型的回应品质。然而,透明度、可控制性和可负担性等考虑强烈促使开发专门用于评估的开源语言模型。另一方面,现有的开源评估语言模型表现出关键的缺点:1) 它们给出的分数与人类给出的分数存在显著差…

C++类细节,面试题02

文章目录 2. 虚函数vs纯虚函数3. 重写vs重载vs隐藏3.1. 为什么C可以重载? 4. 类变量vs实例变量5. 类方法及其特点6. 空类vs空结构体6.1. 八个默认函数:6.2. 为什么空类占用1字节 7. const作用7.1 指针常量vs常量指针vs常量指针常量 8. 接口vs抽象类9. 浅…

IDEA-控制台日志过滤插件 - Grep Console

IDEA-控制台日志过滤插件 - Grep Console 当idea控制台日志较多时,为了方便查找关键字,使用Grep Console插件,指定控制台中关键字高亮显示 1.安装 2.使用 2.1 高亮显示 控制台中指定颜色高亮显示指定字符 效果: 重启项目后还是会高亮显示 取…

Java | Leetcode Java题解之第73题矩阵置零

题目&#xff1a; 题解&#xff1a; class Solution {public void setZeroes(int[][] matrix) {int m matrix.length, n matrix[0].length;boolean flagCol0 false;for (int i 0; i < m; i) {if (matrix[i][0] 0) {flagCol0 true;}for (int j 1; j < n; j) {if (…

Vue 插槽

Vue插槽是一种特殊的语法&#xff0c;用于在组件中定义可复用的模板部分。它允许开发者在组件的标记中声明一个或多个插槽&#xff0c;然后在使用该组件时&#xff0c;可以根据自己的需求将内容插入到这些插槽中。 Vue插槽分为默认插槽和具名插槽两种。 默认插槽 语法 组件…

线性表的概念与结构,以及顺序表和链表的简单概念

1.线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条直线…

04.1.添加多个监控同步其他主机

添加多个监控&同步其他主机 1.首先在agent配置文件中存在Include的&#xff0c;也就是说明&#xff0c;可以配置多个监控项并且同步到其他主机上的进行使用&#xff1b; 2.主机之间互相推送配置文件即可&#xff1b; 开始测试 我这里实在agent节点上直接在路径/etc/zabbi…

STC15W1K16S和VC6.0串口通讯收发测试实例

/********************************************* STC USB 串口板 2014 4 7 20:12 发送接收数据 使用STC串口调试助手通讯正常&#xff0c;L161 **********************************************/ #include "reg51.h" #include "intrins.h" #define…