WebRTC QoS方法(汇总篇)

WebRTC系列分享 | WebRTC视频QoS全局技术栈 PACER,是网络报文平滑策略。WebRTC的vpx编码器使用了Temporal Scalability时间可适性编码,仅需通过FEC+NACK方式保护T0层的数据完整性,其余层的视频帧有丢失,可通过逐级降帧率方案(丢弃Tn-T1之间的数据),保证视频通话整体的流畅性。云架构平台部是腾讯规模最大的技术部门之一,长期深耕音视频、存储、接入和计算服务等技术领域,通过海量的存储和数据库平台,世界级的CDN&音视频服务,先进的操作系统和视频编解码技术,助力腾讯云以技术的力量持续赋能客户,帮他们提升效率,降低成本。 阅读详情
AI摘要

本文介绍了WebRTC中用于提升服务质量(QoS)的关键技术,包括NACK、FEC、SVC等丢包恢复机制,以及Jitter Buffer、IDR Request、PACER等网络适应策略,并探讨了动态帧率调整、分辨率调整和音视频同步等高级特性。

目前总结出WebRTC用于提升QoS的方法有:

NACK、FEC、SVC、JitterBuffer、IDR Request、PACER、Sender Side BWE、VFR(动态帧率调整策略)、AVSync(音视频同步)、动态分辨率调整。

这几种方法在WebRTC架构分布如下:

具体实现原理如下:

一、NACK

与NACK对应的是ACK,ACK是到达通知技术。以TCP为例,他可靠因为接收方在收到数据后会给发送方返回一个“已收到数据”的消息(ACK),告诉发送方“我已经收到了”,确保消息的可靠。NACK也是一种通知技术,只是触发通知的条件刚好的ACK相反,在未收到消息时,通知发送方“我未收到消息”,即通知未达。

NACK是在接收端检测到数据丢包后,发送NACK报文到发送端;发送端根据NACK报文中的序列号,在发送缓冲区找到对应的数据包,重新发送到接收端。NACK需要发送端发送缓冲区的支持,RFC5104定义NACK数据包的格式。若在JB缓冲时间内接收端收到发送端重传的报文,就可以解决丢包问题。对应上图发送端的RTCP RTPFB

具体请参考webrtc QOS方法一(NACK实现)_CrystalShaw的博客-优快云博客_nack pli

二、FEC

FEC是发送端在发送报文的时候,将之前的旧包也打包到新包里面,若接收端有丢包,就用新包里面冗余的旧包恢复数据。

webrtc实现该冗余功能,有三种方式:

1、RED就是RFC2198冗余。将前面的报文直接打入到新包里面,在接收端解析主包和冗余包。

2、ULPFEC,目前webrtc仅将SVC编码的Level 0视频帧打包成FEC。其余层有丢包,就逐步降低帧率,保证视频相对流畅。用到的协议是:RFC5109。

3、FLEXFEC较ULPFEC,增加纵向OXR运算。增加网络抗丢包能力。

目前大家都比较优选FlexFEC冗余编码,比较少使用UlpFEC冗余编码。具体参考webrtc QOS方法二.3(flexfec rfc8627简介)_CrystalShaw的博客-优快云博客

具体请参考webrtc QOS方法二.1(FEC原理)_CrystalShaw的博客-优快云博客

三、SVC

webrtc的VPX用到的是时间可适性(Temporal Scalability)算法。通过改变一个GOP内帧的线性参考关系。防止网络丢包对视频传输造成的影响。

具体请参考:webrtc QOS方法三(SVC实现)_CrystalShaw的博客-优快云博客

webrtc使用NACK+FEC+SVC作为QOS的解决方案。参考链接:Handling packet loss in WebRTC | IEEE Conference Publication | IEEE Xplore

四、JitterBuffer

