Создание динамического чата
У 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'
Возвращает номер аудио-дорожки потока.