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

Содержание

Использование WebRTC для публикации видео на Flussonic Media Server

Содержание:

О протоколе WebRTC

WebRTC — это P2P протокол общения между двумя клиентами, регламентирующий передачу данных по заранее установленному соединению. Например, для связи двух браузеров по протоколу WebRTC необходимо зайти на один и тот же сайт в интернете. Также можно использовать посредника — сигнальный сервер.

Прежде чем начать передачу видео-данных, клиенты должны установить соединение. Процесс установления соединения между двумя клиентами заключается в обмене данными о соединении двух видов:

  • текстовыми описаниями медиапотоков в формате SDP
  • ICE Candidates как часть SDP

Сигнальный сервер — посредник, позволяет передать данные о соединении от одного клиента к другому.

О публикации по WebRTC на Flussonic

Flussonic Media Server использует WebRTC для публикации видео с клиентского устройства или программы (источника) на Flussonic (приемник). Затем Flussonic выступает в роли источника, чтобы проиграть видео на другом клиенте (приемнике). При этом в обоих случаях Flussonic также играет роль сигнального сервера, помогающего установить соединение.

Почему мы используем именно WebRTC для обмена медиа-данными между двумя клиентами? Данный механизм позволяет нам достигнуть сверхнизкой задержки.

Таким образом, обмен видео по WebRTC через Flussonic Media Server нельзя считать peer-to-peer, правильнее будет называть это публикацией видео на Flussonic Media Server по WebRTC и проигрыванием видео с Flussonic сервера по WebRTC.

На схеме ниже показан процесс обмена данными для установления соединения между Flussonic и клиентским приложением, для публикации видео:

WebRTC

Процесс установления соединения для публикации видео и аудио потока во Flussonic Media Server по WebRTC похож на аналогичный для проигрывания видео.

Принцип остается неизменным — стороны должны обменяться SDP через посредника (а это сигнальный сервер - Flussonic), после чего начать передачу данных напрямую. В случае публикации видео инициировать процесс и отправлять приглашение (SDP offer) нужно со стороны клиента (источника).

Cоединение устанавливается по WebSocket, а видео передается по RTP.

Как организовать публикацию по WebRTC

Важно! В некоторых браузерах публикация по WebRTC видео и аудио потоков возможна только по защищенному соединению. То есть браузер может запретить доступ к камере и микрофону со страницы, которая располагается не по HTTPS, а по HTTP адресу. Но на локальных адресах (localhost, 127.0.0.1) это допускается.

На сервере Flussonic добавьте в конфигурацию публикуемый поток, т.е. поток с источником publish://.

stream published {
  url publish://;
}

Можно добавить поток через UI, в разделе Input указав publish:// в поле URL, и убедиться, что для Published input выбрано значение accept.

Flussonic stream mixing

Теперь на клиенте нужно исполнить код для публикации видео в созданный поток. Для написания кода используйте библиотеку Flussonic WebRTC player.

Установка библиотеки с помощью NPM и webpack

Для варианта с импортом библиотеки в ваш проект через Webpack необходимо загрузить пакет:

npm install --save @flussonic/flussonic-webrtc-player

и импортировать его в ваше приложение:

import {
  PUBLISHER_EVENTS,
  PLAYER_EVENTS,
  Player,
  Publisher,
} from "@flussonic/flussonic-webrtc-player";

Описание классов библиотеки доступно на npm.

См. также демо-приложение по ссылке либо ниже на этой странице.

Установка без NPM и webpack

В секцию скриптов вашего HTML-файла добавьте:

<script src="https://cdn.jsdelivr.net/npm/@flussonic/flussonic-webrtc-player/dist/index.min.js"></script>

Полный пример кода страницы с плеером приведен ниже на этой странице.

Опции публикации по WebRTC (Flussonic 20.10)

Организация аудио-подкастов по WebRTC

Чтобы публиковать только звуковую дорожку, необходимо в опциях экземпляра publisher указать следующую конфигурацию в constraints:

import Publisher from '../publisher';
//...
publisher = new Publisher(
//...

    constraints: {
      video: false,
      audio: true,
    },
//...
);

Опцию video можно совсем не указывать, результат будет такой же — публикация на Flussonic только аудиодорожки.

Чтобы проиграть такой поток, не нужно дополнительных настроек.

Отключение звука в публикации

Для отключения звука в публикации используется метод mute:

import Publisher from '../publisher';
//...
publisher = new Publisher(*your options*);
//...
publisher.mute();
//...

Функцию mute можно привязать к кнопке в клиентском приложении, чтобы пользователь мог сам отключать звук в исходящем потоке во время его публикации. В демо-приложении есть пример такой кнопки.