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

WebRTC Qos策略

1.WebRTC 用于提升 QoS 的方法:


NACK、FEC、SVC、JitterBuffer、IDR Request、PACER、Sender Side BWE、VFR(动态帧率调整策略)

https://blog.csdn.net/CrystalShaw/article/details/80432267

丢包重传

NACK:一种通知技术,和ACK相反,通知未达

FMT=1, PT=RTPFB

a=rtcp-fb:96 nack

RTX:参考rfc4588,使用额外的 ssrc 传输,在sdp中标识

a=rtpmap:97rtx/90000

a=ssrc-group:FID2736695910239189782

RPSI:无

NACK 可以节省带宽,但会带来延迟*

谈谈网络通信中的ACK,NACK 和 REX](https://link.zhihu.com/?target=https%3A//blog.51cto.com/ticktick/2468581)

丢包恢复(冗余编码 前向纠错 FEC)**通过 FEC 协议实现:RED:RFC2198, 封装FEC冗余报文UlpFEC: RFC5109,报文异或,生成冗余打包;带宽占用大,连续丢包,随机丢包FLEXFEC: 草案, 更灵活,引入交织算法,增加纵向OXR运算,增加网络抗丢包能力。

a=rtpmap:116 red/90000a=rtpmap:117 ulpfec/90000

FEC由于通过冗余纠错,所以延迟比较低,但浪费带宽*

https://blog.csdn.net/CrystalShaw/article/details/83413772

根据丢包率动态调整冗余度。

关键帧请求(IDR)**严重丢包时可以通过发送关键帧请求进行画面恢复。关键帧请求方式包括三种:RTCP FIR:使用 RTCP Feedback 消息请求关键帧(完整帧)RTCP PLI:关键帧丢包重传SIP Info:

a=rtcp-fb:100 ccm fira=rtcp-fb:96 nack pli

Jitter Buffer 抖动缓冲区将收到的RTP报文缓存起来,按照时间戳或者序号重排,消除报文乱序和抖动问题。

分为静态和动态,动态 Jitter Buffer 根据网络环路延时情况,动态调整缓存大小。

Jitter buffer 核心思想是用时间换空间,以增大端到端延时为代价,换取视频通话的流畅性。 当网络抖动发生时,增加Buffer长度,以应对可能发生的抖动;当网络稳定时,减少buffer长度,降低视频端到端延迟,提高实时性。(尽量保证视频不卡的前提下,降低端到端延迟,在延迟和卡顿率之间平衡)

流程**:组帧--帧排序--检查帧参考关系--计算抖动(时间戳)--根据抖动计算buffer长度--根据抖动自适应调整buffer长度

Pacer 网络报文平滑策略**视频帧可能分别封装在多个RTP报文,若这个视频帧RTP报文同时发送到网络,必然会导致网络瞬间拥塞。PACER 就是实现把RTP同一时刻产生的若干包,周期性的发送,防止上行流量激增导致拥塞。让视频数据按照评估码率均匀的分布在各个时间片里发送。

削峰填谷; 将报文平滑地发送给接收端。在弱网环境尤其重要。

根据 estimator 计算的码率,来计算发包频率

WebRTC中pacer的流程比较清晰,分为三步:1)如果一帧图像被编码和RTP切分打包后,先会将RTP报文存在待发送的队列中,并将报文元数据(packet id, size, timestamp, 重传标示)送到pacer queue进行排队等待发送,插入队列的元数据会进行优先级排序。2)pacer timer会触发一个定时任务事件来计算budget,budget会算出当前时间片网络可以发送多少数据,然后从pacer queue当中取出报文元数据进行网络发送。3)如果pacer queue没有更多待发送的报文,但budget却还可以发送更多的数据,这个时候pacer会进行padding报文补充。

设置发送速率 PacedSender::SetEstimatedBitrate(bitrate_bps)*

包缓存队列;发包线程按一定间隔发包。

带宽评估和拥塞控制

https://mp.weixin.qq.com/s/Ej63-FTe5-2pkxyXoXBUTw

https://blog.csdn.net/CrystalShaw/article/details/82981183

https://blog.mozilla.org/webrtc/what-is-rmcat-congestion-control/

WebRTC 的拥塞控制和码率估计采用 GCC 算法。该算法充分考虑了网络丢包和网络延迟对码率估计的不同影响,分别基于丢包率和网络延迟进行码率估计,最后综合得出最优值。

