shouldOptimizeForNetworkUse实际上做了什么?

从Apple文档中它只是说:

当此属性的值为YES时,将以这样的方式写入输出文件,即只在下载少量文件后才能开始播放。

但究竟发生了什么?

当shouldOptimizedForNetworkUse设置为YES时,调用finishWriting会将MP4 moov atom(movie atom)从文件末尾移动到文件的开头。 moov atom包含有关电影文件的信息,如时间刻度和持续时间。 moov还包含“subatoms”,其中包含轨道,文件中的数据偏移等信息。

只能使用moov atom中的信息进行播放,当它位于文件的开头而不是文件的末尾时,即使电影播放器​​只加载了文件的开头,也可以开始播放该文件。

在实践中,现代浏览器将使用HTTP / 1.1 Range标头从文件末尾获取moovprimefaces,以加载moovprimefaces,即使它位于文件的末尾。

将shouldOptimizedForNetworkUse设置为YES也有一些副作用:

  • 完成电影需要更长的时间,因为文件必须与primefaces中的偏移一起被修改。
  • 输出文件被锁定且无法访问,因为finishWriting将需要修改整个文件(移动和更新primefaces)。 设置为NO时,movieFragmentInterval设置用于写入输出video文件的刷新间隔,使文件在写入期间可读,因为片段以最终forms刷新到文件中。 finishWriting只需要将moovprimefaces附加到文件的末尾,而不是触及已经写入的片段。