Перейти к содержанию

Стриминг

Обзор сервиса

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

Основные возможности:

  • HTML5 плеер: Готовое решение для просмотра трансляций, которое легко встраивается на любой сайт и работает на всех современных устройствах
  • Адаптивный стриминг: Автоматическая адаптация качества трансляции под скорость соединения и характеристики устройства зрителя
  • Поддержка популярных протоколов: Работа с RTMP, RTSP и SRT для максимальной совместимости с различным оборудованием
  • Запись и DVR: Возможность сохранения трансляций и организации отложенного просмотра
  • Безопасность: Гибкие настройки доступа к контенту

Создание трансляции

  1. В личном кабинете перейдите в раздел Стриминг
  2. Нажмите "Создать трансляцию" в правом верхнем углу
  3. Выберите способ предоставления потока:
    • Pull - мы забираем ваш HLS поток
    • Publish - вы отправляете поток на наши серверы (RTMP/RTSP или SRT)

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

Внимание

Лимиты системы:

  • Максимум 100 трансляций на аккаунт
  • До 10 потоков для RTMP/RTSP/SRT публикации в рамках одной трансляции

Для увеличения лимитов обратитесь в поддержку.

Подготовка к трансляции

В случае способа предоставления потока "Publish" для начала трансляции потребуется специальное программное обеспечение - энкодер, поддерживающий протоколы RTMP, RTSP или SRT. Мы рекомендуем заранее выбрать и настроить подходящий энкодер. Подробные инструкции по настройке популярных энкодеров доступны в соответствующем разделе документации.

Обратите внимание

При использовании протокола потоковой передачи RTSP рекомендуется отключить B-кадры (B-frames) в настройках кодирования видео. Это поможет избежать возможных артефактов в конечном видеопотоке.


Настройка трансляции

RTMP/RTSP-publish

Настройка подключения

Раздел "Инструкция" содержит все необходимые данные для запуска трансляции:

  • выбор задержки трансляции
  • выбор глубины перемотки эфира (DVR)
  • ссылки публикации и просмотра трансляции

Вы можете выбрать задержку трансляции:

  • Стандартная - оптимальный режим для большинства трансляций
  • Малая - уменьшенная задержка (для большинства зрителей задержка составит менее 10 сек)

Перемотка эфира (DVR) — это возможность перематывать трансляцию назад, даже если она еще идет. Зрители могут начать просмотр с начала или вернуться к пропущенным моментам. DVR доступен в трансляциях со стандартной задержкой.

Вы можете выбрать глубину перемотки эфира в выпадающем списке. Максимальная глубина - 12 часов.

Система автоматически генерирует необходимые данные для публикации:

  • URL публикации (primary и backup)
  • уникальный ключ потока

Резервный URL рекомендуется использовать при наличии достаточной пропускной способности канала - это обеспечит дополнительную надежность трансляции.

Для публикации нескольких качеств в некоторых энкодерах (например, Wirecast) требуется указывать потоки отдельно.

Видеоплеер

После получения ссылок для публикации и настройки энкодера мы рекомендуем проверить трансляцию на корректность работы. Вы можете просматривать вашу трансляцию на странице редактирования трансляции в блоке с плеером.

После нажатия на кнопку "Настроить" под плеером вы будете перенаправлены на страницу настроек плеера, где вы можете выбрать удобный способ просмотра: просмотр созданных потоков по отдельности или всех потоков вместе в одном плеере. Под формой выбора способа просмотров можно найти ссылку на плейлист и код для встраивания плеера на вашу web-страницу.

Обратите внимание

Используйте фрейм "Код для встраивания" для размещения плеера на вашем ресурсе.

Конфигурация трансляции

В блоке "Конфигурация трансляции" доступны расширенные настройки вещания.

Настройка потоков

Можно создать до 10 потоков разного качества

  1. Откройте раздел "Конфигурация трансляции"
  2. Используйте кнопку "Добавить поток" для создания нового потока
  3. Для каждого потока укажите:

    • Понятное название для удобства управления
    • Разрешение из предложенного списка
  4. При необходимости удалите неиспользуемые потоки

  5. Сохраните изменения после настройки

Транскодирование $

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

