Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

Описание

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

  1. Возврат кода состояния HTTP 403 FORBIDDEN на keep-alive запрос для потока
  2. REST-запрос к WCS-серверу

Keep-Alive видеопотока

Keep-alive сообщения могут быть использованы для завершения потоков

Include Page
WCS5RU:Остановка видеопотока со стороны WCS-
сервера.
Для этого web-сервер, на котором сконфигурирован REST Hooks, должен вернуть код состояния HTTP 403 FORBIDDEN на keep-alive запрос для потока.

Таким образом могут быть остановлены публикация или воспроизведение потока, или и то, и другое.
Чтобы различить опубликованные и воспроизводимые потоки, скрипт web-сервера должен обрабатывать 'published' параметр метода StreamKeepAliveEvent

REST API

Сконфигурируйте web-сервер с REST Hooks. Он должен обрабатывать keep-alive запросы от WCS-сервера, используя, например, PHP-скрипт, и определять restClientConfig для метода StreamKeepAliveEvent

Code Block
languagejs
themeRDark
"StreamKeepAliveEvent" : {
    "clientExclude" : "",
    "restExclude" : "sdp",
    "restOnError" : "FAIL",
    "restPolicy" : "NOTIFY",
    "restOverwrite" : ""
}

Серверная часть

Чтобы включить отправку keep-alive сообщений для потоков, необходимо:

1) Включить настройку keep-alive в flashphoner.properties

Code Block
languagebash
themeRDark
keep_alive_streaming_sessions_enabled=true

2) Определить keep-alive интервал и приложение, которое будет принимать ответы на keep-alive REST-запросы

Code Block
languagebash
themeRDark
streaming_sessions_keep_alive_interval=10000
streaming_sessions_keep_alive_app_keys=defaultApp

Может быть использовано другое, чем 'defaultApp', приложение.
Используйте Command Line Interface, команду 'show apps', чтобы просмотреть список приложений и их ключи.

3) Добавить к этому приложению REST-метод StreamKeepAliveEvent, используя следующую команду

Code Block
languagebash
themeRDark
add app-rest-method defaultApp StreamKeepAliveEvent

4) Подключить REST API к приложению из командной строки

Code Block
languagebash
themeRDark
update app defaultApp http://my-web-server.com/MyAPI

Здесь:

  • my-web-server.com - это адрес web-сервера,
  • MyAPI - это путь, по которому расположен REST API.

REST-вызовы для остановки потока

Для остановки потока используется REST-вызов /stream/terminate

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

  • HTTP: http://streaming.flashphoner.com:8081/rest-api/stream/terminate
  • HTTPS: https://streaming.flashphoner.com:8444/rest-api/stream/terminate

Здесь:

  • streaming.flashphoner.com - адрес WCS-сервера
  • 8081 - стандартный REST / HTTP порт WCS-сервера
  • 8444 - стандартный HTTPS порт
  • rest-api - обязательная часть URL
  • /stream/terminate - используемый REST-метод

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

...

REST-метод

...

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

...

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

...

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

...

/stream/terminate

...

Code Block
languagejs
themeRDark
{
   "mediaSessionId" : "41c3f621-a847-4639"
}

...

200 - Команда на завершение потока принята

404 - Поток не найден

Параметры

...

Имя параметра

...

Описание

...

Пример

...

mediaSessionId

...

Идентификатор медиа сессии

...

41c3f621-a847-4639

...

name

...

Имя потока

...

streamName

...

published

...

Если true, то поток является опубликованным; если false, то поток воспроизводится

...

true

...

status

...

Текущий статус потока

...

PUBLISHING

Фильтрация потоков по параметрам

Параметры запроса /stream/terminate рассматриваются как фильтры, будут остановлены все потоки, соответствующие этим фильтрам. Например, можно остановить всех подписчиков для всех опубликованных потоков

Code Block
languagejs
themeRDark
{"published": false}

или всех подписчиков для определенного потока

Code Block
languagejs
themeRDark
{"name": "streamName","published": false}

Можно остановить все публикации по статусу

Code Block
languagejs
themeRDark
{"status": "PUBLISHING"}

Также можно остановить все потоки в определенных медиасессиях

Code Block
languagejs
themeRDark
{"mediaSessionIds":["41c3f621-a847-4639", "554916e0-931c-2479"]}

Запрос без параметров остановит все потоки на сервере

Code Block
languagejs
themeRDark
{}

Отправка REST-запроса к WCS-серверу

Для отправки REST-запроса к WCS-серверу необходимо использовать REST-клиент, например расширение Advanced REST Console для браузера Chrome.

Возобновление потока

После остановки потока со стороны сервера публикация и воспроизведение потока могут быть возобновлены.

Например, в случае WebRTC / WebSocket потока, опубликованного с использованием клиента client2/examples/min/streaming.html и воспроизводимого с использованием клиента client2/examples/demo/streaming/player/player.html:

1) Поток опубликован

Image Removed

2) Поток воспроизводится

Image Removed

3) Воспроизведение потока остановлено со стороны WCS-сервера

Image Removed

...

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

1) "Can't find mediasession" сообщения в flashphoner.log

Симптомы: В случае остановки со стороны сервера RTMFP-потока, опубликованного с использованием клиента client2/examples/demo/streaming/flash_client/chat.html, публикация потока останавливается, однако сессия потока не уничтожается. В логе flashphoner.log появляются сообщения "Can't find mediasession".
Решение: Для завершения сессии необходимо кликнуть кнопку 'Stop video' на странице клиента.

cервера
WCS5RU:Остановка видеопотока со стороны WCS-cервера