risposta

52

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.
+0

+1 grande spiegazione – tidwall

Problemi correlati