当前位置: 首页 > article >正文

WebRTC Probe 探测码率、transport-cc作用

为什么需要探测带宽?
答:拥塞控制的AIMD算法,加法增加太慢了,网络很好的时候,需要很快探测到最大带宽。

一  ProbeBitrateEstimator

我看其它文章说,是根据RTCP Feedback transport-cc的ACK应答,来计算码率

具体说明下是怎么计算的,因为应答是不带长度的。

1 发送时,记录RTP包信息,比如发送时间,长度等,插入历史队列中。

2 收到应答,在历史队列中查找序列号,统计出相关的长度。

//根据RTCP Feedback transport中的ACK应答的序列号来计算的
absl::optional<DataRate> ProbeBitrateEstimator::HandleProbeAndEstimateBitrate(
    const PacketResult& packet_feedback) {

  ...
//packet_feedback.sent_packet.size怎么计算的
 cluster->size_total += packet_feedback.sent_packet.size; 
 ...
 DataSize send_size = cluster->size_total - cluster->size_last_send;
 DataRate send_rate = send_size / send_interval;
 ...
}
TransportFeedbackAdapter::AddPacket(...){
...
packet.sent.size = DataSize::Bytes(packet_info.length + overhead_bytes);
...
history_.insert(std::make_pair(packet.sent.sequence_number, packet));
}


std::vector<PacketResult>
TransportFeedbackAdapter::ProcessTransportFeedbackInner(
    const rtcp::TransportFeedback& feedback,
    Timestamp feedback_receive_time) {

for (const auto& packet : feedback.GetAllPackets()) {
    int64_t seq_num = seq_num_unwrapper_.Unwrap(packet.sequence_number());

    auto it = history_.find(seq_num);
    PacketFeedback packet_feedback = it->second;

      PacketResult result;
      result.sent_packet = packet_feedback.sent;
      result.receive_time = packet_feedback.receive_time;
      packet_result_vector.push_back(result);
}
return packet_result_vector;

}

absl::optional<DataRate> probe_bitrate =
      probe_bitrate_estimator_->FetchAndResetLastEstimatedBitrate();

二 ProbeController:探测控制

probe探测发送的数据:音视频rtp包数据,如果数据量不够,padding的数据。

GoogCcNetworkController::OnProcessInterval(
--| probe_controller_->Process(msg.at_time.ms());


probe_controller_->SetBitrates(
      min_data_rate_.bps(), GetBpsOrDefault(starting_rate_, -1),
      max_data_rate_.bps_or(-1), new_constraints.at_time.ms());


GoogCcNetworkController::MaybeTriggerOnNetworkChanged(
--| probe_controller_->SetEstimatedBitrate(
        loss_based_target_rate.bps(), at_time.ms());


ProbeController::InitiateExponentialProbing(...): 第一次是3倍, 第二次6倍。

 三  AcknowledgedBitrateEstimator:根据根据RTCP Feedback transport-cc的ACK应答,算吞吐量,即实际带宽。

class AcknowledgedBitrateEstimator
{
  std::unique_ptr<BitrateEstimator>   bitrate_estimator_;
}

// Computes a bayesian estimate of the throughput given acks containing
// the arrival time and payload size.
//基于贝叶斯估计,通过ack的到达时间和包体大小
class BitrateEstimator {
}


acknowledged_bitrate_estimator_->IncomingPacketFeedbackVector(
      report.SortedByReceiveTime());
  auto acknowledged_bitrate = acknowledged_bitrate_estimator_->bitrate();

http://www.kler.cn/a/6438.html

相关文章:

  • 递归读取指定目录下的文件
  • WPSJS:让 WPS 办公与 JavaScript 完美联动
  • 混合开发环境---使用编程AI辅助开发Qt
  • Linux(Ubuntu)命令大全——已分类整理,学习、查看更加方便直观!(2024年最新编制)
  • 在 Sanic 应用中使用内存缓存管理 IP 黑名单
  • nodejs利用子进程child_process执行命令及child.stdout输出数据
  • BGP 十一条选路原则与BGP路由传递的注意事项介绍
  • 玩转git的第6章节:git的smart checkout与force checkout
  • ping协议(ICMP)的原理
  • 家电行业采购-分销-电商-仓储业务用契约锁电子签,提效95%
  • 力扣(134.860.406.452)补9.26
  • Spring框架AOP增强,动态代理
  • Cursor——ChatGPT的替代品【笔记】
  • linux GlusterFS文件系统 | GFS分布式文件系统群集部署 | 超详细
  • 心理咨询师证书有用吗 有必要考吗
  • Python高阶函数(Higher-order Function)
  • GFS分布式文件系统
  • 【系统可靠性】搭建可靠性系统工程实践
  • 【ArcGIS微课1000例】0067:Nodata数据处理的3种方法案例教程
  • 马上中秋节了,Python带你实现查票以及购票....
  • 文章三:Python网络编程实战:爬虫技术入门与实践
  • 【蓝桥杯冲刺】KMP算法
  • Linux命令·vmstat
  • 【新2023Q2押题JAVA】华为OD机试 - 整理扑克牌
  • gpt4人工智能怎么下载-chatgpt哪里下载
  • 线性表的顺序存储结构具体实现 代码实战 赛博图书馆搭建指南(使用C\C++语言)