算法实现上,基于丢包率的码率估计在发送端进行,基于网络延迟的码率估计在接收端进行。最后,在发送端计算出最优值,作用于Codec和PacedSender模块。GCC算法能够较好地基于网络实时状况估计网络带宽,为网络实时通信打下坚实基础。

GCC算法弊端:不能适应所有网络模型、应对网络峰值能力差。比如实时在线编辑场景。

M55 版本引进 Sendside-BWE 拥塞控制算法,把所有码率计算都移到发送端进行,并采用全新的 Trendline 滤波器取代之前的 Kalman 滤波器。能够更好更快的进行码率估计和网络过载恢复。

a=rtcp-fb:100 goog-remba=rtcp-fb:100 transport-cc

GCC 算法(Google Congestion Control)

https://www.jianshu.com/p/0f7ee0e0b3be

https://www.jianshu.com/p/5259a8659112

GCC拥塞控制算法主要分两部分:基于丢包检测的拥塞控制和 基于延时检测的拥塞控制。

其中,发送端基于丢包率的码率控制,接收端基于延迟的码率控制。

基于延迟检测和丢包反馈的拥塞机制(GCC)和带宽调节策略来保证延迟、质量和网路速度之间平衡

带宽估计,传输反馈机制

基于丢包率(loss-based )(发送端实现)发送端从接收端发送的 RTCP RR(Receiver Report)报文,根据 Report Block 中携带的丢包率信息,动态调整发送端码率。

通过丢包率信息以及计算RTT,并结合 TMMBR 或 REME 中携带的码率信息计算最终的码率值,然后媒体引擎根据码率配置编码器,实现码率自适应调整。

RTCP RR 反馈包,显示接收端丢包率,lost fraction 字段

基于延时带宽估计(delay-based) (接收端实现)

记录数据包时间戳,计算数据分组的延时变化,判断网络拥塞情况;最终评估码率,由 RTCP feedback(TMMBR 或 REME )报文 反馈给发送端。

WebRTC 新版本中,GCC算法将两种拥塞控制算法都在发送端实现。

基于延时的拥塞控制由三个模块组成:到达时间滤波器、过载检查器和速率控制器。

使用 Kalman filter(卡夫曼过滤器)带宽评估模型;WebRTC M55 新版本都是采用发送端的 trendline 滤波器来做延迟带宽评估

TMMBR

REME (Receiver Estimated Maximum Bitrate)

rtcp remb 消息反馈

Sendside-BWE 算法(Transport-CC Feedback)

M55 版本引进 Sendside-BWE 拥塞控制算法,把所有码率计算都移到发送端进行,并采用全新的 Trendline 滤波器取代之前的 Kalman 滤波器。能够更好更快的进行码率估计和网络过载恢复。

RTP头部扩展 TransportSequenceNumber ,代表传输序号(不同于媒体层序号,用于组帧和抗丢包),关注数据传输特性,用于码率估计。

接收端,通过检查头部是否有 TransportSequenceNumber 扩展,决定采用 Sendside-BWE 还是 GCC 算法。接收端的 EstimatorProxy 周期发送 Transport-CC 报文。

包括关键技术:包组延迟评估(InterArrival)、滤波器趋势判断(TrendlineEstimator)、过载检测(OveruseDetector)和码率调节(AimdRateControl)。

BBR 算法

BBR在实时视频领域应用

Google's BBR 拥塞控制算法模型解析

从TCP拥塞本质看BBR算法及其收敛性(附CUBIC的改进/NCL机制)

2.总结


3.音频QoS


以上部分,我们主要讨论 RTP 视频相关 Qos。这里,我们着重讨论音频相关Qos。

时延是语音通话的重要指标,时延低于150ms时人感觉不到,超过150ms且小于450ms时人能感受但不影响通话,当时延大于1s时将严重影响通话交流。

音频的时延包括:通信终端时延(采集、前处理、编码)、网络时延、通信终端与网络设备间时延。

发送端延时:采集延时、前处理算法延时、编码延时

网络延时:Jitter Buffer、FEC

接收端延时:网络延时、解码延时、后处理算法延时和播放延时。

减少延时方法:减少缓冲深度、加速信号处理算法(WSOLA、NetEQ)

WebRTC 音频相关两大核心技术:前后处理(3A,AEC/AGC/ANS)、netEQ。

此处主要介绍 netEQ 算法,3A算法在音频处理详细介绍。

netEQ

