【问题标题】:Determining current rendition for HTML5 HLS streams确定 HTML5 HLS 流的当前版本
【发布时间】:2014-04-11 14:30:22
【问题描述】:

我有一个 HTML5 <video> 元素,其来源是 .m3u8 (HLS stream)

我有一个 M3U8,它具有三种不同的再现:640x360960x5401280x720

在台式机上,我有一个用于播放视频的 Flash Player,因此 HTML5 后备仅适用于移动设备(iOS 和 Android) - 我在 iPad 上进行所有测试,一旦它工作正常,我会尝试在 Android 上运行,希望一切正常。

我的目标是在任何时间点找出视频元素正在播放的版本。呈现会随着用户带宽的变化而变化。

我尝试使用 .videoHeight 属性,但无论下载的版本如何,它总是返回 480 - 这特别奇怪,因为 480 甚至不是一个选项。

有谁知道我如何知道下载的版本?

【问题讨论】:

  • 也许您过早地阅读 .videoHeight 属性。您需要在活动期间阅读它,可能是加载的元数据。
  • 此页面提供了与视频元素交互的好方法:w3.org/2010/05/video/mediaevents.html
  • @vipw 我实际上正在创建一个模拟的“提示点”事件(setInterval 每 0.25 秒运行一次,检查当前时间是否在 x 和 x+0.3 之间) - 每 10 秒我检查一次 .videoHeight 属性,每次都是 480。
  • 我不排除这是网络浏览器中的错误。 HTML5 视频支持仍处于早期阶段。我想你可以向 Apple 提交错误。
  • @vipw 你说得对,经过大量测试我已经确认这是一个错误 - 尽管我相信这是 QuickTime 中的一个错误,而不是 Safari。看起来 Safari 只是嵌入了一个 QuickTime 元素并 ping 它以获取有关视频的信息。当处理具有多种不同视频质量的流时,QuickTime 将返回不正确的 .videoHeight 值。有趣的是,QuickTime 本身报告了正确的质量,所以它只是浏览器插件的问题。

标签: html video http-live-streaming m3u8


【解决方案1】:

清理一些从未得到答案的旧问题:

不幸的是,这是不可能的。大多数浏览器中的 HTMl5 视频规范和 HTML5 视频实现旨在抽象出播放视频所涉及的所有底层魔法。你给它一个来源,它就会播放。其他所有内容都完全隐藏,您无权访问。无法访问元数据通道,无法访问音频通道,无法访问比特率和分辨率信息,...

我至多开发了一个解决方案来猜测播放的是哪个分辨率。每 10 秒通过 AJAX 加载一个 1 MB 的文件。我测量了这个下载的速度来猜测他们当前的带宽。我知道 QuickTime 只有在您拥有双倍所需带宽时才会播放。因此,如果960x540 再现需要 1400 kbit/s,那么除非您有 2800 kbit/s 带宽,否则它将无法播放。

不是很好(每分钟浪费 6 MB 带宽),但总比没有好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-01
    • 2019-06-12
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多