谈 Android 端的高音质和低延时音频编码

1.项目概要:
2.背景和需求
2.1 背景:
2.2 需求:
学习了解两种常见直播场景下的编解码格式特性:AAC 和 OPUS
了解其不同的适用场景,不同的优缺点
实际方案改进后的用户体验对比
3.实现原理
3.1 AAC(Advanced Audio Coding 高级音频编码)
出现于 1997 年,基于 MPEG-2 的音频编码技术。具有多声道和高采样率的特点,低码率下的高音质则使它也适合移动场景。
3.1.1 特点
提升的压缩率:可以以更小的文件大小获得更高的音质;
支持多声道:可提供最多 48 个全音域声道;
更高的解析度:最高支持 96KHz 的采样频率;
提升的解码效率:解码播放所占的资源更少;
3.1.2 优点
相较于 mp3,AAC 格式的音质更佳,文件更小
低采样率高音质
3.1.2 缺点
AAC 属于有损压缩的格式
在直播场景低时延的需求背景下,采样率与实时性成正比,与占用带宽码率成正比;不利于弱网环境的音频帧传输和用户体验
由于编码算法原因,编码器工作的输入帧大小固定是 1024 字节,导致低采样率时声音延迟变大,影响用户体验
3.2 OPUS
一个有损声音编码的格式,是一个低延时、高保真的适合在网络中传输的开源的语音编码格式。
3.2.1 特点
6 kb/秒到 510 kb/秒的比特率;单一频道最高 256 kb/秒
采样率从 8 kHz(窄带)到 48 kHz(全频)
帧大小从 2.5 毫秒到 60 毫秒
支持恒定比特率(CBR)、受约束比特率(CVBR)和可变比特率(VBR)
良好的鲁棒性丢失率和数据包丢失隐藏(PLC)
浮点和定点实现 [1]
3.2.2 优点
允许减少质量或提高比特率以实现更小的算法延迟(最小 5.0 ms)
在编码器内部它在较低比特率时使用线性预测编码,在高比特率时候使用变换编码
3.2.3 缺点
相对于其他编码格式来讲,保真性更好,但体积会稍微大一些
3.3 总结
4.使用方法
4.1 下载 OPUS 的 Android 工程
4.2 导入 IDE 编译生成 rar 包

4.3 把上一步生成的包导入应用工程

4.4 编解码

5.对比

6.成果展示
OPUS 在低时延、实时性方面更有优势
在同等低采样率的情况下,OPUS 几乎无延时;但 AAC 延时达到 1.5s 以上
低采样率区间,AAC 音质码率较低,但时延比较高,影响用户体验
在码率方面,OPUS 同等采样率下,减小编码延时会导致占用码率增加
因此,我们采用 OPUS 进行了应用语音功能的底层升级,提升了弱网环境的音频实时性,用户测试体验良好。
7.参考文献
https://baike.baidu.com/item/opus/680370?fr=aladdin
https://github.com/theeasiestway/android-opus-codec.git
https://opus-codec.org/release/stable/2019/04/12/libopus-1_3_1.html
版权声明: 本文为 InfoQ 作者【Changing Lin】的原创文章。
原文链接:【http://xie.infoq.cn/article/36e0a8e06be10f171fd076973】。文章转载请联系作者。
评论 (1 条评论)