Quando shouldOptimizedForNetworkUse è impostato su YES calling finishWriting sposterà l'atomo moov MP4 (atomo film) dalla fine del file all'inizio del file. L'atomo di moov contiene informazioni sul file del film come cronologia e durata. Il moov contiene anche "subatoms" che contengono informazioni come le tracce, le correzioni di dati nel file ecc.
La riproduzione è possibile solo utilizzando le informazioni nell'atomo moov e quando si trova all'inizio del file anziché a Alla fine del file, un lettore di film può iniziare a riprodurre il file anche se ne ha caricato solo l'inizio.
In pratica i browser moderni recuperano l'atomo moov dalla fine del file utilizzando l'intestazione Range HTTP/1.1 per caricare l'atomo moov anche se si trova alla fine del file.
Impostazione del shouldOptimizedForNetworkUse su YES ha anche alcuni effetti collaterali:
- Finitura Il film è un po 'più come il file deve essere modificato insieme con gli offset nell'atomo.
- Il file di output è bloccato e non accessibile perché finishWriting dovrà modificare l'intero file (spostare e aggiornare gli atomi). Quando impostato su NO, movieFragmentInterval imposta l'intervallo di svuotamento per la scrittura sul file video di output, rendendo il file leggibile durante la scrittura poiché i frammenti vengono scaricati nel file nella loro forma finale. Il finishWriting dovrà solo aggiungere l'atomo moov alla fine del file invece di toccare i frammenti già scritti.
fonte
2013-01-09 19:22:27
+1 grande spiegazione – tidwall