В сборке 5.2.1056 добавлена поддержка WebRTC Selective Forwarding Unit (SFU) с возможностью публикации и проигрывания любого количества потоков в одном WebRTC соединении (Simulcast). Основные области применения:
Chrome | Firefox | Safari 11 | Chromium Edge | |
---|---|---|---|---|
Windows | + | - | + | |
Mac OS | + | - | + | |
Android | + | - | + | |
iOS | + (iOS 14.4) | - | + |
WebRTC video:
WebRTC audio:
Поскольку одним из случаев применения SFU являются видео и аудио конференции, на стороне сервера введена новая сущность - комната. Установив соединение с сервером, пользователь подключается к комнате и может публиковать свои потоки, а также проигрывать все потоки в данной комнате. За пределами комнаты потоки, опубликованные в ней, недоступны.
Пример объекта, задающего конфигурацию комнаты:
"room": { "url": "wss://wcs:8443", "name": "ROOM1", "pin": "1234", "nickName": "User1" } |
Здесь
Пользователь может добавлять и удалять видео и аудио потоки. При добавлении может быть указан набор качеств, и поток будет опубликован в этих качествах. Каждое качество имеет следующие характеристики:
При проигрывании потока пользователю доступны все качества, либо те из них, которые умещаются в канал подписчика. Например, при публикации потока 720p с качествами 720p 900 kbps, 360p 500 kbps и 180p 200 kbps, подписчик может получать только 360p и 180p, если его канала до сервера недостаточно для получения 720p.
Пример настройки публикации медиапотоков в комнате
"media": { "audio": { "tracks": [{ "source": "mic", "channels": 1 }] }, "video": { "tracks": [{ "source": "camera", "width": 1280, "height": 720, "codec": "H264", "encodings": [ { "rid": "h", "active": true, "maxBitrate": 900000 }, { "rid": "m", "active": true, "maxBitrate": 300000, "scaleResolutionDownBy": 2 } ] }] } } |
Здесь
Параметры качества указываются в соответствии с описанием RTCRtpEncodingParameters.
По умолчанию, даже если в параметрах публикации задан кодек H264, в комнате будут публиковаться потоки VP8. Чтобы публиковать H264, необходимо:
codecs_exclude_sfu=alaw,ulaw,g729,speex16,g722,mpeg4-generic,telephone-event,flv,mpv webrtc_cc_min_bitrate=500000 profiles=42e01f |
Отметим, что публикация и проигрывание большого числа VP8 потоков в нескольких качествах потребляет ресурсы клиентского ПК. Если ресурсов не хватает, следует предпочесть H264, поскольку большинство браузеров поддерживают аппаратное ускорение для данного кодека.
1. Скачайте последнюю сборку SFU SDK, например 1.0.1.25
wget https://flashphoner.com/downloads/builds/flashphoner_client/sfu-sdk/flashphoner-sfu-sdk-1.0.1.25-f8ea43bab4924798db5fa63b7b609995360e135b.tar.gz |
2. Распакуйте архив сборки в каталог на Вашем сервере
cd /usr/local/FlashphonerWebCallServer/client2 mkdir sfu cd sfu tar -xzf ~/flashphoner-sfu-sdk-1.0.1.25-f8ea43bab4924798db5fa63b7b609995360e135b.tar.gz |
3. Откройте пример SFU client в браузере, например https://test1.flashphoner.com:8444/client2/sfu/examples/client/main.html, введите URL сервера, имя комнаты, пин-код и имя пользователя, нажмите Enter
4. Поток пользователя User1 публикуется в комнате ROOM1
Статистика отправки качества 720p
Статистика отправки качества 360p
5. Откройте страницу примера в другом браузере или в другом окне браузера, введите URL сервера и параметры комнаты такие же, как на шаге 3, имя пользователя User2
6. Поток пользователя User2 проигрывается у окне User1
Для мониторинга потоков в комнате используется REST API
REST-запрос должен быть HTTP/HTTPS POST запросом в таком виде:
Здесь:
REST-метод | Пример тела REST-запроса | Пример тела REST-ответа | Статусы ответа | Описание | ||
---|---|---|---|---|---|---|
/sfu/stats |
|
| 200 - OK 404 - Not found 500 - Internal error | Показать текущую статистику комнаты |
Имя параметра | Описание | Пример |
---|---|---|
romName | Имя комнаты | ROOM1 |
participants | Список участников комнаты | [] |
nickName | Имя пользователя | User1 |
outgoingTracks | Список потоков, публикуемых пользователем | [] |
incomingTracks | Список потоков, проигрываемых пользователем | {} |
id | Идентификатор медиасессии | 9de9107c-ce5f-4d6b-b7d6-ea233d691d09 |
codec | Видео или аудио кодек | H264 |
width | Ширина картинки видео | 1280 |
heigth | Высота картинки видео | 720 |
fps | FPS видео | 30 |
bitrate | Битрейт видео или аудио, бит/с | 265368 |
sampleRate | Частота дискретизации аудио, Гц | 48000 |
channels | Количество каналов аудио | 2 |
alive | Поток активен | true |
type | Тип потока | VIDEO |
composite | Поток включает несколько дорожек | true |
tracks | Список дорожек в композитном потоке | {} |