【webrtc】GCC 7: call模块创建的ReceiveSideCongestionController

  • webrtc 代码学习(三十二) video RTT 作用笔记

从call模块说起

在这里插入图片描述

在这里插入图片描述

call模块创建的时候,会创建

  • src\call\call.h
    在这里插入图片描述
  • 线程:
    在这里插入图片描述

统计

  const std::unique_ptr<CallStats> call_stats_;

SendDelayStats : 发送延迟统计

  const std::unique_ptr<ReceiveTimeCalculator> receive_time_calculator_;const std::unique_ptr<SendDelayStats> video_send_delay_stats_;const Timestamp start_of_call_;

接收统计

  // TODO(bugs.webrtc.org/11993) ready to move stats access to the network// thread.ReceiveStats receive_stats_ RTC_GUARDED_BY(worker_thread_);SendStats send_stats_ RTC_GUARDED_BY(send_transport_sequence_checker_);

码率分配

  const std::unique_ptr<BitrateAllocator> bitrate_allocator_;

码率

  // `last_bandwidth_bps_` and `configured_max_padding_bitrate_bps_` being// atomic avoids a PostTask. The variables are used for stats gathering.std::atomic<uint32_t> last_bandwidth_bps_{0};std::atomic<uint32_t> configured_max_padding_bitrate_bps_{0};

音视频的网络状态

  NetworkState audio_network_state_ RTC_GUARDED_BY(worker_thread_);NetworkState video_network_state_ RTC_GUARDED_BY(worker_thread_);// TODO(bugs.webrtc.org/11993): Move aggregate_network_up_ over to the// network thread.bool aggregate_network_up_ RTC_GUARDED_BY(worker_thread_);

nack ? NackPeriodicProcessor

// Schedules nack periodic processing on behalf of all streams.NackPeriodicProcessor nack_periodic_processor_;

音视频流 :处理同步?

在这里插入图片描述

接收测带宽估计?

  ReceiveSideCongestionController receive_side_cc_;

ReceiveSideCongestionController 会绑定remb 等rtcp包

在这里插入图片描述

  • 作为一个module 周期执行:
    在这里插入图片描述

RtpStreamReceiverController 解析rtp rtcp的

在这里插入图片描述

在这里插入图片描述

ssrc

在这里插入图片描述

发送侧带宽估计

  // Note that `task_safety_` needs to be at a greater scope than the task queue// owned by `transport_send_` since calls might arrive on the network thread// while Call is being deleted and the task queue is being torn down.const ScopedTaskSafety task_safety_;// Caches transport_send_.get(), to avoid racing with destructor.// Note that this is declared before transport_send_ to ensure that it is not// invalidated until no more tasks can be running on the transport_send_ task// queue.// For more details on the background of this member variable, see:// https://webrtc-review.googlesource.com/c/src/+/63023/9/call/call.cc// https://bugs.chromium.org/p/chromium/issues/detail?id=992640RtpTransportControllerSendInterface* const transport_send_ptr_RTC_GUARDED_BY(send_transport_sequence_checker_);// Declared last since it will issue callbacks from a task queue. Declaring it// last ensures that it is destroyed first and any running tasks are finished.const std::unique_ptr<RtpTransportControllerSendInterface> transport_send_;
  bool is_started_ RTC_GUARDED_BY(worker_thread_) = false;RTC_NO_UNIQUE_ADDRESS SequenceChecker sent_packet_sequence_checker_;absl::optional<rtc::SentPacket> last_sent_packet_RTC_GUARDED_BY(sent_packet_sequence_checker_);RTC_DISALLOW_COPY_AND_ASSIGN(Call);

call 模块可提供rtt bwe 等信息

在这里插入图片描述

m114 中 ReceiveSideCongestionController 依然存在

在这里插入图片描述

ReceiveSideCongestionController 用于做带宽估计

  • WebRTC拥塞控制原理之一基本介绍

  • 2022的版本,只在接收端做估计即可?
    在这里插入图片描述

