音频的传输链路与延迟优化点
麦克风->系统采集模块->APP采集模块->3A、混响等音效->混音->音频编码->RTC网络发送->
MediaServer->RTC网络接收->音频jitter buffer->音频解码->音频的后处理(均衡)->APP播放模块->x系统播放模块->扬声器/耳机。
整个链路如上;
采播延迟:
音频的『采播延迟』不同机型的差异比较大,iOS效果比较好,采集+播放大约在20-30ms.
Android好的机型在30ms,差的机型可以达到300ms.
优化手段:通过AAudio等方式对延迟进行优化。
目标延迟:iOS:20-30 Android: 部分机型30-70ms
3A延迟
音效需要分开来看,一般混响类音效不会引入延迟,但是变声类音效会引入延迟。
优化手段:佩戴有线耳机,可以关闭3A,减少30ms延迟。
对外外放场景,可以对30ms的3A算法进行优化到10ms。
限制不开启音效,或者只开启不引入延迟的混响音效。
目标延迟:耳机 0ms。 外放 10ms。
RTC编码
RTC的音频编码帧长一般是20ms.
优化手段:需要将编码帧长变为10ms, 支持全链路10ms帧长,减少10ms延迟。
RTC网络延迟
一般就是RTT/2, 通过多部署边缘服务器来做到尽可能离得用户近一点,通过关闭Pacer等网络传输策略的优化。
网络较好的情况下,延迟约为5-10ms。
音频jitter buffer延迟
引入延迟最多的地方,是RTC区别于直播,能做到百毫秒延迟的原因,主要是根据网络状态动态调整jitter buffer的大小。
引入延迟的目的是为了抗抖动,延迟越高,抗抖动能力越强,卡断越少。
相比于延迟,卡顿对于用户体验影响更大,一般会引入100-1000ms的延迟,大部分场景在300ms一下。
优化手段:
减少jitter buffer的大小,结合其他手段来减少卡顿(FEC、NACK、主动重传、快速下降、10ms编码帧长)来防止频繁的卡断。
最小维持在30-40ms,才能保证MOS打分。
理想情况下的总延迟(iOS):
30(采播延迟) + 0(3A+音效bypass)+ 5(编码)+5(上行网络传输)+5(下行网络传输)+35(jitter buffer)+0(后处理算法bypass) = 80ms。
相关文章:
音频的传输链路与延迟优化点
麦克风->系统采集模块->APP采集模块->3A、混响等音效->混音->音频编码->RTC网络发送-> MediaServer->RTC网络接收->音频jitter buffer->音频解码->音频的后处理(均衡)->APP播放模块->x系统播放模块->扬声器/耳机。 整个链路如上&a…...
【51单片机】直流电机驱动(PWM)(江科大)
1.直流电机介绍 直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极,当电极正接时,电机正转,当电极反接时,电机反转 直流电机主要由永磁体(定子)、线圈(转子)和换向器组成 除直流电机外,常见的电机还有步进电机、舵机、无刷电机、空心杯电机等 2.电机驱动…...
腾讯文档(excel也一样)设置单元格的自动行高列宽
1. 选中单元格 可选择任意一个或者几个 2. 设置自动 行高和列宽 即可生效...
vue-router 提供的几种导航守卫
vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。这里有很多方式植入路由导航中:全局的,单个路由独享的,或者组件级的。 1、全局前置守卫 你可以使用 router.beforeEach 注册一个全局前置守卫: const route…...
Element UI 组件的安装及使用
Element UI 组件的安装及使用 Element UI 是一套基于 Vue.js 的桌面端 UI 组件库,提供了丰富的、高质量的 UI 组件,可以帮助开发者快速构建用户界面。 1、安装 Element UI 使用 npm 安装 npm install element-ui -S2、使用 CDN 安装 在 HTML 页面中引…...
网站架构演变、LNP+Mariadb数据库分离、Web服务器集群、Keepalived高可用
目录 day02 深入理解程序的数据存储 验证 配置NFS服务器 配置代理服务器 配置名称解析 day02 深入理解程序的数据存储 程序将文字数据保存到数据库中程序将非文字数据(如图片、视频、压缩包等)保存到相应的文件目录中 验证 发一篇文章…...
设计模式(七):策略模式(行为型模式)
FullDiscount Strategy,策略模式:定义一系列的算法,把他们一个个封装起来, 并使他们可以互相替换,本模式使得算法可以独立于使用它们的客户。 场景:购物车结算时,根据不同的客户,…...
人工智能|深度学习——基于对抗网络的室内定位系统
代码下载: 基于CSI的工业互联网深度学习定位.zip资源-CSDN文库 摘要 室内定位技术是工业互联网相关技术的关键一环。该技术旨在解决于室外定位且取得良好效果的GPS由于建筑物阻挡无法应用于室内的问题。实现室内定位技术,能够在真实工业场景下实时追踪和…...
MySQL的配置文件my.cnf正常的配置项目
my.cnf(或my.ini)是MySQL的配置文件,其中包含了多种设置,用于控制MySQL服务器的运行方式。以下是my.cnf中一些常见的配置项目: 服务器设置 - [mysqld]:服务器的配置部分。 - user:指定M…...
小程序API能力集成指南——界面导航栏API汇总
ty.setNavigationBarColor 设置页面导航条颜色 需引入MiniKit,且在>2.0.0版本才可使用 参数 Object object 属性类型默认值必填说明frontColorstring是前景颜色值,包括按钮、标题、状态栏的颜色,仅支持 #ffffff 和 #000000backgroundCo…...
onlyoffice基础环境搭建+部署+demo可直接运行 最简单的入门
office这个体系分为四个大教程 1、【document server文档服务器基础搭建】 2、【连接器(connector)或者jsApi调用操作office】-进阶 3、【document builder文档构造器使用】-进阶 4、【Conversion API(文档转化服务)】-进阶 如果需要连接器,可以查看:onl…...
ubuntu 22.04 图文安装
ubuntu 22.04.3 live server图文安装 一、在Vmware里安装ubuntu 22.04.3 live server操作系统 选择第一个选项开始安装 选择English语言 选择中间选项不更新安装,这是因为后续通过更换源之后再更新会比较快 键盘设计继续选择英文,可以通过语言选择…...
Dockerfile文件中只指定挂载点会发生什么?
当你在VOLUME指令中只指定容器内的路径(挂载点)而不指定宿主机的目录时,Docker会为该挂载点自动生成一个匿名卷。这个匿名卷存储在宿主机的某个位置,但这个具体位置是由Docker自动管理的,用户通常不需要关心这个存储位…...
详解 leetcode_078. 合并K个升序链表.小顶堆实现
/*** 构造单链表节点*/ class ListNode{int value;//节点值ListNode next;//指向后继节点的引用public ListNode(){}public ListNode(int value){this.valuevalue;}public ListNode(int value,ListNode next){this.valuevalue;this.nextnext;} }package com.ag; import java.ut…...
OpenHarmony下gn相关使用
OpenHarmony下gn相关使用 引言 为了提高OpenHarmony下移植vivante gpu的成功率,先得把准备工作做足了,这样后续就好搞了。所以本文档的核心工作介绍GN构建工具在OpenHarmony中的常见使用方法,指导三方库由cmake或者其它的脚本构建到GN构建的…...
怎样重置ubuntu mysql8密码
密码很难记住,所以如果您忘记了 MySQL root 密码,幸运的是,有一种方法可以更改它。这篇文章是为您而写的,在这篇文章结束时,您将成功更改 MySQL 的密码。 本博客演示了如何在 Ubuntu 上重置使用包管理器安装的 MySQL …...
SpringBoot+WebSocket实现即时通讯(三)
前言 紧接着上文《SpringBootWebSocket实现即时通讯(二)》 本博客姊妹篇 SpringBootWebSocket实现即时通讯(一)SpringBootWebSocket实现即时通讯(二)SpringBootWebSocket实现即时通讯(三&…...
vue3前端项目开发,具备纯天然的防止爬虫采集的特征
vue3前端项目开发,具备纯天然的防止爬虫采集的特征!众所周知,网络爬虫可以在网上爬取到一些数据,很多公司,为了自己公司的数据安全, 尤其是web端项目,不希望被爬虫采集。那么,您可以使用vue技术…...
js 多对象去重(多属性去重)
需求中发现后端可能没有处理重复数据,这个时候前段可以直接解决。 在 JavaScript 中,可以使用 Set 数据结构来进行多对象的去重。Set 是 ES6 新引入的集合类型,其特点是元素不会重复且无序。 下面是一个示例代码,展示如何通过 S…...
在 JavaScript 中,Map 与 object 的差别?为什么有 object 还需要 Map?
ES6 推出了Map 物件,让开发者可以透过这个特制资料结构进行键值对(key-value pairs) 的操作。然而 JavaScript 原始物件 (plain object) 就可以用来做键值对的操作,为什么还需要 Map 物件呢? Map 物件解决了什么问题? 原始物件的键 (key) 只可以是字串…...
3步解决游戏手柄兼容性问题:XOutput完全指南
3步解决游戏手柄兼容性问题:XOutput完全指南 【免费下载链接】XOutput DirectInput to XInput wrapper 项目地址: https://gitcode.com/gh_mirrors/xo/XOutput 你是否遇到过这样的尴尬时刻?心爱的旧手柄在最新游戏里毫无反应,或者新买…...
告别低效编程:在PyCharm 2024.1中配置Baidu Comate的保姆级教程(含快捷键设置)
告别低效编程:在PyCharm 2024.1中配置Baidu Comate的保姆级教程(含快捷键设置) 作为一名长期使用PyCharm进行Python开发的工程师,我深刻体会到重复性编码工作对创造力的消耗。直到遇见Baidu Comate——这款能与IDE深度集成的AI编码…...
三分钟永久备份QQ空间:让青春记忆永不褪色的终极方案
三分钟永久备份QQ空间:让青春记忆永不褪色的终极方案 【免费下载链接】QZoneExport QQ空间导出助手,用于备份QQ空间的说说、日志、私密日记、相册、视频、留言板、QQ好友、收藏夹、分享、最近访客为文件,便于迁移与保存 项目地址: https://…...
为Claude Code配置Taotoken作为稳定后备API解决封号与Token不足痛点
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为Claude Code配置Taotoken作为稳定后备API解决封号与Token不足痛点 对于频繁使用Claude Code进行编程辅助的开发者而言࿰…...
Python金融数据引擎:重构通达信数据获取的技术范式
Python金融数据引擎:重构通达信数据获取的技术范式 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 在量化投资和金融数据分析领域,数据获取一直是开发者面临的首要挑战。传…...
Chrome无痕模式下BiDi协议断连原因与解决方案
1. 这个问题不是“能不能用”,而是“为什么一开无痕就断连”如果你在用 Selenium 4.11 集成 Chrome DevTools Protocol(CDP)或更新的 BiDi(Browser Interaction)协议做自动化时,突然发现:本地调…...
深入剖析Golang环境搭建:从基础配置到高效开发实践
1. 项目概述:为什么Golang环境搭建值得深究?如果你刚接触Go语言,可能会觉得“环境搭建”不就是下载、安装、配个变量吗?网上教程一搜一大把,五分钟搞定。但作为一名在多个生产环境中部署过Go服务的老兵,我必…...
2026最新测评:4款海外降英文文本AIGC工具实测
我用GPT写了一篇英文技术报告,然后分别扔进4个降AI工具。结果出乎意料。如果你经常用ChatGPT、Claude或Gemini写英文内容——无论是论文摘要、技术文档、公司报告还是博客文章——你一定遇到过这个尴尬:明明内容是自己构思、自己修改的,但Tur…...
机器学习赋能多共振生物传感:从多维光学数据中挖掘精准检测新范式
1. 项目概述与核心思路在生物传感和医疗诊断领域,我们一直在追求更高的检测精度和更低的检测限。传统的光学折射率传感器,比如基于表面等离子体共振(SPR)或法布里-珀罗腔的传感器,其工作原理大多依赖于监测单个光学共振…...
从‘三调’到‘新国标’:深度解读用地分类演变背后的GIS数据处理逻辑与避坑指南
从‘三调’到‘新国标’:深度解读用地分类演变背后的GIS数据处理逻辑与避坑指南 当规划师第一次打开2020年11月版的《用地用海分类指南》,看到169种地类时,很多人会下意识倒吸一口冷气——这比2月版的132种足足多出37个细分项。这种"直男…...
