在片段内旋转设备时仍保持视频播放?

3

已经有类似的问题发布,但在我的情况下,存在一些差异。我对横向和纵向模式具有不同的布局设计(两种模式都具有VideoView),所以我不能像下面这样使用configChanges:

android:configChanges="screenSize|orientation|keyboardHidden"

现在当我旋转时,所有东西都会重新创建。我尝试了retainState/saveInstanceState,但是没有成功。

我希望我的视频能够持续播放,就像YouTube应用程序一样。

任何帮助将不胜感激。

1个回答

1
如果您正在使用MediaPlayer类进行视频播放,我建议不要这样做。YouTube应用程序使用一个名为ExoPlayer的库,在Android设备上支持视频方面更为出色。它比较难设置和操作,但一旦成功在所有Android设备上播放视频的效果会更好。
话虽如此,您仍然需要停止视频并在特定时间段恢复播放。最好的方法是获取旋转时的时间戳,并在再次准备播放的表面就绪时(如果使用ExoPlayer库,则为onSurfaceCreateed或onSurfaceChanged事件)从该时间戳开始重新播放视频。

1
顺便提一下,这是可能的 - 请参见 Grafika 中的“双重解码”(https://github.com/google/grafika)作为示例 - 但它确实变得复杂。 - fadden
哦,非常好。我之前没有看到过,也不知道这个。非常感谢你提供的链接。了解新技术总是很好的事情。 - Devsil
@fadden Grafika项目需要最低18级API。如果我需要15级以下的怎么办? - Shadik Khan
如果您需要更低级别的API支持,您将不得不实现自己的解决方案以适用于该API。我能给出的最好建议是查看源代码,并尽可能地使用支持的项目进行反向工程。 - Devsil
@Sadiq 关键类(TextureView)是在API 14中添加的。您将无法使用MediaCodec,但可以将MediaPlayer输出发送到Surface(同样也是从API 14开始)。 - fadden

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