6

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

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

谢谢,

伊兹

4

3 回答 3

6

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

于 2012-11-30T22:24:16.803 回答
2

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

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

于 2012-11-30T22:32:06.393 回答
1

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

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

从文档:

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

于 2021-08-27T13:18:41.767 回答