Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Это позволяет проиграть записанный файл даже при внезапной остановке записи в случае ошибки. Данные будут доступны для проигрывания в соответствии с заголовком.

Ротация при заполнении заголовка MP4 контейнера

Начиная со сборки 5.2.2012, если включено резервирование места под заголовок MP4 файла, и во время записи заполняется MOOV атом в заголовке MP4 контейнера, запись автоматически ротируется по максимально допустимому объему данных. Например, при публикации потока 1920x1080 с битрейтом 3 Мбит/c, 30 fps и записи этого потока с настройками

...

длительность одной части составит около 22 минут, размер одной части около 507 Мб.510 Мб.

Запись данных в заголовок MP4 контейнера без резервирования места в файле

При длительной записи, требуется резервирование значительных объемов свободного места под заголовок MP4 файла. Например, для записи 1080p потока в течение одного часа потребуется зарезервировать более 5 Мб под заголовок, и при более коротких записях в заголовке останется незаполненное место. В связи с этим, в сборке 5.2.2020 процесс записи актуальных данных в заголовок MP4 контейнера был изменен. С настройкой

Code Block
themeRDark
mp4_container_write_header_on_fly=true

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

Code Block
languagebash
themeRDark
-rw-r--r-- 1 flashphoner flashphoner  45293 Jul 15 09:58 test-f6a0c740-4255-11ef-af8d-e781f7a0d3ed.mp4.header
-rw-r--r-- 1 flashphoner flashphoner 924777 Jul 15 09:58 test-f6a0c740-4255-11ef-af8d-e781f7a0d3ed.mp4.tmp

В файл с расширением .header записываются данные заголовка, в файл .tmp - медиаданные. По окончании записи файлы объединяются

Code Block
languagebash
themeRDark
-rw-r--r-- 1 flashphoner flashphoner 1930149 Jul 15 09:58 test-f6a0c740-4255-11ef-af8d-e781f7a0d3ed.mp4

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

Code Block
languagebash
themeRDark
cat test-f6a0c740-4255-11ef-af8d-e781f7a0d3ed.mp4.header test-f6a0c740-4255-11ef-af8d-e781f7a0d3ed.mp4.tmp > test-f6a0c740-4255-11ef-af8d-e781f7a0d3ed.mp4

Клиентская часть

При включении записи потоков на сервере, будет ли записан поток, или нет, зависит от значения параметра record, переданного функции createStream в скрипте публикующего клиента:

...