为什么FLV容器中的H.264视频比MP4容器中的H.264视频这么快?


9

我正在开发一个试管站点,当前存在H.264格式问题。我注意到YouTube将他们的高清视频放入了MP4容器中,因此从逻辑上讲,我也这样做了。

接下来,我安装mod_h264_streaming了lighttpd以使流和时间轴清理工作。

问题在于大文件(在某些高分辨率下> 500MB)甚至要花很多时间才能开始缓冲(我读到Flowplayer和其他Flash播放器需要先下载元数据)。我使用MP4Box将xmov原子移到了文件的开头(我也尝试了Qt QuickStart),但这没有帮助。

接下来,我读到我需要交错音轨,所以我也这样做了。这没有引起任何变化:视频仍然很慢。

因此,我尝试将完全相同的H.264电影放到FLV容器中,并且播放缓冲几乎立即开始-不慢。

那我在这里想念什么?为什么我会选择带有模块的MP4容器,该模块mod_264_streaming看起来非常慢,而不是带有lighttpd的常规FLV容器mod_flv_streaming?显然,许多网站都选择MP4容器,但我不明白为什么。

作为附带的问题,我尝试使用HTML5 <video>标签尝试播放相同的H.264 MP4电影,并且擦洗很快!我查看了lighttpd的日志文件,发现Flash播放video.mp4?start=234器在每次清理时间轴时都会追加,而使用本机HTML5 <video>标签的浏览器则不会这样做。这是Flash的某种限制吗?为什么Flash流不能和HTML5流一样快?

Answers:


4

TL; DR:当视频站点在视频中存储的元数据超出FLV支持的数量时,或使用FLV不支持的音频编解码器时,将使用MP4。如果您没有充分的理由使用MP4,FLV的简单性和流式设计使其成为一个不错的选择。

至于Flash的时间轴清理,我不知道为什么会这样做,因为我从未对Flash进行编码,但是它可能是它使用的旋钮,或者是Adobe的流服务器专门用于搜索文件的东西。它也可以阻止讨厌的用户将文件保存在他的磁盘上。


您已经知道的一些内容:

FLVMP4(aka isomedia)容器之间存在根本差异。FLV最初是由Adobe设计为流容器的,这确实非常简单。它所做的只是发送视频数据包,然后是音频数据包,然后是视频数据包...但是,它仅支持很少的编解码器,除了毫秒级的时间戳外,不支持其他元数据。除非您需要特定于MP4的功能,否则使用FLV就可以了。

另一方面,ISO媒体基于Apple的MOV容器。它以原子分开,并且存在一个特定的原子,在读取任何其他原子moov之前需要对其进行解码。MP4的问题在于,原子是写在文件末尾的,这对于编码程序来说要容易得多。有一些工具,例如qtfaststart,它将进行必要的调整以将原子放在文件的开头。因此,文件将在具有数据后立即开始播放,而不需要在开始之前完全下载。moovmoov


0

如果您使用的是mov容器,则它无需安装模块就可以直接使用,无需放入模块容器或使用flv容器中即可使用。只是我的想法。使用mov并添加适当的mime类型-完成。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.