Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 5 Next »

Описание

WCS может по требованию захватывать RTMP-видеопоток, раздаваемый с другого сервера. Захваченный поток может раздаваться на любые из поддерживаемых платформ, по любой из поддерживаемых технологий. Для управления захватом RTMP-потока используется REST API.

Схема работы

  1. На WCS сервер отправляется REST-запрос /pull/rtmp/pull
  2. WCS сервер запрашивает RTMP-поток с указанного сервера
  3. RTMP-поток транслируется на WCS сервер
  4. Браузер запрашивает воспроизведение захваченного потока по WebSocket
  5. Браузер получает поток по WebRTC

REST-вызовы

REST-запрос должен быть HTTP/HTTPS POST запросом в таком виде:

  • HTTP: http://test.flashphoner.com:9091/rest-api/pull/rtmp/pull
  • HTTPS: https://test.flashphoner.com:8888/rest-api/pull/rtmp/pull

Здесь:

  • test.flashphoner.com - адрес WCS-сервера
  • 9091 - стандартный REST / HTTP порт WCS-сервера
  • 8888 - стандартный HTTPS порт
  • rest-api - обязательная часть URL
  • /pull/rtmp/pull - используемый REST-метод

REST-методы и статусы ответа

REST-метод

Пример тела REST-запроса

Пример тела REST-ответа

Статусы ответа

Описание

/pull/rtmp/pull

{
 "uri":"rtmp://myserver.com/live/myStream",
  "record": "true"
}

409 - Conflict

500 - Internal error


Извлечь RTMP-поток по указанному URL


/pull/rtmp/find_all


{
"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

{
 "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:

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


Для того, чтобы при записи захваченного потока на диск записывалось не только аудио, но и видео, необходимо в данном файле указать атрибут

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":


5. Графики WebRTC internals в браузере:


Захват RTMP-потока, транслируемого другим сервером, без использования REST-запроса

1. Для теста используем:

  • демо-сервер demo.flashphoner.com;
  • веб-приложение Two Way Streaming для захвата и воспроизведения захваченного потока в браузере.

2. Откройте страницу веб-приложения Two Way Streaming. Нажмите "Connect" и укажите имя RTMP-потока, который нужно захватить, затем нажмите "Play":


3. Графики WebRTC internals в браузере:

Последовательность выполнения операций (Call flow)

Ниже приводится последовательность выполнения операций при захвате RTMP-потока с другого сервера

Известные проблемы

1) Поток, содержащий B-фреймы, не воспроизводится либо воспроизводится с артефактами (задержки, подергивания)

Симптомы: 
а) поток, передаваемый IP камерой по RTSP, не проигрывается, дает задержки видео или подергивания
б) предупреждения в клиентском логе:

09:32:31,238 WARN 4BitstreamNormalizer - RTMP-pool-10-thread-5 It is B-frame!

Решение: при возможности запрашивать с камеры поток более низкого разрешения, с более низким качеством таким образом, чтобы исключить использование B-фреймов, либо траскодировать данный поток.

2) При записи захваченного потока на диск записывается только аудиодорожка

Симптомы: при указании в REST-запросе /pull/rtmp/pull параметра "record": "true" в полученном файле отсуствует видеодорожка, только аудио.
Решение: указать в настройке SDP атрибут a=sendonly для видеодорожки.

3) AAC фреймы типа 0 не поддерживаются декодером и будут игнорироваться при воспроизведении захваченного потока

При этом в клиентском логе будут выведены предупреждения:

10:13:06,815 WARN AAC - AudioProcessor-c6c22de8-a129-43b2-bf67-1f433a814ba9 Dropping AAC frame that starts with 0, 119056e500
  • No labels