在 NetEQ 模块中,主要分为:MCU(微控制单元)和 DSP(数字信号处理)模块。

MCU:主要负责延时及抖动计算统计,并生成对应的控制命令;

DSP:主要负责接收并根据MCU控制命令进行对应的数据包处理。

浅谈WebRTC NetEQ

webrtc音频Qos汇总

抗丢包方法:NACK、FEC、交织编码

抗抖动方法:Jitter Buffer、音频平滑处理

4.Jitter Buffer


抗网络抖动由三个模块完成:网络延时统计算法、缓冲区延迟统计算法、控制命令决策判定。

webrtc 会根据网络延时(DelayManager)和缓冲区数据长度(Buffer Level Filter)以及上一帧的处理方式,决定给解码器发什么信号处理命令。

5.音频平滑处理方法


音频解码信号处理命令主要有五种:kNormal(正常播放)、kAccelerate(加速播放)、kExpand(减速播放)、kAlternativePlc(丢包补偿)、kMerge(融合)。

抗抖动方法尽量保证音频质量,但特定网络,音频渲染会出现音频数据堆积、断流现象。若不进行特殊处理,音频会时快时慢;所以引入音频不变调算法进行平滑处理。

在弱网丢包率比较高情况下,数据会长时间丢失,变速不变调算法也无法满足实际应用,webrtc又引入了丢包补偿、音频融合算法,衔接和平滑音频质量。

丢包补偿:根据前一帧的解码信息,利用基音同步重复的方法近似替代当前的丢失帧,以达到丢包补偿。

融合算法:当上一次播放的帧和当前解码的帧不连续的情况下,进行衔接和平滑处理。让两个数据包一部分播放时间重叠,使过度更自然。

原文 https://zhuanlan.zhihu.com/p/149675376

★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。

见下方!↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

相关文章:

WebRTC Qos策略

1.WebRTC 用于提升 QoS 的方法:NACK、FEC、SVC、JitterBuffer、IDR Request、PACER、Sender Side BWE、VFR(动态帧率调整策略)https://blog.csdn.net/CrystalShaw/article/details/80432267丢包重传NACK:一种通知技术,…...

Mysql数据查询

文章目录1 group by子句2 回溯统计3 having子句1 group by子句 group by子句**:分组统计,根据某个字段将所有的结果分类,并进行数据统计分析 分组的目的不是为了显示数据,一定是为了统计数据group by子句一定是出现在where子句之…...

Kafka入门(五)

下面聊聊Kafka常用命令 1、Topic管理命令 以topic:test_1为例 1.1、创建topic ./bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 3 --partitions 3 --topic test_1参数说明: –bootstrap-server:…...

如何快速在windows系统中切换node.js版本

前言 最近在同时维护公司的两个项目,一个是新项目,另一个是老项目,二者所依赖的node版本是不一致的。 这就导致我在切换项目的时候必须重新安装对应版本的 node.js,否则就会报各种神马错误。 但这一卸一装可着实烦死个银&#xf…...

设计模式-单例模式(java)

单例是一种常用的设计模式,它的目的是确保一个类只有一个实例,并提供一个全局访问点。在Java编程语言中,实现单例有多种方法,本篇文章将介绍其中的两种实现方式。 方式一:饿汉式单例模式 饿汉式单例模式是最简单的实…...

Revit中复合墙图层的规则和CAD识别翻模墙

一、Revit中用于指定复合墙图层的规则,具体内容? 在编辑复合墙的结构时,请使用“指定图层”工具将“编辑部件”对话框中的行指定给图层或预览窗格中的区域,并遵循这些原则。 在预览窗格中,样本墙的各个行必须保持从左到右的顺序显…...

【DL】Paddle BML Codelab环境使用说明 - 知识点目录

《Paddle BML Codelab环境使用说明》 1. 编辑区 Code Cell 1.1 Code Cell 操作 Magic关键字/魔术命令 Magic命令含义%timeit测试单行语句的执行时间%%timeit测试代码块的执行时间%matplotlib inline显示matplotlib生成的图形%run调用外部python脚本%pdb 调试程序%pwd 查看当…...

python正则表达式处理文本-re模块

python正则表达式处理文本-re模块 1.概述 正则表达式通常用于含有大量文本处理的应用当中。例如,它们经常用作开发者使用的文本编辑程序的搜索模式,包括 vi,emacs 和现代集成开发环境。它们也是 Unix 命令行工具的组成部分,例如…...

