Android 3.0 上的 HLS(http 直播)和寻求

Posted

技术标签:

【中文标题】Android 3.0 上的 HLS(http 直播)和寻求【英文标题】:HLS (http live streaming) on Android 3.0 and seeking 【发布时间】:2012-06-16 16:29:44 【问题描述】:

我们有一个提供程序,可以为我们提供用于 HLS 流的 m3u8 文件(最初旨在用于 ios 应用程序)。

android 3.0+ 支持 http 直播 (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_
    android:layout_
    android:gravity="center" android:id="@+id/root">

    <VideoView
        android:id="@+id/videoView"
        android:layout_
        android:layout_ />
</RelativeLayout>

这是使用来自 Apple 的示例 HLS 链接。

【问题讨论】:

你最后找到解决这个问题的办法了吗? 我也想在 HLS 直播中实现搜索。你找到解决办法了吗? 【参考方案1】:

看看这个(你也提到过)page

上面写着:

协议版本 3(Android 4.0 及更高版本) 协议版本 2 (Android 3.x)

您可以在这里查看draft's for HLS。您可以在页面顶部选择一个版本。

在草案 3 中首次提及搜索(与草案 2 Android 3.x 相比)

价值 日期和时间提供了时间线的信息映射 媒体到适当的挂钟时间,可用作 寻求

的基础

只是为了确定。我没有通读整个草稿。但是,我的猜测是Android在Android 3.0中实现了相当早的草案,他们可能已经部分实现了它,这足以玩,但它还不够寻求。

我不认为你有一个简单的解决方法,除了引入 3rd 方 HLS 客户端(如 vipw 所建议的那样)

【讨论】:

【参考方案2】:

对不起,伙计们,你们正试图从石头上取血。 Android 3.0 支持的 HLS 子集非常有限,为了支持在实时流中搜索,您将需要比 Google 提供的更好的 HLS 客户端。

【讨论】:

【参考方案3】:

我不确定,但由于 VideoView 不支持查找您的案例,您可以尝试一些不同的选项,例如:http://wiki.videolan.org/AndroidCompile(易于编译)

【讨论】:

【参考方案4】:

与此有点相关 - 似乎有一个错误会阻止实时 HLS 提要按应有的方式从实时点开始。我想这可能是由于这种寻求限制。 当您在 Android 上启动实时 HLS 提要(没有 EXT-X-ENDLIST 标记)时,核心 HLS 解析组件中存在一个错误,无法在实时点(提要结尾)开始,而是从流的开头开始。

在 code.google.com 上提交了一个关于此问题的错误 - 您可以在那里“加星”或投票:

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

【讨论】:

【参考方案5】:

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

【讨论】:

以上是关于Android 3.0 上的 HLS(http 直播)和寻求的主要内容,如果未能解决你的问题,请参考以下文章

Android 设备上的 HLS 加密

在 android 上的 hls 流上选择质量视频

Galaxy S3 上的 HLS 流式传输

Android ExoPlayer 无法播放 HLS(HTTP 直播)

可以将 HLS (http) 从 Android 应用程序发送到 Chromecast?

HTTP Live Streaming (HLS) 在 Android 4 上不自适应?