写点什么

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

用户头像
Changing Lin
关注
发布于: 2021 年 04 月 29 日
谈Android端的高音质和低延时音频编码

1.项目概要:

本文主要介绍我们的Andorid音视频客户端---e讯通的音频属性升级的过程,对比两种常见直播场景下的编解码格式:AAC和OPUS,了解其不同的适用场景,不同的优缺点,以及实际的体验效果。希望本文对Android开发、音视频开发的工程师有帮助。点赞、收藏、转发,三连安排一下。
复制代码

2.背景和需求

2.1 背景:

e讯通是一款支持单聊、群聊、点对点通话、多人通话的音视频类APP。在实际使用过程中,不可避免程序的设备处于一个弱网环境,出于优先保障语音通信的考虑,语音的质量和用户体验,就变的极其敏感和重要。项目一开始,我们使用的是Android系统本身支持的AAC编码。如下所示:
复制代码


public static final String MIMETYPE_AUDIO_AAC = "audio/mp4a-latm";
复制代码

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 总结

我们决定把AAC升级为OPUS格式,同时支持两种格式切换,对比效果。AAC是安卓平台自身支持的,但不支持OPUS,因此只能使用OPUS开源库来实现软编软解。
复制代码

4.使用方法

4.1 下载 OPUS 的 Android 工程

https://github.com/theeasiestway/android-opus-codec.git 
复制代码

4.2 导入 IDE 编译生成 rar 包


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


4.4 编解码


5.对比


6.成果展示

如上图测试结果所示,高音质是指AAC格式,低延时是指OPUS格式;从测试结果来看,以及综合对比,得出如下结论:
复制代码


  • OPUS 在低时延、实时性方面更有优势

  • 在同等低采样率的情况下,OPUS 几乎无延时;但 AAC 延时达到 1.5s 以上

  • 低采样率区间,AAC 音质码率较低,但时延比较高,影响用户体验

  • 在码率方面,OPUS 同等采样率下,减小编码延时会导致占用码率增加

  • 因此,我们采用 OPUS 进行了应用语音功能的底层升级,提升了弱网环境的音频实时性,用户测试体验良好

7.参考文献

https://www.jianshu.com/p/6e51b4ab4f9a?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

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

发布于: 2021 年 04 月 29 日阅读数: 69
用户头像

Changing Lin

关注

获得机遇的手段远超于固有常规之上~ 2020.04.29 加入

我能做的,就是调整好自己的精神状态,以最佳的面貌去面对那些未曾经历过得事情,对生活充满热情和希望。

评论 (1 条评论)

发布
用户头像
刚好对我有帮助 嘻嘻
2021 年 04 月 30 日 13:51
回复
没有更多了
谈Android端的高音质和低延时音频编码