我想编写将播放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服务......但我认为在视频播放器的情况下这是不好的和错误的方式。
那么,有没有人有任何想法? :)
答案 0 :(得分:1)
你可以:
1:通过在清单文件中指定方向来修复方向:
<activity
android:screenOrientation="landscape">
...
</activity>
2:您可以告诉Android即使在方向更改后也能保持您的应用运行。 在这种情况下,活动不会被销毁和重新创建。
<activity
android:configChanges="orientation">
...
</activity>
答案 1 :(得分:0)
将其添加到清单文件中的活动代码:
android:configChanges="orientation|keyboardHidden"
示例:
<activity android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/title_activity" />
这对我有用,但我使用的是MediaPlayer类。