WebRTC 系列之音频的那些事

WebRTC (Web Real-Time Communication)是一个支持网页浏览器进行实时语音对话或视频对话的 API。W3C 和 IETF 在2021年1月26日共同宣布 WebRTC 1.0 定稿,促使 WebRTC 从事实上的互联网通信标准成为了官方标准,其在不同场景的应用将得到更为广泛的普及。WebRTC 提供了视频会议的核心技术,包括音视频的采集、编解码、网络传输、显示等功能,并且还支持跨平台:Windows,Mac,iOS,Android。本文主要介绍 WebRTC 的语音引擎,它是 WebRTC 最具价值的技术之一。包括音频工作机制、相关的改动以及开发过程中遇到的一些常见问题。

作者:陶金亮 网易云信资深音视频客户端工程师

一、背景

年初因为工作需要,开始学习 WebRTC,就被其复杂的编译环境和巨大的代码量所折服,注定是一块难啃的骨头。俗话说万事开头难,坚持一个恒心,终究能学习到 WebRTC的设计精髓。今天和大家聊聊 WebRTC 中音频的那些事。WebRTC 由语音引擎,视频引擎和网络传输三大模块组成,其中语音引擎是 WebRTC 中最具价值的技术之一,实现了音频数据的采集、前处理、编码、发送、接受、解码、混音、后处理、播放等一系列处理流程。

WebRTC 系列之音频的那些事

音频引擎主要包含:音频设备模块 ADM、音频编码器工厂、音频解码器工厂、混音器Mixer、音频前处理 APM。

二、音频工作机制

想要系统的了解音频引擎,首先需要了解核心的实现类和音频数据流向,接下来我们将简单的分析一下。

(一)音频引擎核心类图

WebRTC 系列之音频的那些事
WebRTC 系列之音频的那些事

音频引擎 WebrtcVoiceEngine 主要包含音频设备模块 AudioDeviceModule、音频混音器 AudioMixer、音频 3A 处理器 AudioProcessing、音频管理类 AudioState、音频编码器工厂 AudioEncodeFactory、音频解码器工厂 AudioDecodeFactory、语音媒体通道包含发送和接受等。

  1. 音频设备模块 AudioDeviceModule 主要负责硬件设备层,包括音频数据的采集和播放,以及硬件设备的相关操作。
  2. 音频混音器 AudioMixer 主要负责音频发送数据的混音(设备采集和伴音的混音)、音频播放数据的混音(多路接受音频和伴音的混音)。
  3. 音频 3A 处理器 AudioProcessing 主要负责音频采集数据的前处理,包含回声消除 AEC、自动增益控制 AGC、噪声抑制 NS。APM 分为两个流,一个近端流,一个远端流。近端(Near-end)流是指从麦克风进入的数据;远端(Far-end)流是指接收到的数据。
  4. 音频管理类 AudioState 包含音频设备模块 ADM、音频前处理模块 APM、音频混音器 Mixer 以及数据流转中心 AudioTransportImpl 。
  5. 音频编码器工厂 AudioEncodeFactory 包含了 Opus、ISAC、G711、G722、iLBC、L16 等 codec。
  6. 音频解码器工厂 AudioDecodeFactory 包含了 Opus、ISAC、G711、G722、iLBC、L16 等 codec。

(二)音频的工作流程图

WebRTC 系列之音频的那些事
  1. 发起端通过麦克风进行声音采集
  2. 发起端将采集到的声音信号输送给 APM 模块,进行回声消除 AEC,噪音抑制NS,自动增益控制处理 AGC
  3. 发起端将处理之后的数据输送给编码器进行语音压缩编码
  4. 发起端将编码后的数据通过 RtpRtcp 传输模块发送,通过 Internet 网路传输到接收端
  5. 接收端接受网络传输过来的音频数据,先输送给 NetEQ 模块进行抖动消除,丢包隐藏解码等操作
  6. 接收端将处理过后的音频数据送入声卡设备进行播放

