Подтвердить что ты не робот

Что на самом деле должно делатьOptimizeForNetworkUse?

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

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

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

4b9b3361

Ответ 1

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

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

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

Настройка параметра mustOptimizedForNetworkUse на YES также имеет несколько побочных эффектов:

  • Окончание фильма занимает немного больше времени, так как файл должен быть изменен вместе с смещениями в атоме.
  • Выходной файл заблокирован и недоступен, так как finishWriting должен будет изменить весь файл (перемещать и обновлять атомы). Когда установлено значение NO, movieFragmentInterval устанавливает интервал смыва для записи в выходной видеофайл, делая файл доступным для чтения во время записи, когда фрагменты будут очищены до файла в их окончательной форме. Для завершения записи просто нужно добавить атом moov в конец файла, а не касаться уже написанных фрагментов.