Для настройки транскодирования:

  1. Выберите подходящий пакет транскодирования
  2. Сохраните настройки

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

При использовании транскодирования важно помнить:

  • Можно использовать только один входной поток
  • Доступны различные пакеты с разными параметрами обработки
  • Система автоматически создаст потоки разного качества

Ограничение доступа к контенту $

В этом разделе Вы можете установить ограничения раздачи контента в зависимости от страны и региона, IP адреса, referer, User-Agent или ограничения авторизации

Процесс конфигурации модуля
  1. Активируйте нужный Вам вид ограничения и выберите правило по умолчанию (запрещено или разрешено).
  2. Добавьте исключения из правила по умолчанию. Для гео ограничений также выберите правило для самого исключения. Таким образом Вы можете, например, запретить трафик для всей страны, при этом разрешить для отдельного региона.
  3. При необходимости задайте интервалы времени действия правила. Интервалы не должны пересекаться.
  4. Возможно добавить несколько различных правил каждого вида, при условии что их временные интервалы не пересекаются.
Авторизация по кодовому слову

Описание логики работы:

Авторизация запросов пользователей выполняется исключительно в сети CDN, внешние ресурсы не используются. Решение о доступе к потоку принимается средствами нашей сети на основе критериев, обозначенных владельцем контента:

  1. Секретный ключ. Проверяется, что ссылка сформирована именно владельцем контента.
  2. URI запрашиваемого потока. Проверяется, что ссылка была сформирована именно для этого потока.
  3. IP-адрес пользователя (опционально). Проверяется, что поток запрошен именно с того IP-адреса, для которого была сформирована ссылка. Вы можете отключить проверку, выбрав опцию "Не учитывать IP адрес".
  4. Время окончания действия ссылки (опционально). Вы можете отключить проверку, выбрав опцию "Не ограничивать по времени".

В момент обращения пользователя к защищённому потоку владельцу контента необходимо сформировать специальную ссылку.

Пример ссылки с локальной авторизацией:

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>.

Обратите внимание

  1. Доменная часть URI при вычислении хэша не используется
  2. Можно подписывать часть пути (например, для /path/to/stream можно подписать сам поток, /path/to, /path)
  3. При генерации MD5 в URL не должно быть символов в формате urlencode, а должны быть исходные символы: кириллица, пробелы, проценты и т.д. Запрашивать с этим хешом необходимо кодированный вариант URL.
  4. Хэш MD5, вычисленный для HTTP, является базовым для данного потока, то есть один и тот же хэш будет использован для ссылок на поток по протоколам HTTP и HTTPS, несмотря на то что URI для разных протоколов может немного отличаться.

Пример генерации ссылки:

  1. Есть следующие входные данные:

    • Секретный ключ: zah5Mey9Quu8Ea1k
    • IP-адрес пользователя: 1.2.3.4
    • URI потока: http://example.a.trbcdn.net/path/to/stream/playlist.m3u8
    • Время окончания действия ссылки: 1704067200
  2. Формируем строку для подписи <secret_word><path_to_stream><ip><expire_time>. Допустим, что мы учитываем и IP адрес, и время окончания действия ссылки.

    Тогда строка для подписи выглядит так: zah5Mey9Quu8Ea1k/path/to/stream1.2.3.41704067200

  3. Формируем подпись <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
    

  4. Итоговая ссылка:

    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 (перемотка прямого эфира)

Сброс DVR (кнопка "Сбросить накопленный DVR") позволяет очистить накопленный буфер трансляции и начать формировать его заново. При сбросе весь ранее накопленный контент удаляется, и окно DVR начинает заполняться с текущего момента.

Сброс DVR может потребоваться в следующих ситуациях:

  • После технических сбоев в трансляции
  • Для очистки буфера после тестового запуска трансляции
  • При смене контента в рамках одной трансляции
  • Если нужно начать накопление с определенного момента

Важно

  1. Сброс DVR нельзя отменить
  2. После сброса зрители не смогут вернуться к ранее транслировавшемуся контенту
  3. Новое накопление начнется сразу после сброса
  4. Размер окна DVR сохраняется прежним

Страница трансляции

Страница трансляции представляет собой готовую веб-страницу с плеером для просмотра вашей трансляции.

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

