字幕コントローラーにはすでにMediaplayerエラーAndroidが設定されているはずです


137

メディアを再生するたびに、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で検索したとき、それに関連するトピックは1つもありませんでした。これを取り除くまたは無効にするにはどうすればよいですか?

回答:


187

開発者が最近VideoViewに字幕サポートを追加しました

ときにMediaPlayerそれが設定されていない場合SubtitleControllerやショーこのメッセージが表示されている場合、音楽(または他のソース)を再生開始は、それがチェックされます。再生したいソースが音楽かビデオかは気にしないようです。彼がそれをした理由がわかりません。

短い答え:この「例外」は気にしないでください。


編集:

まだロリポップに存在し、

場合MediaPlayerのみ、オーディオファイルを再生するために使用し、あなたが本当にlogcatにこれらのエラーを削除すると、コード怒鳴るがセットempty SubtitleControllerMediaPlayer

本番環境では使用しないでください。副作用が発生する可能性があります。

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
同意します-字幕トラックが存在しなくてもエラーではありません。情報提供のみ。
誰か

4
はい、確かに、それを抑制する簡単な方法はありますか?それは私のlogcat出力をごちゃまぜにしています...
TJエリス

フィルターが本当に面倒であるか、アンドロイドを再コンパイルするか、または曲に空のSubtitleControllerを設定するかどうかを判断できます。
Hacketo 2014

1
@Hacketo空のSubtitleControllerをどのように設定しますか?ドキュメントにこれは表示されません。
フランクSchwieterman

2
もちろん、ドキュメントはこの情報を提供していません。MediaPlayerで共有されているコードを見た場合は、SubtitleControllerのセッターがあることがわかります(可能なため)。残念ながら、利用できないようです。
Hacketo 2014

8

logcatのメッセージを削除するには、追跡する字幕を追加します。Windowsでは、トラックを右クリック->プロパティ->詳細->字幕にテキストを挿入します。完了:)


これについてのカップルの考え:1)ソースファイルの変更は、多くの状況では実際には実行できません。2)字幕トラックを追加するとMediaPlayerの字幕コントローラーのエラーが修正される理由を説明しなかった。
Travis Castillo 2017年

エラーは「字幕コントローラーが既に設定されているはずです」なので、追跡する字幕を追加して、このエラーメッセージを回避します。
StefanoM5 2017年

字幕または字幕コントローラー。ビデオに字幕トラックを含めることで、メディアプレーヤーが自動的にコントローラーを生成すると言っていますか?
Travis Castillo

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.