网易云信 RTC 音频问题排查的挑战与实践

news2024/10/6 7:19:07

背景与挑战 

实时通信(Real-Time Communication,RTC)音频技术是指将音频流实时传输到远程用户的技术,满足线上实时交互的诉求,广泛应用于在线教育、视频会议、直播、泛娱乐社交、金融、医疗、政企等场景。在 RTC PaaS 厂商实际开发、运营中,音频问题场景多样性、问题迥异性、问题定位时效性对 RTC 音频问题的排查带来了诸多挑战。

RTC 音频问题排查,是 RTC 音频开发技术、功能演进的日常,也是 RTC 音频 QA 的日常,更是 RTC 音频服务的日常。如何在繁杂的事务中,梳理出框架和效率工具,服务降本增效、提高 RTC 音频服务满意度,是本文探讨的重点。

音频问题排查 

音频问题常见表现

常见的音频问题,如下:

 

这些问题会严重影响用户体验,甚至导致通信无法正常进行。

音频问题的主要特点

1. 音频问题随机性大。

RTC 语音是实时交互的语音通信技术,其通过网络传输。网络环境有 2G、3G、4G、5G、Wi-Fi 等不同通信标准,不同运营商、不同区域、不同洲际等差异,网络状况会受到拥堵、丢包、网络延迟等问题的影响。网络波动的必然性, 还有设备使用场景的随机性,决定语音问题出现的随机性。

2. 多平台设备差异大。

RTC 音频需要支持多种设备和平台,包括 Windows、Android, iOS、Mac,IoT 等。不同设备的硬件还有操作系统的差异、以及附件的差异,例如蓝牙耳机、声卡、模拟器等。

3. 同一个表象,不同根因,定位难。

同样杂音问题,可以是网络差导致传输数据包丢失或乱序导致的杂音。还有可能是设备 CPU 负荷很高时,录、播线程调度不及时,也会导致杂音。NS 的抑噪算法可能存在问题,导致抑制噪声不彻底,反而产生杂音。产生杂音的原因远远不止这几个可能。可见,实时语音的问题很难去定位。

4. 音频体验问题多。

RTC 音频传递的不仅是声音信息也传递声音所蕴含的情感。人们对音频问题容忍度非常低。用户在使用 RTC 服务时,需要保证高质量的声音传输,包括低延迟、高保真、稳定性和可靠性等方面。

音频问题处理的流程

如下图,可以明确看到 RTC 音频问题的来源、排查主体、排查的处理形式。

 

音频问题排查的主要痛点

1. 数据获取困难性。

RTC 是实时传输,问题也是实时出现的。收到问题反馈的时间,几乎都是延后的。得到音频问题的详细数据很关键,也有一定的难度,例如无法获取原始音频数据、无法重现问题等。

2. 排查流程复杂性。

音频问题排查的流程比较复杂,需要涉及多个环节,例如数据采集(ADM)、数据处理(APM)、编解码器(ACM)、网络(ANM)、服务器、用户所处场景等。

3. 技术门槛高。

音频问题排查需要掌握一定的音频处理和信号处理知识,内部排查工具也有一定的学习、使用成本,对排查人员的要求较高。

4. 问题多元、碎片化。

音频问题可能具有多样性和复杂性,例如回声、噪音、失真等问题,需要针对不同情况采用不同的排查方法;同样的问题,根因随着硬件、场景等变化而变化。

因此,在音频问题排查过程中,需要充分了解问题的特点和具体情况,采用合适的工具和方法进行排查,同时需要具备较高的技术水平和问题解决能力。在如何改进工具和方法、降低音频问题排查门槛、提高解决问题能力等方面, 云信 RTC 团队做了一些探索和实践。

云信 RTC 音频问题排查实践

音频问题排查着力点

如下图,我们以音频问题处理流程标准化、自动化为提升排查效率的着力点。

 

音频问题处理流程标准化

如下图,从 5 个方面来完成音频问题处理流程标准化的闭环。

 

1. 音频的数据流、控制流清晰化。

RTC PaaS 本质是流媒体传输,通过 API 融入不同实时场景,完成实时交互。对于排查问题者,需要抓住不变的部分:数据流和控制流。并从这 2 个维度来剖析问题。云信 RTC SDK 根据多客户、多场景改进并清晰化 SDK 音频数据流和控制流。

2. RTC QS 易用性、友好性改进。

