Debe tener el controlador de subtítulos ya configurado Error de Mediaplayer Android

137

Cada vez que reproduzco un medio, muestra una advertencia en DDMS Should have subtitle controller already set

MI CÓDIGO:

private void start() {
    mediaPlayer.start();

        mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            mp.stop();
            mp.release();
        }
    });
}

REGISTRO DDMS

Debe tener el controlador de subtítulos ya configurado

información / advertencia (2, 0)

Cuando busqué en Google, ni siquiera un solo tema relacionado con él. ¿Cómo puedo deshacerme o deshabilitar esto?

Sai
fuente

Respuestas:

187

Un desarrollador recientemente agregó soporte de subtítulos a VideoView .

Cuando MediaPlayercomienza 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 quieres reproducir es una música o un video. No estoy seguro de por qué hizo eso.

Respuesta corta: no me importa esta "excepción".


Editar:

Todavía presente en Lollipop ,

Si MediaPlayersólo se utiliza para reproducir archivos de audio y que realmente desea eliminar estos errores en el Logcat, el código establece una abajo empty SubtitleControlleral MediaPlayer.

No debe usarse 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)
Hacketo
fuente
12
Estoy de acuerdo, no es un error si no existe una pista de subtítulos. Informativo a lo sumo.
Alguien en algún lugar
44
ok, claro, pero ¿hay alguna manera fácil de suprimirlo? está desperdiciando mi salida de logcat ...
TJ Ellis
Creo que puede hacer un filtro si es realmente molesto, recompilar Android o configurar un SubtitleController vacío para su canción.
Hacketo
1
@Hacketo, ¿cómo se configura un SubtitleController vacío? Lo siento, no veo esto en los documentos.
Frank Schwieterman
2
Por supuesto, la documentación no proporciona esta información. Si ha visto el código compartido de MediaPlayer, puede ver que hay un configurador para SubtitleController (por lo que debería ser posible), pero desafortunadamente parece que no está disponible.
Hacketo
8

Para eliminar el mensaje en logcat, agrego un subtítulo para rastrear. En Windows, haga clic derecho en la pista -> Propiedad -> Detalles -> inserte un texto en los subtítulos. Hecho :)

StefanoM5
fuente
Un par de pensamientos sobre esto: 1) modificar el archivo fuente no es realmente factible en muchas situaciones. 2) no explicó por qué agregar una pista de subtítulos solucionaría un error en un controlador de subtítulos en MediaPlayer.
Travis Castillo
El error es "Debería tener el controlador de subtítulos ya configurado", así que agrego un subtítulo para rastrear, así que evite este mensaje de error.
StefanoM5
subtítulo o controlador de subtítulos. ¿Estás diciendo que al tener una pista de subtítulos en un video, el reproductor multimedia genera automáticamente un controlador?
Travis Castillo
0

Además, solo puede configurarlo mediaPlayer.reset()y onDestroyconfigurarlo para que se libere.

Faizan Khan
fuente