0

我正在编写一个音频流应用程序来缓冲 AAC 文件块,将这些块解码为 PCM 字节数组,并将 PCM 音频数据写入 AudioTrack。有时,当我尝试跳到另一首歌曲、调用 AudioTrack.pause() 或 AudioTrack.flush() 时,会收到以下错误:

obtainbuffer timed out -- is cpu pegged?

然后会发生一瞬间的音频继续播放。我尝试从 sdcard 读取一组 AAC 文件并得到相同的结果。我期待的行为是音频立即停止。有谁知道为什么会这样?我想知道它是否是 Android 2.3 的音频延迟问题。

编辑:AAC 音频包含一个 ADTS 标头。标头 + 音频有效负载构成了我所说的 ADTSFrame。它们一次一帧地馈送到解码器。从 C 层返回到 Java 层的结果 PCM 字节数组被馈送到 Android 的 AudioTrack API。

编辑 2:我今天得到了我的 nexus 7(Android 4.1 操作系统)。将相同的应用程序加载到设备上。根本没有这些问题。

4

1 回答 1

0

采样率很有可能。您的一台设备可能支持您使用的采样率,而另一台则不支持。请检查一下。我有同样的问题,它与采样率有关。请使用 44.1kHz (44100) 并重试。

于 2012-12-22T16:44:54.933 回答