Используйте кнопки справа от ссылки для:

  • Копирования ссылки в буфер обмена
  • Перегенерации ссылки при необходимости

Защита трансляции паролем

После получения ссылки на страницу трансляции вы можете установить пароль для ограничения доступа:

  • При изменении пароля новые настройки вступают в силу в течение 30 секунд
  • Зрители увидят форму ввода пароля при переходе по ссылке
  • Доступ к просмотру трансляции открывается только после ввода правильного пароля

Это позволяет контролировать доступ к вашей трансляции и делиться ссылкой только с определенной аудиторией.


SRT-publish

Описание

SRT (Secure Reliable Transport) - современный протокол, разработанный специально для надежной передачи видео через интернет.

Преимущества SRT:

  • Повышенная надежность при плохом качестве связи
  • Встроенное шифрование данных
  • Автоматическая адаптация к условиям сети
  • Минимальная задержка при передаче

Настройка подключения

Раздел "Инструкция" содержит все необходимые данные для запуска трансляции:

  • выбор задержки трансляции
  • выбор глубины перемотки эфира (DVR)
  • ссылки публикации и просмотра трансляции

Вы можете выбрать задержку трансляции:

  • Стандартная - оптимальный режим для большинства трансляций
  • Малая - уменьшенная задержка (для большинства зрителей задержка составит менее 10 сек)

Перемотка эфира (DVR) — это возможность перематывать трансляцию назад, даже если она еще идет. Зрители могут начать просмотр с начала или вернуться к пропущенным моментам. DVR доступен в трансляциях со стандартной задержкой.

Вы можете выбрать глубину перемотки эфира в выпадающем списке. Максимальная глубина - 12 часов.

Система автоматически генерирует необходимые данные для публикации:

  • Основной URL для публикации
  • Резервный URL для дополнительной надежности

Видеоплеер

После получения ссылок для публикации и настройки энкодера мы рекомендуем проверить трансляцию на корректность работы. Вы можете просматривать вашу трансляцию на странице редактирования трансляции в блоке с плеером.

После нажатия на кнопку "Настроить" под плеером вы будете перенаправлены на страницу настроек плеера, где вы можете выбрать удобный способ просмотра: просмотр созданных потоков по отдельности или всех потоков вместе в одном плеере. Под формой выбора способа просмотров можно найти ссылку на плейлист и код для встраивания плеера на вашу web-страницу.

Обратите внимание

Используйте фрейм "Код для встраивания" для размещения плеера на вашем ресурсе.

Конфигурация трансляции

В блоке "Конфигурация трансляции" доступны расширенные настройки вещания.

Настройка потоков

Можно создать до 10 потоков разного качества

  1. Откройте раздел "Конфигурация трансляции"
  2. Используйте кнопку "Добавить поток" для создания нового потока
  3. Для каждого потока укажите:

    • Понятное название для удобства управления
    • Разрешение из предложенного списка
  4. При необходимости удалите неиспользуемые потоки

  5. Сохраните изменения после настройки

Транскодирование $

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

Для настройки транскодирования:

  1. Выберите подходящий пакет транскодирования
  2. Сохраните настройки

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

При использовании транскодирования важно помнить:

  • Можно использовать только один входной поток
  • Доступны различные пакеты с разными параметрами обработки
  • Система автоматически создаст потоки разного качества

Ограничение доступа к контенту $

В этом разделе Вы можете установить ограничения раздачи контента в зависимости от страны и региона, IP адреса, referer, User-Agent или ограничения авторизации

Процесс конфигурации модуля
  1. Активируйте нужный Вам вид ограничения и выберите правило по умолчанию (запрещено или разрешено).
  2. Добавьте исключения из правила по умолчанию. Для гео ограничений также выберите правило для самого исключения. Таким образом Вы можете, например, запретить трафик для всей страны, при этом разрешить для отдельного региона.
  3. При необходимости задайте интервалы времени действия правила. Интервалы не должны пересекаться.
  4. Возможно добавить несколько различных правил каждого вида, при условии что их временные интервалы не пересекаются.
Авторизация по кодовому слову

Описание логики работы:

Авторизация запросов пользователей выполняется исключительно в сети CDN, внешние ресурсы не используются. Решение о доступе к потоку принимается средствами нашей сети на основе критериев, обозначенных владельцем контента:

  1. Секретный ключ. Проверяется, что ссылка сформирована именно владельцем контента.
  2. URI запрашиваемого потока. Проверяется, что ссылка была сформирована именно для этого потока.
  3. IP-адрес пользователя (опционально). Проверяется, что поток запрошен именно с того IP-адреса, для которого была сформирована ссылка. Вы можете отключить проверку, выбрав опцию "Не учитывать IP адрес".
  4. Время окончания действия ссылки (опционально). Вы можете отключить проверку, выбрав опцию "Не ограничивать по времени".

В момент обращения пользователя к защищённому потоку владельцу контента необходимо сформировать специальную ссылку.

Пример ссылки с локальной авторизацией:

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>.

Обратите внимание

  1. Доменная часть URI при вычислении хэша не используется
  2. Можно подписывать часть пути (например, для /path/to/stream можно подписать сам поток, /path/to, /path)
  3. При генерации MD5 в URL не должно быть символов в формате urlencode, а должны быть исходные символы: кириллица, пробелы, проценты и т.д. Запрашивать с этим хешом необходимо кодированный вариант URL.
  4. Хэш MD5, вычисленный для HTTP, является базовым для данного потока, то есть один и тот же хэш будет использован для ссылок на поток по протоколам HTTP и HTTPS, несмотря на то что URI для разных протоколов может немного отличаться.

Пример генерации ссылки:

  1. Есть следующие входные данные:

    • Секретный ключ: zah5Mey9Quu8Ea1k
    • IP-адрес пользователя: 1.2.3.4
    • URI потока: http://example.a.trbcdn.net/path/to/stream/playlist.m3u8
    • Время окончания действия ссылки: 1704067200
  2. Формируем строку для подписи <secret_word><path_to_stream><ip><expire_time>. Допустим, что мы учитываем и IP адрес, и время окончания действия ссылки.

    Тогда строка для подписи выглядит так: zah5Mey9Quu8Ea1k/path/to/stream1.2.3.41704067200

  3. Формируем подпись <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
    

  4. Итоговая ссылка:

    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 (перемотка прямого эфира)

Сброс DVR (кнопка "Сбросить накопленный DVR") позволяет очистить накопленный буфер трансляции и начать формировать его заново. При сбросе весь ранее накопленный контент удаляется, и окно DVR начинает заполняться с текущего момента.

Сброс DVR может потребоваться в следующих ситуациях:

  • После технических сбоев в трансляции
  • Для очистки буфера после тестового запуска трансляции
  • При смене контента в рамках одной трансляции
  • Если нужно начать накопление с определенного момента

Важно

  1. Сброс DVR нельзя отменить
  2. После сброса зрители не смогут вернуться к ранее транслировавшемуся контенту
  3. Новое накопление начнется сразу после сброса
  4. Размер окна DVR сохраняется прежним

Страница трансляции

Страница трансляции представляет собой готовую веб-страницу с плеером для просмотра вашей трансляции.

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

Используйте кнопки справа от ссылки для:

  • Копирования ссылки в буфер обмена
  • Перегенерации ссылки при необходимости

Защита трансляции паролем

После получения ссылки на страницу трансляции вы можете установить пароль для ограничения доступа:

  • При изменении пароля новые настройки вступают в силу в течение 30 секунд
  • Зрители увидят форму ввода пароля при переходе по ссылке
  • Доступ к просмотру трансляции открывается только после ввода правильного пароля

Это позволяет контролировать доступ к вашей трансляции и делиться ссылкой только с определенной аудиторией.


HLS-pull

Описание

При данном способе контент загружается в кэш сервера раздачи с сервера-источника при первом запросе пользователя и используется при обслуживании последующих запросов. Объекты хранятся в кэше в течение определенного периода времени.

Вы можете воспользоваться этим способом, если существует готовый поток следующих протоколов:

  • Adobe HDS;
  • Apple HLS;
  • Microsoft Smooth Streaming (MSS).

При данном способе, трансформация потоков в другой формат не производится.

Видеоплеер

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