换了固态硬盘需要重装系统吗?教你如何实现不重装系统!

电脑大家都用过嘛,如果您的计算机装的还是机械硬盘,想必阁下肯定是修身养性的高手,因为在这个浮躁的社会中,是很少有人能够忍受5分钟甚至更久的开机时间的,不仅开机慢,应用程序的响应速度也很慢&#xff0c…...

网上医疗预约挂号系统

技术:Java、JSP等摘要:网上医疗预约挂号系统是主要是对居民的保健、护理、疾病预防等健康信息实行有效的预约挂号管理。医疗机构为居民建立完整的健康档案,安排体检以及实施免疫等预防措施。而基于Web的远程保健平台以网上医疗预约挂号系统为…...

专题:一看就会的C++类模板讲解 (1)

目录 一.类模板的作用 二.类模板的定义: 三.类模板的声明格式: 四.类模板对象 五.再举一个例子 一.类模板的作用 面向对象的程序设计编程实践中,我们可能会面临这样的问题:要实现比较两个数的大小。明明比较两个数的方法都一样…...

什么是“奥卡姆剃刀”,如何用“奥卡姆剃刀”解决复杂问题?复杂问题简单化

什么是“奥卡姆剃刀”,如何用“奥卡姆剃刀”解决复杂问题?复杂问题简单化问题什么是“奥卡姆剃刀”?如何使用“奥卡姆剃刀”解决问题复杂问题简单化“汉隆剃刀”小结问题 假设你在夜空中看到一颗闪闪发光的「不明飞行物」,你认为这会是什么呢…...

角谷定理(递归)

已知有角谷定理: 输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。如:例如数据22的变化过程&#xff…...

数学小课堂:微积分复盘(高等数学本质上是对趋势的动态描述,是对各种相关性抽象的表述。)

文章目录 引言I 复盘1.1 概念和表述1.2 现实与虚构1.3 有穷和无穷1.4 静态和动态1.5 直觉和逻辑II 通过数学逻辑,理解人生。2.1 精明与聪明2.2 朋友和理性的对手2.3 攒钱和赚钱2.4 荣誉和财富引言 高等数学本质上是对趋势的动态描述,是对各种相关性抽象的表述。 I 复盘 1.…...

JAVA线程池原理详解一

JAVA线程池原理详解一 一. 线程池的优点 线程是稀缺资源,使用线程池可以减少创建和销毁线程的次数,每个工作线程都可以重复使用。可以根据系统的承受能力,调整线程池中工作线程的数量,防止因为消耗过多内存导致服务器崩溃。 二…...

Windows平台Unity Camera场景实现轻量级RTSP服务和RTMP推送

技术背景随着VR技术在医疗、军事、农业、学校、景区、消防、公共安全、研学机构、展厅展馆,商场等场所普及,开发者对Unity平台下的直播体验提出了更高的要求。技术实现Unity平台下的RTMP推流、RTMP、RTSP播放前几年已经覆盖了Windows、Linux、Android、i…...

LSB 题解

今天来刷一道Misc的题目,LSB原理进行图片隐写 LSB原理 LSB是一种利用人类视觉的局限性设计的幻术 PNG和BMP图片中的图像像素一般是由RGB(RED红 GREEN绿 BLUE蓝)三原色组成 记住,JPG图片是不适合使用LSB隐写的,JPG图片对像数进行了有损压缩…...

离线部署docker与镜像

离线部署docker与镜像 1.离线部署docker 1).在docker官网上下载,合适的安装文件 本次使用的是“docker-20.10.9.tgz ” 下载地址:https://download.docker.com/linux/static/stable/x86_64/ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下…...

Linux文件系统介绍(上)

使用 Linux 系统时,需要作出的决策之一就是为存储设备选用什么文件系统。大多数 Linux 发行版在安装时会非常贴心地提供默认的文件系统,大多数入门级用户想都不想就用了默认的那个。 使用默认文件系统未必就不好,但了解一下可用的选择有时也会…...

创建SpringBoot注意事项

作为一个java小白,你是否因为创建SpringBoot项目那些莫名其妙的错误搞得头皮发麻。不要慌张,这篇文章能帮你解决90%的问题【持续更新…】 本文结合创建SpringBoot项目的完整过程来讲 在idea中新建项目 虽然SpringBoot项目是由maven内核组成的&#xff0…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...

Python如何给视频添加音频和字幕

在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...