Skip to content

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

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

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

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

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

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

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

Одна мозаика — одна комната чата. Чтобы настроить мозаику:

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

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

Warning

Не путать с mosaic://. mosaic:// используется для IP-камер, mosaic2:// — для создания динамического чата.

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

  • (необязательный параметр) 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 будет создан обычный поток-публикация (input 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'

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