Android 重新创建surfaceview时是否可以重新启动mediaplayer?(安卓)
我有一个活动(比如活动A),它使用mediaplayer在surfaceview中显示视频。Android 重新创建surfaceview时是否可以重新启动mediaplayer?(安卓),android,video,media-player,surfaceview,Android,Video,Media Player,Surfaceview,我有一个活动(比如活动A),它使用mediaplayer在surfaceview中显示视频。 用例是暂停视频,开始另一个活动(比如活动B),然后返回活动A。 活动A在前往B时停止,但未被破坏,这很好。 曲面视图(因为不可见)被破坏(从通知回调中观察到)。 返回活动A并使用start()重新启动media player时,media player会播放音频,但看不到视频。类似这样的错误会在Logcat上输出: 11-16 18:14:44.532: ERROR/Overlay(8630): Err
用例是暂停视频,开始另一个活动(比如活动B),然后返回活动A。
活动A在前往B时停止,但未被破坏,这很好。
曲面视图(因为不可见)被破坏(从通知回调中观察到)。
返回活动A并使用start()重新启动media player时,media player会播放音频,但看不到视频。类似这样的错误会在Logcat上输出:
11-16 18:14:44.532: ERROR/Overlay(8630): Error = Invalid argument from qbuf
不幸的是,使用surfaceCreated()
提供的surfacehold
的新实例没有帮助(即提供相同的错误)
我在不同的帖子中读到过一个解决方案,就是重置mediaplayer并完全重新启动,但这并不高效,因为最终用户必须等待整个播放器准备周期+搜索到流中的最后一个位置
如音频播放的事实所示,这应该是视频解码器和新的surfaceholder/view
之间的管道问题
恢复活动时,恢复视频播放的最佳解决方案(最佳=最快)是什么?您可以尝试使用VideoView,因为它包含Surface和MediaPlayer对象请小心,因为在历史堆栈中暂停并显示活动B时,操作系统可能会终止活动A。您应该编写代码以预期它
如果速度对你很重要,你可能会考虑不启动活动B,而是隐藏视频视图并在它的位置显示另一个视图。
< P>谢谢。处理活动可能会因为系统需要资源而被破坏这一事实是可以的
我可能会同意上面的观点。然后我需要处理用户按后退键返回视频
从ht media player的行为来看,似乎确实缺少了一些东西来让它按预期工作,即音频恢复(这意味着a/v的解复用正在正确进行),我猜这只是视频解码器和视频渲染器之间的管道问题。在安卓4下,这是可能的(对不起,我只有2.3和4.0,我没有在3.0中测试)。当您使用Surface和mediaplayer时,您不能更改mediaplayer的Surface。videoview也是如此
如果你打印日志,你会发现surfaceview被销毁,当你从其他应用返回时,它又被创建了
在Android 4.0中,您可以更改mediaplayer的表面或表面支架