我正在编写一个缓冲AAC文件块的音频流应用程序,将这些块解码为PCM字节数组,并将PCM音频数据写入AudioTrack。偶尔,当我尝试跳到另一首歌时,我会收到以下错误,请拨打AudioTrack.pause()或AudioTrack.flush():
obtainbuffer timed out -- is cpu pegged?
接下来发生的事情就是音频的瞬间继续播放。我试过从SD卡读取一组AAC文件,得到了相同的结果。我期待的行为是音频立即停止。有谁知道为什么会这样?我想知道它是否是Android 2.3的音频延迟问题。
编辑:AAC音频包含ADTS标头。标头+音频有效负载构成我正在调用的ADTSFrame。它们一次一帧地馈送到解码器。从C层返回到Java Layer的结果PCM字节数组被送到Android的AudioTrack API。
编辑2:我今天得到了我的nexus 7(Android 4.1操作系统)。将相同的APP加载到设备上。完全没有任何这些问题。
答案 0 :(得分:0)
采样率非常高。您的某个设备可能支持您使用的采样率,而另一个设备不能。请检查一下。我有同样的问题,它是关于采样率。使用44.1kHz(44100)并再试一次。