(三) NetEQ 模块是 WebRTC 语音引擎中的核心模块

WebRTC 系列之音频的那些事

在 NetEQ 模块中,又被大致分为 MCU 模块和 DSP 模块。MCU 主要负责做延时及抖动的计算统计,并生成对应的控制命令。而 DSP 模块负责接收并根据 MCU 的控制命令进行对应的数据包处理,并传输给下一个环节.

三、音频数据流向

根据上面介绍的音频工作流程图,我们将继续细化一下音频的数据流向。将会重点介绍一下数据流转中心 AudioTransportImpl 在整个环节中扮演的重要角色。

/private/var/folders/l_/k12mv53d4r7dl0k24g5p33mc0000gn/T/com.kingsoft.wpsoffice.mac/wps-taojinliang/ksohtml/wpsmFYQ5f.jpg

数据流转中心 AudioTransportImpl 实现了采集数据处理接口 RecordDataIsAvailbale和播放数据处理接口 NeedMorePlayData。RecordDataIsAvailbale 负责采集音频数据的处理和将其分发到所有的发送 Streams。NeedMorePlayData 负责混音所有接收到的 Streams,然后输送给 APM 作为一路参考信号处理,最后将其重采样到请求输出的采样率。

RecordDataIsAvailbale 内部主要流程:

  1. 由硬件采集过来的音频数据,直接重采样到发送采样率
  2. 由音频前处理针对重采样之后的音频数据进行 3A 处理
  3. VAD 处理
  4. 数字增益调整采集音量
  5. 音频数据回调外部进行外部前处理
  6. 混音发送端所有需要发送的音频数据,包括采集的数据和伴音的数据
  7. 计算音频数据的能量值
  8. 将其分发到所有的发送 Streams

NeedMorePlayData 内部主要流程:

  1. 混音所有接收到的 Streams 的音频数据
    1. 计算输出采样率 CalculateOutputFrequency()
    2. 从 Source 收集音频数据 GetAudioFromSources() ,选取没有mute,且能量最大的三路进行混音
    3. 执行混音操作 FrameCombiner::Combine()
  2. 特定条件下,进行噪声注入,用于采集侧作为参考信号
  3. 对本地伴音进行混音操作
  4. 数字增益调整播放音量
  5. 音频数据回调外部进行外部前处理
  6. 计算音频数据的能量值
  7. 将音频重采样到请求输出的采样率
  8. 将音频数据输送给 APM 作为一路参考信号处理

由上图的数据流向发现,为什么需要FineAudioBuffer和AudioDeviceBuffer?因为WebRTC 的音频流水线只支持处理 10 ms 的数据,不同的操作系统平台提供了不同的采集和播放时长的音频数据,不同的采样率也会提供不同时长的数据。例如 iOS 上,16K 采样率会提供 8ms 的音频数据 128 帧;8K 采样率会提供 16ms 的音频数据 128帧;48K 采样率会提供 10.67ms的音频数据 512 帧。

AudioDeviceModule 播放和采集的数据,总会通过 AudioDeviceBuffer 拿进来或者送出去 10ms 的音频数据。对于不支持采集和播放 10ms 音频数据的平台,在平台的 AudioDeviceModule 和 AudioDeviceBuffer 还会插入一个 FineAudioBuffer,用于将平台的音频数据格式转换为 10ms 的 WebRTC 能处理的音频帧。在 AudioDeviceBuffer 中,还会 10s 定时统计一下当前硬件设备过来的音频数据对应的采样点个数和采样率,可以用于检测当前硬件的一个工作状态。

