Je constate de grandes différences dans le temps que prend le MediaPlayer Android pour se préparer à la lecture d'un flux en direct avec différents flux.
Les données concrètes
J'ai ajouté la journalisation entre prepareAsync() et le rappel onPrepared(MediaPlayer mp) et testé plusieurs flux plusieurs fois chacun. Les temps pour chaque flux étaient très cohérents (+/- une seconde), et voici les résultats :
- Flux de nouvelles MPR : 27 secondes (http://newsstream1.publicradio.org:80/)
- Flux de musique classique MPR : 15 secondes (http://classicalstream1.publicradio.org:80/)
- MPR The Current stream : 7 secondes (http://currentstream1.publicradio.org:80/)
- Flux PRI : 52 secondes (http://pri-ice.streamguys.biz/pri1)
Les tests ont été effectués sur un Nexus S avec Android 2.3.4 sur une connexion 3G (~1100 Kbps).
La lecture de fichiers audio MP3 non diffusés en continu ne pose pas de problème.
Voici des extraits de la façon dont je joue les flux :
Préparez MediaPlayer :
...
mediaPlayer.setDataSource(playUrl);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.prepareAsync();
...
Puis dans onPrepared(MediaPlayer mp) :
mediaPlayer.start();
Pourquoi la préparation de certains cours d'eau prend-elle autant de temps que celle d'autres ? Les données ci-dessus semblent suggérer que pourrait se fonder sur le montant de données qui ont été mises en mémoire tampon et non pas la durée du contenu audio mis en mémoire tampon. Est-ce vraiment possible ?
Mise à jour : J'ai testé le streaming en direct sur des appareils physiques avec Android 1.6, 2.2 et 2.3.4 et des émulateurs avec 1.6, 2.1, 2.2, 2.3.1 et 2.3.3. Je ne vois le long délai que sur 2.3.3 et 2.3.4. Les versions plus anciennes commencent la lecture dans les 5 secondes.