业界普遍具备实时事件、实时指标的上报,以方便调查可能有问题的任意一通会话。QS 是云信 RTC 查看每一通会话时都会用到的调查工具。以用户少操作、所见即所得的方式展示 QS 数据,以频道中的 uid 为中心汇聚数据,在提供的 E2E 页面,配置各个模块问题调查的快速切换,让用户使用快速上手、快速查。

4. 传递 RTC 音频知识。

分享 SDK 音频数据流、控制流,QS 工具排查音频问题的主要办法、案例;总结场景系统问题、音频场景推荐配置、各类问题主要排查思路等。

5. 监控问题进展和瓶颈。

问题排查以 JIRA  流转的方式,在内部形成处理闭环。对音频 JIRA 监控,推进问题生命周期转化,以及为判断资源调配提供数据支撑。

音频问题排查自动化实践

QS 工具及相关配套 RTC 基础设施一起完成了 RTC 数据收集、分类与聚合、数据检索等。如何从巨大的 RTC 音频数据里发掘信息,服务于理解和解决问题,便成为团队要完成的命题。

1. 音频问题自动感知

音频问题感知是以主动识别音频引擎问题为出发点,实现主动感知、发现问题,从整体上反馈出突出问题,指明优化方向,从而更迅速的实现改进。

  • 设备/无声异常感知

音频录、播状态映射了 SDK 设备、无声状况。设备/无声异常的梳理维度和时间维度,外加 AppId,SDK 等可选维度,可反映某个 Appkey 或 SDK 在无声问题上的稳定程度和趋势性。

 

  • 音量小感知

音量对音质的影响是显著的,在其他条件一致的情况下,音量越大,主观听感越好。讲话者说话声音洪亮,在一定程度上能提升听音者的可懂度。

 

如上图,音量主要跟设备、APM 处理等相关。感知设备采集音量小,发送音量小等,呈现 APM 处理整体效果、感知音量小导致无声等问题。

  • 录/播频率不稳感知

录、播频率的平稳性直接跟音频体验强相关。在频道内除正常 ADM 重启(例如,录音与不录音间变化、硬件 AEC 与软件 AEC 间切换,路由变化等)导致短暂频率不平稳外,感知其它频率不平稳的情况,为音频卡顿等感知和体验优化提供依据。

  • 回声感知

回声消除是 RTC 链路中比较重要的一个模块,回声处理好坏不仅跟 AEC 算法先进性相关,也与设备、平台、机型和外接设备有关。回声感知利用音频算法组提供的办法,感知部分长时间漏回声处理的情况。

  • 音频卡顿感知

音频卡顿是指在播放音频时出现的中断或延迟现象,会导致音频听起来不连贯或有间断感。从而降低听众的听取体验。卡顿主要从几个维度完成感知,如下图:

 

  • 音频延迟大感知

在 RTC 的实时沟通中,延时也是一个非常重要的指标,一般来说,200ms 以内的延时,人的主观感觉无明显的障碍和迟滞感,200ms-400ms 能正常沟通,超过 400ms 就会有迟滞感,更严重时会出现抢话的现象,直接影响通话的体验。在面对面的沟通场景下,时延只有 3ms 左右。延迟大主要从几个维度完成感知,如下图:

 

  • 音画不同步感知

感知音画不同步目前设计的判断标准如下:

 

在某会议场景下,目前整体情况如下图:

音频问题感知不仅可以得到相应问题不同时间范围上的趋势、具体客户情况、SDK 版本以及版本间变化情况;也同时感知出异常范围的每一通通话可以直接关联到 QS 等排查工具。UI 布局设计如下图:

 

与此同时,利用数据平台对各个感知模型挖掘的数据,配置各个数据维度的自动监控并报警。节省人力资源,突出核心重点问题,实现资源效率最大化。自动报警犹如感知的指挥棒,落地数据决策。

2. 音频问题自动诊断

音频问题感知为啥要做音频自动诊断?下图是通过 RTC 实时沟通的两个人,从图上可以看出,讲话者 A 开始说话,声音经过空气传播、麦克风采集、A/D 转换、增强处理(降噪、回声消除、音量控制、去混响)、编码、打包传输、接收端解码、NetEQ、D/A 转换到下行播放,然后 B 听到声音。反之,B 说话声音也是通过相同路径到 A 端。可见问题排查链路的复杂性。

 

感知出发点是发现音频引擎问题,主动发现问题和解决问题。自动诊断则融合每类问题链路上的多个感知模型,以及客户使用场景,得到某类问题相关的时段、可能原因,为分析具体问题提供了初步的诊断结果。实现减少或无需人工排查 QS,而主动定位问题原因,降低使用 QS 的门槛,提高排查、服务的效率。如下图,为无声诊断主要融合的内容。


 

