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

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%的最大值,作为网络延时值。

核心函数如下:

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、在丢包乱序场景下的网络延时计算

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

                                          Cost=Delay Cost+Loss Cost

对应源码的核心函数是:

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_参数控制权重)

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

http://www.xdnf.cn/news/18980.html

相关文章:

  • Spring Boot 与传统 Spring:从 WAR 到可执行 JAR,颠覆性的部署哲学
  • 在 TencentOS 3 上部署 OpenTenBase:从底层原理到生产级实践的深度指南
  • 微服务-24.网关登录校验-实现登录校验
  • 网站开发用什么语言好
  • 数据结构:链式队列尝试;0826
  • 庖丁解牛:深入解析Oracle SQL语言的四大分类——DML、DDL、DCL、TCL
  • Rust 环境搭建与 SeekStorm 项目编译部署(支持中文)
  • Redis相关命令详解及其原理
  • MT** 时间指标全景图:从可靠性到可维护性的度量体系
  • LangGraph-2-Demo
  • CI/CD 全链路实践:从 Git 基础到 Jenkins + GitLab 企业级部署
  • Python 操作 PPT 文件:从新手到高手的实战指南
  • 线性代数中矩阵等价与离散数学中关系的闭包之间的关联
  • VScode,设置自动保存
  • Vue中的props方式
  • 多模态RAG架构:下一代跨模态智能检索系统的设计与实践
  • 视频合成素材视频-多合一功能-青柠剪吧
  • OpenTenBase核心技术解密:突破OLTP与OLAP边界的分布式数据库革新
  • 【PS实战】制作hello标志设计:从选区到色彩填充的完整流程(大学PS作业)
  • 百度IOS客户端岗位--面试真题分析
  • 【Docker基础】Docker-compose进阶配置:资源限制与高可用部署
  • 中国移动云电脑一体机-创维LB2004_瑞芯微RK3566_2G+32G_开ADB安装软件教程
  • Web调用本地程序:Custom URL Scheme
  • Zookeeper(分布式RPC调用和分布式文件储存)
  • 2025年渗透测试面试题总结-35(题目+回答)
  • Radan钣金CAM解决方案在电气柜制造行业的应用案例
  • 物流配送路径规划项目方案
  • 【Doris】服务器配置
  • 深入浅出 ArrayList:从基础用法到底层原理的全面解析(下)
  • IDEA2022开启新版UI