Il controller dei sottotitoli dovrebbe già impostare l'errore Mediaplayer Android


137

Ogni volta che riproduco un file multimediale, viene visualizzato un avviso in DDMS Should have subtitle controller already set

IL MIO CODICE:

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

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

DDMS LOG

Il controller dei sottotitoli dovrebbe essere già impostato

informazioni / avviso (2, 0)

Quando ho cercato su Google, nemmeno un singolo argomento ad esso correlato. Come posso eliminare o disabilitare questo?

Risposte:


187

Uno sviluppatore ha recentemente aggiunto il supporto per i sottotitoli a VideoView .

Quando MediaPlayerinizia a riprodurre una musica (o altra fonte), controlla se c'è un SubtitleController e mostra questo messaggio se non è impostato. Non sembra importare se la fonte che vuoi riprodurre è una musica o un video. Non sono sicuro del perché lo abbia fatto.

Risposta breve: non preoccuparti di questa "eccezione".


Modificare :

Ancora presente in Lollipop ,

Se MediaPlayerviene utilizzato solo per riprodurre file audio e si vuole veramente rimuovere questi errori nel logcat, il codice soffietto impostare un empty SubtitleControlleral MediaPlayer.

Non dovrebbe essere usato nell'ambiente di produzione e può avere alcuni effetti collaterali.

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;
}

Questo codice sta provando a fare quanto segue dall'API nascosta

SubtitleController sc = new SubtitleController(context, null, null);
sc.mHandler = new Handler();
mediaplayer.setSubtitleAnchor(sc, null)

12
Sono d'accordo - non è un errore se non esiste una traccia di sottotitoli. Informativo al massimo.
Someone Somewhere,

4
ok certo, ma c'è un modo semplice per sopprimerlo? sta scaricando il mio output logcat ...
TJ Ellis il

Posso creare un filtro, penso che sia davvero fastidioso, ricompilare Android o impostare un controller sottotitoli vuoto per la tua canzone.
Hacketo,

1
@Hacketo come si imposta un SubtitleController vuoto? Mi dispiace, non lo vedo nei documenti.
Frank Schwieterman,

2
Naturalmente la documentazione non fornisce queste informazioni. Se hai visto il codice condiviso di MediaPlayer puoi vedere che esiste un setter per SubtitleController (quindi dovrebbe essere possibile), ma sfortunatamente sembra non disponibile.
Hacketo,

8

Per rimuovere il messaggio su logcat, aggiungo un sottotitolo da tracciare. Su Windows, fai clic con il tasto destro del mouse sulla traccia -> Proprietà -> Dettagli -> inserisci un testo sui sottotitoli. Fatto :)


Coppia pensieri su questo: 1) la modifica del file sorgente non è realmente fattibile in molte situazioni. 2) non hai spiegato perché l'aggiunta di una traccia di sottotitoli potrebbe correggere un errore su un controller di sottotitoli in MediaPlayer.
Travis Castillo,

L'errore è "Dovrebbe avere già impostato il controller dei sottotitoli", quindi aggiungo un sottotitolo per tenere traccia di questo messaggio di errore.
StefanoM5,

sottotitoli o controller sottotitoli. stai dicendo che avendo una traccia di sottotitoli su un video il lettore multimediale genera automaticamente un controller?
Travis Castillo,

0

Inoltre puoi solo impostarlo mediaPlayer.reset()e onDestroyimpostarlo per il rilascio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.