...
Это позволяет проиграть записанный файл даже при внезапной остановке записи в случае ошибки. Данные будут доступны для проигрывания в соответствии с заголовком.
Ротация при заполнении заголовка 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 | ||
---|---|---|
| ||
mp4_container_write_header_on_fly=true |
и другими настройками по умолчанию заголовок будущего файла записи пишется в отдельный файл. Таким образом, запись состоит из двух файлов, например
Code Block | ||||
---|---|---|---|---|
| ||||
-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 | ||||
---|---|---|---|---|
| ||||
-rw-r--r-- 1 flashphoner flashphoner 1930149 Jul 15 09:58 test-f6a0c740-4255-11ef-af8d-e781f7a0d3ed.mp4 |
Если по какой-то причине запись была аварийно остановлена, на диске останутся файл заголовка и файл данных. В этом случае для проигрывания данных, которые были записаны, достаточно объединить эти файлы
Code Block | ||||
---|---|---|---|---|
| ||||
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 в скрипте публикующего клиента:
...