2013-11-20 5 views
1

Есть ли разумный способ воспроизведения буфера памяти, содержащего AAC (в контейнере MP4) на Android? Я не могу записать этот буфер на диск ... он должен быть воспроизведен из памяти.Воспроизвести буфер AAC на Android

Кажется, что мой единственный вариант - декодировать в PCM вручную и использовать AudioTrack, так как Android не предоставляет API, который воспроизводит буферы памяти, отличные от PCM. OpenSL ES поддерживает источники памяти, но Android этого не реализует.

+0

Есть ли какой-либо файл с отображением памяти, предоставляемый Android от Java? Я не слишком хорошо знаком с платформой, и я искал что-то подобное. Если существует такой класс и он возвращает объект FileDescriptor, вы должны передать его MediaPlayer.setDataSource(). –

+0

Не то, чтобы я знал. Вы можете использовать трубу для получения дескриптора файла (возможно, требуя, чтобы это было сделано в собственном коде), но дескриптор файла не будет доступен для поиска и, следовательно, не будет работать должным образом для игрока. – Fixee

ответ

0

Единственный способ, которым я могу найти, что это (как указано в моем вопросе), вручную декодировать AAC. Есть несколько пакетов для Android, которые делают это, возможно, ffmpeg является самым проверенным и хорошо известным. ffmpeg можно отделить до просто декодера AAC, поэтому потребность в памяти довольно мала (хотя разочарование заключается в том, чтобы ввести декодер в устройство, которое уже имеет один изначально).

Как только AAC декодируется в PCM, его можно воспроизводить на Java (AudioTrack) или изначально (OpenSL ES). Задержка воспроизведения заметно ниже для опции native, если это имеет значение для вас.

Смежные вопросы