Я пишу приложение для потоковой передачи аудио, которое буферизует фрагменты файла AAC, декодирует эти фрагменты в массивы байтов PCM и записывает аудиоданные PCM в AudioTrack. Иногда я получаю следующую ошибку, когда пытаюсь перейти к другой песне, вызвать AudioTrack.pause() или AudioTrack.flush():
obtainbuffer timed out -- is cpu pegged?
А затем происходит то, что доля секунды звука продолжает воспроизводиться. Я попытался прочитать набор файлов AAC с SD-карты и получил тот же результат. Поведение, которое я ожидаю, заключается в том, что звук немедленно останавливается. кто-нибудь знает, почему это произошло? Интересно, это проблема с задержкой звука в Android 2.3.
редактировать: аудио AAC содержит заголовок ADTS. Заголовок + звуковая полезная нагрузка составляют то, что я называю ADTSFrame. Они подаются на декодер по одному кадру за раз. Результирующий массив байтов PCM, возвращаемый из уровня C в уровень Java, передается в Android AudioTrack API.
редактировать 2: Сегодня я получил свой Nexus 7 (Android 4.1 OS). Загрузил то же приложение на устройство. вообще не было таких проблем.