Http视频流需要下载完整的视频数据才能开始播放吗?

Http video streaming needs to download full video data to start play?

在我的服务器中有两个 mp4 文件可用。当我从浏览器浏览 video1.mp4 url 时,它开始在浏览器中播放视频文件。

如果我从浏览器播放 video2.mp4 url,需要很长时间才能开始播放。

当时我检查了浏览器的临时文件,它下载了完整的视频然后才开始播放。 清除临时文件后,我曾尝试播放视频 1。它只需要一些文件。(Video1 大小为 800 MB,临时内存只有 50 MB,Video2 大小为 500 MB,临时内存也有 500 MB)

两个视频文件有什么区别。两者都只是 MP4。但是一个获取完整的视频数据而另一个获取部分视频文件,为什么?

这两个文件的编码方式不同。 MP4 文件分为称为框的数据包,描述压缩类型和视频文件中存在的不同轨道的框是 'moov' 框,传统上它位于文件末尾,但编码软件可以配置为在开始时生成它。

例如,如果您使用 ffmpeg,则可以使用 qt-faststart 选项启用将元数据放在开头。