当前位置: 首页 > news >正文

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

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

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

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

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

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

矛盾的解决方法

增加带宽

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

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

增加带宽的具体方法:

  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/

相关文章:

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

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

【Delphi 爬虫库 4】使用封装好的 XML 解析库对 XML 数据进行解析

由于官方提供的TXMLDocument组件并不是特别好用,有着体积大,速度慢,调用不方便等缺点。 这里直接利用封装好的XML 解析库来对Xml数据进行解析与生成。 文章目录 1、生成XML文件2、解析XML文件3、生成带注释的XML文件4、删除XML文件节点 1、生…...

Flask简介

Flask简介 安装概述使用PyCharm创建一个Flask程序 Flask程序的基本结构初始化路由和视图函数启动服务器请求-响应循环 安装 概述 Flask算是小型框架,小到可以称为“微框架”。Flask 非常小,因此你一旦能够熟练使用它,很可能就能读懂它所有的…...

神经网络中的归一化

我们今天介绍一下神经网络中的归一化方法~ 之前学到的机器学习中的归一化是将数据缩放到特定范围内,以消除不同特征之间的量纲和取值范围差异。通过将原始数据缩放到一个特定的范围内,比如[0,1]或者[-1,1],来消除不同特征之间的量纲和取值范围…...

《从Paxos到Zookeeper》——第四、七章:基本概念及原理

