剑痴乎

  • 首页
  • 文章分类
    • 音视频
    • WebRTC
    • 编程之美
    • Linux
    • Windows
    • 生活点滴
    • 校园生活
  • 参考
    • API参考
    • 实用工具
    • 测试音视频
    • 文档
  • 留言板
  • 关于
剑痴乎
代码为剑,如痴如醉
  1. 首页
  2. WebRTC
  3. 正文

WebRTC研究:带宽估计中的稳定估计值

2020年8月12日 1365点热度 4人点赞 0条评论

WebRTC带宽估计后,得到的结果会存到TargetTransferRate结构体中,然后回调给上层。TargetTransferRate定义如下:

1
2
3
4
5
6
7
struct TargetTransferRate {
  Timestamp at_time = Timestamp::PlusInfinity();
  // The estimate on which the target rate is based on.
  NetworkEstimate network_estimate;
  DataRate target_rate = DataRate::Zero();
  DataRate stable_target_rate = DataRate::Zero();
};

可以看到该结构体有两个估计码率值,本文我们介绍下其中的stable_target_rate,该值在后续的码率分配中有用到,配合target_rate进行相关判断。

在GoogCcNetworkController中,TargetTransferRate结果值按如下得到:

1
2
3
4
5
TargetTransferRate target_rate_msg;
target_rate_msg.target_rate = pushback_target_rate;
target_rate_msg.stable_target_rate =
    std::min(bandwidth_estimation_->GetEstimatedLinkCapacity(),
             pushback_target_rate);

其中pushback_target_rate为我们实际的带宽估计值,stable_target_rate取带宽估计值与EstimatedLinkCapacity小的一个。

SendSideBandwidthEstimation

如下代码可知,LinkCapacity通过LinkCapacityTracker(link_capacity_)计算得到,接下来我们看看这个LinkCapacityTracker究竟是什么东东。

1
2
3
DataRate SendSideBandwidthEstimation::GetEstimatedLinkCapacity() const {
  return link_capacity_.estimate();
}

LinkCapacityTracker

LinkCapacityTracker类比较简单,接口不多,这里我们介绍下主要的两个接口,通过这两个接口进行LinkCapacity的更新。

UpdateDelayBasedEstimate

主要两个输入参数如下:

  • at_time: 当前时间
  • delay_based_bitrate:当前基于时延的带宽估计值

这里我们分析下该函数代码:

1
2
3
4
5
6
7
8
9
10
11
12
// 得到一个新的基于时延的带宽估计值:delay_based_bitrate后触发
void LinkCapacityTracker::UpdateDelayBasedEstimate(
    Timestamp at_time,
    DataRate delay_based_bitrate) {
  if (delay_based_bitrate < last_delay_based_estimate_) {
    // 若比之前估计值小,取capacity_estimate_bps_与当前基于时延估计值小的一个
    capacity_estimate_bps_ =
        std::min(capacity_estimate_bps_, delay_based_bitrate.bps<double>());
    last_link_capacity_update_ = at_time;
  }
  last_delay_based_estimate_ = delay_based_bitrate;
}

OnRateUpdate

主要有如下三个输入参数:

  • acknowledged:根据接收端反馈的信息计算的接收码率(通过Transport-CC报文,该报文详细分析可去我博客搜索下)
  • target:当前综合时延以及丢包信息得到的带宽估计值
  • at_time:当前时间

该函数具体分析如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 得到一个新的综合时延以及丢包的带宽估计值target后触发
void LinkCapacityTracker::OnRateUpdate(absl::optional<DataRate> acknowledged,
                                       DataRate target,
                                       Timestamp at_time) {
  if (!acknowledged)
    return;
  // 取带宽估计值以及实际接收码率小的,追求保守
  DataRate acknowledged_target = std::min(*acknowledged, target);
  if (acknowledged_target.bps() > capacity_estimate_bps_) {
    TimeDelta delta = at_time - last_link_capacity_update_;
    double alpha = delta.IsFinite() ? exp(-(delta / tracking_rate.Get())) : 0;
    // 使用滑动平均进行数据平滑处理
    capacity_estimate_bps_ = alpha * capacity_estimate_bps_ +
                             (1 - alpha) * acknowledged_target.bps<double>();
  }
  last_link_capacity_update_ = at_time;
}

通过前面两个函数,得到的capacity_estimate_bps_即为我们前面说的稳定估计值stable_target_rate。由前面分析可知,该stable_target_rate综合了当前带宽估计值以及实际接收码率,从计算过程可知比较保守。从实际测试效果看,该估计值也正如其名,相对实际带宽估计值target_rate会更平稳,值也会相对小些。

本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可
标签: WebRTC
最后更新:2021年5月25日

Jeff

管理员——代码为剑,如痴如醉

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据。

版权声明

为支持原创,创作更好的文章,未经许可,禁止任何形式的转载与抄袭,如需转载请邮件私信!本人保留所有法定权利。违者必究!

文章目录
  • SendSideBandwidthEstimation
  • LinkCapacityTracker
    • UpdateDelayBasedEstimate
    • OnRateUpdate
近期评论
  • ouyang on WebRTC研究:RTP报头扩展假如放中间是否有歧义了,例如我中间说2个…
  • Artificial intelligence creates content for the site, no worse than a copywriter, you can also use it to write articles. 100% uniqueness :). Click Here: https://bit.ly/3iPPltW?h=70a8a6efa38594c078497e06bfe05726& on WebRTC研究:基于Transport Feedback的早期丢包检测upn6859h
  • yy on WebRTC研究:Trendline滤波器-TrendlineEstimator我也有这个问题,不理解。
  • Unreal on WebRTC研究:统计参数之往返时延非常不准
  • huowa222 on WebRTC研究:FEC之RED封装rtp header 有 pt 字段
相关文章
  • WebRTC研究:统计参数之丢包率
  • WebRTC研究:基于Transport Feedback的早期丢包检测
  • Continue,2022,加油
  • WebRTC研究:记一次音频带宽估计引入的异常分析
  • WebRTC研究:Encoded Transform

COPYRIGHT © 2022 jianchihu.net. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang