Debe tener controlador de subtítulos ya establecido error Mediaplayer Android
Cada vez que reproduzco un medio, muestra una advertencia en DDMS Should have subtitle controller already set
MI CÓDIGO:
- Media Player Looping: Android
- Exoplayer tocando archivos m3u8 en Android
- Android WebView Reproducción de vídeo HTML5 / h.264 / mp4, Cómo llegar a MediaPlayer
- ¿Cómo filtrar sólo los archivos multimedia relevantes en Android?
- Error al abrir el video en streaming
private void start() { mediaPlayer.start(); mediaPlayer.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { mp.stop(); mp.release(); } }); }
DDMS LOG
Debe tener el controlador de subtítulos ya establecido
Info / advertencia (2, 0)
Cuando busqué en Google, ni siquiera un solo tema relacionado con él. ¿Cómo puedo deshacerme o deshabilitarlo?
- Pausa y búsqueda en Android MediaPlayer
- Problemas de sincronización de Android MediaPlayer
- Android muestra flujo de vídeo en MediaPlayer y codifica con MediaCodec
- Cómo jugar InputStream de un archivo de audio que no está dentro de una url o almacenamiento?
- ¿Establecer el tiempo de espera de MediaPlayer?
- Java.io.IOException: setDataSource falló al reproducir grabado mp4
- Android MediaPlayer no está dispuesto a buscar a través de la secuencia de vídeo RTSP
- MediaPlayer error (1, -1004) también conocido como MEDIA_ERROR_IO intentando transmitir música en Samsung S3
Un desarrollador recientemente añadió soporte de subtítulos a VideoView .
Cuando MediaPlayer
comienza a reproducir una música (u otra fuente), comprueba si hay un SubtitleController y muestra este mensaje si no está configurado. No parece importarle si la fuente que usted quiere jugar es una música o un vídeo. No sé por qué lo hizo.
Respuesta corta: No te preocupes por esta "Excepción".
Editar:
Todavía presente en Lollipop ,
Si MediaPlayer
sólo se utiliza para reproducir archivos de audio y realmente desea eliminar estos errores en el logcat, el código a continuación establecer un empty SubtitleController
para el MediaPlayer
.
No debe utilizarse en el entorno de producción y puede tener algunos efectos secundarios.
static MediaPlayer getMediaPlayer(Context context){ MediaPlayer mediaplayer = new MediaPlayer(); if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.KITKAT) { return mediaplayer; } try { Class<?> cMediaTimeProvider = Class.forName( "android.media.MediaTimeProvider" ); Class<?> cSubtitleController = Class.forName( "android.media.SubtitleController" ); Class<?> iSubtitleControllerAnchor = Class.forName( "android.media.SubtitleController$Anchor" ); Class<?> iSubtitleControllerListener = Class.forName( "android.media.SubtitleController$Listener" ); Constructor constructor = cSubtitleController.getConstructor(new Class[]{Context.class, cMediaTimeProvider, iSubtitleControllerListener}); Object subtitleInstance = constructor.newInstance(context, null, null); Field f = cSubtitleController.getDeclaredField("mHandler"); f.setAccessible(true); try { f.set(subtitleInstance, new Handler()); } catch (IllegalAccessException e) {return mediaplayer;} finally { f.setAccessible(false); } Method setsubtitleanchor = mediaplayer.getClass().getMethod("setSubtitleAnchor", cSubtitleController, iSubtitleControllerAnchor); setsubtitleanchor.invoke(mediaplayer, subtitleInstance, null); //Log.e("", "subtitle is setted :p"); } catch (Exception e) {} return mediaplayer; }
Este código intenta hacer lo siguiente desde la API oculta
SubtitleController sc = new SubtitleController(context, null, null); sc.mHandler = new Handler(); mediaplayer.setSubtitleAnchor(sc, null)
Para eliminar el mensaje en logcat, agrego un subtítulo a la pista. En las ventanas, haga clic derecho en la pista -> Propiedad -> Detalles -> insertar un texto en el subtítulo. Hecho 🙂