JitterBuffer实现原理是,在收到网络上的RTP报文后,不直接进行解码,需要缓存一定个数的RTP报文,按照时间戳或者seq的顺序进行重排,消除报文的乱序和抖动问题。JitterBuffer分动态JitterBuffer和静态JitterBuffer两种模式。静态JitterBuffer缓存报文个数固定。动态JitterBuffer是根据网络环路延时的情况,动态调整缓存报文个数。

具体请参考webrtc QOS方法八(JitterBuffer)_CrystalShaw的博客-优快云博客_webrtc 渲染时间

五、IDR Request

关键帧也叫做即时刷新帧,简称IDR帧。对视频来说,IDR帧的解码无需参考之前的帧,因此在丢包严重时可以通过发送关键帧请求进行画面的恢复。关键帧的请求方式分为三种:RTCP FIR反馈(Full intra frame request)、RTCP PLI 反馈(Picture Loss Indictor)或SIP Info消息,具体使用哪种可通过协商确定。

六、PACER

PACER,是网络报文平滑策略。一个视频帧有可能分别封装在几个RTP报文,若这个视频帧的RTP报文一起发送到网络上,必然会导致网络瞬间拥塞。以25fps为例,若这帧视频的RTP报文,能够在40ms之内发送给接收端,接收端既可以正常工作,也缓冲了网络拥塞的压力。PACER就是实现把RTP同一时刻生产的若干包,周期性的发送,防止上行流量激增导致拥塞。

具体请参考webrtc QOS方法十(pacer实现)_CrystalShaw的博客-优快云博客_pacer延时介绍

七、Sender Side BWE或REMB(Receiver Estimated Maximum Bitrate)

这个算法的思路是根据接收端的丢包率或延时情况维护一个状态机。以根据丢包率为例,在判断为overuse时,就根据一定的系数减少当前发送端的码率值,当判断为underuse时又根据增加系数来增加发送端的码率值;然后将这个值通过rtcp包发送给发送端,发送端根据该值来动态的调整码率。

具体请参考webrtc QOS方法四(Sender Side BWE)_CrystalShaw的博客-优快云博客_bwe介绍

                                                        

                                                          

八、动态帧率调整策略

视频发送端根据Sender Side BWE或REMB等参数调整出一组比较合适的码率值,当网络条件好的时候,码率值会比较大,当网络条件比较差的时候,码率值会比较低。但是若是发送端仅调整码率,不调整帧率,当网络条件比较好的时候,仅仅提升了视频质量,没有充分利用网络条件,提升实时性。当网络条件比较差的时候,码率降的比较低,若不降低帧率,视频质量会大幅度下降。所以需要增加一种机制,根据发送端的码率值,动态调整发送端的帧率值。

具体请参考webrtc QOS方法五.1(帧率调整)_CrystalShaw的博客-优快云博客

九、AVSync音视频同步

由于音视频处理的系统路径不同,并且音视频媒体流是分开以RTP over UDP报文形式传输,UDP报文对网络丢包延时敏感,若不进行特殊平滑处理,会导致实际播放时音视频的渲染相对延时与采集延时有偏差,这样就容易产生音视频不同步现象。音视频同步的基本思想是,以RTCP报文的NTP时间为参考,在接收端渲染前,对音视频分别进行不同长度的适当缓冲,尽量保证音视频渲染different time = 音视频采集different time。保证音视频同步。

具体请参考:webrtc QOS方法十一(音视频同步AVSyn实现)_CrystalShaw的博客-优快云博客_webrtc 音视频同步

十、动态分辨率调整策略

动态分辨率调整策略设计思想是,在网络传输质量变差、CPU占有率过高,编码器编码质量QP值过大等情况下,动态降低视频传输分辨率,缓解当前异常。反之则动态增加分辨率,提供高质量的视频传输。目前webrtc这块还处于调测阶段。实现核心函数是:

TestVideoCapturer::OnFrame
->VideoAdapter::AdaptFrameResolution

附录一份最近重新整理的链接。

