Мы реализуем программу для телефонов Android, которые воспроизводят аудио, транслируемые из Интернета. Здесь примерно то, что мы делаем:
- Загрузите собственный зашифрованный формат.
- Расшифруйте, чтобы получить фрагменты обычных MP3-данных.
- Декодировать данные MP3 для сырых данных PCM в буфере памяти.
- Подключите исходные данные PCM к AudioTrack
Нашими целевыми устройствами пока являются Droid и Nexus One. Все отлично работает на Nexus One, но декодирование MP3 слишком медленное на Droid. Воспроизведение звука начнет пропускаться, если мы поместим Droid под нагрузкой. Нам не разрешено декодировать данные MP3 на SD-карту, но я знаю, что не наша проблема в любом случае.
Мы не писали наш собственный MP3-декодер, но использовали MPADEC (http://sourceforge.net/projects/mpadec/). Это бесплатно и было легко интегрироваться с нашей программой. Мы скомпилируем его с помощью NDK.
После исчерпывающего анализа с помощью различных инструментов для профилирования мы убеждены, что этот декодер отстает.
Здесь варианты, о которых мы думаем:
-
Найдите другой MP3-декодер, который мы можем скомпилировать с Android NDK. Этот MP3-декодер должен быть либо оптимизирован для работы на мобильных устройствах ARM, либо, возможно, использовать математику с целым числом или некоторые другие оптимизации для повышения производительности.
-
Поскольку встроенная служба Android MediaPlayer будет использовать URL-адреса, мы могли бы реализовать крошечный HTTP-сервер в нашей программе и обслуживать MediaPlayer с расшифрованными MP3 файлами. Таким образом, мы можем использовать встроенный MP3-декодер.
-
Получите доступ к встроенному MP3-декодеру через NDK. Я не знаю, возможно ли это.
Есть ли у кого-нибудь предложения о том, что мы можем сделать, чтобы ускорить наше декодирование MP3?
- Роб Sz