Versions Compared

Key

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

...

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


Code Block
languagejs
themeRDark
{
 "name": "test_record"
}

409 - Conflict

500 - Internal error


Запустить рекордер для записи нескольких потоков

/multipleRecorder/add
Code Block
languagejs
themeRDark
{
 "name": "test_record",
 "mediaSessionId": "866a9910-fbfe-11eb-aae4-6f99b0c80a3a"
}

404 - Not found

409 - Conflict

500 - Internal error

Добавить в рекордер поток из указанной медиасессии
/multipleRecorder/find_all
Code Block
languagejs
themeRDark
[
  {
    "mediaSessionsId": [
      "866a9910-fbfe-11eb-aae4-6f99b0c80a3a",
      "9f1e2530-fbfe-11eb-9ec1-77172ac14d86",
      "a970d0a0-fbfe-11eb-8fcc-912807bab442"
    ],
    "fileName": "stream-e7a3e2f6-9c80-4d91-bed7-bcae68da9342-mockLogin_multiRecorded.mp4"
  }
]

404 - Not found

500 - Internal error

Найти все рекордеры
/multipleRecorder/remove
Code Block
languagejs
themeRDark
{
 "name": "test_record",
 "mediaSessionId": "866a9910-fbfe-11eb-aae4-6f99b0c80a3a"
}

404 - Not found

500 - Internal error

Удалить поток из рекордера
/multipleRecorder/terminate
Code Block
languagejs
themeRDark
{
 "name": "test_record"
}

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
languagejs
themeRDark
stream_record_policy_template={streamName}-{startTime}-{startTimeMillis}-{endTime}-{endTimeMillis}

имя файла будет следующим:

Code Block
themeRDark
test_record--1-1628821032180--1-1628821151750_multiRecorded.mp4

Здесь {startTime},  {endTime} заменены на -1.

Инструмент для микширования записанных потоков

Из файла с несколькими потоками внутри по умолчанию может быть воспроизведен только первый поток. Чтобы смотреть все потоки в файле, их необходимо смикшировать. Для этого предназначен инструмент OfflineMP4Mixer, запускаемый следующим образом:

Code Block
languagebash
themeRDark
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
languagejs
themeRDark
{
  "hasVideo": "true",
  "hasAudio": "true",
  "mixerDisplayStreamName": true
}

Микшированный файл помещается в тот же каталог, где лежит оригинальный файл, к его имени добавлется суффикс _mixed, например

Code Block
themeRDark
test_record--1-1628821032180--1-1628821151750_multiRecorded_ьшчув.mp4

Пример кадра из микшированного файла

Image Added

Скрипт для обработки записанных файлов

По окончании записи нескольких потоков в один файл, запускается cкрипт обработки, заданный настройкой

Code Block
themeRDark
on_multiple_record_hook_script=on_multiple_record_hook.sh

По умолчанию, скрипт запускает offline_mixer_tool.sh, передавая ему на вход имя записанного файла.

Известные проблемы

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

...