WebRTC系列分享 | WebRTC视频QoS全局技术栈系列解析WebRTC用于提升QoS的方法icon-default.png?t=N7T8https://mp.weixin.qq.com/s/NQco5wg-j5t1-fW63G06Uw

WebRTC Qos策略 WebRTC中pacer的流程比较清晰,分为三步:1)如果一帧图像被编码和RTP切分打包后,先会将RTP报文存在待发送的队列中,并将报文元数据(packet id, size, timestamp, 重传标示)送到pacer queue进行排队等待发送,插入队列的元数据会进行优先级排序。基于丢包率(loss-based )(发送端实现)发送端从接收端发送的 RTCP RR(Receiver Report)报文,根据 Report Block 中携带的丢包率信息,动态调整发送端码率。 阅读详情

相关推荐

WebRTC Qos优化杂记

本文是笔者对WebRTC Qos性能研究、优化的一些思考,希望对有兴趣的读者有一些启发。

sonysuqin的专栏 6678

webrtc代码走读(二十五)-QOS系列17-音频qos之NetEQ

WebRTC音频QoS技术通过NetEQ模块解决网络抖动和丢包问题。发送端采用3A算法预处理音频,接收端NetEQ通过抖动缓冲、丢包补偿和压缩解码三大功能确保流畅播放。NACK协议实现丢包重传,FEC冗余协议和交织编码则分别通过嵌入冗余数据和分散传输降低丢包影响。源码分析显示,NetEQ动态调整缓冲区大小并生成伪音频帧,而NACK和FEC通过智能重传和冗余编码协同保障音频质量。该技术形成了发送预处理、网络稳传和接收后处理的闭环系统,有效提升实时音频体验。

qq_31065851的博客 1092

WebRTC服务质量(01)- Qos概述

WebRTC 的 QoS 策略是一个复杂的多层动态优化过程,以实现实时音视频通信的高质量和低延迟。提高网络可靠性(NACK/RTX、FEC、JitterBuffer 等)。动态调整码率与带宽适配(拥塞控制、Transport-cc、主动丢包等)。降低数据发送量(SVC、Simulcast、动态帧率调整等)。延迟优化(Pacer、DTLS 优化、ICE 节点选择等)。音频质量优化(Opus 自适应、音频冗余编码、回声消除等)。设备性能适配(硬件加速、帧率和分辨率平衡等)。

Ziwubiancheng的博客 1453

【网络通信 -- WebRTC】WebRTC 服务质量 (QoS) -- 综述

【网络通信 -- WebRTC】WebRTC 服务质量 (QoS) -- 综述 【1】WebRTC QoS 处理过程简介 WebRTC 设计了一套基于延迟和丢包反馈的拥塞机制和带宽调节策略来保证延迟、质量和网路速度之间平衡,该处理循环如下图所示; 图示的循环处理流程如下 1) estimator 通过 RTCP 的 feedback 反馈过来的包到达延迟增量和丢包率信息计算出网络拥塞状态并评估出适合当前网络传输的码率,根据这个码率改变视频编码器码率,然后改变 pacer 的码率 2) pace

CopperSun 技术博客 1215

webrtc QOS 优化 (1)慢启动优化

在webrtc启动阶段,第一个ack时钟的是由探测的策略来产生,这时GCC通过探测来进行码率评估,类型tcp的慢启动

debug&code的专栏 2283

【WebRTC---优化篇】(一)Qos优化杂记

JitterBuffer延迟换流畅 在丢包+延迟+抖动的弱网环境下,推流端通过NACK+FEC等方式做了一定的容错,但是可能并不能百分之百解决所有问题,而且通过SFU分发到拉流端之后,拉流端网络也可能有问题,这个时候需要JitterBuffer来做媒体包的缓存,例如视频JitterBuffer,它不只缓存视频包,还组帧,还期望组成连续的可解码的GOP,一旦有一个帧的包丢失,就需要等待,如果较长时间无法恢复就丢弃剩余的整个GOP,如果恢复的比较晚,等到音视频同步完去渲染发现这一系列帧已经太晚了,会直接扔掉或

