Что на самом деле делает shouldOptimizeForNetworkUse?

Из документации Apple. он просто говорит:

Если значение этого свойства равно YES, выходной файл будет записан таким образом, что воспроизведение может начаться после того, как будет загружена лишь небольшая часть файла.

Но что происходит на самом деле?


person user1181046    schedule 19.10.2012    source источник


Ответы (1)


Когда для параметра shouldOptimizeForNetworkUse установлено значение YES, вызов finishWriting переместит атом moov MP4 (атом фильма) из конца файла в начало файла. Атом moov содержит информацию о файле фильма, такую ​​как шкала времени и продолжительность. Moov также содержит «субатомы», которые содержат такую ​​информацию, как дорожки, смещения данных в файле и т. д.

Воспроизведение возможно только с использованием информации в атоме moov, и когда он находится в начале файла, а не в конце файла, проигрыватель фильмов может начать воспроизведение файла, даже если он загрузил только его начало.

На практике современные браузеры извлекают атом moov из конца файла, используя заголовок диапазона HTTP/1.1, чтобы загрузить атом moov, даже если он находится в конце файла.

Установка значения YES для shouldOptimizeForNetworkUse также имеет несколько побочных эффектов:

  • Завершение фильма занимает немного больше времени, потому что файл должен быть изменен вместе со смещениями в атоме.
  • Выходной файл заблокирован и недоступен, потому что FinishWriting должен изменить весь файл (переместить и обновить атомы). Если установлено значение NO, movieFragmentInterval устанавливает интервал сброса для записи в выходной видеофайл, делая файл доступным для чтения во время записи, поскольку фрагменты сбрасываются в файл в их окончательной форме. FinishWriting просто нужно добавить атом moov в конец файла вместо того, чтобы касаться уже написанных фрагментов.
person Matti Savolainen    schedule 09.01.2013