...
2. При указании времени начала фрагмента, воспроизведение может начаться чуть раньше, в зависимости от расположения ключевого фрейма в файле.
Запись нескольких потоков в один файл с последующим микшированием
В сборке 5.2.1012 добавлена возможность записи нескольких потоков в один файл. В дальнейшем потоки могут быть извлечены из этого файла и смикшированы специальным инструментом. Несколько потоков могут быть записаны только в MP4 контейнер (H264 + AAC). Эта возможность предназначена, например, для записи видеоконференций. В отличие от MCU микшера, здесь микширование работает только при обработке уже записанного файла, и позволяет расходовать меньше ресурсов процессора непосредственно во время проведения конференции.
Запись нескольких потоков управляется по REST API.
REST-запрос должен быть HTTP/HTTPS POST запросом в таком виде:
- HTTP: http://streaming.flashphoner.com:8081/rest-api/multipleRecorder/startup
- HTTPS: https://streaming.flashphoner.com:8444/rest-api/multipleRecorder/startup
Здесь:
- streaming.flashphoner.com - адрес WCS-сервера
- 8081 - стандартный REST / HTTP порт WCS-сервера
- 8444 - стандартный HTTPS порт
- rest-api - обязательный префикс
- /multipleRecorder/startup - используемый REST-вызов
REST-методы и статусы ответа
REST-метод | Пример тела REST-запроса | Пример тела REST-ответа | Статусы ответа | Описание | |||||||
---|---|---|---|---|---|---|---|---|---|---|---|
/multipleRecorder/startup |
| 409 - Conflict 500 - Internal error | Запустить рекордер для записи нескольких потоков | ||||||||
/multipleRecorder/add |
| 404 - Not found 409 - Conflict 500 - Internal error | Добавить в рекордер поток из указанной медиасессии | ||||||||
/multipleRecorder/find_all |
| 404 - Not found 500 - Internal error | Найти все рекордеры | ||||||||
/multipleRecorder/remove |
| 404 - Not found 500 - Internal error | Удалить поток из рекордера | ||||||||
/multipleRecorder/terminate |
| 404 - Not found 500 - Internal error | Остановить рекордер |
Параметры
Имя параметра | Описание | Пример |
---|---|---|
name | Имя рекордера | test_record |
mediaSessionId | Идентификатор медиасессии потока | 866a9910-fbfe-11eb-aae4-6f99b0c80a3a |
filename | Имя файла, куда производится запись | stream-e7a3e2f6-9c80-4d91-bed7-bcae68da9342-mockLogin_multiRecorded.mp4 |
Имя записываемого файла
Имя файла для записи нескольких потоков формируется по шаблону, с добавлением суффикса _multiRecorded. При этом параметры {startTime}, {endTime} не могут быть определены, поскольку зависят от меток времени в потоке, а потоков в данном случае несколько. Поэтому рекомендуется для присвоения метки времени файлу использовать параметры {startTimeMillis}, {endTimeMillis}, которые проставляются согласно часам сервера. Например, с шаблоном
Code Block | ||||
---|---|---|---|---|
| ||||
stream_record_policy_template={streamName}-{startTime}-{startTimeMillis}-{endTime}-{endTimeMillis} |
имя файла будет следующим:
Code Block | ||
---|---|---|
| ||
test_record--1-1628821032180--1-1628821151750_multiRecorded.mp4 |
Здесь {startTime}, {endTime} заменены на -1.
Инструмент для микширования записанных потоков
Из файла с несколькими потоками внутри по умолчанию может быть воспроизведен только первый поток. Чтобы смотреть все потоки в файле, их необходимо смикшировать. Для этого предназначен инструмент OfflineMP4Mixer, запускаемый следующим образом:
Code Block | ||||
---|---|---|---|---|
| ||||
cd /usr/local/FlashphonerWebCallServer/tools
./offline_mixer_tool.sh test_record--1-1628821032180--1-1628821151750_multiRecorded.mp4 |
Настройки микширования задаются в файле /usr/local/FlashphonerWebCallServer/conf/offline_mixer.json. По умолчанию настройки следующие:
Code Block | ||||
---|---|---|---|---|
| ||||
{
"hasVideo": "true",
"hasAudio": "true",
"mixerDisplayStreamName": true
} |
Микшированный файл помещается в тот же каталог, где лежит оригинальный файл, к его имени добавлется суффикс _mixed, например
Code Block | ||
---|---|---|
| ||
test_record--1-1628821032180--1-1628821151750_multiRecorded_ьшчув.mp4 |
Пример кадра из микшированного файла
Скрипт для обработки записанных файлов
По окончании записи нескольких потоков в один файл, запускается cкрипт обработки, заданный настройкой
Code Block | ||
---|---|---|
| ||
on_multiple_record_hook_script=on_multiple_record_hook.sh |
По умолчанию, скрипт запускает offline_mixer_tool.sh, передавая ему на вход имя записанного файла.
Известные проблемы
1. Максимальная длина имени файла во всех актуальных файловых системах Linux ограничена 255 символами. При создании файла записи, имя будет сокращено до данного предела, включая расширение и номер части, если включена ротация.
...