понедельник, 7 сентября 2015 г.

Обработка произвольных RTMP, RTSP, SLDP и Icecast потоков по запросу

Трансляция живого видео через Интернет дает высокую нагрузку на каналы связи. Для снижения нагрузки и обеспечения отказоустойчивости вещания используются техники балансировки нагрузки (см. статью "HLS, DASH and Icecast streaming load balancing").

Настройка pull RTMP только для запрашиваемых потоков

При настройке связки из origin и edge серверов для RTMP потоков можно настроить 2 вида ретрансляции:
  1. Можно передавать с origin-сервера (или энкодера) на edge-сервер RTMP поток в режиме publish;
  2. Edge-сервер может брать RTMP потоки (pull), указав IP адрес или hostname origin-сервера (или энкодера). 
Аналогичным образом работа строится для RTSP потоков.
Для SLDP, Icecast и SHOUTcast работает только pull.

Более подробно о создании собственной сети живого вещания можно прочитать в статье "Building RTMP live streaming network via Nimble Streamer". В настоящей статье мы рассмотрим способ уменьшения нагрузки на каналы связи за счет настройки получения только необходимых для просмотра в настоящий момент живых потоков по запросу через медиа-сервер Nimble Streamer.


Оптимизация полосы пропускания


В больших сетях вещания часто бывает так, что не все видео-потоки востребованы со стороны пользователей, но они продолжают передаваться по сетям связи к edge-серверу, что влечет расходы на трафик. 
Nimble Streamer позволяет оптимизировать использование полосы пропускания за счет настройки получения RTMP и/или RTSP потоков только в случае, когда к этим потокам обратится пользователь.

Например, крупные контент-провайдеры могут предоставлять тысячи медиа URL с живым видео, но при этом только часть из этих URL востребовано пользователями в определенные промежутки времени. 

То же самое актуально при использовании видео-камер CCTV, которые вещают по протоколу RTSP. На экран обычно выводится видео не больше чем с 20-30 камер, при этом самих камер может быть несколько сотен (для систем типа "безопасный город").

Порядок настройки


С помощью Nimble Streamer можно выполнить продвинутую настройку Live pull settings, которая позволяет брать только те потоки, которые востребованы, а также указать медиа-серверу, чтобы он брал любые потоки для конкретного приложения.

Для выполнения настроек необходимо перейти "Nimble Streamer" -> "Live streams settings" -> "Live pull settings" и нажать на кнопку "Add RTMP URL".



В появившемся диалоговом окне необходимо указать URL для получаемого (pull) видео (опционально можно указать fallback URL), указать название исходящего приложения "Output application" и название исходящего потока "Output stream", а также указать параметр "Idle time" в течение которого поток все еще будет забираться, если пользователь уже прекратил просмотр этого потока. 



Такая настройка позволяет значительно экономить трафик в случае, если потоки используются редко. При этом задержка, связанная с возобновлением потока не будет превышать 200 мс. Если ваши потоки постоянно востребованы, то включение этой функции не даст преимуществ. Подробнее про задержки, связанные с вещанием живого видео можно прочитать в статье "Achieving low latency for live streaming using Nimble Streamer".

Можно настроить получение произвольных RTMP или RTSP потоков, поставив галочку "Dynamic stream name" и указав в Primary URL только название приложения (например, rtmp://remotehost:1935/live). В этом случае любой поток, относящийся к указанному приложению (напр., live) будет взят из источника и обработан описанным выше способом. Это позволяет не указывать всё множество возможных потоков, что значительно упрощает настройку.


После конфигурации сервера первый пользователь, запросивший видео по протоколу HLS или RTMP, инициирует pull сессию.

Настройки безопасности


Однако, использовать динамические имена потоков при их добавлении стоит аккуратно. У одного приложения может быть несколько сотен потоков (например, с видеокамер), не все из которых необходимо брать с источника одновременно. Это чревато тем, что пользователи могут своими действиями заставить медиа-сервер брать одновременно огромное количество потоков, загружая канал связи и вычислительные ресурсы без особой необходимости. Для того, чтобы предотвратить использование такого сценария, можно создать правило WMSAuth, которое позволит брать и проигрывать только те потоки к которым у пользователя разрешен доступ.

Подробнее про ограничение доступа по имени потока можно прочитать в статье "Hotlink protection with stream-based signature".

Сопутствующая документация

Processing RTMP and RTSP pull streams per request


Комментариев нет:

Отправить комментарий