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 ExoPlayer 无法播放 HLS(HTTP 直播)