Если контроллер субтитров уже установил ошибку Mediaplayer Android

138

Каждый раз, когда я проигрываю медиа, он показывает предупреждение в DDMS Should have subtitle controller already set

МОЙ КОД:

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

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

ЖУРНАЛ DDMS

Должен быть уже установлен контроллер субтитров

информация / предупреждение (2, 0)

Когда я искал в Google, ни одна тема не касалась этого. Как мне от этого избавиться или отключить?

Сай
источник

Ответы:

188

Недавно разработчик добавил поддержку субтитров в VideoView .

Когда MediaPlayerначинает воспроизводить музыку (или другой источник), он проверяет наличие SubtitleController и показывает это сообщение, если он не установлен. Кажется, его не волнует, является ли источник, который вы хотите воспроизвести, музыкой или видео. Не знаю, зачем он это сделал.

Краткий ответ: не обращайте внимания на это «Исключение».


Редактировать :

Все еще присутствует в Lollipop ,

Если MediaPlayerиспользуется только для воспроизведения звуковых файлов , и вы действительно хотите удалить эти ошибки в LogCat, код ниже устанавливает подачу empty SubtitleControllerк MediaPlayer.

Он не должен использоваться в производственной среде и может иметь некоторые побочные эффекты.

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

Этот код пытается сделать следующее из скрытого API

SubtitleController sc = new SubtitleController(context, null, null);
sc.mHandler = new Handler();
mediaplayer.setSubtitleAnchor(sc, null)
Хакето
источник
12
Согласен - это не ошибка, если дорожка с субтитрами не существует. Информационный максимум.
Someone Somewhere
4
хорошо, конечно, но есть ли простой способ подавить это? это сводит на нет мой вывод logcat ...
TJ Ellis
Могу сделать фильтр, я думаю, действительно ли это раздражает, перекомпилировать андроид или установить пустой SubtitleController для вашей песни.
Hacketo
1
@Hacketo, как установить пустой SubtitleController? Извините, я не вижу этого в документации.
Фрэнк Швитерман
2
Конечно, документация не предоставляет эту информацию. Если вы видели общий код MediaPlayer, вы можете видеть, что существует установщик для SubtitleController (так что это должно быть возможно), но, к сожалению, он недоступен.
Hacketo
8

Чтобы удалить сообщение в logcat, я добавляю подзаголовок для отслеживания. В окнах щелкните правой кнопкой мыши дорожку -> Свойство -> Детали -> вставьте текст в субтитры. Выполнено :)

СтефаноМ5
источник
Пара мыслей по этому поводу: 1) изменение исходного файла во многих ситуациях практически невозможно. 2) вы не объяснили, почему добавление дорожки субтитров исправит ошибку на контроллере субтитров в MediaPlayer.
Трэвис Кастильо
Ошибка: «Контроллер субтитров уже должен быть установлен», поэтому я добавляю субтитры для отслеживания, чтобы избежать этого сообщения об ошибке.
StefanoM5
субтитры или контроллер субтитров. Вы говорите, что, имея дорожку субтитров в видео, медиаплеер автоматически генерирует контроллер?
Трэвис Кастильо
0

Также вы можете только установить mediaPlayer.reset()и onDestroyустановить его для выпуска.

Файзан Хан
источник