我想编写将播放 HLS 视频的 Android 应用程序。我为此使用默认的 VideoView 控件:
VideoView player = (VideoView) findViewById(R.id.player);
String httpLiveUrl = "http://example.com/playlist.m3u8";
player.setVideoURI(Uri.parse(httpLiveUrl));
player.setMediaController(new MediaController(this));
player.requestFocus();
player.start();
一切正常,直到您更改设备方向(旋转它)。在这种情况下,Android 将使用 VideoView 实例和下载的 HLS 片段销毁当前活动。将从头开始创建新的活动实例。因此,VideoView (MediaPlayer) 必须建立连接并再次下载 HLS 片段(这需要大量时间)。此外,视频不会从当前位置开始,而是从头开始。
我知道有助于保存/恢复活动状态的活动方法,例如 onSaveInstancestate/onRestoreInstanceState,但我不知道如何序列化 VideoView 以使他通过方向更改。
我什至考虑过用于 MediaPlayer 的 Android 服务......但我认为在视频播放器的情况下这是不好的和不正确的方式。
那么,有人知道吗?:)