应该有字幕控制器已经设置 Mediaplayer 错误 Android [英] Should have subtitle controller already set Mediaplayer error Android

查看:22
本文介绍了应该有字幕控制器已经设置 Mediaplayer 错误 Android的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

每当我播放媒体时,它都会在 DDMS 中显示警告 应该已经设置了字幕控制器

Whenever I play a media, it shows a warning in 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 日志

应该已经设置了字幕控制器

Should have subtitle controller already set

信息/警告 (2, 0)

info/warning (2, 0)

当我在 Google 上搜索时,甚至没有一个主题与之相关.我怎样才能摆脱或禁用它?

When I searched on Google, not even a single topic related to it. How can I get rid of or disable this?

推荐答案

一位开发者最近 为 VideoView 添加了字幕支持.

MediaPlayer 开始播放音乐(或其他来源),它会检查是否存在 SubtitleController,如果未设置则显示此消息.它似乎并不关心您要播放的源是音乐还是视频.不知道他为什么这样做.

When the MediaPlayer starts playing a music (or other source), it checks if there is a SubtitleController and shows this message if it's not set. It doesn't seem to care about if the source you want to play is a music or video. Not sure why he did that.

简短回答:不要在意这个异常".

仍然存在于 棒棒糖

如果 MediaPlayer 仅用于播放音频文件,并且您确实想在 logcat 中删除这些错误,则下面的代码将 empty SubtitleController 设置为 媒体播放器.

If MediaPlayer is only used to play audio files and you really want to remove these errors in the logcat, the code bellow set an empty SubtitleController to the 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 执行以下操作

This code is trying to do the following from the hidden API

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

这篇关于应该有字幕控制器已经设置 Mediaplayer 错误 Android的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