某个通话无声诊断结果展示如下:

 

RTC 音频问题排查展望 

RTC 音频排查高效化是行业发展的重要课题之一。本文分享了网易云信 RTC 团队在音频问题排查实践中的思考和实践。

虽然 RTC 音频问题排查没有尽头,但在排查和解决音频的思路、策略、工具不断完善的趋势下,问题不断收敛,音频体验不断优化。

音频自动感知、自动诊断系统后续工作重点主要体现在以下几个方面:

  • 几类音频问题的排查系统在实践中迭代演进;

  • 提高系统准确度和敏感度;

  • 自动报警与内部 JIRA 系统的打通;

  • 内部使用到提供面向客户使用的转变;

  • 结合 AIGC 提供更多分析和辅助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/509931.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

组件通信的几种方式

组件通信的几种方式 父组件向子组件传值 在父组件中用自定义组件进行传值,自定义属性写到父组件调用子组件的那个标签中。在子组件中用props进行接收,props写到子组件中与data同级,props是一个数组,内容就是自定义属性的名字。 …

SD nand 与 SD卡的SPI模式驱动

文章目录 SD nand 与 SD卡的SPI模式驱动 1. 概述 2. SPI接口模式与SD接口模式区别 2.1 接口模式区别 2.2 硬件引脚 2.3 注意事项 3. SD接口协议 3.1 命令 3.1.1 命令格式 3.1.2 命令类型 3.2 响应 3.2.1 响应格式 4. SD nand(SD卡)结构描述…

内网渗透之域环境信息搜集

1.查看是否为域环境 net config workstation下面命令能否执行成功和computer brower服务是否开启有关 net view /domain2.查询域内的用户和组 查询域内的所有用户 net user /domain查询域内的所有用户(需要在域控上敲) dsquery user查询域内的某个用户 net user dbadmin /d…

代码随想录算法训练营day36 | 435. 无重叠区间,763.划分字母区间,56. 合并区间

代码随想录算法训练营day36 | 435. 无重叠区间,763.划分字母区间,56. 合并区间 435. 无重叠区间763.划分字母区间56. 合并区间总结 435. 无重叠区间 教程视频:https://www.bilibili.com/video/BV1A14y1c7E1/?spm_id_from333.788&vd_sou…

【Linux】安装node-v16.17.0-linux

【Linux】安装node-v16.17.0-linux 1 下载node-v16.17.0-linux-x64.tar.xz 下载地址:https://nodejs.org/zh-cn 2 解压文件 cd 到node-v16.17.0-linux-x64.tar.xz所在的路径 xz -d node-v16.17.0-linux-x64.tar.xz tar -xvf node-v16.17.0-linux-x64.tar 3 软…

vue2 框架运行原理剖析系列(一)之 new Vue()实例化过程到底做了什么!!!

