Android 3.0上的HLS(HTTP直播流)和寻找

25
我们有一个提供程序,为我们提供用于HLS流的m3u8文件(最初是为iOS应用程序使用而设计)。
Android 3.0+支持http live streaming(http://developer.android.com/guide/appendix/media-formats.html),事实上我们可以使用Android 3.0+上的标准VideoView播放这些m3u8文件。
编辑:Android似乎将此视为“实时”视频源,并禁用了寻找或计算视频持续时间的能力。(而iOS允许您在流内部自由查找)
是否有任何方法可以强制Android 3.0+在这些文件中进行查找?
以下是其他人可以测试的示例活动:
import android.app.Activity;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.VideoView;

public class SandboxActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        VideoView vw = (VideoView) findViewById(R.id.videoView);
      vw.setVideoPath("http://devimages.apple.com/iphone/samples/bipbop/gear4/prog_index.m3u8"); 
        vw.setMediaController(new MediaController(this));
        vw.requestFocus();
        vw.start();
    }
}

还有一个示例布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center" android:id="@+id/root">

    <VideoView
        android:id="@+id/videoView"
        android:layout_width="wrap_content"
        android:layout_height="match_parent" />
</RelativeLayout>

这是使用Apple提供的示例HLS链接。


你最终找到了解决这个问题的方法吗? - Lorenzo Polidori
我想在HLS直播流中实现寻找功能。你找到了任何解决方案吗? - Talha Mir
5个回答

13

看一下你所提到的页面

上面写着:

  • 协议版本3(Android 4.0及以上)
  • 协议版本2(Android 3.x)

在这里,您可以查看HLS草案。 您可以在页面顶部选择版本。

第一次提到寻找(seeking)出现在第3个草案中(相对于Android 3.x的第2个草案)

日期和时间的价值提供了媒体时间轴到适当的挂钟时间的信息映射,该信息可以用作寻找的基础

只是为了确定。 我没有完整地阅读整个草案。 但我猜Android在Android 3.0中很早就实现了草案,并且他们可能只部分实现了它,这足以播放,但不足以寻找。

我认为您无法轻松解决此问题,除非引入第三方HLS客户端(正如vipw建议的那样)


5
抱歉,您试图从一块石头中获取血液。Android 3.0仅支持HLS的非常有限子集,并且为了在直播流中支持寻找,您需要比Google提供的更好的HLS客户端。

1

0

我猜测你所描述的寻找行为是使用仅限于iframe播放列表(#EXT-X-I-FRAMES-ONLY)实现的,这需要一个支持至少Pantos规范第4版的客户端。


0
与此有些相关的是,似乎存在一个错误,阻止了直播HLS流从它们应该开始的直播点开始。我想这可能是由于这个寻找限制造成的。 当您在Android上启动一个直播HLS流(没有EXT-X-ENDLIST标记),核心HLS解析组件中存在一个错误,无法从直播点(流的结尾)开始,而是从流的开头开始。
关于此问题,在code.google.com上已经提交了一个错误报告-您可以在那里“加星”或投票支持它。

http://code.google.com/p/android/issues/detail?id=37156


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