Потоковая передача нескольких OGG одновременно в Android

Мне нужно иметь возможность воспроизводить два или более (скажем, до 5) коротких файлов ogg одновременно. Под одновременностью я подразумеваю совершенную синхронность. Я могу загрузить их в SoundPool и играть, но это иногда создает заметную разницу во времени начала воспроизведения, от которой я хочу избавиться.

Насколько я понимаю, этого можно избежать, если смешать PCM в один буфер и воспроизвести. Но OGG — это не PCM, и их нужно как-то эффективно декодировать перед воспроизведением, а задержка должна быть очень низкой, в идеале, как только пользователь нажимает кнопку. Итак, я решил, что мне нужен способ потоковой передачи OGG в PCM, и когда я получаю буферы, я буду микшировать их и передавать в AudioTrack. Мое требование — Android 2.3.3+, поэтому я не могу использовать новые кодеки, представленные в Jelly Bean.

Также, хотя сами OGG маленькие, их очень много. Таким образом, сохранение их всех декодированными в памяти (SoundPool или какое-либо предварительное декодирование) также может вызвать проблемы.

Может кто подскажет куда копать? Может ли OpenSL ES сделать это за меня? Или мне стоит подумать об интеграции ffmpeg? И возможна ли вообще одновременная передача файлов с малой задержкой?

Спасибо


person EvilDuck    schedule 12.06.2013    source источник
comment
Помните о присущей Android (до версии 4.2) неспособности воспроизводить звук с малой задержкой.   -  person ThaMe90    schedule 12.06.2013
comment
Это звучит удручающе   -  person EvilDuck    schedule 12.06.2013
comment
Да, уже было много дискуссий об Android и звуке с низкой задержкой. 4.2 дал ему большой импульс, но он все еще мог быть лучше.   -  person ThaMe90    schedule 12.06.2013


Ответы (1)


Вы можете воспроизводить звуки с помощью AssetPlayers, но это иногда создает заметную разницу во времени начала воспроизведения, да...

Итак, я рекомендую декодировать ogg с помощью Ogg Vorbis (например, здесь), а затем использовать этот буфер PCM для BufferPlayer.

Кстати, проверьте эти оболочки OpenSL ES

https://github.com/Suvitruf/Android-ndk/tree/master/OpenSLES

person Suvitruf - Andrei Apanasik    schedule 06.04.2014