一、vue 基础用法 1.1 引入vue 1.2 使用vue语法编写ui 1.3 实现数据绑定 示例代码如下 <div id"app">{{ message }} </div> <script> var app new Vue({el: #app,data: {message: Hello Vue!} }) </script>1.4 代码效果&#xff1a;使用浏…

4114 Flipping Game

4114 Flipping Game PTA | 程序设计类实验辅助教学平台 思路&#xff1a;我们定义f[i][j]表示当前已经进行了i轮&#xff0c;并且当前的两个串的不同的数的个数是j&#xff0c;就接下来我们考虑状态转移&#xff0c;首先是假设我们在不同的中挑选了x个进行反转&#xff0c;则需…

Go语言学习查缺补漏ing Day4

Go语言学习查缺补漏ing Day4 一、掌握iota的使用 请看下面这段代码&#xff1a; package mainimport "fmt"const (a iota_bc "ReganYue"dd1e iotaf iota )func main() {fmt.Println(a, b, c, d, d1, e, f) }思考一下输出结果会是什么&#xff1f; …

评价指标通俗解释:什么是准确率、精确率、召回率、F1得分

y_true [1, 1, 1, 1, 1, 0, 0, 0, 0, 2] y_pred [1, 1, 0, 1, 1, 1, 0, 1, 0, 2]以上述类别 1 为例&#xff1a; 准确率 accuracy 总体概念&#xff0c;指所有样本中预测正确的比例&#xff1a;7/10 0.7 精确率 precision 预测标签为 1 的样本中确实为 1 的比例&#xf…

数字化战略,如何解读企业财务报表

01 财务数字化管理 第一&#xff0c;财务基本信息化建设。比如财务系统、财务共享中心等通过数字化的手段提升财务会计核算、财务流程管理效率&#xff0c;解决流程性管理的问题。 第二&#xff0c;利用各类商业智能 BI 分析、数据分析的手段把企业的所有行为都进行量化对比&…

开源之夏2023 | 欢迎申请openEuler Embedded SIG开发任务

关于开源之夏 开源之夏是开源软件供应链点亮计划下的暑期活动&#xff0c;由中科院软件研究所与openEuler社区联合主办&#xff0c;旨在鼓励在校学生积极参与开源软件的开发维护&#xff0c;促进优秀开源软件社区的蓬勃发展。 活动联合各大开源社区&#xff0c;针对重要开源软件…

国资委检查再升级,用友全球司库敏捷响应

政策支持&#xff0c;央企司库建设提速 司库管理体系建设是中央企业加快建设世界一流企业的重要战略举措。近年来&#xff0c;财政部、国资委高度重视中央企业司库管理工作。 2021年至今&#xff0c;财政部、国资委陆续出台一系列强化中央企业资金管理的文件&#xff0c;针对央…

软件架构:DSL领域特定语言初探

所谓DSL领域专用语言(domain specific language / DSL)&#xff0c;其基本思想是“求专不求全”&#xff0c;不像通用目的语言那样目标范围涵盖一切软件问题&#xff0c;而是专门针对某一特定问题的计算机语言。DSL之于程序员正如伽南地之于以色列人&#xff0c;是最初也是最终…

常用的python gpu加速方法

在使用 PyCharm进行机器学习的时候&#xff0c;我们常常需要自己创建一些函数&#xff0c;这个过程中可能会浪费一些时间&#xff0c;在这里&#xff0c;我们为大家整理了一些常用的 Python加速方法&#xff0c;希望能给大家带来帮助。 在 Python中&#xff0c;我们经常需要创建…

SpringBoot ( 三 ) 转页

2.4.转页 2.4.1.内部转页 forward 2.4.1.1.转页配置 在 配置文件 resources > application.properties 中可以找到转页的配置信息, 这些是SpringBoot的默认配置, 是可以省略不写在配置文件中的 2.4.1.2.准备页面 在 resources 文件夹下 创建新文件夹 templates , 这个文…

Mysql索引简介、性能分析、以及慢查询日志

一、索引简介 1.mysql索引是什么 MySQL官方对索引的定义为&#xff1a;索引(Index)是帮助MySQL高校获取数据的数据结构。 索引的本质是&#xff1a;数据结构。可以简单理解为“排好序的快速查找数据结构”。 2.索引的方法 1.BTREE 索引&#xff1a;主要的实现是通过一个平…

翻遍GitHub帮你总结了一份并发图册+高并发笔记,一次性搞懂并发编程

前言 现在的面试&#xff0c;动不动就是“三高”&#xff0c;Java并发编程已然成为名企大厂面试的必考问题&#xff0c;其重要性不⾔⽽喻。 我也问了一些面试官&#xff0c;他们说&#xff1a;很多面试者&#xff0c;最基本的Java内存模型和JVM内存结构都分不清楚&#xff0c…

【网络】Socket编程-TCP篇

文章目录 简单的TCP网络程序服务器:服务端创建套接字socket函数 服务端绑定bind函数bzero函数引入命令行参数 服务端监听listen函数 服务端获取连接accept函数 测试上述的功能telnet命令 服务端处理请求(提供服务)read函数write函数 tcp_server.cc客户端客户端创建套接字引入命…

Git 和 TortoiseGit安装配置

现在git 官网下载 Git - Downloads Git - Downloading Packagre https://github.com/git-for-windows/git/releases/download/v2.40.1.windows.1/Git-2.40.1-64-bit.exe 一直按下一步安装就行 再到TortoiseGit官网下载软件 Download – TortoiseGit – Windows Shell Int…

如何考核产品经理的绩效?

公司里几乎任何一个岗位都会被考核&#xff0c;产品经理也不例外。那么在产品经理实际工作该如何去考核呢&#xff1f;相信即将步入或身在职场的产品经理一定感兴趣&#xff0c;其实产品经理考核主要分为业绩考核和文化考核两大部分&#xff0c;下面将这两部分具体聊聊。 一、…