Android 4.4(API 19)上的MediaPlayer流媒体问题

6
我的应用在使用MediaPlayer进行流媒体播放时出现问题,具体表现在Nexus 5设备上。我不确定是Nexus 5还是API Level 19导致了这个问题。基本上我的MediaPlayer被准备好后,我调用MediaPlayer.start(),但是MediaPlayer并没有开始流媒体播放。
这种情况是随机发生的,只在我的Nexus 5设备上出现。当出现这种情况时,如果我尝试寻找MediaPlayer,它就会开始播放。是否有其他人遇到了同样的问题?
更新:我已经向Android提交了一个错误报告:https://code.google.com/p/android/issues/detail?id=62304

我在4.4(Nexus 5)上遇到了完全相同的问题。视频会播放,但启动需要很长时间。切换到新的ART运行时使我不必寻找以启动视频。 看起来谷歌破坏了编解码器。 - Mark
感谢评论!知道我不是唯一面临这些问题的人,非常有帮助。我还注意到MediaPlayer会流式传输,但停止播放剪辑的时间比应该早:https://dev59.com/tmIj5IYBdhLWcg3wwHpr@Mark,感谢提示。这可能有效,但要告诉所有我的应用程序用户切换到这个并不是一个可行的解决方案。我将发布一个针对Android的错误,并看看他们会说什么。 - shoke
我已经在Android上提交了一个错误报告:https://code.google.com/p/android/issues/detail?id=62304 - shoke
1
我正在开发的应用程序也遇到了完全相同的问题(在我的Nexus 5上测试,使用未root的原生Android 4.4)。但是,在运行着Android 4.3的Galaxy Nexus上使用Paranoid Android时,这个错误并没有出现。目前看来,调用MediaPlayer.start()后立即调用seekTo(0)似乎是一个有效的解决方法。 - MrMaffen
对于这个问题似乎有一个解决方法:"start()不启动"的问题只会出现在实时事件流中,其中段目标持续时间为1秒或更短的情况下。解决播放不足够快的方法是使用段大小总和略大于"10秒左右"的方案,并且附加开销要尽量小。例如,7-10秒的段比5-7秒或10-12秒的段慢。希望对你有所帮助。 - shoke
显示剩余2条评论
2个回答

1

不确定是否相关,我在本地文件播放时遇到了类似的问题,只有在4.4上偶尔出现,而在4.3上无法复现。这仅在我想要重复使用现有的MediaPlayer播放新歌曲时发生。

解决方案:在reset()和setDataSource()之前必须调用stop():

    stop();
    reset();

    try {
        setDataSource(context, uri);
        prepareAsync();
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (SecurityException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

0

时间解决方案: 在onprepare中 在开始之前尝试这段代码:

if (mSeekWhenPrepared != 0) {
            seekTo(mSeekWhenPrepared);
        } else {seekTo(0);}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接