四、音频相关改动

  1. 音频 Profile 的实现,支持 Voip 和 Music 2 种场景,实现了采样率、编码码率、编码模式、声道数的综合性技术策略。
  2. iOS 实现了采集和播放线程的分离,支持双声道的播放。
  3. 音频 3A 参数的兼容性下发适配方案。
  4. 耳机场景的适配,蓝牙耳机和普通耳机的适配,动态 3A 切换适配。
  5. Noise_Injection 噪声注入算法,作为一路参考信号,在耳机场景的回声消除中的作用特别明显。
  6. 支持本地伴音文件 file 和网络伴音文件 http & https。
  7. Audio Nack 的实现,提高音频的抗丢包能力,目前正在进行 In-band FEC。
  8. 音频处理在单讲和双讲方面的优化。
  9. iOS 在 Built-In AGC 方面的研究:
  10. Built-In AGC 对于 Speech 和 Music 有效,对于 noise 和环境底噪不会产生作用。
  11. 不同机型的麦克风硬件的增益不同,iPhone 7 Plus > iPhone 8 > iPhone X ;因此会在软件 AGC 和硬件 AGC 都关闭的情况下,远端听到的声音大小表现不一样。
  12. iOS 除了提供的可开关的 AGC 以外,还有一个 AGC 会一直工作,对信号的 level进行微调;猜想这个一直工作的 AGC 是 iOS 自带的 analog AGC,可能和硬件有关,且没有 API 可以开关,而可开关的 AGC 是一个 digital AGC。
  13. 在大部分 iOS 机型上,外放模式“耳机再次插入后”,input 的音量会变小。当前的解决方案是在耳机再次插入后,增加一个 preGain 来把输入的音量拉回正常值。

五、音频问题排查

首先看一下音频最常见的一些现象以及原因:

/private/var/folders/l_/k12mv53d4r7dl0k24g5p33mc0000gn/T/com.kingsoft.wpsoffice.mac/wps-taojinliang/ksohtml/wpsG2d2Ff.jpg

六、总结

本文主要介绍 WebRTC 的语音引擎,包括音频工作机制、相关的改动以及开发过程中遇到的一些常见问题。

作者介绍

陶金亮,网易云信资深音视频客户端开发工程师;2016 年 2 月加入网易,2017 年 8月加入网易云信团队,负责直播、短视频、IM、RTC SDK 的开发工作。

关于网易云信

网易云信:网易智企旗下融合通信云服务专家、通信与视频 PaaS 平台。集网易 24 年 IM 以及音视频技术打造的融合通信云服务专家,稳定易用的通信与视频 PaaS 平台。提供融合通信与视频的核心能力与组件,包含 IM 即时通讯、5G 消息平台、一键登录、信令、短信与号码隐私保护等通信服务,音视频通话、直播、点播、互动直播与互动白板等音视频服务,视频会议等组件服务,并联合网易易盾推出一站式安全通信方案「安全通」。目前,网易云信已经成功发送 1.6 万亿条消息,覆盖智能终端 SDK 数累计超过 186 亿,我们期待每个智能终端都有云信的融合通信能力。

文章标题:WebRTC 系列之音频的那些事,发布者:网易智企,转载请注明出处:https://worktile.com/kb/p/5925

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年3月16日 下午11:43
下一篇 2022年3月17日 上午12:19

