Документация Flussonic Media Server

Содержание

Создание динамического чата

У Flussonic Media Server есть механизм для создания динамической мозаики — показа нескольких потоков как одного с микшированием видео и аудио. Пример применения такой мозаики — создание своего собственного видео- либо аудио-чата из потоков, поступающих на сервер Flussonic с клиентских устройств.

Мозаика называется динамической, потому что участников (публикуемые видео-потоки) можно добавлять и удалять программно во время работы чата.

В версии 20.08 возможен чат, состоящий только из аудио дорожек. В будущих версиях планируется добавить видео.

Мозаика рассчитана на потоки-публикации с клиентских камер с характеристиками видео — H.264, аудио — Opus. За основу взяты существующие во Flussonic публикация и проигрывание по WebRTC. Проигрывается мозаика в WebRTC плеере.

Поток мозаики получает аудио (и видео) кадры от потоков-участников. Аудио микшируется по принципу: дорожка all — зрительская, все участники в ней слышны; дорожка STREAM_NAME (это имя участника) — для участника, в ней слышны все, кроме участника STREAM_NAME.

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

Настройка и использование

Одна мозаика — одна комната чата.

1) В конфигурационном файле нужно создать поток, в котором будет транслироваться мозаика:

stream ROOM_NAME  {
  url mosaic2:// bitrate=128;
}

Есть следующие опции мозаики:

  • (необязательный параметр) disable_video=true/false (по умолчанию true) - показывать видео с камер участников.

  • (необязательный параметр) bitrate, samplerate, samples - параметры кодека Opus для звука: (по умолчанию соответственно 64k, 48000, 960).

Потоки клиентов, публикующих видео (или аудио) в чат, добавляются динамически с помощью API, вручную их добавлять в конфигурацию не нужно.

2) Затем нужно использовать API /flussonic/api/dynamic-mosaic/ для управления мозаикой:

http://user:pass@flussonic.url/flussonic/api/dynamic_mosaic/

Поддерживаются действия:

  • Добавить чат:

    `curl -X POST -d '{"command" : "add_room", "args" : ["ROOM_NAME"]}' 'http://user:pass@FLUSSONIC-IP/flussonic/api/dynamic_mosaic/'

  • Добавить чат, принимающий аудио с bitrate=64 samplerate=4800 samples=480:

    `curl -X POST -d '{"command" : "add_room", "args" : ["ROOM_NAME","64","48000","480"]}' 'http://user:pass@FLUSSONIC-IP/flussonic/api/dynamic_mosaic/'

  • Статистика (количество участников, комнат, нагрузка на сервер):

    `curl -X POST -d '{"command" : "stats", "args" : []}' 'http://user:pass@FLUSSONIC-IP/flussonic/api/dynamic_mosaic/'

  • Удалить чат:

    `curl -X POST -d '{"command" : "remove_room", "args" : ["ROOM_NAME"]}' 'http://user:pass@FLUSSONIC-IP/flussonic/api/dynamic_mosaic/'

  • Список чатов

    `curl -X POST -d '{"command" : "list_room", "args" : []}' 'http://user:pass@FLUSSONIC-IP/flussonic/api/dynamic_mosaic/'

Пример использования API показан в демо-приложении, которое поставляется вместе с Flussonic (см. ниже).

3) Используя отдельный API комнаты, клиент может присоединиться к этому чату. При этом в конфигурации Flussonic будет создан обычный поток-публикация (url publish://) с камеры клиента, и этот поток будет добавлен в мозаику.

  • Добавление участника

    `curl -X POST -d '{"command" : "add_stream", "args" : ["STREAM_NAME"]}' 'http://user:pass@FLUSSONIC-IP/flussonic/api/dynamic_mosaic/room'

    Возвращает JSON код вида {"track_id" : "a3"} — это номер аудиодорожки, на которую нужно настроить плеер, чтобы слышать комнату.

  • Выход участника

    `curl -X POST -d '{"command" : "remove_stream", "args" : ["STREAM_NAME"]}' 'http://user:pass@FLUSSONIC-IP/flussonic/api/dynamic_mosaic/room'

    Возвращает номер аудио-дорожки потока.

  • Статистика

    `curl -X POST -d '{"command" : "stat", "args" : []}' 'http://user:pass@FLUSSONIC-IP/flussonic/api/dynamic_mosaic/room'

    Возвращает JSON код вида {"count" : 4, "clients" : ["all", "STREAM_NAME", ...]}

  • Функция mute video работает на стороне сервера, но пока не используется, так как сейчас возможна мозаика только с аудио.

    `curl -X POST -d '{"command" : "mute_video", "args" : ["STREAM_NAME"]}' 'http://user:pass@FLUSSONIC-IP/flussonic/api/dynamic_mosaic/room'

    Возвращает номер аудио-дорожки потока.

  • Функция mute audio реализована как на стороне сервера, так и на стороне плеера. В демо-приложении работает функция плеера.

    `curl -X POST -d '{"command" : "mute-audio", "args" : ["STREAM_NAME"]}' 'http://user:pass@FLUSSONIC-IP/flussonic/api/dynamic_mosaic/room'

    Возвращает номер аудио-дорожки потока.

Демо-приложение

В демо-приложении задействованы все перечисленные команды API (кроме remove_room и mute_video).

Для запуска демо-приложения нужно зайти в командную строку Flussonic

service flussonic shell

и выполнить команду

chat:start().

После этого веб-интерфейс, обслуживающий API мозаики, будет доступен по https://FLUSSONIC-IP:9000.