Android MediaPlayer se está preparando demasiado tiempo

Hola, estoy usando MediaPlayer para reproducir un flujo regular de ShoutCast. El código es sencillo con prepareAsync () y un controlador para iniciar la reproducción. Mientras que funciona perfectamente con algunos flujos como DI.FM o ETN.FM (http://u10.di.fm:80/di_progressive), con otros (http://mp3.wpsu.org:8000/) ganó ' T pasa el estado de preparación. No se llama a otros oyentes.

//Uri streamUri = Uri.parse("http://u10.di.fm:80/di_progressive"); /* works */ Uri streamUri = Uri.parse("http://mp3.wpsu.org:8000/"); /* stuck on prepare state */ MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer.setOnPreparedListener(new OnPreparedListener() { public void onPrepared(MediaPlayer mp) { mp.start(); } }); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.setDataSource(this.getBaseContext(), streamUri); mediaPlayer.prepareAsync(); 

Cualquier comentario es apreciado!

Creo que hay algunos problemas de compatibilidad con el servidor final. Esto es bastante extraño ya que el emulador maneja ok en mi caso – no sólo en mi Froyo Galaxy S, a pesar de que es la misma versión de la API.

Podría ser un problema de códec, http streaming cuestión, no lo sé. Pero todos los servidores que fallan tienden a ser los antiguos, con "Copyright 1998 – 2004" en la parte inferior … No es exactamente reciente o hasta la fecha se podría pensar.

Una solución potencial (que no he probado aún) sería utilizar StreamProxy , lo que también haría que tu código sea compatible con 2.1 y posiblemente versiones anteriores también. A costa de trabajo extra, código extra, y sin duda errores adicionales …

En caso de que no lo sepas, hay otro informe de error de reproductor para 2.2 que también puede ser relevante: El audio de streaming básico funciona en 2.1 pero no en 2.2

Estoy frente a un problema cuando MP "cuelga" en la preparación de estado demasiado tiempo (secuencia) y estoy tratando de detenerlo utilizando reset (). Esto hace que MP se bloquee y, por lo tanto, se congela toda la aplicación. Parece que no hay manera de detener a MP en la preparación del estado. Estoy pensando en usar prepare () envuelto en hilo en lugar de prepareAsync (). Entonces podré matar ese hilo. Por ahora lo hice de la siguiente manera:

 private void actionCancel(){ try { mp.setDataSource(new String()); } catch (Exception e) { e.printStackTrace(); android.util.Log.d(TAG,"actionCancel(): mp.setDataSource() exception"); mp.reset(); } } 

Y funciona 4me.
Además tengo un contador siguiente:

  @Override public void onBufferingUpdate(final MediaPlayer mp, final int percent) { if (!mp.isPlaying()){ // android.util.Log.d(TAG,"onBufferingUpdate(): onBufferingUpdateCount = "+onBufferingUpdateCount); if (onBufferingUpdateCount>MAX_BUFFERING_UPDATES_AT_PREPARING_STATE) restartMP(); onBufferingUpdateCount++; return; } } 

Descubrí que este oyente siempre se activa en la preparación del estado. Así que si se dispara más de 10 veces y MP todavía no está jugando sólo estoy reiniciándolo:

 private void restartMP(){ if (mp!=null) if (mpState==MediaPlayerState.Preparing) actionCancel(); else mp.reset(); else mp = new MediaPlayer(); mpState = MediaPlayerState.Idle; onBufferingUpdateCount=0; //isRequestCancelled=false; requestTrackInfoStartedAt=0; requestPlay(); } 

Note MediaPlayerState es mi enum personalizado que tiene "Preparar" el valor. También mpState es una propiedad / campo de clase que contiene el estado actual de MediaPlayerState. Antes de comenzar prepareAsync () im setting mpState to MediaPlayerState.Preparing después de que termine im fijándolo a MediaPlayerState.Started u otro valor correspondiente.

  • Cómo reproducir o reanudar la música de otro reproductor de música de mi código?
  • Android - Reproducción de mp3 desde byte
  • Reproductor de vídeo en android (desarrollar)
  • YouTube Player API en android ya no funciona bien
  • Establecer mi aplicación como reproductor de música por defecto en android programatically
  • Servicio de Android que controla MediaPlayer
  • ¿Grabar audio en Android con MediaPlayer como fuente?
  • Android Exerciser Monkey comienza a reproducir archivos de audio al azar
  • Android mediaplayer flujo de archivos mp3 en línea
  • Cómo configurar presets eq en android?
  • Video androide, escuchar sonido pero no video
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.