Программные решения для построения онлайн-вещания


Контроль просмотров (pay-per-view)

Работает для Nimble Streamer и Wowza Streaming Engine

Некоторые компании хотят контролировать собственные процессы вещания на уровне каждого пользователи и каждого потока в дополнение к основным методам, таким как защита от вставки прямых ссылок или блокировка определённых географических зон . Это особенно актуально для систем, в которых абоненты платят за каждый просмотр.

Что мы можем предложить?

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

Алгоритм интеграции вышеописанных возможностей в рабочий процесс заказчика:

  1. Создаётся обработчик PPV API, который в состоянии принять POST запросы.
  2. Устанавливаются параметры обработчика в консоли WMSPanel.
  3. Добавляется подпись PPV в существующие медиа-ссылки.
  4. Включается процесс подписи PPV через WMSPanel.
Если вы всё это выполните, то основной сценарий будет выглядеть следующим образом:
  • Медиа-сервер (Nimble Streamer или Wowza) периодически посылает запросы обработчику. Синхронизация содержит все пользовательские идентификаторы, IP-адреса, время просмотра и названия медиа-данных.
  • Обработчик клиента принимает необходимые решения на основе бизнес-логики компании и отправляет ответ в сервер. Этот ответ содержит информацию о том, для каких gользователей должна быть заблокирована возможность просмотра медиа-контента.
  • Заблокированные пользователи сразу отключаются, в то время как остальные продолжают просмотр.

1. Создайте обработчик PPV

WMSPanel использует push API. Меида-сервер посылает запросы клиентскому обработчику. Этот обработчик должен быть доступен через HTTP/HTTPS и должен быть в состоянии принять POST запросы. Эти запросы могут быть в форматах JSON или XML, это устанавливается в настройках WMSPanel.
Обработчику нужно выполнять несколько вещей:

  • интерпретировть входящий запрос (например, декодировать документ JSON);
  • выполнить запрос к внутренней базе данных пользователей, чтобы добавить обновления активности использования и принять решение о сохранении доступа к медиа-данным (например, просмотру видео);
  • вернуть закодированный ответ, содержащий идентификаторы пользователей, для которых должен быть заблокирован доступ к медиа-данным.
Обработчику необходимо возвращать список всех заблокированных идентификаторов при каждой синхронизации. Если какие-то идентификаторы будут исключены из этого списка, то для них будет разрешён доступ.

Можете посмотреть пример простого обработчика на языке PHP. В этом примере обработчик просто принимает входящий запрос, регистрирует его и возвращает несколько идентификаторов, которые длолжны быть заблокированы. Также сильно рекомендуем посмореть полный пример запроса JSON и пример ответа обработчика .

2. Установка API параметров для обработчика

Теперь необходимо настроить связь между экземплярами Nimble Streamer и обработчика. Выберите меню Управление / Настройка API, далее выберите закладку Push API, которую мы будем использовать прямо сейчас.

Определите следующие параметры:

  • Введите URL обработчика в поле PPV handler URL;
  • Нажмите на чекбокс Enable pay per view;
  • Выберите формат запросов или оставьте значение "JSON" по умолчанию;
  • Введите интервал синхронизации или оставьте значение по умолчанию в 30 секунд.
Первая синхронизация будет произведена через несколько секунд после нажатия на Сохранить.

3. Генерация подписи PPV

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

Например, у вас есть следующий URL живой трансляции:
http://video.wmspanel.com:8081/live/stream/playlist.m3u8
Изменённый URL будет иметь вид:
http://video.wmspanel.com:8081/live/stream/playlist.m3u8?wmsAuthSign=c2VydmVyX3RpbWU9MDMvMDEvMjAxOSAwNzozMTo0NCBBTSZoYXNoX3ZhbHVlPVZGOHBLUE44Z0ZTYUQrM0p5c0pNYlE9PSZ2YWxpZG1pbnV0ZXM9MTAmaWQ9SURfMQ==

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

Нажмите здесь, чтобы посмотреть фрагмент кода на PHP.

