HTML5 视频无缘无故被下载“两次”

Posted

技术标签:

【中文标题】HTML5 视频无缘无故被下载“两次”【英文标题】:HTML5 video being downloaded 'twice' for no reason 【发布时间】:2012-11-19 04:35:31 【问题描述】:

我只是想知道为什么有时浏览器需要在播放 html5 视频之前调用两次。这是正常的还是实际上是一个错误?引擎盖下会发生什么?

不确定我的问题是否特别容易理解我从http://videojs.com主页截屏,打开网络面板,以帮助我解释。请查看http://bit.ly/St4rRc。 Apple 制作的著名页面http://www.apple.com/html5/showcase/video/ 也是如此,顺便说一句,该页面不使用任何 javascript 库来保存视频。我正在 Google Chrome/Windows 上对其进行测试。

谢谢,

伊兹

【问题讨论】:

它清楚地写着“部分内容”,所以我假设它首先获取一些数据,例如视频编解码器,以检查它是否受支持,或者是否需要尝试另一个源/回退,然后获取如果成功,则播放整个视频。显然这只是猜测。 是的,@FabrícioMatté 是对的。 Chrome 会发出范围请求,有时还会对文件的后面部分发出范围请求。后续请求通常从同一个网络请求中加载,但会被多次列出。您可以使用数据包嗅探器验证这一点。 谢谢@Brad,我今天学到了一些新东西。 =] 【参考方案1】:

许多媒体文件在文件末尾都有某种结构,用于定义原子的位置或有关媒体的其他元数据,例如持续时间、起始字节偏移、编解码器、比特率等。某些文件类型(如 mp4 容器)可以是“提示”将此数据移动到文件的开头。从历史上看,此信息连接到媒体文件的末尾,因为许多值(持续时间)在视频完成编码之前是未知的。

【讨论】:

【参考方案2】:

第一个调用是预加载。这允许视频在用户单击播放按钮时准备好播放,假设它不是自动播放,或者尽可能早地播放。在下载元数据和视频的前几秒后,它被中止。

第二次调用实际上获取了整个文件。浏览器将尝试仅请求尚未请求的部分,但需要将服务器配置为允许。

【讨论】:

【参考方案3】:

下一个 ffmpeg 命令可以帮助您解决这个问题:

ffmpeg -i initial-file.mp4 -c copy -movflags +faststart corrected-file.mp4

来自文档:

-movflags 快速启动 运行第二遍,将索引(moov atom)移动到文件的开头。此操作可能需要一段时间,并且会 不能在各种情况下工作,例如碎片输出,因此它是 默认不启用。

【讨论】:

以上是关于HTML5 视频无缘无故被下载“两次”的主要内容,如果未能解决你的问题,请参考以下文章

为啥提交按钮仅在我的示例中按下两次时才起作用?

ubuntu mongo数据库无缘无故丢失了?如何保护mongoDB的数据。

ubuntu mongo数据库无缘无故丢失了?如何保护mongoDB的数据。

ubuntu mongo数据库无缘无故丢失了?如何保护mongoDB的数据。

ubuntu mongo数据库无缘无故丢失了?如何保护mongoDB的数据。

html5:使用页眉或页脚标签两次?