MediaPlayer: Debe tener un controlador de subtítulos ya establecido: KitKat
Estoy teniendo un problema extraño donde mi archivo de audio a veces se reproduce ya veces no se reproduce. La captura es que cuando decide no jugar, el DDMS me da una:
E/MediaPlayer﹕ Should have subtitle controller already set
Debido a que este es uno-a-uno con la música no jugando, he determinado que este es probablemente el problema …
- No se puede inicializar AudioEffect (LoudnessEnhancer) en MediaPlayer (API 19)
- Control de medios de pantalla de bloqueo para reproductor multimedia personalizado
- Reproductor de medios de Android con servicio
- Android Cómo obtener la barra de progreso del reproductor de medios y también cómo mostrarla en cada pantalla de actividad superior
- ¿A qué se refiere el ID de sesión de audio de Android MediaPlayer?
Si la música no está reproduciendo y presiono el botón de volumen empieza a tocar. Si espero unos 30 segundos de no jugar, empieza a empezar de nuevo (no en bucle).
¿Que está pasando aqui? Estoy en KitKat usando
player = new MediaPlayer(); AssetFileDescriptor afd = null; try { afd = getAssets().openFd("Theme.mp3"); } catch (IOException e) { e.printStackTrace(); } try { player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); } catch (IOException e) { e.printStackTrace(); } try { player.prepare(); } catch (IOException e) { e.printStackTrace(); } player.setLooping(true); //restart playback end reached //player.setVolume(1, 1); //Set left and right volumes. Range is from 0.0 to 1.0 player.start(); //start play back
- Reproductor de medios Android - rebobinar en el archivo MPEG-TS que se está actualizando
- Androids MediaPlayer reproduce video cada dos veces que la actividad entra
- Android MediaMetadataRetriever devuelve valores nulos de la mayoría de las claves
- Reproductor multimedia reproducir pausa en android
- SeekBar y reproductor multimedia en android
- Tiempo de espera predeterminado de Android MediaPlayer
- AndroId MediaPlayer método prepareAsync
- Reproducir varias canciones con MediaPlayer al mismo tiempo: solo una está jugando
Si observa una discusión previa sobre StackOverflow y la consolidación de Android, donde se introdujo, el código anterior podría no inicializar completamente el objeto MediaPlayer
.
El código de ejemplo KitKat para la reproducción de medios sugiere que debe llamar a:
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
Inmediatamente después de construir el MediaPlayer
, y antes de llamar a su método setDataSource
.
Tuve el mismo problema y lo arreglé agregando lo siguiente justo después de instanciar MediaPlayer.
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { if (mp == mediaPlayer) { mediaPlayer.start(); } } });
Anteriormente estaba implementando MediaPlayer.OnPreparedListener y reemplazando onPrepared () pero no funcionó.
¡Espero que esto ayude!
Ha sido un largo tiempo desde que estaba trabajando en esta aplicación. Esto es lo que terminé haciendo para que esto funcione. (Probado en KitKat y Lollipop). Creo que cambiar de MediaPlayer a APMediaPlayer fue parte del truco.
@Override public void onDestroy() { if(player != null) { player.release(); player = null; } super.onDestroy(); } @Override public void onStart() { super.onStart(); if(player != null) { player.start(); } else { player = new APMediaPlayer(this); //create new APMediaPlayer player.setMediaFile("Theme.mp3"); //set the file (files are in data folder) player.start(); //start play back player.setLooping(true); //restart playback end reached player.setVolume(1, 1); //Set left and right volumes. Range is from 0.0 to 1.0 } } @Override public void onResume() { super.onResume(); if(player != null) { player.start(); } }
Esto debería solucionar el problema (hizo por mí): Reemplazar la línea que dice "player.start ()" siguiendo el resto de su código con una devolución de llamada asíncrona así:
player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mediaPlayer) { mediaPlayer.start(); } });
Este error es sólo un Log.e, no es un error real. No debería hacer que tu reproductor no juegue, supongo que es sólo porque el jugador no había terminado de prepararse cuando intentas llamar a start ().
E/MediaPlayer﹕ Should have subtitle controller already set
En archivo de manifiesto puede ayudarle
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />