Вопрос

Я пытаюсь работать по следующему вопросу в Android Opensles.

Спецификация OpenSles говорит:

http://www.khronos.org/registry/sles/ specs / opensl_es_specification_1.0.1.pdf - 8.12

Когда игрок находится в состоянии sl_playstate_playing, что Управляется интерфейсом SLPLAYITF [см. Раздел 8.32], добавление Буферы неявно начнут воспроизведение. В случае голода Недостаточно буферов в очереди, игра аудиоданных останавливается. Игрок остается в состоянии SL_PlayState_playing. При очереди Дополнительные буферы, воспроизведение звуковых данных возобновляет. Обратите внимание, что Греление буферов в очереди вызывает звуковые пробелы в аудиоданных поток. В случае, когда игрок не в игровом состоянии, Добавление буферов не запускает воспроизведение звука.

Увы, как только мы доберемся до Android:

http://mobilepearls.com/labs/ NANED-ANDIRD-API / NDK / DOCS / OPENSLESS / index.html - декодировать аудио на PCM

в зависимости от реализации платформы, декодирование может потребовать Ресурсы, которые не могут быть оставлены бездействующими. Поэтому не рекомендуется голодать декодер, неспособность обеспечить достаточное количество пустого PCM буферы, например Вернувшись с простую очередь буфера Android Обратный вызов без восполнения другого пустого буфера. Результат голодание декодера не указано; Реализация может выбрать либо опустите данные декодированных PCM, приостановите процесс декодирования или в Тяжелые случаи прекращают декодер.

Это неспецифическое поведение полностью прекратило прогресс в моем проекте, и я потерян как лучше всего работать. Декодирование всего файла к PCM в памяти или на диске не является опцией, мне действительно нужно это быть потоковым решением. Любая помощь по этому будет масштабно оценена

Это было полезно?

Решение

Там не похоже на этот вопрос.Другие проекты, кажется, используют более низкие аписсы (такие как libstageFright), чтобы сделать их декодирование.Этот метод позволяет получить данные

[править] Вокруг голода нет никакого пути.Android просто не придерживается спецификации.По сути, вам нужно в память в память и убедиться, что вы используете паузу и возобновите к декодированию, когда вам необходимо контролировать поток данных.

Это обсуждение объекта в группе Google NDK

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top