我正在编写一个音频流应用程序来缓冲 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 操作系统)。将相同的应用程序加载到设备上。根本没有这些问题。