用可见的方式来记录和分享每一次收获 1648

WebRTC音频QoS方法(汇总篇)

一、概述 音频的QOS可以分:音频前处理3A算法、NetEQ两大类。 二、音频前处理3A算法 1)AEC AEC (Acoustic Echo Cancellation) 回声消除算法 IOS和ANDROID系统都使用内置的AEC算法。只有windows使用webrtc的AEC算法。配置过程请参见 WebRtcVoiceEngine::Init ->WebRtcVoiceEn...

CrystalShaw的博客 6643

Win64 驱动内核编程-16.WFP网络监控驱动(防火墙)

WFP驱动监控网络 WFP是微软推出来替代TDIHOOK、NDISHOOK等拦截网络通信的方案,WFP的框架非常庞大,在RING3和RING0各有一套类似的函数,令人兴奋的是,即使在R3使用WFP,也可以做到全局拦截访问网络。由于WFP的范围太广,实在难以一言概括,感...

墨鱼菜鸡 1033

WebRTC音频QoS方法一(NetEQ之音频网络延时DelayManager计算)

一、整体思路 不像视频一帧数据那么大,音频一帧数据包都比较小,UDP的1500个字节完全可以装满一帧。所以音频在发送端的发送时间间隔是按照固定的打包时长节奏发送的。如上图以30ms打包时长为例,ABCD四个报文的发送时间间隔都是30ms。若没有网络影响,接收端的包间间隔也是30ms,音频播放清晰流畅。 1)延时定义: 二、实现原理 三、参考 ...

CrystalShaw的博客 5537

【理论&实战篇】大模型RAG技术详解(一)-基础篇

RAG的初衷是为了增强大模型的事实性、时效性,减少幻觉,引入专业知识优化生成回复,是一种结合了信息检索技术与语言生成模型的人工智能技术。通过,并将其作为提示(Prompt)输入给大模型(LLM),来。

qq_41375680的博客 374

CodeBuddy 接入 MCP,一键生成网站!

2024 年 11 月,Anthropic 公司搞了个挺有意思的新玩意 - Model Context Protocol(模型上下文协议)简称为 MCP 协议。简单来说,它就是给 AI 和各类工具数据之间搭了个标准化的”桥梁”,让开发者不用再为对接问题头疼了。mcp.so如下图所示,这是 mcp.so 网站中的 MCP Server。使用百度/高德地图分析旅线计算时间接 Puppeteer 自动操作网页使用 Github/Gitlab 让大模型接管代码仓库。

悟空聊架构的专栏 1946

webrtc QOS方法(汇总篇)

看到一组很有价值分析QOS的文章,特意转载过来 原文:https://blog.youkuaiyun.com/CrystalShaw/article/details/80432267 感谢楼主   目前总结出webrtc用于提升QOS的方法有: NACK、FEC、SVC、JitterBuffer、IDR Request、PACER、Sender Side BWE、VFR(动态帧率调整策略)。 这几种方...

老衲不出家 2308

基于Simulink的电机驱动逆变器仿真

本文完成了电机驱动逆变器的Simulink多层级仿真平台搭建,实现了:✅ 构建了从理想到器件级的逆变器模型体系✅ 实现了Si/SiC损耗精确计算与结温预测✅ 建模了母线寄生参数、死区效应、栅极驱动等关键非理想特性✅ 支持故障注入与保护策略验证✅ 集成了热管理、EMI、寿命预测与碳足迹评估。

amy_mhd的博客 87

webrtc QOS方法(概述篇):

目前总结出webrtc用于提升QOS的方法有: NACK、FEC、SVC、JitterBuffer、IDR Request、PACER、Sender Side BWE、VFR(动态帧率调整策略)、AVSync(音视频同步)、动态分辨率调整。 与NACK对应的是ACK,ACK是到达通知技术。以TCP为例,他可靠因为接收方在收到数据后会给发送方返回一个“已收到数据”的消息(ACK),告诉发送方“我已经收到了”,确保消息的可靠。NACK也是一种通知技术,只是触发通知的条件刚好的...

