为了尽可能缩短音频延迟,我们建议您使用 Oboe。
Oboe
Oboe 使用原生音频,基于 AAudio(对于 Android 8.1 及更高版本)和 OpenSL ES(对于较低版本的 Android)构建而成。为了尽可能缩短设备的延迟时间,请设置 setPerformanceMode(oboe::PerformanceMode::LowLatency)
和 setSharingMode(oboe::SharingMode::Exclusive)
。如需详细了解 Oboe,请参阅入门指南、README.md
和完整指南。如需查看使用 Oboe 的示例应用,请参阅 Soundboard 应用。
注意:如果您使用 AudioTrack 通过 Java 为对延迟敏感的应用创建输出音频串流,请使用 PERFORMANCE_MODE_LOW_LATENCY
模式。
实现核对清单
如需使用 Android 原生音频,请执行以下操作:
- 下载并安装 Android NDK。
- 按照 Oboe 的入门指南操作。
-
在 Oboe 构建器上调用
setPerformanceMode(oboe::PerformanceMode::LowLatency)
和setSharingMode(oboe::SharingMode::Exclusive)
。 -
使用由 android.media.AudioManager.getProperty(java.lang.String) 返回的建议原生缓冲区空间和采样率。
注意:对输入也应使用相同的缓冲区空间和采样率。
- 确保您的回调处理程序比较短,没有突发的 CPU 占用或不受控制的阻塞。避免优先级倒置。
- 考虑使用非阻塞算法,以便在输入和输出回调处理程序之间以及在回调处理程序和应用的其余部分之间进行通信。
其他资源
source.android.com
source.android.com 网站主要面向制造 Android 设备的 OEM,以及为这些 OEM 提供组件的 SoC 供应商。
不过,该网站上提供了大量有关延迟时间的实用信息,因此您可能需要查看这些信息。请查看音频延迟的相关文章。
android-ndk
如果您对如何使用 Android 原生音频有疑问,请在 android-ndk 论坛中提问。
报告 Oboe 中的 bug
如果您在使用 Oboe 时遇到问题,可以提交 bug。
视频
- Oboe 入门指南
- 低延迟音频 - 您的耳朵需要保护
- 2018 年 Android 开发者峰会。
- 在 Android 上取得成功 - 如何优化 Android 音频应用
- 2028 年 Android 开发者挑战赛。
- Android 上的高性能音频(2013 年 Google I/O 大会)
- 整个视频都是关于音频延迟的。
- 在 Android 上打造出色的多媒体体验(2014 年 Google I/O 大会)
- 前 14 分钟大致介绍了一下音频,尤其是输入延迟时间。
- 音频延迟:缓冲区空间 (100 Days of Google Dev)
- 介绍音频延迟、缓冲区空间和任务调度之间的关系。