objective c - ¿Qué es realmente lo que debería hacerOptimizeForNetworkUse?
objective-c ios (1)
Cuando shouldOptimizeForNetworkUse se establece en SÍ y se llama a finishWriting moverá el átomo de moov de MP4 (átomo de la película) desde el final del archivo hasta el principio del archivo. El átomo de moov contiene información sobre el archivo de película, como la escala de tiempo y la duración. El moov también contiene "subátomos" que contienen información como las pistas, las compensaciones de datos en el archivo, etc.
La reproducción solo es posible utilizando la información en el átomo de Moov y cuando se encuentra al principio del archivo en lugar de al final del archivo, un reproductor de películas puede comenzar a reproducir el archivo incluso si solo ha cargado el principio.
En la práctica, los navegadores modernos obtendrán el átomo de moov desde el final del archivo utilizando el encabezado Rango HTTP / 1.1 para cargar el átomo de moov, incluso si está al final del archivo.
La configuración de shouldOptimizeForNetworkUse en YES también tiene algunos efectos secundarios:
- Terminar la película demora un poco más porque el archivo debe modificarse junto con las compensaciones en el átomo.
- El archivo de salida está bloqueado y no es accesible porque finishWriting deberá modificar todo el archivo (mover y actualizar los átomos). Cuando se establece en NO, movieFragmentInterval establece el intervalo de descarga para escribir en el archivo de video de salida, haciendo que el archivo sea legible durante la escritura a medida que los fragmentos se descargan al archivo en su forma final. La escritura final solo tendrá que añadir el átomo de moov al final del archivo en lugar de tocar los fragmentos ya escritos.
De la documentación de Apple solo dice:
Cuando el valor de esta propiedad es SÍ, el archivo de salida se escribirá de tal manera que la reproducción pueda comenzar después de que solo se descargue una pequeña cantidad del archivo.
Pero, ¿qué está pasando realmente?