EveryDayOneHour的博客 1926

YOLOv8【第十一章:视频追踪与流处理篇·第3节】匈牙利算法(Hungarian Algorithm)与 KM 算法匹配机制详解!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 445

Python 爬虫 + 数据分析:社会调查数据抓取与结果可视化分析

在当今数字化时代,数据已成为推动社会发展的关键资源之一。无论是市场调研、学术研究还是政策制定,社会调查数据都扮演着至关重要的角色。通过 Python 爬虫技术,我们可以高效地获取这些数据,并结合数据分析与可视化工具,深入挖掘数据背后的价值。本文将通过一个完整的实战项目,带你掌握如何使用 Python 爬虫抓取社会调查数据,并进行可视化分析。

yansideyucsdn的博客 126

webrtc QOS方法四(Sender Side BWE)

背景介绍 BWE(Bandwidth Estimation)可能是WebRTC视频引擎中最关键的模块了。BWE模块决定视频通讯中可以发送多大码率视频不会使网络拥塞,防止视频通讯质量下降。 早期的带宽评估算法比较简单,大多是基于丢包来估计,基本的策略是逐步增加发送的数据量,直到检测到丢包为止。为了让发送端获悉网络上的丢包信息,可以使用标准的RTCP的RR来发送周期性的报告。 现代的带宽评估算法...

CrystalShaw的博客 1万+

SAP 错误消息调试之七种武器:让所有的错误消息都能被定位

目录 长生剑 - SAPGUI Where Used List 碧玉刀 - ABAP调试器观察点 霸王枪 - ABAP调试器动态断点 多情环 - ABAP代码静态扫描 孔雀翎 - SAT 离别钩 - ST05 拳头 - 迷之方法??? Jerry在2018年开始用中文在微信公众号平台上写作之前,在SAP官方社区上总共写了639篇英文博客。 其中有一篇写于2013年介绍ABAP调试技巧的博客:

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2810

WebRTC QoS处理

javascript// 调整视频编码参数degradationPreference: 'maintain-framerate', // 保持帧率优先}]});

深之JohnChen的专栏 1114

通过情感分类实例 详细介绍如果借助Huggingface平台 完成Transformers模型运行(包括配置环境-tokenizer-Model-输出头-预测)

attention_mask和padding是配套使用的,当人为去修改padding的时候,也要把attention_mask里面的参数进行修改。下载Huggingface包,Huggingface可以说是一个社区,集成了很多nlp的模型、数据集、预训练权重文件等等,并且免费,只需要pip install下载即可。那么用什么做分类就选择什么输出头,就import什么东西。代码中使用了自动分词器选择,它是由checkpoint指定的预训练模型关联的,不用我们自己选择tokenizer,它自动帮我们选择好了。

LZL2020LZL的博客 1136

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

WebRTC简单实用的Qos优化

   WebRTC作为实时通信的核心技术,其服务质量(QoS)直接影响用户体验。本文将介绍一些简单而实用的WebRTC QoS优化策略,帮助开发者提升音视频通话质量。

程序猿老樊的博客 1679

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

metaRTC/webRTC QOS 方案与实践

质量服务(QOS/Quality of Service)是指利用各种技术方案提高网络通信质量的技术,拥塞控制是各种技术的数据基础,丢包恢复解决丢包问题,抗乱序抖动解决网络乱序抖动问题,流量控制解决平顺发送数据/数据超带宽负载/延时问题。

metaRTC的博客 3705

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

上一篇: webrtc代码走读一(视频参数配置汇总)
下一篇: X264算法参数七(降低首包延时参数调整)
CrystalShaw
CrystalShaw 领域专家: 网络协议与安全技术领域 领域专家: 网络协议与安全技术领域
博客等级 码龄9年 926粉丝 195原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值