Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 重新创建surfaceview时是否可以重新启动mediaplayer?(安卓)_Android_Video_Media Player_Surfaceview - Fatal编程技术网

Android 重新创建surfaceview时是否可以重新启动mediaplayer?(安卓)

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

我有一个活动(比如活动A),它使用mediaplayer在surfaceview中显示视频。
用例是暂停视频,开始另一个活动(比如活动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的表面或表面支架