В плеере по RTMP¶
Описание¶
Поток, опубликованный на WCS-сервере, можно воспроизвести по RTMP в стороннем плеере. В этом случае WCS сам выступает в качестве RTMP-источника.
Поддерждиваемые кодеки¶
- Видео: H.264
- Аудио: AAC, G.711, Speex
Схема работы¶
- Браузер устанавливает соединение с сервером по Websocket
- Браузер захватывает камеру и микрофон и отправляет на сервер WebRTC-поток
- Проигрыватель VLC устанавливает соединение с сервером по RTMP
- Проигрыватель VLC получает поток c сервера и воспроизводит его
Краткое руководство по тестированию¶
- Для теста используем:
- демо-сервер
demo.flashphoner.com
; - веб-приложение Two Way Streaming для публикации потока;
-
проигрыватель VLC для воспроизведения потока.
-
Откройте веб-приложение Two Way Streaming. Нажмите
Connect
, затемPublish
. Скопируйте идентификатор потока:
-
Запустите VLC, выберите пункт меню
Media - Open network stream
. Введите URL WCS-сервера с указанием идентификатора потока, в данном примереrtmp://demo.flashphoner.com:1935/live/9121
:
-
Нажмите кнопку
Play
. Проигрыватель начнет воспроизведение потока:
Последовательность выполнения операций¶
Ниже описана последовательность вызовов при воспроизведении потока по RTMP в программном плеере.
-
Программный проигрыватель устанавливает соединение с WCS-сервером по RTMP
-
Программный проигрыватель получает от WCS медиапоток.
Обработка параметров, указанных в URL потока¶
При публикации или воспроизведении RTMP-потока на WCS, в URL потока могут быть указаны параметры RTMP-соединения и параметры потока:
rtmp://host:1935/live?connectParam1=val1&connectParam2=val2/streamName?streamParam1=val1&streamParam2=val2
Здесь
host
- WCS-сервер;connectParam1
,connectParam2
- параметры RTMP-соединения;streamName
- имя потока на сервере;streamParam1
,streamParam2
- параметры потока.
WCS-сервер передает указанные параметры бэкенд-серверу в REST hook, в поле custom
, например:
URL:http://localhost:8081/apps/EchoApp/connect
OBJECT:
{
"nodeId" : "Qb3rAjf3lzoy6PEl1WZkUhRG1DsTykgj@192.168.1.1",
"appKey" : "flashStreamingApp",
"sessionId" : "/127.0.0.1:5643/192.168.1.1:1935",
"useWsTunnel" : false,
"useWsTunnelPacketization2" : false,
"useBase64BinaryEncoding" : false,
"keepAlive" : false,
"custom" : {
"connectParam1" : "val1",
"connectParam2" : "val2"
},
"login" : "rQq83sodiCPY0pJXCxGO"
}
URL:http://localhost:8081/apps/EchoApp/playStream
OBJECT:
{
"nodeId" : "Qb3rAjf3lzoy6PEl1WZkUhRG1DsTykgj@192.168.1.1",
"appKey" : "flashStreamingApp",
"sessionId" : "/127.0.0.1:5643/192.168.1.1:1935",
"mediaSessionId" : "stream1/127.0.0.1:5643/192.168.1.1:1935",
"name" : "stream1",
"published" : false,
"hasVideo" : true,
"hasAudio" : true,
"status" : "NEW",
"record" : false,
"width" : 0,
"height" : 0,
"bitrate" : 0,
"minBitrate" : 0,
"maxBitrate" : 0,
"quality" : 0,
"mediaProvider" : "Flash",
"custom" : {
"streamParam1" : "val1",
"streamParam2" : "val2"
}
}
Эту возможность можно использовать, например, для авторизации клиента на бэкенд-сервере при публикации или воспроизведения RTMP-потока на WCS.
Передача параметров соединения как параметров потока¶
В некоторых случаях возникает необходимость передать параметры соединения, например, параметры авторизации, как параметры потока, например
Эта возможность включается настройкой
В этом случае вышеприведенный пример RTMP URL будет аналогичен следующему
Управление порядком дорожек в RTMP потоке¶
Большинство плееров на различных платформах предполагают, что первой в RTMP потоке идет видеодорожка. Для того, чтобы гарантировать такой порядок и отсылать в первую очередь видеоданные, необходимо установить следующий параметр в файле flashphoner.properties:
Attention
Если эта настройка активна, при публикации потока, содержащего только аудиодорожку, такой поток не будет воспроизводиться по RTMP, поскольку аудиоданные не будут высылаться клиенту
Подавление звука при воспроизведении RTMP¶
При воспроизведении потока, опубликованного на сервере, как RTMP, звук может быть отключен. Для этого в RTMP URL необходимо передать следующий параметр:
При этом звуковая дорожка в проигрываемом потоке заменяется тишиной.
Отключение RTMP сервера¶
По умолчанию, RTMP сервер в составе WCS включен. В сборке 5.2.1081 добавлена возможность отключить эту функцию, если она не нужна
Известные проблемы¶
1. При проигрывании потока с большим размером одного фрейма, данных могут не входить в буфер TCP-сокета¶
При проигрывании FullHD, 2K, 4K потоков с большими размерами кадров, пакеты могут не помещаться в буфер сокета на отправку, из-за чего в некоторых плеерах могут наблюдаться артефакты
Симптомы
При проигрывании потока на хорошем канале эпизодически появляются артефакты