Android 音频延迟解决方法

问题描述 投票:0回答:3

因此,Android 开发社区中任何值得关注的人都知道与 Android 中的低延迟音频相关的问题 3434。对于那些不会的人,您可以在这里进行自我教育。 http://code.google.com/p/android/issues/detail?id=3434

我正在为我的个人项目寻找任何类型的临时解决方法。我听说过通过滚动您自己的 Android 构建并修改 NDK 来向 NDK 公开私有接口。

我需要的是一种访问低级 alsa 驱动程序的方法,这些驱动程序已经与标准 2.2 版本打包在一起。我希望能够将 PCM 直接发送到我设备上的音频硬件。我不在乎生成的应用程序无法在市场上分发,并且可能无法在除我的设备之外的任何其他设备上运行。

有人有什么有用的想法吗?

-格里夫

编辑:我应该提到,我知道 AudioTrack 提供了此功能,但我希望延迟更低——AudioTrack 约为 300 毫秒,我希望约为 20-30 毫秒。

android audio android-ndk
3个回答
7
投票

Griff,这就是问题所在,NDK 不会改善已知的延迟问题(甚至有记录)。本机代码中的硬件抽象层当前会增加延迟,因此这不仅仅是访问低级驱动程序(顺便说一句,无论如何,您不应该依赖那里的 alsa 驱动程序)。


1
投票

Android:健全的 API(确定性、低延迟) 很好地涵盖了权衡。 TL;DR:NDK 给您带来了一个小小的好处,因为线程可以以更高的优先级运行,但这个好处在 Jellybean 之前是没有意义的,因为整个音频系统都是针对 Java 进行调整的。

运行 4.1 的 Galaxy Nexus 可以达到相当接近 30 毫秒的输出延迟。


0
投票

Android 上的延迟情况与原始帖子相比发生了显着变化。现在大多数安卓旗舰手机都可以实现不错的低延迟。

AAudio API 允许应用程序写入由硬件读取的 MMAP 缓冲区。这样就提供了尽可能最低的路径。这比直接写信给 ALSA 更好。

有一个用于在 Android 上启用低延迟的新清单: https://developer.android.com/games/sdk/oboe/low-latency-audio#oboe

© www.soinside.com 2019 - 2024. All rights reserved.