После нажатия на кнопку "Настроить" под плеером вы будете перенаправлены на страницу настроек плеера, где вы можете указать ссылку на интересующий поток для проверки. Здесь же можно найти ссылку на итоговый плейлист и код для встраивания плеера на вашу web-страницу.

Обратите внимание

Используйте фрейм "Код для встраивания" для размещения плеера на вашем ресурсе.

Конфигурация ресурса

Источник данных

Если у Вас несколько источников контента (primary/backup), то вы можете добавить их в Группу доменов и настроить приоритетность каждого. В случае, если источник с "первым приоритетом" будет недоступен, то сеть CDN автоматически переключится на следующий источник. Обратное переключение на приоритетный источник произойдёт автоматически, когда он будет снова работать в штатном режиме.

Каждому источнику можно настроить Вес и Max fails.

  • Вес (weight) это числовое значение, которое определяет, какую долю запросов должен получать конкретный сервер. Чем выше вес, тем больше запросов будет направлено на этот сервер. По умолчанию вес равен 1.

  • Max_fails - этот параметр определяет количество неудачных попыток соединения с сервером, после которых Nginx будет считать его недоступным на определенное время. По умолчанию max_fails равен 10.

Использовать HTTPS при запросе к источникам

По умолчанию запрос к источникам происходит по HTTPS. Здесь вы можете отключить использование HTTPS.

Так же вы можете включить проверку сертификата источника, выбрав соответствующую опцию.

Обратите внимание

Опция "Проверять сертификат источника" доступна только вместе с опцией "Использовать HTTPS при запросе к источникам".

Hostname при запросе к источнику

Если вы используете хостинг на таких сервисах, как Wix, Amazon S3, Selectel и т.д., обратите, пожалуйста, особое внимание на раздел Hostname.

У многих виртуальных хостингов (таких как Amazon S3) есть практика обслуживания нескольких сайтов с одного веб-сервера. Чтобы узлы сети CDN могли достучаться до вашего контента, вам нужно указать корректный Hostname.

Порядок действий, если вы не знаете свой Hostname:

  1. Зайдите на свой сайт и скопируйте ссылку на любую картинку, кликнув по ней правой кнопкой.
  2. Вставьте ссылку в новом окне браузера. Полученный домен и будет являться Источником контента для вашего сайта. Например, если у вас сайт размещён на Wix, источником контента будет выступать домен static.wixstatic.com
  3. Зайдите на ресурс https://check-host.net и укажите домен вашего сайта (не источника контента).
  4. На вкладке "Информация" посмотрите на "Имя ресурса" — это и есть ваш Hostname. Например, если у вас хостинг на Amazon, то Hostname может иметь вид: ec7-54-151-126-156.eu-west-1.compute.amazonaws.com
  5. Укажите полученный Hostname в личном кабинете
AWS авторизация

Вы можете использовать AWS авторизацию при запросе к источникам. Для этого необходимо выбрать соответствующую опцию и ввести два ключа: ключ доступа (access key) и секретный ключ (secret key).

Кеширование

Здесь вы можете указать время кэширования в зависимости от кода ответа (2xx, 3xx, 4xx, 5xx) и установить игнорирование заголовков управления кэшированием ("Expires" и "Cache-Control").

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

Обратите внимание

При вводе собственных значений времени кеширования контента, данные вводятся в секундах.

Игнорировать заголовки управления кешированием

Если в ответах источника контента (ориджина) уже содержатся заголовки Cache-Control и/или Expires, то кеширование производится на время, указанное в этих заголовках. Чтобы изменить это поведение необходимо включить Игнорировать заголовки управления кешированием. В этом случае кеширование будет производиться на время, заданное в этом разделе. Также заданное время кеширования будет использовано для ответов источника контента (ориджина), в которых не содержатся заголовки управления кешированием.

Обратите внимание

Некорректные значения заголовков (Expires с прошедшим временем, или Cache-control: private) отключают кеширование, что часто приводит к повышенной нагрузке на источник контента (ориджин).

Кешировать с учетом query string

При включении этой опции при кэшировании контента будут учитываться query string параметры.

Желаемый CNAME

CNAME-запись позволяет присваивать хосту псевдоним. Этот псевдоним обычно связывает с хостом определенную функцию или просто сокращает его имя.

