...
REST-вызовы и статусы ответа
REST-метод | Пример тела REST-запроса | Пример ответа | Статусы ответа | Описание | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
/push/startup |
|
| 400 - Bad request 409 - Conflict 500 - Internal error | Создает транспондер, который подписывается на указанный поток и отправляет медиа трафик на указанный rtmpUrl. Имя потока, указанное в запросе, может быть именем уже публикуемого потока или именем зарезервированным при создании SIP-звонка (для отправки медиа трафика, полученного со стороны SIP). Если транспондер для такого потока и rtmpUrl уже существует, возвращает 409 Conflict. Если rtmpUrl не указан, или указан неверно и не может быть найден по DNS, возвращается 400 Bad request | ||||||||||||||
/push/find |
|
| 404 - Transponder not found 500 - Internal error | Найти транспондеры по фильтру | ||||||||||||||
/push/find_all |
|
| 404 - Not found any transponder 500 - Internal error | Найти все транспондеры | ||||||||||||||
/push/terminate |
|
| 404 - Not found transponder 500 - Internal error | Завершить работу транспондера | ||||||||||||||
/push/mute |
| void | 404 - Not found transponder 500 - Internal error | Выключить аудио | ||||||||||||||
/push/unmute |
| void | 404 - Not found transponder 500 - Internal error | Включить аудио | ||||||||||||||
/push/sound_on |
| void | 404 - Not found transponder 404 - No such file 500 - Internal error | Вставить аудио из RIFF WAV файла из директории /usr/local/FlashphonerWebCallServer/media/ на WCS-сервере | ||||||||||||||
/push/sound_off |
| void | 404 - Not found transponder 500 - Internal error | Завершить вставку аудио из файла |
Параметры
Имя параметра | Описание | Пример |
---|---|---|
streamName | Имя ретранслируемого потока | streamName |
rtmpUrl | URL сервера, на который производится ретрансляция | |
rtmpFlashVersion | Версия Flash RTMP-клиента | LNX 76.219.189.0 |
options | Опции транспондера | {"action": "mute"} |
mediaSessionId | Уникальный идентификатор транспондера | eume87rjk3df1i9u14elffga6t |
width | Ширина изображения | 320 |
height | Высота изображения | 240 |
bitrate | Битрейт видео, кбит/с | 500 |
keyFrameInterval | Интервал ключевых кадров видео | 60 |
fps | Частота кадров видео | 30 |
muted | Звук приглушен | true |
soundEnabled | Звук отключен | true |
soundFile | Файл звуковой дорожки | test.wav |
loop | Повтор | false |
rtmpTransponderFullUrl | Брать имя для публикации на RTMP сервере из RTMP URL | false |
Начиная со сборки 5.2.785, добавлены следующие параметры: rtmpFlashVersion, keyFrameInterval и fps.
...
В сборке 5.2.1043 добавлен параметр bitrate.
Параметр options может быть использован, чтобы выключить аудио или вставить аудио из файла при создании транспондера.
...
Начиная со сборки 5.2.785, добавлены другие два параметра, с которыми включается транскодинг: keyFrameInterval и fps. Транскодинг для ретранслируемого потока включается, если задан любой из них или высота картинки.
Отправка REST-запроса к WCS-серверу
Для отправки В сборке 5.2.1043 добавлен параметр bitrate, который также включает транскодинг при ретрансляции.
Таким образом, поток при ретрансляции боде транскодирован с любыми из следующих параметров:
Code Block | ||||
---|---|---|---|---|
| ||||
{
"streamName": "name",
"rtmpUrl": "rtmp://localhost:1935/live",
"height": 240,
"keyFrameInterval": 60,
"fps": 30,
"bitrate": 500
} |
Указание имени потока для публикации на RTMP сервере
По умолчанию, поток будет опубликован на RTMP сервере с тем же именем, под которым он опубликован на WCS, и префиксом rtmp_
, например rtmp_test
. Это поведение меняется настройками
Code Block | ||
---|---|---|
| ||
rtmp_transponder_full_url=true
rtmp_transponder_stream_name_prefix= |
Однако, эти настройки применяются ко всем ретрансляциям, и требуют перезапуска сервера. Поэтому в сборке 5.2.860 добавлен параметр запроса /push/startup, позволяющий указать полный RTMP URL, включая имя потока на RTMP сервере
Code Block | ||||
---|---|---|---|---|
| ||||
POST /rest-api/push/startup HTTP/1.1
Host: localhost:8081
Content-Type: application/json
{
"streamName":"stream1",
"rtmpUrl":"rtmp://rtmp.flashphoner.com:1935/live/test",
"rtmpTransponderFullUrl":true
} |
В этом случае поток будет опубликован на RTMP сервере под именем, указанным в RTMP URL, даже при настройках WCS по умолчанию
Отправка REST-запроса к WCS-серверу
Для отправки REST-запроса к WCS-серверу необходимо использовать REST-клиент.
...
Существует возможность передать параметры запроса серверу, на который ретранслируется поток, указав их в URL сервера, напримерсервера, например
Code Block | ||||
---|---|---|---|---|
| ||||
rtmp://myrtmpserver.com:1935/app_name/?user=user1&pass=pass1 |
или, если публикация предполагается в отдельный экземпляр приложения на RTMP-сервере
Code Block | ||||
---|---|---|---|---|
| ||||
rtmp://myrtmpserver.com:1935/app_name/app_instance/?user=user1&pass=pass1 |
или, если публикация предполагается в отдельный экземпляр приложения на RTMP-сервере
Code Block | ||||
---|---|---|---|---|
| ||||
rtmp://myrtmpserver.com:1935/app_name/app_instance/?user=user1&pass=pass1 |
Здесь
- myrtmpserver.com - имя RTMP-сервера
- app_name - имя приложения на RTMP-сервере
- app_instance - имя экземпляра приложения на RTMP-сервере
Имя потока указывается в параметре RESTЗдесь
- myrtmpserver.com - имя RTMP-сервера
- app_name - имя приложения на RTMP-сервере
- app_instance - имя экземпляра приложения на RTMP-сервере
Имя потока указывается в параметре REST-запроса /push/startup 'streamName' или в соответствующей опции при создании потока.
Пример установки RTMP-соединения с передачей параметров запроса
Передача имени потока в URL
В некоторых случаях имя потока при публикации необходимо передать в URL. Для этого необходимо указать настройку в файле flashphoner.properties
Code Block | ||||
---|---|---|---|---|
| ||||
rtmp_transponder_full_url=true |
Тогда, для публикации в параметре REST-запроса /push/startup 'streamNamertmpUrl' или в соответствующей опции при создании потока .
Пример установки RTMP-соединения с передачей параметров запроса
Передача имени потока в URL
В некоторых случаях имя потока при публикации необходимо передать в URL. Для этого необходимо указать настройку в файле flashphoner.propertiesуказывается URL вида
Code Block | ||||
---|---|---|---|---|
| ||||
rtmp://myrtmpserver.com:1935/app_name/stream_name |
или, для публикации в другой экземпляр приложения
Code Block | ||||
---|---|---|---|---|
| ||||
rtmp_transponder_full_url=true |
...
rtmp://myrtmpserver.com:1935/app_name/app_instance/stream_name |
В этом случае параметр REST-запроса /push/startup 'rtmpUrl' или в соответствующей опции при создании потока указывается URL видаstreamName' или соответствующая опция при создании потока игнорируется.
Автоматическая ретрансляция на указанный сервер
WCS-сервер может автоматически ретранслировать все публикуемые на нем потоки на заданный RTMP-сервер. Для того, чтобы активировать эту возможность, необходимо в файле flashphoner.properties указать следующие настройки:
Code Block | ||||
---|---|---|---|---|
| ||||
rtmp://myrtmpserver.com:1935/app_name/stream_name |
или, для публикации в другой экземпляр приложения
Code Block | ||||
---|---|---|---|---|
| ||||
_push_auto_start=true rtmp_push_auto_start_url=rtmp://myrtmpserverrtmp.server.com:1935/app_name/app_instance/stream_name |
В этом случае параметр REST-запроса /push/startup 'streamName' или соответствующая опция при создании потока игнорируется.
Автоматическая ретрансляция на указанный сервер (не для рабочего окружения)
WCS-сервер может автоматически ретранслировать все публикуемые на нем потоки на заданный RTMP-сервер. Для того, чтобы активировать эту возможность, необходимо в файле flashphoner.properties указать следующие настройки:
Code Block | ||||
---|---|---|---|---|
| ||||
rtmp_push_auto_start=true live |
Здесь rtmp.server.com - имя RTMP-сервера, на который должны ретранслироваться все потоки с WCS.
В сборке 5.2.1110 добавлена возможность указать параметры аутентификации
Code Block | ||
---|---|---|
| ||
rtmp_push_auto_start_url=rtmp://user:password@rtmp.server.com:1935/live |
или
Code Block | ||
---|---|---|
| ||
rtmp_push_auto_start_url=rtmp://rtmp.server.com:1935/ |
Здесь rtmp.server.com - имя RTMP-сервера, на который должны ретранслироваться все потоки с WCS.
...
live?username=user&password=pwd |
Параметры будут переданы в команде RTMP connect.
Ограничения
Для автоматической ретрансляции может быть указан только один RTMP URL.
Автоматическое восстановление соединения при закрытии канала
...
Code Block | ||
---|---|---|
| ||
rtmp_flash_ver_subscriber = LNX 76.219.189.0 |
3. Сервер, на который ретранслируется поток, может требовать определенные параметры потока: битрейт, частоту кадров и интервал ключевых кадров видео
Симптомы: например, Periscope показывает предупреждения о несоответствии рекомендуемым парамерами
...
LNX 76.219.189.0 |
3. Сервер, на который ретранслируется поток, может требовать определенные параметры потока: битрейт, частоту кадров и интервал ключевых кадров видео
Симптомы: например, Periscope показывает предупреждения о несоответствии рекомендуемым парамерами
Решение: задать требуемые ограничения для исходного потока (например, для битрейта аудио) и параметры в REST-вызове для ретрансляции (keyFrameInterval и fps)
4. При ретрансляции FullHD, 2K, 4K потоков c большими размерами кадров, пакеты могут не помещаться в буфер сокета на отправку, из-за чего в некоторых плеерах могут наблюдаться артефакты
Симптомы: при проигрывании ретранслированного потока на хорошем канале эпизодически появляются артефакты
Решение: включить буферизацию RTMP пакетов при отправке настройкой
Code Block | ||
---|---|---|
| ||
rtmp.server_buffer_enabled=true |