John Gruber 最近写了一篇文章,标题为为什么即使在支持 HTML5 'Video' 元素的浏览器中,它也实际上不可用
他主要对浏览器不尊重 autobuffer 属性感到沮丧。或者,更确切地说,浏览器默认情况下会自动缓冲。Safari 和 Chrome 似乎默认情况下会自动缓冲,但他错误地指出 Firefox 也一样。为了清楚起见:Firefox 默认情况下不会自动缓冲,也不会默认情况下自动播放。我不确定他的测试如何让他相信它会这样做,但我写了一些例子来证明它不会这样做。以下三个例子
- 没有 autobuffer 属性的视频测试。(先加载此项以避免缓存问题!)
- 带有 autobuffer 属性的视频测试。
- 每个都有一个的视频测试。
测试此方法的最佳方式是加载您喜欢的浏览器并清除其缓存。然后加载您喜欢的网络监视器。然后加载没有设置 autobuffer 属性的页面。您可以通过外部工具查看浏览器实际使用了多少带宽。
在我尝试过的浏览器中,只有 Firefox 在其本机控件集中提供了有关实际缓冲了多少内容的有用反馈,因此您必须使用外部工具才能知道其他任何内容发生了什么。如果您加载了有两个视频的页面 - 一个设置了 autobuffer,另一个没有设置 -,您可以在 Firefox 中将鼠标悬停在它们上面,并查看一个已缓冲而另一个未缓冲。
测试页面上的视频相当大 - 约 115mb - 因此,即使在快速网络上,您也可以真正判断出它何时正在缓冲。
以下是我测试结果
- 台式机版 Safari 下载大量数据。(我没有 iPhone,所以我无法测试。)
- Chrome 下载大量数据。
- Firefox 加载少量数据,然后停止。
- 更新:根据 Philip Jägenstedt 的说法,Opera 也将执行 Firefox 的操作,当他们包含开放式视频支持时。
这与我对 Safari 的了解一致。几个月前,我和一位 Apple WebKit 工程师谈过,他说台式机版 Safari 默认情况下会缓冲,并且说移动版 Safari 不会缓冲。
可能存在一些混淆,因为 Firefox 在您包含视频标签时确实会进行几次网络请求。这有两个原因
- 获取视频的第一帧及其大小。它只下载视频开头的一小部分来获取第一帧,然后停止下载。
- 如果您的服务器支持字节范围请求,它将跳转到视频的末尾以尝试确定视频的持续时间。如果您的服务器不支持字节范围请求,我们就无法获取持续时间。(Ogg 最初被设计为一种用于流式传输的格式,而不是用于静态文件,因此它在文件的头部不包含持续时间信息,尽管正在进行添加此功能的工作。)
如果您想了解 Firefox 如何使用带宽,请尝试 我几个月前写的这个带宽测试。 它使用一个 Firefox 独有的功能来读取视频下载时的进度信息,并大致了解该特定视频元素使用的带宽。它显示了您加载视频时的一点流量,然后显示了您按下播放按钮后它如何开始使用带宽。
但这表明我们理解 John 的观点,并且我们出于他指出的原因决定默认情况下不自动缓冲。
关于 Christopher Blizzard
每次发布都让网络变得更好。
30 条评论