目录 第四章 Zookeeper与Paxos 4.1 Zk是什么 4.1.1 Zk特性 4.1.2 Zk基本概念 4.1.2.1 集群角色(Follower, Leader, Observer) 4.1.2.2 数据模型 4.1.2.3 ZNode(数据节点) 4.1.2.4 Session(会话) 4.1.2.5 ACL(Access Control Lists) 4.1.2.6 Watcher(事件…...

网络演进技术演进:裸纤专线、SDH、MSTP+、OTN、PTN、IP-RAN

前言 文章主要介绍常见名词以及其在各自领域实现的功能价值。 01 裸纤 裸光纤(裸光纤)由运营商提供,是无中继的光纤线路,仅通过配线架连接。相比传统光纤,裸光纤提供纯粹的物理传输路径,无需额外网…...

MMC设备

MMC(MultiMediaCard)是一种闪存卡标准,用于作为便携式设备上的存储媒介,例如数码相机、智能手机、平板电脑、个人数字助理(PDA)以及其他便携式设备。MMC卡最初是由SanDisk和Siemens AG开发的,并…...

图片浏览器-PicView

一、前言 PicView 是一款适用于 Windows 10 或 11 的快速高效的图像查看器,配备了干净简洁的用户界面,可以在不需要时方便地隐藏。 二、支持类型 它支持广泛的图像文件类型,包括:WEBP、GIF、SVG、PNG、JXL、HEIC、PSD 三、软件特…...

一些零碎小知识

函数递归复习 #define 的头文件包含 #define定义标识符常量 等define其他用法 斐波那契数列 函数栈帧 青蛙跳台问题 汉诺塔问题 字符“0”与0的计算 “0”-“0”0; 最后一次作业题一道 素数 随机数 strand timer rand 水仙花数 变种随鲜花 斐波那契数…...

2.2 Java全栈开发前端+后端(全栈工程师进阶之路)-前端框架VUE3-基础-Vue基本语法

文本渲染指令 文本渲染指令-v-html与v-text Vue使用了基于HTML的模板语法,允许开发者声明式地将DOM绑定至底层Vue实例的数据。所有Vue的模板都是 合法的HTML,所以能被遵循规范的浏览器和HTML解析器解析。 在前面,我们一直使用的是字符串插…...

(Arxiv,2024)Mind the Modality Gap:通过跨模态对齐建立遥感视觉语言模型

文章目录 相关资料摘要引言相关工作对比语言图像预训练遥感域专用 CLIP 模型遥感中的多模态 CLIP 启发模型 方法模型算法输入阶段:输出阶段:步骤说明: 第一阶段:通过权重插值修补CLIP将遥感图像模态与自然图像和文本对齐 实验 相关…...

区块链 | 一文了解 NFT 的生态系统(上)

🐶原文: Understanding Security Issues in the NFT Ecosystem 🐶写在前面: 本博客只摘取了原论文的第二、三节。 技术背景知识 在本节中,我们将介绍以太坊生态系统的构建模块,重点关注「NFT,…...

为什么centos官方版不支持arm架构?

为什么centos官方版不支持arm架构? 1、资源限制:CentOS是由社区维护的开源操作系统,其开发和维护需要大量的人力和物力资源。由于ARM架构的设备相对较少,社区资源有限,因此官方版CentOS选择集中精力在x86架构上进行开发…...

awk小尝试2(随手记)

文章目录 需求1解法 需求2解法(3种-grep/sed/awk) 需求1 使用hostname -I创建文件名 echo hostname -I.txt 10.0.0.124 .txt # 需要注意,这里的.txt前有一个空格,需要去掉,不然就是两个文件名解法 echo hostname -I…...

Vue的项目启动指令分析

通过Vue CLI脚手架创建的项目,默认的启动项目方式是 npm run serve 这里的serve是可以修改的。 在创建的项目目录中,找到package.json 双击打开,找到scripts部分 在scripts部分,有一个"serve"键值对,这里的…...

年轻人刮疯了,刮刮乐断货了

年轻人刮疯了 刮刮乐缺货了。 00后彩票店老板陆诗等得有点着急。她的福彩店开在深圳,今年4月才开门营业,但从开业到今天,刮刮乐总共就来了一回货——开业时发的20本。 那之后,刮刮乐就彻底断供了。原本,陆诗想把刮刮…...

25 JavaScript学习:var let const

JavaScript全局变量 JavaScript中全局变量存在多种情况和定义方式,下面详细解释并提供相应的举例: 使用var关键字声明的全局变量: var globalVar "我是全局变量";未使用var关键字声明的变量会成为全局变量(不推荐使用&…...

docker部署的nacos2.2x开启鉴权功能

注意在2.2.0版本之后如果不开启鉴权,那么默认不需要登录就可以访问 所以我们需要手动开启鉴权,nacos启动好以后来到容器内部修改 docker exec -it nacos /bin/shvim conf/application.properties在第34行下面添加 nacos.core.auth.enabledtrue nacos.cor…...

【数据结构与算法】之五道链表进阶面试题详解!

目录 1、链表的回文结构 2、相交链表 3、随机链表的复制 4、环形链表 5、环形链表(||) 6、完结散花 个人主页:秋风起,再归来~ 数据结构与算法 个人格言:悟已往之不谏,知…...

vue2实现生成二维码和复制保存图片功能(复制的同时会给图片加文字)

<template><divstyle"display: flex;justify-content: center;align-items: center;width: 100vw;height: 100vh;"><div><!-- 生成二维码按钮和输入二维码的输入框 --><input v-model"url" placeholder"输入链接" ty…...

嵌入式AI模型量化实战:用int8给ResNet减重80%还不掉精度

嵌入式AI模型量化实战&#xff1a;用int8给ResNet减重80%还不掉精度 在边缘计算设备上部署神经网络时&#xff0c;工程师们常常面临一个两难选择&#xff1a;要么接受模型体积过大导致的内存溢出&#xff0c;要么忍受量化带来的精度暴跌。去年我们在智能摄像头项目中就遇到了这…...

RevokeMsgPatcher:PC端即时通讯工具消息控制解决方案

RevokeMsgPatcher&#xff1a;PC端即时通讯工具消息控制解决方案 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁&#xff08;我已经看到了&#xff0c;撤回也没用了&#xff09; 项目地址: https://gitcode.com…...

水墨江南模型软件测试实践:生成结果的稳定性与一致性验证

水墨江南模型软件测试实践&#xff1a;生成结果的稳定性与一致性验证 最近在项目里用上了水墨江南这个AI绘画模型&#xff0c;效果确实惊艳&#xff0c;那种烟雨朦胧、小桥流水的意境拿捏得很准。但问题也来了&#xff0c;当我们想把它集成到产品里&#xff0c;给用户稳定提供…...

避坑指南:Synopsys VCS工具安装中的5个常见错误及解决方案

Synopsys VCS工具安装避坑实战&#xff1a;从报错排查到环境调优 在芯片设计领域&#xff0c;Synopsys VCS作为业界标准的仿真工具&#xff0c;其安装过程却常常成为工程师们的"第一道门槛"。不同于简单的解压即用软件&#xff0c;VCS的安装涉及复杂的依赖关系、权限…...

dbg-macro配置完全指南:禁用宏、强制颜色输出与警告控制

dbg-macro配置完全指南&#xff1a;禁用宏、强制颜色输出与警告控制 【免费下载链接】dbg-macro A dbg(…) macro for C 项目地址: https://gitcode.com/gh_mirrors/db/dbg-macro dbg-macro是一款轻量级C调试宏工具&#xff0c;通过简单的dbg(...)语法即可实现变量值、类…...

别再死磕ECharts了!试试这个Vue关系图谱插件relation-graph,上手快效果好

从ECharts到relation-graph&#xff1a;Vue关系图谱开发的效率革命 如果你正在使用Vue开发需要展示复杂关系网络的应用&#xff0c;可能已经尝试过ECharts的关系图功能。但当你需要更专业的交互体验、更直观的数据表达时&#xff0c;relation-graph这个专为Vue设计的关系图谱插…...

终极指南:facenet-pytorch API参考手册与完整函数方法详解

终极指南&#xff1a;facenet-pytorch API参考手册与完整函数方法详解 【免费下载链接】facenet-pytorch Pretrained Pytorch face detection (MTCNN) and facial recognition (InceptionResnet) models 项目地址: https://gitcode.com/gh_mirrors/fa/facenet-pytorch f…...

STM32CubeMX定时器避坑指南:为什么你的中断总是不触发?

STM32CubeMX定时器避坑指南&#xff1a;为什么你的中断总是不触发&#xff1f; 第一次使用STM32CubeMX配置定时器中断时&#xff0c;很多开发者都会遇到一个令人抓狂的问题——代码编译下载后&#xff0c;中断就像睡着了一样毫无反应。LED灯不闪烁、串口没输出、变量不更新&…...

nanobot实操手册:Qwen3-4B模型温度(temperature)、top_p、max_tokens参数详解

nanobot实操手册&#xff1a;Qwen3-4B模型温度&#xff08;temperature&#xff09;、top_p、max_tokens参数详解 1. nanobot简介与快速上手 nanobot是一款超轻量级的个人人工智能助手&#xff0c;灵感来源于OpenClaw项目。它最大的特点是代码量极小&#xff0c;仅需约4000行…...

STM32duino S2-LP无线驱动库:Sub-1GHz低功耗可靠通信实现

1. 项目概述STM32duino X-NUCLEO-S2868A2 是一款面向 STM32 平台的 Arduino 兼容库&#xff0c;专为驱动意法半导体&#xff08;STMicroelectronics&#xff09;推出的 X-NUCLEO-S2868A2 扩展板而设计。该扩展板核心搭载 S2-LP 超低功耗 Sub-1GHz 射频收发器芯片&#xff08;型…...