【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.hqwc.cn/news/413646.html

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

相关文章

用Go plan9汇编实现斐波那契数列计算

斐波那契数列是一个满足递推关系的数列&#xff0c;如&#xff1a;1 1 2 3 5 8 ... 其前两项为1&#xff0c;第3项开始&#xff0c;每一项都是其前两项之和。 用Go实现一个简单的斐波那契计算逻辑 func fib(n int) int {if n 1 || n 2 {return 1}return fib(n-1) fib(n-2) …

RT-Thread experimental 代码学习(1)thread_sample

RTOS的最基础功能是线程。 线程的调度是如何工作的&#xff1f;RT-thread官方的实验文档是最好的参考。 老规矩&#xff0c;先放法国人doxygen。 thread_sample 代码的调用关系图 有意思的是&#xff0c;RT有两种创建线程的方式 - 静态和动态&#xff0c;粗略的理解是&…

Qt弹框展示

1.相关说明 文件选择弹框、目录选择弹框、保存文件弹框、颜色选择弹框、字体选择弹框、进度条弹框、输入对话框、标准消息框等 2.相关界面 3.相关代码 #include "widget.h" #include "ui_widget.h" #include <QFileDialog> #include <QProgressD…

Windows下安装alipay-sdk-python时,pycrypto安装报错问题处理

1、安装alipay-sdk-python 时&#xff0c;保存内容如下。 Building wheels for collected packages: pycryptoBuilding wheel for pycrypto (setup.py) ... error error: subprocess-exited-with-error python setup.py bdist_wheel did not run successfully.│ exit c…

Conway的生命游戏

文章目录 主要内容一.Conway的“生命游戏”1.玩法代码如下&#xff08;示例&#xff09;: 总结 主要内容 一.Conway的“生命游戏” 1.玩法 Conway的“生命游戏”是细胞自动机的一个例子&#xff1a;一组规则控制由离散细胞组成的区域的行为。在实践中&#xff0c;它会创建一个…

【办公类-21-02】20240118育婴员操作题word打印2.0

作品展示 把12页一套的操作题批量制作10份&#xff0c;便于打印 背景需求 将昨天整理的育婴师操作题共享&#xff0c; 因为题目里面有大量的红蓝颜色文字&#xff0c;中大班办公室都是黑白单面手动翻页打印。只有我待的教务室办公室有彩色打印机打印&#xff08;可以自动双面…

Gitlab添加ssh-key报500错误处理

Gitlab添加ssh-key报500错误 一、查看日志 发现Errno::Enoent(No such file or derectory -ssh): rootasu1:/home/caixin# tail -f /var/log/gitlab/gitlab-rails/production.log二、分析 根据日志提示&#xff0c;好像是缺少文件或目录&#xff0c;后面有个ssh,难首是依赖s…

CVE重要通用漏洞复现java php

在进行漏洞复现之前我们需要在linux虚拟机上进行docker的安装 我不喜欢win上安因为不知道为什么总是和我的vmware冲突 然后我的kali内核版本太低 我需要重新安装一个新的linux 并且配置网络 我相信这会话费我不少时间 查看版本 uname -a 需要5.5或以上的版本 看错了浪…

Leetcode2182. 构造限制重复的字符串

Every day a Leetcode 题目来源&#xff1a;2182. 构造限制重复的字符串 解法1&#xff1a;贪心 双指针 我们先用一个长度为 26 的数组 cnt 统计字符串 s 中每个字符出现的次数&#xff0c;然后从大到小枚举字母表的第 i 个字母&#xff0c;每次取出最多 min⁡(cnt[i], re…

React配置src根目录@

文章目录 1.打开webpack配置文件2.配置webpack 1.打开webpack配置文件 yarn eject or npm run eject 如果报错了记得提前 git commit一下 2.配置webpack 找到 webpack.config.js 文件在 webpack.config.js 文件中找到 alias 配置在alias里添加: path.resolve(src) , 或者 : pa…

密码学学习笔记(二十四):TCP/IP协议栈

TCP/IP协议栈的基础结构包括应用层、传输层、网络层、数据链路层和物理层。 应用层 应用层位于TCP/IP协议栈的最顶层&#xff0c;是用户与网络通信的接口。这一层包括了各种高级应用协议&#xff0c;如HTTP&#xff08;用于网页浏览&#xff09;、FTP&#xff08;用于文件传输…

Unity 编辑器篇|(九)编辑器美化类( GUIStyle、GUISkin、EditorStyles) (全面总结 | 建议收藏)

目录 1. GUIStyle1.1 参数总览1.2 样式代码 2. GUISkin2.1 参数总览2.2 创建自定义Skin 3. EditorStyles2.1 参数总览1.2 反射获取所有EditorStyles 1. GUIStyle GUIStyle是一个用于定制GUI控件样式的类&#xff0c;它包含了控件的外观属性&#xff0c;如字体、颜色、背景等。…