Table of Contents |
---|
Описание
WCS может по требованию захватывать RTMP-видеопоток, раздаваемый с другого сервера. Захваченный поток может раздаваться на любые из поддерживаемых платформ, по любой из поддерживаемых технологий. Для управления захватом RTMP-потока используется REST API.
Схема работы
- На WCS сервер отправляется REST-запрос /pull/rtmp/pull
- WCS сервер запрашивает RTMP-поток с указанного сервера
- RTMP-поток транслируется на WCS сервер
- Браузер запрашивает воспроизведение захваченного потока по WebSocket
- Браузер получает поток по WebRTC
REST-вызовы
REST-запрос должен быть HTTP/HTTPS POST запросом в таком виде:
- HTTP: http://test.flashphoner.com:8081/rest-api/pull/rtmp/pull
- HTTPS: https://test.flashphoner.com:8444/rest-api/pull/rtmp/pull
Здесь:
- test.flashphoner.com - адрес WCS-сервера
- 8081 - стандартный REST / HTTP порт WCS-сервера
- 8444 - стандартный HTTPS порт
- rest-api - обязательная часть URL
- /pull/rtmp/pull - используемый REST-метод
REST-методы и статусы ответа
...
REST-метод
...
Пример тела REST-запроса
...
Пример тела REST-ответа
...
Статусы ответа
...
Описание
...
/pull/rtmp/pull
...
Code Block | ||||
---|---|---|---|---|
| ||||
{
"uri":"rtmp://myserver.com/live/myStream",
"record": "true"
} |
409 - Conflict
500 - Internal error
Извлечь RTMP-поток по указанному URL
...
/pull/rtmp/find_all
...
Code Block | ||||
---|---|---|---|---|
| ||||
{
"localMediaSessionId": "5a072377-73c1-4caf-abd3",
"remoteMediaSessionId": null,
"localStreamName": "rtmp://myserver.com/live/myStream",
"remoteStreamName": null,
"uri": "rtmp://myserver.com/live/myStream",
"status": "PROCESSED_REMOTE"
} |
...
200 – потоки найдены
404 – потоки не найдены
...
Найти все извлеченные RTMP-потоки
...
/pull/rtmp/terminate
...
Code Block | ||||
---|---|---|---|---|
| ||||
{
"uri":"rtmp://myserver.com/live/myStream"
} |
...
200 - поток завершен
404 - поток не найден
...
Завершить извлеченный RTMP-поток
Параметры
...
Имя параметра
...
Описание
...
Пример
...
uri
...
URL RTMP-потока
...
rtmp://myserver.com/live/myStream
...
record
...
Записывать ли захваченный поток
...
true
...
localMediaSessionId
...
Идентификатор сессии
...
5a072377-73c1-4caf-abd3
...
localStreamName
...
Локальное имя, присвоенное захваченному потоку. По данному имени поток может быть запрошен с WCS сервера
...
rtmp://myserver.com/live/myStream
...
status
...
Текущий статус потока
...
PROCESSED_REMOTE
Настройка
В каталоге /usr/local/FlashphonerWebCallServer/conf может располагаться файл описания SDP для RTMP-агента rtmp_agent.sdp:
Code Block | ||||
---|---|---|---|---|
| ||||
o=- 1988962254 1988962254 IN IP4 0.0.0.0
c=IN IP4 0.0.0.0
t=0 0
a=sdplang:en
m=video 0 RTP/AVP 95
a=rtpmap:95 H264/90000
a=fmtp:95 profile-level-id=42e01f;packetization-mode=1
a=sendonly
m=audio 0 RTP/AVP 103 96 97 98 99 100 102 108 104
a=rtpmap:108 mpeg4-generic/48000/1
a=rtpmap:96 mpeg4-generic/8000/1
a=rtpmap:97 mpeg4-generic/11025/1
a=rtpmap:98 mpeg4-generic/12000/1
a=rtpmap:99 mpeg4-generic/16000/1
a=rtpmap:100 mpeg4-generic/22050/1
a=rtpmap:104 mpeg4-generic/24000/1
a=rtpmap:102 mpeg4-generic/32000/1
a=rtpmap:103 mpeg4-generic/44100/1
a=recvonly |
Для того, чтобы при записи захваченного потока на диск записывалось не только аудио, но и видео, необходимо в данном файле указать атрибут
Code Block | ||||
---|---|---|---|---|
| ||||
a=sendonly |
для видео.
Краткое руководство по тестированию
Захват RTMP-потока, транслируемого другим сервером, при помощи REST-запроса /pull/rtmp/pull
1. Для теста используем:
- демо-сервер demo.flashphoner.com;
- браузер Chrome и REST-клиент для отправки запросов на сервер;
- веб-приложение Two Way Streaming для воспроизведения захваченного потока в браузере.
2. Откройте REST-клиент. Отправьте запрос /pull/rtmp/pull, указав в параметрах URL RTMP-потока:
3. Убедитесь, что поток захвачен сервером. Для этого отправьте запрос /rtmp/pull/find_all:
и скопируйте локальное имя потока из параметра ответа localStreamName:
4. Откройте страницу веб-приложения Two Way Streaming. Нажмите "Connect" и укажите локальное имя потока, затем нажмите "Play":
...
Захват RTMP-потока, транслируемого другим сервером, без использования REST-запроса
1. Для теста используем:
- демо-сервер demo.flashphoner.com;
- веб-приложение Two Way Streaming для захвата и воспроизведения захваченного потока в браузере.
2. Откройте страницу веб-приложения Two Way Streaming. Нажмите "Connect" и укажите имя RTMP-потока, который нужно захватить, затем нажмите "Play":
...
Последовательность выполнения операций (Call flow)
Ниже приводится последовательность выполнения операций при захвате RTMP-потока с другого сервера
Известные проблемы
Excerpt | |||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1. Поток, содержащий B-фреймы, не воспроизводится либо воспроизводится с артефактами (задержки, подергивания) Симптомы:
Решение: изменить настройки кодировщика таким образом, чтобы исключить использование B-фреймов (понизить профиль кодирования, указать в командной строке и т.п.). 2. AAC фреймы типа 0 не поддерживаются декодером FFmpeg и будут игнорироваться при воспроизведении захваченного потока При этом в клиентском логе будут выведены предупреждения:
Решение: использовать кодек Fraunhofer при помощи настройки в файле flashphoner.properties
3. При публикации и последующем воспроизведении и записи H264 + AAC потока возможна рассинхронизация видео и звука, либо полное отсутствие звука. Симптомы: при воспроизведении H264 + AAC потока, опубликованного на сервере, а также в записи потока, звук не синхронизирован с видео или отсутствует Решение: а) установить настройку в файле flashphoner.properties
Эта настройка, в том числе, отключает игнорирование AAC фреймов. б) использовать кодек Fraunhofer при помощи настройки
4. При преобразовании звуковой дорожки AAC к частоте дискретизации 11025 Гц звук искажен или отсутствует Симптомы: при публикации H264 + AAC потока на WCS сервере и воспроизведении его как H264 + AAC c частотой дискретизации звука 11025 Гц звук искажен или отсутствует Решение: не использовать частоту дискретизации звука 11025 Гц, либо избегать преобразования звука к данной частоте, например, не указывать данную частоту в файлах настроек SDP. |
5. Некоторые функции RTMP не поддерживаются и будут игнорированы:
- FCSubscribe
- FCPublish
- FCUnpublish
- onStatus
- onUpstreamBase
- releaseStream
6. В записи потока присутствует только звук
Симптомы: при установленном параметре запроса /pull/rtmp/pull "record": "true" в файле нет видео, есть только звук.
Решение: в настройках SDP установить
Code Block | ||||
---|---|---|---|---|
| ||||
a=sendonly |
атрибут для видео.
Include Page | ||||
---|---|---|---|---|
|