应该有字幕控制器已经设置 Mediaplayer 错误 Android
Posted
技术标签:
【中文标题】应该有字幕控制器已经设置 Mediaplayer 错误 Android【英文标题】:Should have subtitle controller already set Mediaplayer error Android 【发布时间】:2013-12-03 23:10:08 【问题描述】:每当我播放媒体时,它都会在 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】:最近一个开发者added subtitle support to 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)
【讨论】:
我同意 - 如果字幕轨道不存在,这不是错误。最多提供信息。 好的,当然,但是有没有简单的方法来抑制它?它正在破坏我的 logcat 输出...... 可以做一个过滤器,如果真的很烦,重新编译android,或者为你的歌曲设置一个空的SubtitleController。 @Haketo 你如何设置一个空的 SubtitleController?抱歉,我在文档中没有看到这个。 当然文档没有提供这些信息。如果您看过 MediaPlayer 的共享代码,您会看到 SubtitleController 有一个 setter(所以应该可以),但不幸的是似乎不可用。【参考方案2】:要删除 logcat 上的消息,我添加了一个字幕来跟踪。 在 Windows 上,右键单击轨道 -> 属性 -> 详细信息 -> 在字幕上插入文本。 完成:)
【讨论】:
对此有几个想法:1)在很多情况下修改源文件并不可行。 2) 你没有解释为什么添加字幕轨道会修复 MediaPlayer 中字幕控制器上的错误。 错误是“应该已经设置了字幕控制器”,所以我添加了一个字幕来跟踪以避免出现此错误消息。 字幕或字幕控制器。您是说通过在视频上添加字幕轨道,媒体播放器会自动生成控制器?【参考方案3】:您也只能设置mediaPlayer.reset()
并在onDestroy
中将其设置为释放。
【讨论】:
以上是关于应该有字幕控制器已经设置 Mediaplayer 错误 Android的主要内容,如果未能解决你的问题,请参考以下文章
Android MediaPlayer 警告:应该已经设置了字幕控制器