对外API封装在ReceiveSideCongestionController类中,顾名思义这一个基于接收端的拥塞控制算法。ReceiveSideCongestionController 类的构造函数,用于创建一个接收端拥塞控制器对象,以保证数据传输的稳定性和可靠性。该类对象需要提供时钟、传输反馈信息发送函数、REMB 消息发送函数和网络状态估计器等信息,用于进行拥塞控制和比特率调整等操作。

在这里插入图片描述

  • RemoteEstimatorProxy : 远程估计代理
  • RembThrottler::RembSender remb_sender, // REMB发送器
  • NetworkStateEstimator* network_state_estimator); // 网络状态估计器

ReceiveSideCongestionController 对于接收流做拥塞控制

  • 对于发送侧的带宽估计,这个类可以直接代理每个接收到的rtp包的信息 发送给发送者。
  • 对于接收测的带宽估计,这个类自己就可以本地估计并且发送结果给发送端。

在这里插入图片描述

  • LearningWebRTC: 拥塞控制 大神也是这么认为的:

  • 在接收端:ReceiveSideCongestionController则把包的大小和到达时间转发给RemoteBitrateEstimatorProxy,然后以RTCP RTPFB包发给发送端。

  • 在发送端:收到RTCP RTPFB包后,转给SendSideCongestionController并在DelayBasedBwe里完成带宽估计。

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

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

相关文章

WebGL中开发VR(虚拟现实)应用

WebGL&#xff08;Web Graphics Library&#xff09;是一种用于在浏览器中渲染交互式3D和2D图形的JavaScript API。要在WebGL中开发VR&#xff08;虚拟现实&#xff09;应用程序&#xff0c;您可以遵循以下一般步骤&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&a…

手把手带你死磕ORBSLAM3源代码(五十一) FrameDrawer.cc DrawTextInfo

目录 一.前言 二.代码 2.1完整代码 2.2 cv::Mat::zeros介绍 2.3 cv::putText介绍 2.4 cv::Point介绍

word vba自动化排版-设置标题模板样式、标题、正文、图表、页面、上下标等设置、删除空白行、删除分页符分节符、删除空格等

word vba自动化排版-设置标题模板样式、标题、正文、图表、页面、上下标等设置、删除空白行、删除分页符分节符、删除空格等 目录 1.前提 2.思路 3.word中设置 4.效果图 5.经验教训 6.直接上代码 1.前提 需求&#xff1a;工作中涉及自动识别大量的文字报告&#xff08;o…

实验笔记之——基于TUM-RGBD数据集的SplaTAM测试

之前博客对SplaTAM进行了配置&#xff0c;并对其源码进行解读。 学习笔记之——3D Gaussian SLAM&#xff0c;SplaTAM配置&#xff08;Linux&#xff09;与源码解读-CSDN博客SplaTAM全称是《SplaTAM: Splat, Track & Map 3D Gaussians for Dense RGB-D SLAM》&#xff0c;…

NAT配置

IPV4地址中在A/B/C三的单播地址中&#xff0c;还存在私有ip 与公有的区分&#xff1b; 公有&#xff1a;具有全球唯一性&#xff0c;可以在互联网中通讯&#xff0c;需要付费使用 私有&#xff1a;具有本地唯一性&#xff0c;不能在互联网中通信&#xff0c;无需付费使用 私…

在红墙下的冬日幻想:Pygame库实现下雪动画

在红墙下的冬日幻想&#xff1a;借助Pygame库实现下雪动画 寒风轻拂着故宫红墙&#xff0c;我静静地思念着你。这个冬天&#xff0c;借助 Python 的 Pygame 库&#xff0c;我为你呈现一场梦幻般的下雪动画&#xff0c;让雪花在故宫红墙的映衬下在屏幕上翩翩起舞。 准备 首先…

【C++】:STL序列式容器list源码剖析

一、list概述 总的来说&#xff1a;环形双向链表 特点&#xff1a; 底层是使用链表实现的&#xff0c;支持双向顺序访问 在list中任何位置进行插入和删除的速度都很快 不支持随机访问&#xff0c;为了访问一个元素&#xff0c;必须遍历整个容器 与其他容器相比&#xff0c;额外…

