воскресенье, 4 октября 2015 г.

Обзор механизма контроля публикаций RTSP и RTMP в Nimble Streamer

Nimble Streamer до недавнего времени поддерживал публикацию RTSP и RTMP потоков только для заданных приложений, это было связано со схемами авторизации самих протоколов RTSP и RTMP. При этом, чтобы разграничивать права на публикацию для пользователей приходилось под каждого пользователя, который хочет публиковать RTSP или RTMP потоки, создавать отдельное приложение в настройках с указанием параметров доступа.

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

Наши клиенты уже довольно длительное время и очень успешно используют защиту своих исходящих потоков с помощью функциональности WMSAuth Paywall. Но это относится только к исходящим потокам. Защита входящих потоков необходима в случае, если количество пользователей (и устройств) относительно велико и может привести к перегрузке инфраструктуры вещания. Опять же, не все пользователи ведут себя честно, некоторые могут публиковать рекламу, либо противозаконные материалы. Для защиты входящих потоков мы создали механизм Publish control, позволяющий осуществлять многоуровневую авторизацию.

Контроль входящих и исходящих потоков в Nimble Streamer

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


Теперь доступны следующие сценарии для публикации RTSP или RTMP потоков на медиа-сервер:

1. Если вам не требуется никакая защита для входящих RTSP/RTMP потоков, то вы указываете только порт RTSP или RTMP, а дальше ваши пользователи могут публиковать любые потоки на ваш сервер через указанный порт.

2. Следующий сценарий - это использование пароля. При этом для каждого пользователя желательно создать отдельное приложение с уникальной связкой логина и пароля, чтобы разграничить потоки разных пользователей. Такой механизм неудобен при большом количестве пользователей и не позволяет блокировать пользователей в процессе вещания, т.к. авторизация происходит только в момент регистрации пользователя (источника потока).

3. Для того, чтобы дать возможность большому количеству пользователей публиковать потоки на медиа-сервере, при этом иметь возможность гибко управлять потоками, в т.ч. в процессе вещания, необходимо использовать новую функциональность под названием Publish control.

На этом этапе защита будет работать с использованием сигнатуры, которая формируется на основе хэша, содержащего в качестве входящих параметров:
  • идентификатор пользователя (ID),
  • название потока, 
  • пароль, который указывается при создании приложения,
  • IP-адрес.

Для чтобы использовать контроль входящих потоков необходимо создать приложение в веб-интерфейсе контроля публикации. В это приложение будут группироваться пользователи, осуществляющие вещание. Название приложения должно совпадать с названием приложения из п. 2. Именно в настройках приложения указывается второй пароль, который будет использован уже для создания сигнатуры (signature) для защиты от нежелательной публикации.

Таким образом URL, который будет использовать пользователь для публикации в Nimble Streamer, будет похож на следующий:
rtsp://192.168.5.5:554/live/stream?publishsign=aWQ9SURfMSZzaWduPW95Zi9YVHBLM0c3QkQ4SmpwVnF1VHc9PSZpcD0xMjcuMC4wLjE=
или для RTMP
rtmp://192.168.5.5:1935/live?publishsign=aWQ9SURfMSZzaWduPW95Zi9YVHBLM0c3QkQ4SmpwVnF1VHc9PSZpcD0xMjcuMC4wLjE=/stream


Здесь publishsign - это и есть сигнатура для входящего RTSP потока.

При попытке публикации RTSP или RTMP потока производится проверка сигнатуры и если она не совпадает с расчётной, то поток пользователя будет игнорироваться.
На этом этапе метод очень похож на hotlinking protection.

4. Для более тонкого контроля входящих RTSP и RTMP потоков необходимо создать обработчик (handler) и указать URL этого обработчика в веб-интерфейсе настройки защиты.
Обработчик - это HTTP контроллер, который обрабатывает POST запросы и возвращает ответы в соответствии с бизнес-логикой владельца медиа-сервера.
Если не указать URL, то фукниционал Publish control не будет пытаться запустить обработчик - это сделано для возможности отладки всего механизма. При указании URL обработчика можно указать интервал группировки входящих потоков. С его помощью будет выдержан таймаут перед тем, как будет вызван обработчик. Сделано это для того, чтобы не тратить вычислительные ресурсы и время на вызов обработчика для каждого потока.

Теперь, если вы указали URL обработчика, то функционал Publish control передаст полученную от клиента сигнатуру (publishsign) обработчику вместе с идентификатором пользователя, IP адресом, названием потока и номером запроса (seq). В ответ на запрос, обработчик должен вернуть статус и номер запроса. На основе полученного статуса из ответе от обработчика Nimble Streamer принимает решение о разрешении подключения.

5. C помощью Publish control можно контролировать публикацию RTSP и RTMP потоков не только на стадии подключения, но и в процессе вещания, когда пользователь уже подключился и начал работу. Для этого каждой сессии присваивается собственный ключ (key). Обработчик может опрашивать Nimble с любой периодичностью, чтобы узнать, какие пользователи с каким ID куда публикуют свои данные. Далее, если согласно бизнес-логике требуется остановить вещание конкретной сессии, делается вызов на этот экземпляр Nimble, с указанием её идентификатора, после чего вещание прекращается немедленно.

С появлением функционала Publish control медиа-сервер Nimble Streamer теперь защищает не только исходящие потоки от неавторизованного просмотра, но и входящие потоки от неавторизованной публикации.

В следующих публикациях мы опишем более подробно порядок настройки и дадим пример исходного кода для создания обработчика.

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


RTSP publish control framework overview

Nimble Streamer paywall feature set, Transmux RTSP to HLS, RTMP, DASH and more via Nimble Streamer, Поддержка RTMP в Nimble StreamerHot-linking protection for Nimble StreamerMobile broadcasting library for iOS platform


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

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