По умолчанию ваш контент доступен по адресу: example.a.trbcdn.net/images/1.jpg

С CNAME вы можете настроить доступ по адресу: cdn.example.ru/images/1.jpg

  1. Создание CNAME-записи:

    • Откройте страницу управления DNS на сайте вашего DNS-хостинга
    • Создайте новую CNAME-запись со следующими параметрами:
      • Имя (Хост): "cdn" Примечание: В некоторых панелях управления может потребоваться указать полное имя поддомена, например, cdn.example.ru
      • Значение: example.a.trbcdn.net. (обратите внимание на точку в конце)
  2. Ожидание применения изменений:

    • Изменения в DNS могут вступить в силу в течение 72 часов
  3. Проверка настройки:

    • После истечения времени ожидания, проверьте доступность вашего контента по новому адресу
    • Используйте инструменты DNS-проверки для подтверждения корректности настройки
Раздача по HTTPS через CNAME (SSL-сертификат)

По умолчанию, после сохранения настроек, ваш контент будет доступен по HTTPS Стандартный URL будет иметь вид: https://example.a.trbcdn.net

Если вы планируете использовать SSL-сертификат, у вас есть два основных варианта:

a) Загрузить свой собственный сертификат:

  • Подготовьте свой SSL-сертификат заранее
  • Загрузите его до создания ресурса или после
  • Выберите загруженный сертификат из списка доступных при настройке ресурса

b) Выпустить сертификат Let's Encrypt:

  • Выберите опцию выпуска Let's Encrypt сертификата в настройках ресурса
  • Система автоматически сгенерирует и настроит сертификат для вашего ресурса

Ограничение доступа к контенту $

В этом разделе Вы можете установить ограничения раздачи контента в зависимости от страны и региона, IP адреса, referer, User-Agent или ограничения авторизации

Процесс конфигурации модуля
  1. Активируйте нужный Вам вид ограничения и выберите правило по умолчанию (запрещено или разрешено).
  2. Добавьте исключения из правила по умолчанию. Для гео ограничений также выберите правило для самого исключения. Таким образом Вы можете, например, запретить трафик для всей страны, при этом разрешить для отдельного региона.
  3. При необходимости задайте интервалы времени действия правила. Интервалы не должны пересекаться.
  4. Возможно добавить несколько различных правил каждого вида, при условии что их временные интервалы не пересекаются.
Авторизация по кодовому слову

Описание логики работы:

Авторизация запросов пользователей выполняется исключительно в сети CDN, внешние ресурсы не используются. Решение о доступе к потоку принимается средствами нашей сети на основе критериев, обозначенных владельцем контента:

  1. Секретный ключ. Проверяется, что ссылка сформирована именно владельцем контента.
  2. URI запрашиваемого потока. Проверяется, что ссылка была сформирована именно для этого потока.
  3. IP-адрес пользователя (опционально). Проверяется, что поток запрошен именно с того IP-адреса, для которого была сформирована ссылка. Вы можете отключить проверку, выбрав опцию "Не учитывать IP адрес".
  4. Время окончания действия ссылки (опционально). Вы можете отключить проверку, выбрав опцию "Не ограничивать по времени".

В момент обращения пользователя к защищённому потоку владельцу контента необходимо сформировать специальную ссылку.

Пример ссылки с локальной авторизацией:

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>.

Обратите внимание

  1. Доменная часть URI при вычислении хэша не используется
  2. Можно подписывать часть пути (например, для /path/to/stream можно подписать сам поток, /path/to, /path)
  3. При генерации MD5 в URL не должно быть символов в формате urlencode, а должны быть исходные символы: кириллица, пробелы, проценты и т.д. Запрашивать с этим хешом необходимо кодированный вариант URL.
  4. Хэш MD5, вычисленный для HTTP, является базовым для данного потока, то есть один и тот же хэш будет использован для ссылок на поток по протоколам HTTP и HTTPS, несмотря на то что URI для разных протоколов может немного отличаться.

