【问题标题】:Is it possible to play HLS video on Android without skipping on orientation changes?是否可以在不跳过方向更改的情况下在 Android 上播放 HLS 视频?
【发布时间】:2012-11-29 15:32:41
【问题描述】:

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

那么,有人知道吗? :)

【问题讨论】:

    标签: android http-live-streaming


    【解决方案1】:

    你可以:

    1:通过在 Manifest 文件中指定方向来修复方向:

     <activity
        android:screenOrientation="landscape">
    ...
    </activity>
    

    2:即使在方向更改后,您也可以告诉 android 让您的应用继续运行。 在这种情况下,Activity 不会被销毁并重新创建。

     <activity
        android:configChanges="orientation">
    ...
    </activity>
    

    【讨论】:

    • 谢谢!我不知道第二种方式不会破坏活动。
    【解决方案2】:

    将此添加到清单文件中的活动标签:

    android:configChanges="orientation|keyboardHidden"
    

    例子:

     <activity android:name=".MainActivity"
        android:configChanges="orientation|keyboardHidden"
        android:label="@string/title_activity" />
    

    这对我有用,但我使用了 MediaPlayer 类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-13
      • 2012-01-26
      • 2010-09-25
      • 2013-12-26
      • 2011-07-13
      • 1970-01-01
      • 2015-12-22
      相关资源
      最近更新 更多