Код идентичен тому, что используется в защите от вставки прямых ссылок, за исключением IP-адреса, который в данном случае заменяется идентификатором пользователя.Полный пример можно посмотреть в github репозитории и адаптировать его для вашего случая.


Две важные вещи, которые должны быть обязательно указаны на этом шаге:

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

Q: Как использовать одновременно ID и IP клиента в подписи?

Если добавить параметр "checkip=true" и адрес IP в $urlsignature, Nimble Streamer будет проверять и client IP и user ID.
Код генерации подписи из примера выше можно изменить вот таким образом, например:
$str2hash = $ip. $id . $key . $today . $validminutes;
$md5raw = md5($str2hash, true);
$base64hash = base64_encode($md5raw);
$urlsignature = 'server_time=' . $today . '&hash_value=' . $base64hash . '&validminutes=' . $validminutes . '&id=' . $id .'&checkip=true';

4. Установка настроек в панели управления

После того, как фрагмент кода включен на стороне веб-сервера, Nimble Streamer (или агент Wowza) должен быть извещён о настройках защиты. Пройдите в меню "Control" -> "WMSAuth paywall setup".

WMSAuth - это часть функциональности Paywall для защиты от повторного вещания и некоторых других функций.

4.1 Группа WMSAuth

В WMSAuth любое ограничение может быть применено к группе серверов. Таким образом, первое, что необходимо сделать — это создать группу и добавить в неё один или несколько серверов. Детали приведены на скриншоте.

4.2 Правила WMSAuth

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

Последнее, что нужно указать — это ключ или пароль, который будет вставлен в подпись медиа-данных на стороне веб-сервера (см. раздел "Генерация подписи PPV").
После сохранения правила оно будет применено к серверу в течение нескольких секунд.

Параметр Time tolerance означает максимально допустимую разницу во времени между веб-сервером и медиа-сервером. Имеет смысл использовать этот параметр, если вы не можете настроить одно и то же время на обоих серверах.

Это всё, что нужно?

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

Можно совмещать эту функциональность с блокировкой географических и диапазонов IP-адресов, а также c ограничением количества соединений и пропускной способности.

Также обратите внимание на функциональность playback authorization , которая позволяет управлять псоединениями с помощью внешнего хендлера.

Пример

Руководство параноика по Интернет-вещанию от Thomas Gires содержит очень полезные примеры использования оплаты за просмотр из реальной жизни для HLS ретрансляции с помощью лёгкого edge-сервера.

Вопросы или проблемы

Q1: Существуют ли доступные методы отладки?

Обработчик и интерфейс отладки позволяют получать данные от сервера и просматривать результаты в браузере. Используйте их, чтобы видеть, какие запросы поступают от серверов к вашему обработчику.

Q2: Как использовать взаимную авторизацию в PPV?

Взаимная авторизация дает возможность хендлеру и медиа-серверу убедиться, что они работают с авторизованными сторонами.

Сначала включите взаимную авторизацию. В разделе 2 на скриншоте это галка "Enable mutual authorization".

Как только вы её включите, выбранный медиа-сервер начнет отправлять дополнительные параметры: "Signature" и "Puzzle" в дополнение к существующему "ID".
"Signature" - это то, что ваш хендлер должен проверить, чтобы убедиться в том, что сообщение отправлено правильным сервером.
Signature = BASE64(MD5(ID + Puzzle + Token))

Ответ вашего хендлера должен содержать параметр "Solution"
{"Solution": "PjxTZXJ2ZXJBdXRob3JpemF0aW9uUHJvcGVydGllcz48U2Vydm"}
"Solution" проверяется на сервере, чтобы убедиться в том, что сервер знает токет.
Solution = BASE64(MD5(Puzzle + Token))

Параметр "Token" задается в WMSPanel как показано на том же скриншоте установки PPV.

Q3: Не работает pay-per-view?

Внимательно прочтите нужный пункт часто задаваемых вопросов.

Q4: Что если сервис WMSPanel недоступен?

Pay-per-view будет работать независимо от доступности WMSPanel. Если ваш сервер по каким-либо причинам не сможет соединиться с сервисом WMSPanel, всё равно механизм будет отлично работать. Панель управления не используется после того, как завершена настройка правил.