是否可以在Android上播放HLS视频而不跳过方向更改?

时间:2012-12-12 01:01:21

标签: android http-live-streaming

我想编写将播放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服务......但我认为在视频播放器的情况下这是不好的和错误的方式。

那么,有没有人有任何想法? :)

2 个答案:

答案 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类。