我目前正在尝试最小化一个简单应用程序的音频延迟:
我在 PC 上有一个视频,我正在通过 RTP 将视频的音频传输到移动客户端。使用非常相似的缓冲算法,我可以在 iOS 上实现 90ms 的延迟,但在 Android 上却是可怕的 ±180ms。
然而,在阅读了一会之后,我发现了这篇文章,其中指出:
自 Android 4.1/4.2 起,某些设备可以使用低延迟音频。
使用 libpd 可以实现低延迟音频,它是 Android 的纯数据库。
我有 2 个问题,与这 2 个陈述直接相关:
在哪里可以找到有关 Jellybean 中新的低延迟音频的更多信息?这就是我能找到的全部,但它非常缺乏具体的信息。这些更改对我来说应该是透明的,还是我应该实施一些新的类/API 调用以让我注意到我的应用程序中的任何更改?我正在使用 AudioTrack API,我什至不确定它是否应该从这种改进中受益,或者我是否应该研究一些其他的音频播放机制。
我应该考虑使用 libpd 吗?在我看来,这是实现更低延迟的唯一机会,但由于我一直认为 PD 是一种音频合成实用程序,它真的适合从网络流中抓取帧并播放它们的项目吗? ? 我并没有真正进行任何合成。我走错路了吗?
作为附加说明,在有人提到 OpenSL ES 之前,这篇文章非常清楚地表明,使用它应该不会改善延迟:
“由于 OpenSL ES 是本机 C API,调用 OpenSL ES 的非 Dalvik 应用程序线程没有与 Dalvik 相关的开销,例如垃圾收集暂停。但是,除此之外,使用 OpenSL ES 没有额外的性能优势。在特别是,使用 OpenSL ES 不会导致比平台通常提供的更低的音频延迟、更高的调度优先级等。”