Пример генерации ссылки:

  1. Есть следующие входные данные:

    • Секретный ключ: zah5Mey9Quu8Ea1k
    • IP-адрес пользователя: 1.2.3.4
    • URI потока: http://example.a.trbcdn.net/path/to/stream/playlist.m3u8
    • Время окончания действия ссылки: 1704067200
  2. Формируем строку для подписи <secret_word><path_to_stream><ip><expire_time>. Допустим, что мы учитываем и IP адрес, и время окончания действия ссылки.

    Тогда строка для подписи выглядит так: zah5Mey9Quu8Ea1k/path/to/stream1.2.3.41704067200

  3. Формируем подпись <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
    

  4. Итоговая ссылка:

    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-адрес пользователя, который запрашивает поток, или прокси-сервера.

Дополнительные зоны раздачи контента $

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

Подключение
  1. Переведите тоггл в состояние Включено
  2. Выберите одну или несколько зон:
    • EMEA (Европа, Ближний Восток и Африка)
    • APAC (Азиатско-Тихоокеанский регион)
    • AM (Америка)
  3. Нажмите кнопку Применить
  4. Подождите некоторое время, пока настройки применятся на сети
Настройка HTTPS
  1. В настройках дополнительных зон включите раздачу по HTTPS
  2. Выберите сертификат из списка существующих или загрузите новый

Важно

При обновлении SSL-сертификата в основном ресурсе не происходит автоматическое обновление сертификата в дополнительных зонах раздачи. Необходимо обновить сертификат вручную в настройках дополнительных зон.

При получении нового сертификата:

  • Обновите сертификат в настройках основного ресурса
  • Обновите сертификат в настройках дополнительных зон раздачи

Экспертные настройки

Внимание!

Этот раздел предназначен для продвинутых пользователей и позволяет тонко настроить работу CDN ресурса.

Таймауты

В этом разделе Вы можете указать допустимые таймауты при обращении узлов CDN к вашему ориджину. В случае, если фактические значения начнут превышать допустимые — произойдёт переключение на другой источник контента, указанный в разделе Источник данных.

Использовать HTTP3

По умолчанию поддерживается протокол HTTP/2.0. Подключите эту опцию, если требуется поддержка HTTP3.

Заголовки

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

Проверка CORS на стороне CDN
Описание

В определённых случаях обращение к контенту, размещённому в сети CDN, расценивается браузером как кросс-доменный запрос и блокируется. В первую очередь это касается шрифтов. Проблема решается выставлением заголовков CORS (Cross-Origin Resource Sharing) для кэшируемых объектов.

Вариантов два:

  1. Вы сами выставляете заголовки CORS на сервере-источнике и отключаете их проверку в нашей сети.
  2. Вы настраиваете проверку CORS через наш личный кабинет.
Настройка через личный кабинет

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

Основные принципы работы модуля:

  1. При включенном CORS заголовки Access-Control-* от ориджина не учитываются ни при каких условиях и удаляются из ответа.

  2. Запрос без заголовка Origin не является кросс-ресурсным и заголовки Access-Control-* клиенту не передаются.

  3. Заголовки Access-Control-Request-* не добавляются нашим модулем ни при каких условиях, т.к. это входящие заголовки запроса, формируемые браузером, как и Origin.

  4. При наличии заголовка Origin его содержимое проверяется на соответствие с заданным пользователем. В случае отсутствия ограничений заголовок Access-Control-Allow-Origin ответа будет содержать "*", в случае наличия ограничений и попадания Origin в список разрешенных ACAO будет содержать http(s?)://${http_origin}, в любом другом случае ответ заголовков Access-Control-* содержать не будет.

  5. Заголовок Access-Control-Expose-Headers добавляется в том случае, если такие заголовки заданы пользователем. По умолчанию мы проставляем разрешение на доступ к Content-Range для работы range-запросов (для плееров на JS).

  6. Заголовок Access-Control-Allow-Credentials (ACAC) выставляется в соответствии с заданным пользователем.

  7. Заголовки Access-Control-Allow-Methods, Access-Control-Allow-Headers и Access-Control-Max-Age проставляются только в ответе на запрос с методом OPTIONS, который обрабатывается локально и на ориджин не передается.

  8. Заголовок Access-Control-Allow-Methods выставляется равным содержимому заголовка Access-Control-Request-Method в случае его наличия и попадания его содержимого в список простых запросов (GET, HEAD, POST), либо в список, заданный пользователем. Если метод не попадает в список разрешенных - ответ заголовков Access-Control-* содержать не будет. В случае отсутствия в запросе Access-Control-Request-Method Access-Control-Allow-Methods не выставляется.

  9. Access-Control-Allow-Headers выставляется равным содержимому заголовка Access-Control-Request-Headers в случае его наличия, наличия заголовка запроса Access-Control-Request-Method и попадания всех заголовков в список простых (Accept, Accept-Language, Content-Type, Content-Language) либо в список, заданный пользователем. Если хотя бы один заголовок не попадает в список разрешенных - ответ заголовков Access-Control-* содержать не будет. В случае отсутствия в запросе Access-Control-Request-Method и Access-Control-Request-Headers Access-Control-Allow-Headers не выставляется.

  10. Заголовок Access-Control-Max-Age выставляется в соответствии с заданным пользователем, по умолчанию не выставляется.

  11. Дополнительные заголовки ответа, определяемые клиентом, добавляются/переопределяются после отработки модуля CORS и, например, Access-Control-Alow-Origin: * в секции заголовков будет добавлен вне зависимости от результатов работы модуля CORS.

