я в настоящее время пытаюсь свести к минимуму задержки звука для простого приложения:с низкой задержкой воспроизведение звука на Android
У меня есть видео на ПК, и я передающее аудио видео-ролика через RTP для мобильного клиента , С очень похожим алгоритмом буферизации я могу достичь 90 мс латентности на iOS, но ужасно ± 180 мс на Android.
Я угадываю разницу между well-known латентностью issues на Android.
Однако после прочтения вокруг немного, I came upon this article, в котором говорится, что:
с низкой задержкой аудио доступна с Android 4.1/4.2 в некоторых устройствах.
Звук с низкой задержкой может быть достигнут с использованием libpd, which is Pure Data library for Android.
я 2 вопроса, непосредственно связанные с этими 2 заявления:
Где я могу найти более подробную информацию о новой малой задержкой звука в Jellybean? This is all I can find but it's sorely lacking in specific information. Должны ли изменения быть прозрачными для меня или есть какие-то новые вызовы класса/API, которые я должен реализовать для меня, чтобы заметить какие-либо изменения в моем приложении? Я использую API AudioTrack, и я даже не уверен, что ему следует извлечь пользу из этого улучшения или если я буду изучать какой-то другой механизм воспроизведения звука.
Должен ли я изучать использование libpd? Мне кажется, что это единственный шанс добиться меньших латентностей, но поскольку я всегда думал о PD как утилите для синтеза звука, действительно ли это подходит для проекта, который просто захватывает кадры из сетевого потока и воспроизводит их обратно ? Я вообще не синтезирую. Я следую за неправильным тропом?
В качестве дополнительной записке, прежде, чем кто-то упоминает OpenSL ES, this article makes it quite clear that no improvements in latency should be expected from using it:
«Как OpenSL ES является родным C API, не-Dalvik применения нити, которые OpenSL вызова ES не имеют Dalvik связанные с отходами, такие как сбор мусора . Однако нет дополнительного преимущества в производительности для использования OpenSL ES, кроме этого. В частности, использование OpenSL ES не приводит к снижению задержки звука, более высоким приоритетам планирования, и т.д., чем то, что в целом обеспечивает платформа «
Я член команды Android, и я работать в тесном сотрудничестве с авторами статьи вы процитировать. Прохождение, которое вы цитируете, больше не является верным. Когда статья была написана, самые маленькие буферы, доступные OpenSL, все еще были довольно большими. Теперь, когда размер буфера был уменьшен в Jellybean, латентность упала до такой степени, что «связанные с Dalvik накладные расходы, такие как паузы в сборке мусора» является очень важным соображением. Единственный способ надежного использования меньших буферов Jellybean - использовать OpenSL. –