Firefox 中的视频自动缓冲

John Gruber 最近写了一篇文章,标题为为什么即使在支持 HTML5 'Video' 元素的浏览器中,它也实际上不可用

他主要对浏览器不尊重 autobuffer 属性感到沮丧。或者,更确切地说,浏览器默认情况下会自动缓冲。Safari 和 Chrome 似乎默认情况下会自动缓冲,但他错误地指出 Firefox 也一样。为了清楚起见:Firefox 默认情况下不会自动缓冲,也不会默认情况下自动播放。我不确定他的测试如何让他相信它会这样做,但我写了一些例子来证明它不会这样做。以下三个例子

测试此方法的最佳方式是加载您喜欢的浏览器并清除其缓存。然后加载您喜欢的网络监视器。然后加载没有设置 autobuffer 属性的页面。您可以通过外部工具查看浏览器实际使用了多少带宽。

在我尝试过的浏览器中,只有 Firefox 在其本机控件集中提供了有关实际缓冲了多少内容的有用反馈,因此您必须使用外部工具才能知道其他任何内容发生了什么。如果您加载了有两个视频的页面 - 一个设置了 autobuffer,另一个没有设置 -,您可以在 Firefox 中将鼠标悬停在它们上面,并查看一个已缓冲而另一个未缓冲。

测试页面上的视频相当大 - 约 115mb - 因此,即使在快速网络上,您也可以真正判断出它何时正在缓冲。

以下是我测试结果

这与我对 Safari 的了解一致。几个月前,我和一位 Apple WebKit 工程师谈过,他说台式机版 Safari 默认情况下会缓冲,并且说移动版 Safari 不会缓冲。

可能存在一些混淆,因为 Firefox 在您包含视频标签时确实会进行几次网络请求。这有两个原因

  • 获取视频的第一帧及其大小。它只下载视频开头的一小部分来获取第一帧,然后停止下载。
  • 如果您的服务器支持字节范围请求,它将跳转到视频的末尾以尝试确定视频的持续时间。如果您的服务器不支持字节范围请求,我们就无法获取持续时间。(Ogg 最初被设计为一种用于流式传输的格式,而不是用于静态文件,因此它在文件的头部不包含持续时间信息,尽管正在进行添加此功能的工作。)

如果您想了解 Firefox 如何使用带宽,请尝试 我几个月前写的这个带宽测试。 它使用一个 Firefox 独有的功能来读取视频下载时的进度信息,并大致了解该特定视频元素使用的带宽。它显示了您加载视频时的一点流量,然后显示了您按下播放按钮后它如何开始使用带宽。

但这表明我们理解 John 的观点,并且我们出于他指出的原因决定默认情况下不自动缓冲。

关于 Christopher Blizzard

每次发布都让网络变得更好。

Christopher Blizzard 的更多文章…