Процесс конфигурации модуля

По умолчанию проверка CORS активна. В случае отключения CORS авторизации все preflight запросы будут перенаправляться на ваш ориджин. Заголовки, описанные выше и выставленные на ориджине, не будут затронуты и передадутся конечным пользователям без изменений.

Вы можете внести корректировки в работу модуля, задав следующие параметры:

Разрешенные домены (по умолчанию не проверяется, все домены разрешены)

Значение можно задавать одним из следующих способов:

  1. example.com - точное соответствие
  2. *.example.com - все поддомены example.com, не включая example.com
  3. .example.com - все домены 3го уровня, включая example.com
  4. ~a\d+\.example.com - регулярное выражение

Безопасные заголовки запроса

По умолчанию разрешены Cache-Control, Content-Language, Content-Type, Expires, Last-Modified, Pragma. Вы можете дополнить этот список своими заголовками.

Заголовки, доступные API верхнего уровня (Expose Headers)

По умолчанию разрешены Cache-Control, Content-Language, Content-Type, Expires, Last-Modified, Pragma. Вы можете дополнить этот список своими заголовками.

Безопасные методы

По умолчанию разрешены GET, HEAD, POST. Вы можете дополнить этот список своими методами.

Заголовок Access-Control-Allow-Credentials

Cookies, сессионность, авторизация несовместимы с кеширующими сервисами ввиду логики своей работы. Однако, если у Вас возникает необходимость выставить заголовок Access-Control-Allow-Credentials, Вы можете сделать это.

Время жизни ответа Preflight запроса

Время, в течение которого результат ответа Preflight запроса считается актуальным.

Внимание!

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


Правила

Данный раздел предназначен для более тонкой настройки работы CDN-сети. Индивидуальные правила для какого-либо раздела/пути и позволяют управлять заголовками, кэшированием, CORS, авторизацией и другими параметрами.

Создание правила

Для создания правила укажите путь до директории или к конкретному файлу, к которому нужно применить данное правило.

Конфигурация правила

Конфигурация правила настраивается аналогично конфигурации для всего ресурса.

Заголовки

Заголовки для определенного пути (правила) настраиваются аналогично опции для всего ресурса.

Ограничение доступа к контенту $

Ограничения для определенного пути (правила) настраиваются аналогично ограничениям для всего ресурса.

Проверка CORS на стороне CDN

Проверка CORS на стороне CDN для определенного пути (правила) настраивается аналогично опции для всего ресурса.

Настройка HTTP-статусов ответа

В данной опции вы можете настроить специальные правила для возвращаемых HTTP-статусов. Доступны следующие варианты настройки:

  1. Код состояния и текст ответа
    • Укажите HTTP-статус, который нужно вернуть
    • При необходимости добавьте текст, который будет отправлен в теле ответа
  2. Код состояния и перенаправление
    • Для кодов перенаправления (301, 302, 303, 307, 308) укажите URL, куда будет направлен пользователь
    • URL может быть как абсолютным (начинающимся с http:// или https://), так и относительным