计算窗口期的码率, 通过update累加count,然后除以采样的窗口期时间 , (accumulated_count_/window_size_ms) * scale
-
创建对象
//window_size_ms: 统计窗口大小 //scale : 计算结果,缩放因子 RateStatistics(int64_t window_size_ms, float scale)
-
更新采样点
//输入采样的值:count //当前时间点 :now_ms void Update(size_t count, int64_t now_ms) { //删除过期数据, now_ms -maxwindow_size_ms 前面的点 // 删除点的同时会相应的减少 accumulated_count_,num_samples_ if (now_ms < oldest_time_) { return; } EraseOld(now_ms); // // 保存点的信息到列表中,用于以后删除使用 .... // // 累积了多少了 // accumulated_count_ += count; ++num_samples_; }
-
获取计算结果
rtc::Optional<uint32_t> RateStatistics::Rate(int64_t now_ms) const { ... //主要操作就是 ,active_window_size:时长 // // accumulated_count_ / active_window_size float scale = scale_ / active_window_size; return rtc::Optional<uint32_t>(static_cast<uint32_t>(accumulated_count_ * scale + 0.5f)); }