Я нахожу большие различия во времени, которое требуется для Media Media Player для подготовки к воспроизведению в реальном времени с различными потоками.
Жесткие данные
Я добавил logging между prepareAsync() и обратным вызовом onPrepared (MediaPlayer mp) и протестировал несколько потоков несколько раз каждый. Времена для каждого потока были очень последовательными (+/- одна секунда), и вот результаты:
- поток новостей MPR: 27 секунд (http://newsstream1.publicradio.org:80/)
- MPR классический музыкальный поток: 15 секунд (http://classicalstream1.publicradio.org:80/)
- MPR Текущий поток: 7 секунд (http://currentstream1.publicradio.org:80/)
- поток PRI: 52 секунды (http://pri-ice.streamguys.biz/pri1)
Тесты были выполнены на Nexus S с Android 2.3.4 на 3G-соединении (~ 1100 Кбит/с).
Воспроизведение безпоточных аудиофайлов MP3 не является проблемой.
Вот фрагменты того, как я играю в потоки:
Подготовить MediaPlayer:
...
mediaPlayer.setDataSource(playUrl);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.prepareAsync();
...
Затем в onPrepared (MediaPlayer mp):
mediaPlayer.start();
Почему так долго нужно готовить некоторые потоки, но не другие? Вышеприведенные данные, по-видимому, предполагают, что это может быть основано на количестве данных, которые были буферизованы, а не на продолжительности буферизованного аудиоконтента. Неужели это действительно так?
Обновление: Я тестировал прямую трансляцию на физических устройствах с Android 1.6, 2.2 и 2.3.4 и эмуляторами с 1.6, 2.1, 2.2, 2.3.1 и 2.3.3. Я вижу только длительную задержку на 2.3.3 и 2.3.4. Старшие версии запускают воспроизведение в течение 5 секунд.