Powinien mieć już ustawiony kontroler napisów Błąd Mediaplayera Android


137

Zawsze, gdy odtwarzam multimedia, wyświetla ostrzeżenie w DDMS Should have subtitle controller already set

MÓJ KOD:

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

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

Dziennik DDMS

Powinien mieć już ustawiony kontroler napisów

informacja / ostrzeżenie (2, 0)

Kiedy szukałem w Google, ani jednego tematu z tym związanego. Jak mogę się tego pozbyć lub wyłączyć?

Odpowiedzi:


187

Deweloper niedawno dodał obsługę napisów do VideoView .

Kiedy MediaPlayerrozpoczyna odtwarzanie muzyki (lub innego źródła), sprawdza, czy istnieje SubtitleController i wyświetla ten komunikat, jeśli nie jest ustawiony. Wydaje się, że nie obchodzi go, czy źródłem, które chcesz odtwarzać, jest muzyka czy wideo. Nie wiem, dlaczego to zrobił.

Krótka odpowiedź: Nie przejmuj się tym „Wyjątkiem”.


Edytować :

Wciąż obecny w Lollipop ,

Jeśli MediaPlayerjest używany tylko do odtwarzania plików audio i naprawdę chcesz usunąć te błędy w LogCat kod poniżej ustawić empty SubtitleControllerdo MediaPlayer.

Nie należy go używać w środowisku produkcyjnym i może mieć pewne skutki uboczne.

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

Ten kod próbuje wykonać następujące czynności z ukrytego interfejsu API

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

12
Zgadzam się - to nie jest błąd, jeśli ścieżka z napisami nie istnieje. Co najwyżej informacyjne.
— Someone Somewhere,

4
ok, jasne, ale czy jest łatwy sposób, aby to stłumić? to marnuje wyjście mojego logcata ...
— TJ Ellis,

Myślę, że mogę utworzyć filtr, jeśli jest naprawdę irytujący, ponownie skompilować Androida lub ustawić pusty SubtitleController dla swojej piosenki.
— Hacketo

1
@Hacketo jak ustawić pusty SubtitleController? Przepraszam, nie widzę tego w dokumentach.
— Frank Schwieterman

2
Oczywiście dokumentacja nie zawiera tych informacji. Jeśli widziałeś udostępniony kod MediaPlayera, możesz zobaczyć, że istnieje setter dla SubtitleController (więc powinno być możliwe), ale niestety wydaje się niedostępny.
— Hacketo

8

Aby usunąć wiadomość na logcat, dodaję napisy do śledzenia. W systemie Windows kliknij prawym przyciskiem myszy na ścieżce -> Właściwość -> Szczegóły -> wstaw tekst do napisów. Gotowe :)


Kilka przemyśleń na ten temat: 1) modyfikowanie pliku źródłowego nie jest wykonalne w wielu sytuacjach. 2) nie wyjaśniłeś, dlaczego dodanie ścieżki napisów naprawiałoby błąd kontrolera napisów w MediaPlayer.
— Travis Castillo

Błąd to „Powinien mieć już ustawiony kontroler napisów”, więc dodaję napisy do śledzenia, więc unikaj tego komunikatu o błędzie.
— StefanoM5

podtytuł lub kontroler napisów. czy mówisz, że dzięki ścieżce napisów do filmu odtwarzacz multimediów automatycznie generuje kontroler?
— Travis Castillo

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.