回答

52

當shouldOptimizedForNetworkUse設置爲YES時,調用finishWriting會將MP4 moov原子(影片原子)從文件末尾移至文件的開頭。 moov原子包含有關電影文件的信息,如時間刻度和持續時間。 moov還包含「子原子」女巫包含軌道,文件中的數據偏移量等信息。

回放只能使用moov原子中的信息,當它位於文件的開頭而不是在該文件的結尾,電影播放器​​即使只加載了該文件的開頭,也可以開始播放該文件。

實際上,現代瀏覽器會使用HTTP/1.1 Range頭部從文件的末尾獲取moov原子,以加載moov原子,即使它位於文件的末尾。

設置shouldOptimizedForNetworkUse爲YES也有一些副作用:

  • 精加工電影需要更長的時間作爲該文件具有與所述原子的偏移一起被修改。
  • 輸出文件被鎖定且無法訪問,因爲finishWriting將需要修改整個文件(移動和更新原子)。當設置爲NO時,movieFragmentInterval設置寫入輸出視頻文件的刷新間隔,使得在寫入過程中可以讀取文件,因爲片段以最終形式刷新到文件中。 finishWriting只需要將moov原子附加到文件的末尾,而不是觸摸已寫入的片段。
+0

+1很好的解釋 – tidwall

相關問題