Для публикации потока необходимо указать ссылку на поток с протоколом ICECAST. После этого нужно выбрать протоколы дальнейшей раздачи: RTMP, HLS, MPEG-DASH, MSS или Low Latency Streaming.
Можно активировать услугу, если необходимо использовать SSL-сертификат. Вы можете использовать существующий сертификат или выпустить новый.
Описание логики работы:
Авторизация запросов пользователей выполняется исключительно в сети CDN, внешние ресурсы не используются. Решение о доступе к потоку принимается средствами нашей сети на основе критериев, обозначенных владельцем контента:
В момент обращения пользователя к защищённому потоку владельцу контента необходимо сформировать специальную ссылку.
Пример ссылки с локальной авторизацией:
http://example.a.trbcdn.net/md5(HucJ8tJFjy97yuox2OycOQ,1704067200)/path/to/stream/playlist.m3u8
Ссылка содержит авторизационный параметр md5(<md5 hash>[,<expires>])
в пути:
<md5 hash>
— хэш MD5 в формате Base64 for URL, сгенерированный на основе секретного ключа, URI запрошенного потока, IP-адреса пользователя (опционально) и времени жизни ссылки (опционально);<expires>
— время окончания действия ссылки в формате POSIX time (необязательный параметр).При обращении к контенту с использованием сгенерированной ссылки, CDN вычисляет значение MD5 и сравнивает его с полученным. Если значение MD5 не совпадает, то пользователю возвращается ответ с кодом 403 Forbidden
(запрет на воспроизведение).
Если текущее время превышает значение <expires>
, то пользователю возвращается ответ с кодом 410 Gone
(целевой ресурс больше недоступен).
Алгоритм генерации MD5-хэша (<md5_hash>
) для подписи ссылок:
<secret_word><path_to_stream><ip><expire_time>
. Элементы <ip>
и/или <expire_time>
не добавляются в строку для подписи, если в настройках локальной авторизации указано Не учитывать IP адрес
и/или Не ограничивать по времени
.base64_url
через base64_url(md5(<строка для подписи>))
.<md5 hash>
, выполняя следующие замены в base64_url
:=
заменяем на пустую строку ''
+
заменяем на -
/
заменяем на _
<md5 hash>
.
|
Пример генерации ссылки:
Есть следующие входные данные:
zah5Mey9Quu8Ea1k
1.2.3.4
http://example.a.trbcdn.net/path/to/stream/playlist.m3u8
1704067200
Формируем строку для подписи <secret_word><path_to_stream><ip><expire_time>
. Допустим, что мы учитываем и IP адрес, и время окончания действия ссылки.
Тогда строка для подписи выглядит так: zah5Mey9Quu8Ea1k/path/to/stream1.2.3.41704067200
Формируем подпись <md5 hash>
:
Пример на PHP:
$ php -r 'print str_replace("=", "",strtr(base64_encode(md5("zah5Mey9Quu8Ea1k/path/to/stream1.2.3.41704067200", TRUE)), "+/", "-_")) . "\n";'
HucJ8tJFjy97yuox2OycOQ
Пример на Python:
#!/usr/bin/python3 import base64 import hashlib secret_word = 'zah5Mey9Quu8Ea1k' path = '/path/to/stream' ip_address = '1.2.3.4' expiration_timestamp = 1704067200 def generate_local_signature(secret_word, path, ip_address=None, timestamp=None): string_to_sign = f'{secret_word}{path}' if ip_address is not None: string_to_sign = f'{string_to_sign}{ip_address}' if timestamp is not None: string_to_sign = f'{string_to_sign}{timestamp}' hashed_string = hashlib.md5(string_to_sign.encode()).digest() decoded_base64_string = base64.b64encode(hashed_string).decode() local_signature = decoded_base64_string.replace('+', '-').replace('/', '_').replace('=', '') return local_signature print(generate_local_signature(secret_word, path, ip_address, expiration_timestamp)) # HucJ8tJFjy97yuox2OycOQ
Итоговая ссылка:
http://example.a.trbcdn.net/md5(HucJ8tJFjy97yuox2OycOQ,1704067200)/path/to/stream/playlist.m3u8
Внешняя авторизации предназначена для возможности ограничения доступа к потоку с произвольной логикой, описанной в вашем скрипте авторизации.
Решение о доступе к потоку принимается на основе ответа вашего скрипта, ссылку на который Вы указываете в личном кабинете при создании/редактировании ресурса.
Если от скрипта авторизации пришел ответ со статусом 200, то доступ к потоку разрешен. В противном случае - доступ запрещен.
Авторизационному скрипту передаются следующие заголовки:
Host
: содержит имя домена, для которого предназначен запрос;X-Request-URI
: содержит URI запрашиваемого потока;X-Forwarded-For
: содержит реальный IP-адрес пользователя, который запрашивает поток;X-Remote-Addr
: содержит IP-адрес пользователя, который запрашивает поток, или прокси-сервера.Необходимо активировать эту опцию, если Вам нужно использовать функцию навигации по эфиру (DVR).
Работает только при HLS раздаче.
Активируйте эту функцию, если Вам нужно сохранить запись потока.
Работает только при HLS раздаче.
В этом разделе Вы можете установить ограничения раздачи контента в зависимости от страны и региона, IP адреса, referer или User-Agent