将MOOV原子放在MP4文件的开头是不是有缺点?

Cod*_*rer 21 mp4 video-encoding h.264

我看到很多关于将moov原子从MP4视频容器的末端重新定位到开头的问题,以使视频"网络优化"或更容易流式传输.似乎大多数工具在首次编码视频时都需要一个明确的选项才能执行此操作(如果它完全可用).

如果将原子置于开头使得流式传输工作更好,并且事后做到这一点成本很高,为什么我最初想要用原子对视频进行编码?有什么好处?

Sir*_*ius 18

在文件末尾编码MOOV通常是视频编码器的默认操作,因为它们倾向于通过一次写入输出文件来操作,并且MOOV原子的确切内容和大小只有在写入音频后才能知道完全和视频数据,因为它包含绝对文件大小.

这个例子的主要例子是FFMpeg,在这个答案中有一个解释:https://stackoverflow.com/a/8066089/393701

FFMpeg可以选择为这个原子保留空间,但不能保证数据完全适合.

在最后使用MOOV原子没有特别的好处,在本地回放情况下并不那么不方便,在回放之前在文件结尾处搜索不像在渐进式下载传送中那样昂贵.

  • 很难想象,在制作编码电影的30分钟,一小时或十分钟的范围内,任何人都会注意到写出MOOV原子所需的额外一两分钟然后复制剩下的完成的数据段.当然,首先进行编码所需的计算使I/O成本相形见绌? (3认同)
  • 我认为这取决于编码软件,但ffmpeg足够通用,"在事后重写文件"需要在当前状态下进行重大重构.FLV文件和元数据存在类似的问题,因此在编码后正确注入它们需要像flvtool或flvmeta这样的软件.人们还必须意识到,视频编码器并不总是将数据写入可搜索流(例如网络流),而根本不可能返回. (3认同)
  • @SagarPilkhwal我的赌注是这是通过使用部分HTTP请求来实现的.一旦知道总文件大小,客户端就可以发出一个包含MOOV原子的字节范围的HTTP请求,然后从头开始恢复文件加载 (2认同)

Rom*_* R. 5

您总是希望将索引信息放在文件的开头,除了唯一的一个,这个布局没有隐藏的成本:在进行捕获/转码时,您可能无法预先知道该MOOV需要多少空间原子开头,它的数据也不太好用.因此,您通常将有效负载直接写入文件,并通过添加MOOV并更新文件的其余部分来完成写入.