【WebRTC】拥塞控制 GCC 类图

news2024/12/23 14:29:50

请添加图片描述

GoogCcNetworkController : 整个 congestion_controller 模块的中心类,是对外的接口

AcknowledgedBitrateEstimatorInterface

AcknowledgedBitrateEstimator : 估算当前的吞吐量。

BitrateEstimator : 使用滑动窗口 + 卡尔曼滤波计算当前发送吞吐量。

RobustThroughputEstimator:更鲁棒的ACK码率(通过一段时间ack包数计算当前的吞吐量)估计。

Alr

ALR,即 Application Limit Region,即应用本身存在一些受限(非网络带宽导致),会导致发送码率相较于平常有较大降低。

突然存在一个较低的发送码率会导致我们的估计带宽存在一些偏差,因此我们需要对这样的一个场景去做检测和区别。

一般来说导致ALR的原因如:系统负载比较高,采集/编码帧率降低等等。

ALR的检测也比较简单,根据一段时间内发送的平均码率来判断,当前的码率是否偏离了正常的码率。

这个检测使用到了 pacing 中的 IntervalBudget 来检测,这是一个漏桶算法,每次发送数据消耗 budget,随着时间流逝增加 budget,最后通过查看 budget 剩余比例来判断发送数据量是否足够。

AlrDetector : 探测实际码率是否远低于目标码率

基于Loss的带宽估计

由于历史原因,基于丢包的估计在发送端,基于延迟(REMB)的估计在接收端。

因此基于丢包的代码在 SendSideBandwidthEstimation 里,基于延迟(REMB)的估计在 Remote 里。

有了新的基于延迟(Transport-CC)的估计,只能放到 DelayBasedBwe 里。

SendSideBandwidthEstimation: 发送端带宽评估。

  • 结合了 LossBasedBandwidthEstimation 和 DelayBasedBwe 的评估结果,还有接收端通过 RTCP REMB/TMMBR 消息报告的带宽评估值,通过这几个值的比较得到 current_target_,current_target_ 就是接收端的带宽评估值。这个值最终会作用到pacing模块还有编码模块。
  • 90版本(版本号通过src目录下的README.chromium查看)的webrtc的带宽评估都是通过发送端来实现的了,听说以前版本的 delay_based 的算法是由接收端实现,得到带宽评估值后再通过 RTCP REMB 消息反馈给发送端。

LossBasedBandwitdhEstimation : 基于丢包的带宽评估

基于延迟的带宽估计

DelayBasedBwe : 基于延迟预估码率

InterArrival : 计算包组的发送时间差,接受时间差,字节差等。不会得出拥塞结果。

SendTimeGroup : 包组的定义,WebRTC 以包组进行划分计算延迟。

TrendlineEstimator : 将 InterArrival 的输出当作输入,使用最小二乘法计算延迟趋势,评估网络状态。

AimdRateControl : 通过 TrendLine 预测出来的网络状态对码率进行aimd方式调整。

其他

ProbeBitrateEstimator : 根据 feedback 计算探测码率,PacingController 中会将包按照 cluster 进行划分,transport-CC 报文能得到包所属的 cluster 以及发送和接收信息,通过发送和接收的数据大小比判断是否到达链路上限从而进行带宽探测 (探针算法)

ProbeController : 探测控制器,通过目标码率判断下次是否探测,探测码率大小

CongestionWindowPushbackController : 基于当前的 rtt 设置一个时间窗口,同时基于当前的码率设置当前时间窗口下的数据量,通过判断当前窗口的使用量,如果使用量过大的时候,降低编码时使用的目标码率,加速窗口消退,减少延迟

NetworkStateEstimator 、 NetworkStatePredictor : 此两者属于待开发类,只是在代码中有,但是还没开发完,没用上

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Android App】实战项目之仿拼多多的直播带货(附源码和演示 超详细必看)

需要源码请点赞关注收藏后评论区留言私信~~~ 近年来电商业态发生了不小的改变,传统的电商平台把商品分门别类,配上精美的图文说明供消费者挑选,新潮的电商平台则请来明星网红,开启直播秀向广大粉丝推销商品,往往一场直…

微服务应对雪崩的容错方案

引言 书接上篇 微服务绕不过的坎-服务雪崩 ,玩微服务不可避免的问题:服务雪崩,那为了应付服务雪崩问题,需要做啥预防性操作呢?答案是:做好容错保护 容错方案 前面说了,要防止雪崩的扩散&…

[附源码]计算机毕业设计springboot疫情期间小学生作业线上管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Android自定义视图

