¿Qué debería hacer realmente optimizado para NetworkUse?

De la documentation de Apple solo dice:

Cuando el valor de esta propiedad es SÍ, el file de salida se escribirá de tal manera que la reproducción pueda comenzar después de que se descargue una pequeña cantidad del file.

Pero, ¿qué está sucediendo realmente?

Cuando shouldOptimizedForNetworkUse está configurado en YES, la terminación de la escritura escribirá el átomo moov MP4 (átomo de película) desde el final del file hasta el comienzo del file. El átomo moov contiene información sobre el file de película como la escala de time y la duración. El moov también contiene "subátomos", la bruja contiene información como las pistas, las compensaciones de datos en el file, etc.

La reproducción solo es posible usando la información en el átomo moov y cuando está ubicada al principio del file y no al final del file, un reproductor de películas puede comenzar a reproducir el file aunque solo haya cargado el principio.

En la práctica, los browseres modernos searchán el átomo moov desde el final del file utilizando el encabezado Range HTTP / 1.1 para cargar el átomo moov, incluso si está al final del file.

Establecer the shouldOptimizedForNetworkUse en YES también tiene algunos efectos secundarios:

  • Finalizar la película tarda un poco más ya que el file debe modificarse junto con los desplazamientos en el átomo.
  • El file de salida está bloqueado y no es accesible porque finishWriting necesitará modificar todo el file (mover y actualizar los átomos). Cuando se establece en NO, the movieFragmentInterval establece el intervalo de descarga para escribir en el file de video de salida, haciendo que el file sea legible durante la escritura, ya que los fragments se vacían en el file en su forma final. La escritura de acabado solo tendrá que agregar el átomo de moov al final del file en lugar de tocar los fragments ya escritos.