webrtc 拥塞控制相关
RFC8836 对实时交互式音视频应用的拥塞控制算法需求进行了较为全面的总结
- 延迟 拥塞控制算法应该尽可能降低延时,尤其是算法本身引入的延时。与此同时仍然需要提供可用的带宽水平。
-吞吐率:在相应场景下吞吐率应尽可能高。 - 公平性:拥塞控制算法应该能够和其他实时流量和 TCP 流量公平地共享链路带宽。
- 避免“饿死”:媒体流在与 TCP 流竞争中不应被“饿死”,也不能把 TCP 流“饿死”。
- 收敛速度:在媒体流启动阶段尽可能快地收敛到稳定状态。
- 网络支持:算法不应要求特殊网络特性支持。
- 稳定性:算法应该在媒体流变化时保持稳定,比如媒体流暂时的传输中断
- 快速响应:算法应该快速响应网络环境的变化,比如瓶颈带宽变化、链路延时变化等。
所以
一是如何快速准确地进行网络拥塞探测;
二是采取适当的拥塞应对措施尽量避免拥塞以及尽可能快地从拥塞状态恢复
基于丢包的算法(Loss-based) 为了探测链路容量而不断增加发送带宽,直至丢包事件发生
基于延时的算法(Delay-based) 对延时的测量来判断网络拥塞, 重点考虑需求总结中的避免“饿死”问题。
基于延时的算法一般通过测量 RTT(round-trip time 往返延时)或者 OWD(one-way delay 单向延时)来判断拥塞。
RTT 测量比较直观,但是由于是测量双向延时的总体情况,因此反向的延时变化会对媒体流方向的网络拥塞判断造成干扰。OWD 延时观测则避免了这个问题。如下图所示:
OWD 通过观测发送间隔与接收间隔的变化来判断网络排队延时的状况。
根据发送端所采取的其他弱网对抗策略,可能的速率调节手段包括调节音视频编码器速率、调节重传速率、调节 FEC 冗余度等.
webrtc 1.0 REMB
- 发送端采用基于丢包
丢包率<2%,增加发送带宽 8%;
丢包率 2% ~ 10%,发送带宽保持不变;
丢包率>10%,降低发送带宽(1-0.5*丢包率)。 - 接收端采用基于延时的算法
通过统计单向延时变化并通过卡尔曼滤波对当前的传输延时进行估计,再结合当前的实际接收带宽评估一个最佳的目标带宽,通过 RTCP 消息反馈给发送端。发送端取两个算法结果的最小值作为最终的目标带宽。
webrtc 2.0 gcc
新的框架改进了网络延时估计算法,通过对单向延时变化数据进行线性回归分析,评估当前网络排队延时变化趋势,即判断出延时正在增加、没有变化、正在降低三种趋势,再结合当前发送速率,给出最佳目标带宽估计。
除了改进拥塞探测算法,新的框架也引入了主动带宽探测机制,优化了整个拥塞控制算法的性能,经过比较,在启动阶段收敛速度、网络环境变化的响应速度上都有比较明显的改进
丢包重传ARQ
首次请求延时:应结合其他策略考虑发现丢包时是否立即请求,比如结合 FEC 策略考虑。
重复请求间隔考虑:同一个数据包重复请求间隔要大于当前 RTT。
请求次数限制:结合当前 RTT 与容忍的最大延时来计算。
发送端重传带宽限制:重传带宽作为总传输带宽的一部分,不能超出总体带宽限制。
重传包回传机制:建议采用单独的 RTP 码流发送,利于丢包率统计与重传带宽计算。
前向纠错
ULPFEC:ULP(Uneven Level Protection,不均等保护)根据数据包重要程度使用不同级别的保护策略。
FlexFEC:Flexible Forward Error Correction,此标准在 RTP 协议框架下定义了交织与非交织的奇偶校验 FEC 编码包格式。
丢包重传和FEC 配合
抖动延时的估计,Google 在其 WebRTC 框架中用了两种方法
1. 音频 直方图加遗忘因子
图中的 Iat 意为间隔达到时间,WebRTC 通过对音频包到达间隔用直方图进行统计,取 95 分位数的延时时长作为音频抖动延时。
2. 视频抗抖动方面,WebRTC 采用不同于音频的抖动延时估计算法,通过对实际的帧尺寸变化与延时变化数据的测量与统计,利用卡尔曼滤波器动态地进行最优抖动延时估计。
融云说的
拥塞控制方面,基于 Google GCC 算法进行改进。除了统计单向延时变化进行拥塞趋势判断之外,同时对丢包模式进行进一步分析,提升带宽预测的准确率。
抗丢包方面,基于 FlexFEC 框架,采用高修复能力的 FEC 编码,并进行综合调优来提升抗丢包能力。
优化 ARQ 与 FEC 机制的配合,力求抗丢包付出的代价最小。抗抖动方面,采用场景适应性更强的抖动延时估计方法,力求提升流畅度的同时减少延时。
webrtc 拥塞控制相关的更多相关文章
- webRTC中音频相关的netEQ(五):DSP处理
上篇(webRTC中音频相关的netEQ(四):控制命令决策)讲了MCU模块是怎么根据网络延时.抖动缓冲延时和反馈报告等来决定给DSP模块发什么控制命令的.DSP模块根据收到的命令进行相关处理,处理简 ...
- webRTC中音频相关的netEQ(四):控制命令决策
上篇(webRTC中音频相关的netEQ(三):存取包和延时计算)讲了语音包的存取以及网络延时和抖动缓冲延时的计算,MCU也收到了DSP模块发来的反馈报告.本文讲MCU模块如何根据网络延时.抖动缓冲延 ...
- webRTC中音频相关的netEQ(三):存取包和延时计算
上篇(webRTC中音频相关的netEQ(二):数据结构)讲了netEQ里主要的数据结构,为理解netEQ的机制打好了基础.本篇主要讲MCU中从网络上收到的RTP包是怎么放进packet buffer ...
- webRTC中音频相关的netEQ(二):数据结构
上篇(webRTC中音频相关的netEQ(一):概述)是netEQ的概述,知道了它主要是用于解决网络延时抖动丢包等问题提高语音质量的,也知道了它有两大单元MCU和DSP组成.MCU 主要是把从网络收到 ...
- webRTC中音频相关的netEQ(一):概述
上篇文章(语音通信中终端上的时延(latency)及减小方法)说从本篇开始会切入webRTC中的netEQ主题,netEQ是webRTC中音频技术方面的两大核心技术之一(另一核心技术是音频的前后处理, ...
- TCP系列39—拥塞控制—2、拥塞相关算法及基础知识
一.拥塞控制的相关算法 早期的TCP协议只有基于窗口的流控(flow control)机制而没有拥塞控制机制,因而易导致网络拥塞.1988年Jacobson针对TCP在网络拥塞控制方面的不足,提出了& ...
- 基于webrtc的资源释放问题(二)
基于webrtc的资源释放问题(二) ——建立连接的过程中意外中断 应用背景: 我们在打电话的时候会不会遇到这种情况?打电话的时候未接通之前挂掉了电话,或者在接通之后建立的连接的过程中挂掉电话? 特别 ...
- 基于webrtc的资源释放问题(一)
基于webrtc的资源释放问题(一) ——重复释放webrtc的相关资源 背景: 视频通讯大都只是作为一个功能存在于各种应用中,比如微信,qq .既然只是应用的一部分,这样就涉及反复的开启和关闭视频通 ...
- Android IOS WebRTC 音视频开发总结(四四)-- webrtc图书
本文主要介绍即将出版的webrtc图书相关信息,支持原创,转载必须说明出处,更多详见www.rtc.help --------------------------------------------- ...
- WebRTC 音视频开发
WebRTC 音视频开发 webrtc Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译 ...
随机推荐
- 病程极短(≤16周)的495例未分化关节炎患者随访2年的结局[EULAR2015_SAT0055]
病程极短(≤16周)的495例未分化关节炎患者随访2年的结局 SAT0055 TWO-YEAR OUTCOME IN 495 PATIENTS WITH UNDIFFERENTIATED ARTH ...
- spring boot 3.x 配置spring security
参考文章:https://spring.io/guides/gs/securing-web/ 导入maven <dependency> <groupId>org.springf ...
- vue学习笔记:组件
组件是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码,说白了就是一组可以重复使用的模板.组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都可以抽 ...
- Servlet-随机生成验证码(初级版本)
Servlet之 验证码(初级) 需求: 使用Servlet向页面响应验证码,并且点击验证码或者"看不清楚,换一张"可以刷新验证码 需求分析: Servlet中需要完成的需求: 验 ...
- Installing Superset最新版本安装(笔记)
官方文档:https://superset.apache.org/docs/installation/installing-superset-from-scratch 由于在centos上安装有各种问 ...
- vue 使用路由component: () =>import (‘ ‘)报错解决办法
今天帮朋友调代码的时候,在人家的mac上面,项目没有任何错误,到我这里就出现 component: () =>import (' ')加载路由错误. 发现是import处报错, import 属 ...
- docker容器SSH服务自启动
使用ubuntu容器,会在容器内安装ssh服务,但是会发现当容器重启后,如何实现ssh服务自动重启呢?可以使用Dockerfile参看此处 ,本文介绍一种在docker容器中进行配置的方法 安装ssh ...
- element的upload手动submit前动态设置上传请求地址
标签地址绑定一个变量 动态修改上传请求地址代码: nextTick是DOM更新后触发,不使用nextTick直接submit,上传地址仍然会使用初始url地址 _this = this; this.u ...
- Dockerfile自定义镜像
一.镜像结构 镜像是将应用程序及其需要的系统函数库.环境.配置.依赖等打包而成 以MySQL为例: 如上图所示,镜像由多个层(Layer)构成,每个层包含不同的内容. 另外,某些层可以单独抽出,组成一 ...
- 题解[CF575E]Spectator_Riots
题意 一个球场,可以看作 \(10^5\times10^5\) 的矩形,每个位置都是一个整点.一个位置 \((x,y)\) 位于球场内当且仅当 \(x\in[0,10^5]\and y\in[0,10 ...