【AI预测】破晓未来教育市场:如何精准定位、精选师资并启动高潜力培训项目

在当前全球化和技术快速迭代的背景下&#xff0c;各行业正面临巨大的人才缺口和新的发展机遇。 全球化浪潮&#xff0c;各行业如同搭乘上了一列高速列车&#xff0c;不断深入探索并广泛应用AI技术以提升产业效率、创新服务模式。在智能制造领域&#xff0c;工业4.0时代犹如给…

理解pytorch系列:transpose是怎么实现的

在PyTorch中&#xff0c;transpose()是一种操作&#xff0c;它交换张量中两个指定维度的位置。实现这一点的关键在于不实际移动数据&#xff0c;而是通过改变张量的元数据&#xff08;包括步长&#xff08;stride&#xff09;和尺寸&#xff08;size&#xff09;&#xff09;来…

【leetcode】消失的数字

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家刷题&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 1.暴力求解法2.采用异或的方法&#xff08;同单身狗问题&#xff09;3.先求和再减去数组元素 点击查看…

react的redux和router的使用案例讲解

react的redux和router的使用案例讲解 安装依赖&#xff1a; 首先&#xff0c;你需要安装一些必要的依赖项。使用以下命令安装Redux、React Redux和React Router&#xff1a; npm install redux react-redux react-router-dom配置Redux Store&#xff1a; 创建一个Redux store来…

Linux grep命令(grep指令)grep --help各选项介绍(待更)

文章目录 grep --help英文中文 使用示例-E, --extended-regexp&#xff1a;此选项表示模式为扩展正则表达式。-F, --fixed-strings&#xff1a;此选项表示模式被视为固定字符串而不是正则表达式。-G, --basic-regexp&#xff1a;此选项表示模式为基础正则表达式。这是默认的模式…

Rust之旅 - Rust概念、Windows安装、环境配置

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 系列专栏目录 [Java项目…

【C++初阶】第二站:类与对象(上) -- 上部分

前言: C学习的第二站&#xff1a;类和对象(上)文章的上半部分,知识点:面向过程和面向对象初步认识、类的引入、类的定义、类的访问限定符及封装、类的作用域、类的实例化. 目录 面向过程和面向对象初步认识 类的引入 类的定义 类的访问限定符及封装 访问限定符 封装 类的…

深入理解Linux文件系统

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;晴る—ヨルシカ 0:20━━━━━━️&#x1f49f;──────── 4:30 &#x1f504; ◀️ ⏸ ▶️ ☰ &…

防火墙技术

防火墙&#xff08;英语&#xff1a;Firewall&#xff09;技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备&#xff0c;帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障&#xff0c;以保护用户资料与信息安全性的一种技术。 防火墙技术的功能主要在于及…

springboot log4j配置xml实例说明

提供样本配置代码 xml <?xml version"1.0" encoding"UTF-8"?> <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --> <!-- status log4j2内部日志级别 --> <configurat…

ARP协议及ARP欺骗

ARP英文全称是Address Resolution Protocol&#xff0c;中文称为地址解析协议&#xff0c;是根据IP地址获取物理地址的一个TCP/IP协议。 ARP欺骗全称为ARP spoofing&#xff0c;又称ARP毒化 (ARPpoisoning&#xff0c;网上上多译为ARP病毒)或ARP攻击&#xff0c;是针对以太网地…

开发需求总结9-el-tree获取选中节点,节点全选时返回被全选子级的父节点,未全选则返回被选中的节点

目录 需求描述 代码实现&#xff1a; 需求描述 需要获取树组件选中的节点&#xff0c;假如父节点被选中&#xff08;该节点全选&#xff09;&#xff0c;即只返回父节点的数据&#xff0c;如父节点未被全选&#xff0c;则正常返回被选中节点的数据。 示例一&#xff1a; 如上图…

【学习记录24】vue3自定义指令

一、在单vue文件中直接使用 1、html部分 <template><divstyle"height: 100%;"v-loading"loading"><ul><li v-for"item in data">{{item}} - {{item * 2}}</li></ul></div> </template> 2、js…