30 条评论

  1. Justin Dolske

    我认为您的带宽测试与内置的视频控件所做的事情相同… 有一个缓冲条表示视频下载了多少。对于自动缓冲视频,您会看到该条立即开始前进,对于非自动缓冲视频,您不会看到。

    我想知道 Gruber 是否对 autobuffer 属性是布尔属性感到困惑… [video autobuffer="false"] 将 *启用* 自动缓冲,因为布尔属性只检查其是否存在,而不是值。这是规范中最让我不喜欢的部分。[video autobuffer] 是唯一需要的,[video autobuffer="bacon"] 就规范而言具有相同的含义。

    2009 年 12 月 21 日 下午 6:24

  2. Justin

    在看到这个之前,我刚刚在 10 分钟前阅读了 Gruber 的文章。我尝试了 FF 3.5.6,它按你说的那样工作。很高兴看到 Firefox 在这里做出了正确的事情,但是由于其他浏览器即使没有指定也会自动缓冲,所以他的解决方案仍然是一样的。希望其他浏览器能够效仿 Firefox,并在下次更新中添加此功能。

    2009 年 12 月 21 日 下午 6:38

  3. Brodie

    很明显,Gruber 希望视频在用户点击播放之前不被触碰。他不想显示第一帧,也不想检测长度。他希望显示海报图片,直到用户点击播放之前什么也不做。这似乎非常合理,也是我期望在提供海报图片时表现出的行为。

    2009 年 12 月 21 日 晚上 8:50

  4. Mathias Bynens

    Justin:应该补充一点,autobufferautobuffer="autobuffer" 的简写。您说的是哪个规范?您是对的,autobuffer="bacon" 也可能有效,但根据规范,它是非法的

    许多属性是布尔属性。元素上存在布尔属性表示真值,而属性不存在表示假值。

    如果属性存在,它的值必须是空字符串,或者是一个与属性的规范名称进行 ASCII 不区分大小写匹配的值,没有前导或尾随空格。

    在布尔属性上不允许使用值“true”和“false”。要表示假值,必须完全省略该属性。

    2009 年 12 月 21 日 晚上 11:50

  5. Andy Baio

    John 修正了他的文章并为错误道歉。

    2009 年 12 月 22 日 上午 12:14

  6. Colm Cinneide

    嗨 mozer,

    (试图跟随 Eich 先生关于视频的内容真是“痛苦”。)

    也就是说,打开网页,使用视频,*还没有*出现,
    但对于我们,无论如何都是用户。

    。colm

    2009 年 12 月 22 日 上午 1:55

  7. Mathias Bynens

    你们是否不赞成/删除了我之前的评论?

    @Justin

    [video autobuffer] 是唯一需要的,[video autobuffer="bacon"] 就规范而言具有相同的含义。

    我不知道您说的是哪个规范,但是根据 HTML5 规范,autobuffer="bacon" 是非法的

    许多属性是布尔属性。元素上存在布尔属性表示真值,而属性不存在表示假值。

    如果属性存在,它的值必须是空字符串,或者是一个与属性的规范名称进行 ASCII 不区分大小写匹配的值,没有前导或尾随空格。

    在布尔属性上不允许使用值“true”和“false”。要表示假值,必须完全省略该属性。

    您是对的,浏览器应该将 autobuffer="bacon" 解释为 autobuffer="autobuffer",但是说它在规范中是相同的,这完全是错误的。

    2009 年 12 月 22 日 上午 3:20

  8. Martin Kliehm

    @justin 当 autobuffer=”false” 等于 autobuffer=”bacon” 或 autobuffer=”true” 时,规范的这部分需要修复。这太错误了,不直观,而且容易出现创作错误。另外,如果“false”实际上表示“true”,那么您如何禁用它呢?哦,您不能,因为规范说浏览器可以忽略它。:(

    2009 年 12 月 22 日 上午 5:59

  9. Ben De Rydt

    >> 获取视频的第一帧及其大小。它只下载视频开头的一小部分来获取第一帧,然后停止下载。 <<

    为什么费这么大的劲,直接显示海报图片不就行了?我简直不敢相信海报图片在最新的官方 Firefox(3.5.6)上不起作用。

    另外,在 javascript 中设置 src 并调用 video.load() 也不起作用。

    2009 年 12 月 22 日 上午 6:07

  10. Adam Luter

    实际上是 Firefox 支持 video 标签,阻碍了视频标签出现在我们所有网站中的原因。在此之前,我们可以在我们的 Flash 播放器周围放置视频,我们可以很高兴的是,至少在 Safari 上,“工作”了,而其他人可以使用 Flash 来播放我们的视频。

    然而,从 Firefox 3.5 开始,我们不能再这样做,因为 Firefox 不支持与 Safari 相同的编解码器,而只支持 OGG。现在,这本身并不是问题。问题是:如果您有一个视频标签,Firefox 假设它应该激活它,即使没有列出任何 OGG 源。所以,除非您将所有视频都编码为 OGG 和 MP4,否则您无法使用视频标签,否则 Firefox 用户将看到一个大大的空白框。

    重申一下,只包含 MP4 文件的视频标签*不能*回退到 Flash 播放器(在 Firefox 中)。好吧。

    2009 年 12 月 22 日 下午 06:32

  11. Carl

    iPhone 似乎在您点击页面上电影图标之前不会缓冲。

    2009 年 12 月 22 日 下午 06:36

  12. Dan

    没有自动缓冲的视频在按下播放时表现得很奇怪。它播放了一小部分的视频和音频,然后停止并开始缓冲,然后才正常播放。我知道为什么会这样,但我认为最好在视频缓冲好之前不要开始播放。

    2009 年 12 月 22 日 上午 08:37

  13. Jenn

    我真的很感谢 Mozilla 的这种适当的自动缓冲行为。

    似乎今天您只能使用带有 ogg 文件的视频元素,因为在没有 Quicktime ogg 插件的情况下,Webkit 默认情况下不会下载视频 - 就像它不幸地会使用 mp4 一样。

    这是一个非常令人失望的 Webkit 实现,我从未想过有一天会发现 Gecko 有什么优于它的地方。

    哦,我忘了 img alt 文本 - 那也比它好多了。

    2009 年 12 月 22 日 上午 09:07

  14. Christopher Blizzard

    是的,Dan,我同意。我怀疑这只是一个长期存在的 bug。

    2009 年 12 月 22 日 上午 10:43

  15. Christopher Blizzard

    我用 Opera 关于他们将要采取的行动的一些信息更新了帖子。

    2009 年 12 月 22 日 上午 10:46

  16. Andrew Harvey

    这一切都很好,但我希望能够告诉我的浏览器忽略每个单独的视频标签属性,并为所有视频禁用自动缓冲。(我的下载配额很贵!)

    2009 年 12 月 22 日 下午 14:22

  17. Berserk

    这是规范没有经过深思熟虑的领域。在我看来,属性的缺失并不足以表明作者的意图。

    与其使用 、 和 ,不如使用 、 和 。然后您可以说用户代理_应该_在存在属性时尊重它,如果不存在属性,则按他们自己的意愿行事。

    2009 年 12 月 22 日 下午 15:35

  18. Robert O’Callahan

    Adam:这是一个规范问题。HTML5 规范没有提供任何方法来回退到替代内容,如果您不支持任何提供的媒体类型。

    2009 年 12 月 22 日 下午 21:55

  19. Silvia Pfeiffer

    Jenn:您应该在 Safari/Webkit 中使用 XiphQT 在 html5 视频和音频元素中播放 Ogg,请参见 http://www.xiph.org/quicktime/

    2009 年 12 月 23 日 上午 00:05

  20. Adam Luter

    @Robert:这很好。不要期望这能帮助推广。 和 的目的在于允许在不支持内容时回退。所以,如果规范不允许您查看源的 mime 类型(它是在标记中设置的),并且无法说“哦,我不支持它,回退!”,那么它几乎毫无价值。唉。

    2009 年 12 月 23 日 上午 05:54

  21. […] 在 Chrome 中根本无法运行(至少在 Mac 上)… 在所有三个浏览器(Safari、Chrome、Firefox)中,使用上面简单的标记,视频内容在页面加载时会自动缓冲。我的意思是 […]

    2009 年 12 月 23 日 上午 09:39

  22. […] Firefox 中的自动缓冲视频 https://hacks.mozilla.ac.cn/2009/12/autobuffering-video-in-firefox/ […]

    2009 年 12 月 23 日 上午 10:43

  23. […] Firefox 中的视频 https://hacks.mozilla.ac.cn/2009/12/autobuffering-video-in-firefox/ […]

    2009 年 12 月 23 日 下午 15:01

  24. […] 正如我们所知,Internet Explorer 不支持它,这并不让我们感到惊讶,但让我们很沮丧。另一方面,该标签有一个属性,指定视频应该自动下载以进行缓冲,此属性并非所有浏览器都以相同的方式处理,Google Chrome 和 Safari 支持它,但它们开始下载视频,而忽略了属性的包含,而 Firefox 检测到此属性并将其用于自动启动下载。 […]

    2009 年 12 月 23 日 下午 19:40

  25. Kosso

    我同意 Ben 和 Brodie 的观点,即在用户点击“海报图像”之前,绝对不应该访问实际的视频 URL。否则,这些视频的服务器统计数据也会被扭曲。

    2009 年 12 月 24 日 上午 08:24

  26. Kroc Camen

    我在这里发布这个,因为我不知道该发邮件给谁,而且这篇文章与主题相关。

    “这不是 Mozilla 及其博主不重视开放视频,而是似乎存在两个问题

    1. 缺乏需求;他们的 WordPress 安装和他们电脑上 Flash 的存在让他们过于纵容了

    2. 官方渠道(MozFoundation / MozCorp)没有对博主发出指导性呼吁

    我坚信所有 Mozilla 工程师都需要花费一周时间不使用 Flash,其次我相信官方 Mozilla(首席执行官和付费员工)需要向志愿者和外部工程师发出声明,说明开放视频是 Mozilla 的核心,鼓励他们使用 HTML5 视频在其博客中。然后我认为我们会看到一些采用。

    只有当工程师被 HTML5 的 bug 和缺陷所困扰时,它们才会得到解决。我制作了 Video For Everybody http://camendesign.com/video_for_everybody 因为我没有 Flash。在我有 Flash 时,我感觉不到制作类似 VfE 的东西的必要。就这么简单。

    为了让 HTML5 视频实现改进到足以被大规模采用的程度,我们需要让开发人员首先进行采用,并吃掉自己的视频狗粮。”

    在 Mozilla Hacks,您一直在将 HTML5 视频作为 Firefox 功能系列的一部分,但在 P.M.O 中,我却无法看到各种视频和公告,因为没有足够的鼓励、需求和意愿使用 HTML5 视频。我请求您通过教育、软件和视频服务器来解决这个问题。谢谢。

    2009 年 12 月 26 日 上午 04:33

  27. […] 正如我们所知,Internet Explorer 不支持它,这并不让我们感到惊讶,但让我们很沮丧。另一方面,该标签有一个属性,指定视频应该自动下载以进行缓冲,此属性并非所有浏览器都以相同的方式处理,Google Chrome 和 Safari 支持它,但它们开始下载视频,而忽略了属性的包含,而 Firefox 检测到此属性并将其用于自动启动下载。 […]

    2009 年 12 月 27 日 上午 05:13

  28. Anonymouse

    是否存在一个 about:config 参数,以便我可以阻止任何视频自动缓冲,即使网站作者设置了此属性?

    2010 年 1 月 1 日 上午 11:38

  29. Silvia Pfeiffer

    @Anonymouse 我确实希望浏览器供应商能够为此引入首选项设置。

    2010 年 1 月 6 日 下午 23:38

  30. wanker

    当您查看访问日志时,请记住查找请求的字节范围,而不仅仅是视频文件的命中次数。

    根据 RFC,不支持范围的 Web 服务器应该只返回整个文件。

    当发生这种情况时,一些浏览器会崩溃

    * Firefox:有效!

    * Chrome:崩溃 :(

    * Safari:崩溃 :(

    * MobileSafari:崩溃 :(

    在 code.google.com/p/chromium 跟踪器中已经存在一个关于此 bug 的问题。Apple 没有公开可用的跟踪器,所以我没有向他们报告。

    2010 年 1 月 7 日 上午 11:06

本文的评论已关闭。