WebRTC音频QoS方法一.1(NetEQ之音频网络延时DelayManager计算补充)

一、整体简介

NetEQ计算的网络延时,直接影响变速算法的决策。在变速算法里面启动关键的作用。

网络延时计算需要考虑两种情况:

1、单纯抖动的网络延时计算,在UnderrunOptimizer类中实现;

2、在丢包乱序场景下的网络延时计算。在ReorderOptimizer类中实现。

DelayManager函数综合考虑两种算法的最大值。确定为当前网络延时值。

二、实现原理

1、单纯抖动的网络延时计算

使用的算法是webrtc音频QOS方法一(NetEQ之音频网络延时DelayManager计算)_webrtc qos-CSDN博客文章浏览阅读5k次,点赞3次,收藏23次。本文探讨WebRTC中音频延时处理技术,重点讲解DelayManager模块如何通过IAT直方图和DelayPeakDetector算法计算目标缓冲级别,确保音频在不同网络条件下平稳播放。https://blog.csdn.net/CrystalShaw/article/details/104768449这里介绍的直方图方法。使用的是 Q30格式表示的出现概率,指定出现95%(可配值,默认值是95%)的网络延时的最大值。

在直方图里面,有个correction机制,可以保证直方图里面所有元素出现概率的和是100%。当我们配置95%出现概率的时候,会从最小延时间隔向上累加到95%的最大值,作为网络延时值。

核心函数如下:

cpp 复制代码
void UnderrunOptimizer::Update(int relative_delay_ms) {
  std::optional<int> histogram_update;
  if (resample_interval_ms_) {
    if (!resample_stopwatch_) {
      resample_stopwatch_ = tick_timer_->GetNewStopwatch();
    }
    if (static_cast<int>(resample_stopwatch_->ElapsedMs()) >
        *resample_interval_ms_) {
      histogram_update = max_delay_in_interval_ms_;
      resample_stopwatch_ = tick_timer_->GetNewStopwatch();
      max_delay_in_interval_ms_ = 0;
    }
    max_delay_in_interval_ms_ =
        std::max(max_delay_in_interval_ms_, relative_delay_ms);
  } else {
    histogram_update = relative_delay_ms;
  }
  if (!histogram_update) {
    return;
  }

  const int index = *histogram_update / kBucketSizeMs;
  if (index < histogram_.NumBuckets()) {
    // 入桶延时值
    histogram_.Add(index);
  }

  //计算满足histogram_quantile_概率的最大值
  int bucket_index = histogram_.Quantile(histogram_quantile_);
  
  //根据桶索引计算对应延时值
  optimal_delay_ms_ = (1 + bucket_index) * kBucketSizeMs;
}

2、在丢包乱序场景下的网络延时计算

核心思想是计算网络乱序和网络丢包带来的音频质量损失代价函数,计算最小代价值作为网络延时值。

对应源码的核心函数是:

1、延时成本DelayCost公式:

DelayCost = (i * kBucketSizeMs - base_delay_ms) << 30

表示当前延迟与基础延迟的差值(以20ms为粒度),通过Q30定点数放大以避免浮点误差。i是直方图中的延迟桶索引,base_delay_ms是当前网络的基础延迟。

2、丢包成本LostCost公式:

LostCost = 100 * ms_per_loss_percent_ * loss_probability;

将丢包概率(loss_probability)转换为每1%丢包对应的延迟成本(ms_per_loss_percent_参数控制权重)

然后轮询所有乱序延时情况,在​​重排序容忍度​​和​​丢包率​​之间找到最优平衡点。作为当前的网络延时值。

相关推荐
顾道长生'3 小时前
(CVPR-2025)视频生成中的多主体开放集个性化
音视频·视频生成
scorpion_V7 小时前
WebRTC 结合云手机:释放实时通信与虚拟手机的强大协同效能
vue.js·智能手机·webrtc
iphone10811 小时前
视频创作者如何用高级数据分析功能精准优化视频策略
大数据·数据挖掘·数据分析·音视频·视频功能·视频创作者
yuanpan12 小时前
OpenCV打开视频函数VideoCapture使用详解
人工智能·opencv·音视频
花开莫与流年错_1 天前
音频相关数学支持
数学·音视频·音频·软件
嘀咕博客2 天前
Krea Video:Krea AI推出的AI视频生成工具
人工智能·音视频·ai工具
ZEGO即构开发者2 天前
简单4步,快速搭建数字人实时视频通话功能
实时互动·webrtc·实时音视频·数字人·即时通讯·rtc·视频聊天·虚拟人·社交·音视频技术·ai虚拟人·ai语音驱动·android多人语音·java多人语音通话·zego·泛娱乐·社交泛娱乐·视频美颜·虚拟形象sdk·自动聊天机器人
计算机视觉-Archer3 天前
联想win11笔记本音频失效,显示差号(x)
音视频
瑶光守护者3 天前
【卫星通信】超低码率语音编码ULBC:EnCodec神经音频编解码器架构深度解析
深度学习·音视频·卫星通信·语音编解码·ulbc