View 自定义视图主要涉及四个方面:绘图、交互、性能和封装 绘图 主要涉及两个对象:画布(Canvas)和画笔(Paint),画布主要解决画什么的问题,在画布上可以绘制各种各样的图形&#x…

《CTFshow - Web入门》04. Web 31~40

Web 31~40web31知识点题解web32知识点题解web33知识点题解web34知识点题解web35知识点题解web36知识点题解web37知识点题解web38知识点题解web39知识点题解web40知识点题解web31 知识点 这里依旧可以用到 web29 的方法: 嵌套eval逃逸参数 当然,能多学…

# 智慧社区管理系统-基础信息管理-06抄表管理

一后端 1:entity package com.woniu.community.entity;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;Data AllArgsConstructor NoArgsConstructor public class Records {private int id;private int typeId;private Double num…

博安生物更新招股书:上半年亏1.5亿 绿叶制药与建银聚源是股东

雷递网 雷建平 12月3日山东博安生物技术股份有限公司(简称:“博安生物”)日前再次递交招股书,并更新招股书,准备在香港上市。上半年期内亏损1.53亿元博安生物是绿叶制药集团的附属公司,于2013年成立&#x…

远程桌面树莓派【内网穿透】

本篇文章主要分享如何在公网环境下,远程桌面连接家里的树莓派。 远程桌面环境,我们选择通过XRDP来实现,它内部使用的是windows远程桌面的协议。 而由于现在普遍处于大内网环境,绝大部分人都没有公网IP,所以我们这里用…

(9)点云数据处理学习——Global registration(全局注册)

1、主要参考 (1)官网的地址 Global registration — Open3D 0.16.0 documentation 2、作用和原理 2.1个人理解 PS理解:(1)ICP的作用是,2个点云数据在初步转换关系(已知不精确)的…

【关系抽取】TPLinker:单阶段联合抽取,并解决暴漏偏差

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

车载GNSS/INS/LiDAR坐标系定义与理解

目录一、基本坐标系1.1 地心惯性坐标系(Inertial coordinate system,i系)1.2 地心地固坐标系(Earth-Centered, Earth-Fixed,e系)1.3 导航坐标系(Navigation,n系)1.4 车体…

[附源码]计算机毕业设计springboot疫苗药品批量扫码识别追溯系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

一、领域驱动设计核心思想与设计过程

一、软件发展的必然规律 1、软件是对真是世界的模拟,但真实世界软件十分复杂。 2、人在认识真实世界的时候总是有一个从简单到复杂的过程 3、软件需求的变更成为一种必然的事情,并且总是由简单向复杂转变 4、初期软件的业务逻辑十分简单清晰命令&#x…

C语言画直方图

前言 最近在看K&R的《C语言程序设计语言》这本书,第一单元的练习13要求画一个统计单词长度的直方图,这里忽略了计算单词长度的代码,假设已知单词长度存入一个digit数组中,根据这个数组画水平直方图和垂直直方图。实话说&…

C++11新特性-原始字面量

当我们书写文件路径的时候,会发现,文件路径无法正确输出,如下: 这是因为反斜杠本身就是转义的意思,如果想要输出反斜杠则需要两个反斜杠,如下: 当然这只是其中一种解决方法,还有一种…

实战项目如何抵御即跨站脚本(XSS)攻击

一、XSS攻击的危害 XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、VBScript、ActiveX、Flash或者甚至是…

思派健康通过上市聆讯:F轮估值17亿美元 腾讯是大股东

雷递网 雷建平 12月3日思派健康科技日前通过聆讯,准备在香港上市。思派健康早在2021年8月就已经递交招股书,这是时隔一年多后,这之前第三次递交招股书。这也意味着,时隔一年多后,思派健康终于要上市了。上半年亏损3.5亿…

SpringSecurity(八)【会话管理】

八、会话管理 简介 当浏览器调用登录接口登录成功之后,服务端会和浏览器之间创建一个会话(Session),浏览器在每次发送请求时都会携带一个 SessionId,服务端则根据这个 SessionId 来判断用户身份。当浏览器关闭之后&…

从硬件角度看服务器性能调优

bios整体配置bios系统设置Hyper Thread开启超线程,设置后lscpu命令Thread(s) per core 值显示为 2。超线程可以理解为CPU的虚拟化,一颗物理CPU并行执行两条流水线指令。确认处理器基本频率及睿频频率,部分处理器基础频率低,但是睿…

看完了你还能不懂JAVA内存模型(JMM),我输了

前言 开篇一个例子,我看看都有谁会?如果不会的,或者不知道原理的,还是老老实实看完这篇文章吧。 Slf4j(topic "c.VolatileTest") public class VolatileTest { static boolean run true; public static void main(S…