Мы реализуем программу для телефонов Android, воспроизводящих потоковое аудио из Интернета. Примерно, что мы делаем:Декодирование MP3 на Android
- Загрузите собственный зашифрованный формат.
- Расшифруйте, чтобы получить куски обычных данных MP3.
- Декодировать данные MP3 для сырых данных PCM в буфере памяти.
- Pipe исходных данных 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, либо, возможно, использовать математику с целым числом или некоторые другие оптимизации для повышения производительности.
Поскольку встроенная служба MediaPlayer для Android будет использовать URL-адреса, мы могли бы реализовать крошечный HTTP-сервер в нашей программе и обслуживать MediaPlayer с расшифрованными MP3-файлами. Таким образом, мы можем использовать встроенный MP3-декодер.
Получите доступ к встроенному MP3-декодеру через NDK. Я не знаю, возможно ли это.
Есть ли у кого-нибудь предложения относительно того, что мы можем сделать, чтобы ускорить наше декодирование MP3?
- Роб Sz
В вашей опции # 2 , Я ожидал бы, что HTTP-накладные расходы увеличит прибыль, получаемую от использования встроенной поддержки потоковой передачи MediaPlayer. – CommonsWare
Если я не ошибаюсь, встроенный 'MediaPlayer' также может передавать из любого' content: // 'URI, который по существу дает вам канал для записи. –
@jleedev: Не могли бы вы рассказать об этом. Звучит очень интересно! – Peterdk