相关推荐

  • 如何基于WebRTC搭建一个视频会议

    疫情期间,视频会议等远程办公产品备受青睐,众多互联网玩家切入视频会议市场,加剧市场竞争。但是,产品虽多,能够带来稳定可靠体验的产品却凤毛麟角,它的难点在哪里?视频会议的门槛到底有多高,又能够做到怎样的极致体验?在本文中网易智慧企业流媒体服务器天团将从 0 到 1 向大家介绍如何基于 WebRTC 来…

    2022年3月16日
    70100
  • 创世伙伴梁宇:TMT投资圈著名暖男,做好每件普通而正确的事

    梁宇,朋友们给他起了个“大白”的外号,幽默、细腻、耐心、谦和、优质倾听者——焦虑与浮躁弥漫的时代下,很稀罕的一种气质。 听他讲述自己的故事,年少轻狂、误判、盼着下班打CS、在养老的氛围里消磨多年……泯然众人的要素一样不少。至于成长和成就?“可能也就运气比较好,赶上了数字信息时代的一波大浪。” 我信你…

    2022年3月20日
    13300
  • jira功能有哪些

    JIRA的主要功能有:1、用于敏捷开发团队;2、用于项目管理团队;3、用于软件开发团队;4、用于产品管理团队。Jira 已经发展成为一款强大的工作管理工具,从需求和测试用例管理到敏捷软件开发,它适用于各种类型的用例。 Jira Software 所属的一系列产品旨在帮助各种团队管理工作。最初,Jir…

    2022年11月16日
    2900
  • 员工激励方式有哪些方面

    员工激励方式有两个方面:一、货币激励;二、非货币激励。其中货币激励包括:1、奖金;2、股份;3、佣金支付;4、加薪;非货币激励包括:1、认可;2、奖励;3、团队经历;4、专业技能学习。 一、货币激励 1、奖金 领导者可以支付特别奖金,这是完成项目或有效工作的意外奖金。当个人或团队达到特定目标时,提供…

    2022年11月15日
    1900
  • 排序算法有多少种

    人们常用的排序方法主要有10种,包括:1、冒泡排序;2、选择排序;3、插入排序;4、归并排序;5、快速排序;6、堆排序;7、希尔排序;8、计数排序;9、桶排序;10、基数排序。 冒泡排序 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。…

    2022年10月17日
    4800
  • RTC 系统音频弱网对抗技术发展与实践

    RTC(Real Time Communication)系统广泛应用在视频会议、在线医疗、泛娱乐、在线教育等实时互动场景,为用户提供低延时、高清晰度和流畅度、高保真音质的实时互动体验。音频弱网对抗技术旨在提升 RTC 系统在弱网(高丢包、大抖动、高延迟)条件下的用户体验。本文从 RTC 系统的音频弱…

    2022年3月16日 技术资讯
    37000
  • 酷渲科技创始人华少:用双赢思维做产品、连生态,实现规模化发展

    拥有10年以上的跨国企业咨询服务及解决方案经验,曾服务于金蝶、惠普等国内外知名IT公司,深谙企业培训的痛点与革新道法,对企业培训的数字化转型拥有独到的见解。所创办的酷渲科技服务了国内外20多万家企业和数千万用户,也是钉钉、企微、飞书的战略级合作伙伴。 文 | babayage 编辑 | 笑 笑 打工…

    2022年8月25日
    7700
  • 瑞云创始人汪忠田:售后服务SaaS市场拓荒者

    文| babayage 编辑 | 笑 笑 23年企业服务马拉松 创造客户价值推动人生决策 汪忠田在企业服务赛道已经长跑了23年,“从客户角度思考问题”“以解决客户问题为目标决策行为”这些大道理,早已成为他的一日三餐、人生日常。 1997年,明基(BenQ)正式在中国市场开疆拓土,同年5月,武汉大学计…

    2022年3月20日
    55400
  • 商业智能的研究主要集中在哪三个方面

    商业智能的研究主要集中在三个方面:1、支撑技术的研究;2、体系结构的研究;3、应用系统的研究。商业智能技术提供使企业迅速分析数据的技术和方法,包括收集、管理和分析数据,将这些数据转化为有用的信息,然后分发到企业各处。 1、支撑技术的研究 商业智能是一个跨学科领域,主要借助两大学科的成果,一是计算机技…

    2022年10月25日
    2900
  • 敏捷管理证书有哪些

    敏捷管理证书有以下:1、PMI-ACP;2、APMG International;3、Strategyex Certificate (Associate or Master’s) in Agile;4、International Consortium for Agile (ICAgile);5、Ag…

    2022年11月16日
    3500

发表回复

登录后才能评论
联系我们
关注微信
关注微信
分享本页
返回顶部