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

Posted

技术标签:

【中文标题】MediaPlayer:应该已经设置了字幕控制器:KitKat【英文标题】:MediaPlayer : Should have subtitle controller already set: KitKat 【发布时间】:2014-03-14 11:46:50 【问题描述】:

我遇到了一个奇怪的问题,我的音频文件有时会播放,有时不播放。问题是,当它决定不玩时,DDMS 会给我一个:

E/MediaPlayer﹕ Should have subtitle controller already set

因为这是一对一的音乐没有播放,我已经确定这可能是问题......

如果音乐没有播放并且我按下音量按钮,它就会开始播放。 如果我等待大约 30 秒没有播放,它会重新开始(不循环)。

这是怎么回事?我正在使用 KitKat

        player = new MediaPlayer();
        AssetFileDescriptor afd = null;
        try 
            afd = getAssets().openFd("Theme.mp3");
         catch (IOException e) 
            e.printStackTrace();
        
        try 
            player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); 
         catch (IOException e) 
            e.printStackTrace();
        
        try 
            player.prepare();
         catch (IOException e) 
            e.printStackTrace();
        
        player.setLooping(true); //restart playback end reached
        //player.setVolume(1, 1); //Set left and right volumes. Range is from 0.0 to 1.0
        player.start(); //start play back

【问题讨论】:

您找到解决问题的方法了吗? Should have subtitle controller already set Mediaplayer error android的可能重复 对不起,我也是那个没用的“我也是”,但是,你解决了吗?我在 only 使用 5.0 Lollypop 时遇到了同样的问题。相同的代码以前从未失败过,并且在 4.4.4 的模拟器中也不会失败。 这个问题的每个答案都不起作用。不要浪费你的时间。你想要这个:***.com/a/20149754/1048340 【参考方案1】:

查看 *** 上的 previous discussion 和引用的 Android commit,上面的代码可能无法完全初始化 MediaPlayer 对象。

用于媒体播放的KitKat example code 建议您致电:

mediaPlayer.setAudiostreamType(AudioManager.STREAM_MUSIC);

在你构造MediaPlayer之后,在你调用它的setDataSource方法之前。

【讨论】:

这并没有改变任何东西。 我不完全确定当时发生了什么。日志语句应该足以自行停止程序;唯一会执行此操作的 Android 日志是 Log.wtf。也许问题与上面发布的代码的调用方式有关? 可能是。我正在运行处理(扩展 pApplet)并在销毁 onPause 等时调用覆盖 onStart 的播放器逻辑... 虽然这更具推测性 - 我从未使用过 Processing - 您可能会考虑使用 MediaPlayer asynchronously。 Processing 尝试在运行时处理应用线程的方式与同步 MediaPlayer 调用期望处理它们的方式之间可能存在冲突。 我使用谷歌推荐的代码,包括 setAudioStreamType() ,但我仍然收到此错误。在主线程和异步中尝试过。同样的错误。【参考方案2】:

我遇到了同样的问题,我通过在实例化 MediaPlayer 后添加以下内容来修复它。

mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() 
                    @Override
                    public void onPrepared(MediaPlayer mp) 
                        if (mp == mediaPlayer) 
                            mediaPlayer.start();
                        
                    
                );

以前我正在实现 MediaPlayer.OnPreparedListener 并覆盖 onPrepared() 但它不起作用。

我希望这会有所帮助!

【讨论】:

【参考方案3】:

这应该可以解决您的问题(为我解决了问题):将其余代码后面的“player.start()”行替换为如下所示的异步回调:

player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() 
    @Override
    public void onPrepared(MediaPlayer mediaPlayer) 
        mediaPlayer.start();
    
);

这个错误只是一个 Log.e,而不是真正的错误。它不应该导致你的玩家不玩,我猜这只是因为当你尝试调用 start() 时玩家还没有完成准备。

E/MediaPlayer﹕ Should have subtitle controller already set

【讨论】:

不,这没有影响。我在这里遇到了同样的问题,而且我的代码曾经运行得很好。现在,在看到错误日志后,我立即停止(音频,而不是应用程序 - 应用程序很好,例如我可以启动另一个音轨)。【参考方案4】:

我已经很久没有开发这个应用程序了。这是我最终为使其正常工作所做的工作。 (在 KitKat 和 Lollipop 上测试)。我认为从 MediaPlayer 切换到 APMediaPlayer 是诀窍的一部分。

@Override
public void onDestroy() 
    if(player != null) 
        player.release();
        player = null;
    
    super.onDestroy();



@Override
public void onStart() 
    super.onStart();
    if(player != null) 
        player.start();
    
    else 
        player = new APMediaPlayer(this); //create new APMediaPlayer
        player.setMediaFile("Theme.mp3"); //set the file (files are in data folder)
        player.start(); //start play back
        player.setLooping(true); //restart playback end reached
        player.setVolume(1, 1); //Set left and right volumes. Range is from 0.0 to 1.0
    



@Override
public void onResume() 
    super.onResume();
    if(player != null) 
        player.start();
    


【讨论】:

【参考方案5】:

在清单文件中设置可能会对您有所帮助

 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

【讨论】:

这对OP提供的问题没有影响。 这与问题完全无关。

以上是关于MediaPlayer:应该已经设置了字幕控制器:KitKat的主要内容,如果未能解决你的问题,请参考以下文章

应该有字幕控制器已经设置 Mediaplayer 错误 Android

MediaPlayer 在暂停或 seekTo 后不会继续显示字幕 (.SRT)

MediaPlayer 的字幕功能不起作用(SRT 文件)

mediaplayer不能播放视频怎么办

如何一键暂停/播放多个 MediaPlayer 对象?

Android - MediaPlayer/SoundPool 性能?