为了尽可能降低音频延迟,我们建议您使用 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 上的错误
如果您在使用 Oboe 时遇到问题,可以提交错误。
视频
- Oboe 入门
- 低延迟音频 - 因为您的耳朵值得拥有
- Android 开发者峰会 2018。
- 在 Android 上取得成功 - 如何优化 Android 音频应用
- Android 开发者挑战赛 2018。
- Android 上的高性能音频 (Google I/O 2013)
- 整个视频都关于延迟。
- 在 Android 上构建出色的多媒体体验 (Google I/O 2014)
- 前 14 分钟是关于音频的总体介绍,特别是输入延迟。
- 音频延迟:缓冲区大小 (Google Dev 100 天)
- 描述了音频延迟、缓冲区大小和任务调度之间的关系。