При данном способе публикации потока контент загружается в кэш сервера раздачи с сервера-источника при первом запросе пользователя и используется при обслуживании последующих запросов. Объекты хранятся в кэше в течение определенного периода времени.
Способ может быть использован, если существует готовый поток следующих протоколов:
При данном способе, трансформация потоков в другой формат не производится.
Для корректной работы CDN важно правильно настроить источник данных. В дальнейшем сеть CDN будет обращаться к указанному источнику, для кэширования контента:
В качестве источника могут выступать:
Если у Вас несколько источников контента (primary/backup), то Вы можете настроить приоритетность каждого. В случае, если источник с "первым приоритетом" будет недоступен, то сеть CDN автоматически переключится на следующий источник. Обратное переключение на приоритетный источник произойдёт автоматически, когда он будет снова работать в штатном режиме. |
При создании источника данных с S3-доменом будет необходимо указать разрешенный бакет, для этого появится соответсвующее поле.
Вы можете использовать AWS авторизацию при запросе к источникам. Для этого вам необходимо выбрать соответствующую опцию и ввести два ключа: ключ доступа (access key) и секретный ключ (secret key).
Если Вы используете хостинг на таких сервисах как: Wix, Amazon S3, Selectel и т.д., обратите, пожалуйста, особое внимание на следующий раздел "Hostname".
У многих виртуальных хостингов (таких как Amazon S3) есть практика обслуживания нескольких сайтов с одного веб-сервера. Чтобы узлы сети CDN могли достучаться до вашего контента, Вам нужно указать корректный Hostname.
Если Вы не знаете свой Hostname или не знаете где его найти, попробуйте воспользоваться этим сервисом. Укажите домен своего сайта и на вкладке "Информация" посмотрите поле "Имя ресурса".
Порядок действий, если Вы не знаете свой Hostname:
Для загрузки контента с сервера-источника в кэш сервера раздачи необходимо предоставить URL потока.
Введите путь до потока. Доменное имя подставляется автоматически из "Источника данных".
Вы можете добавить несколько плейлистов. |
Нажмите на кнопку "СОЗДАТЬ РЕСУРС".
Ресурс создан! Вы перенаправлены на вкладку "Инструкция по настройке + Плеер".
После создания и настройки ресурса мы рекомендуем проверить трансляцию на корректность работы.
Вы должны заменить все ссылки до видео-контента на ссылку, указанную в поле "CDN-ссылка на плейлист". После этого контент начнет отдаваться с CDN-узлов. |
Используйте фрейм "Код для встраивания" для размещения плеера на вашем ресурсе. |
В дополнительных настройках Вы можете добавить свой SSL-сертификат, настроить CNAME, а также изменить имя ресурса.
По умолчанию, после сохранения настроек, ваш контент будет доступен по HTTPS и будет иметь следующий вид https://example.a.trbcdn.net.
Для начала работы необходимо загрузить ваш сертификат или сгенерировать новый сертификат. Для этого в правом верхнем углу выберите "ДОБАВИТЬ СЕРТИФИКАТ".
Выберите сертификат, который Вы планируете использовать:
CNAME-запись позволяет присваивать хосту псевдоним. Этот псевдоним обычно связывает с хостом какую-нибудь функцию, либо просто сокращает его имя.
По умолчанию ваш контент будет доступен по example.a.trbcdn.net/images/1.jpg, но Вы можете настроить доступ к своему контенту по адресу cdn.example.ru/images/1.jpg. Для этого нужно создать CNAME-запись по приведенной ниже инструкции. Запись следует создать на тех серверах, на которые делегирован ваш домен.
Откройте страницу управления DNS на сайте компании, предоставляющей Вам услуги DNS-хостинга.
Создайте CNAME-запись со следующими значениями полей (в разных панелях управления названия полей могут отличаться):
Имя (Хост) — "cdn".
В некоторых панелях управления в качестве имени записи требуется указывать полное имя поддомена, например, cdn.example.ru.
Значение — example.a.trbcdn.net..
Подождите, пока изменения в DNS вступят в силу. Этот процесс может длиться до 72 часов.
Если при настройке Live-ресурса был указан желаемый CNAME - в вкладке "Инструкция по настройке + Плеер" будет описана настройка CNAME на вашем DNS-сервере и представлена дополнительная CDN-ссылка на плейлист.
Включение дополнительной авторизации для всего ресурса HLS-pull невозможно.
Вы можете настроить дополнительную авторизацию для определенного пути во вкладке Правила на странице редактирования ресурса.
Обычно дополнительную авторизацию включают для пути |
Необходимо активировать эту опцию, если Вам нужно использовать функцию навигации по эфиру (DVR).
Перед включением опции с Вами свяжется менеджер.
Активируйте эту функцию, если Вам нужно сохранить запись потока.
Перед включением опции с Вами свяжется менеджер.
Для изменения названия ресурса введите в поле новое название ресурса и нажмите кнопку "СОХРАНИТЬ".
Название ресурса генерируется автоматически на этапе создания. |
Данный раздел предназначен для более тонкой настройки работы CDN-сети. После создания ресурса на странице его редактирования появится вкладка "Правила". В данной вкладке можно редактировать базовое правило (которое распространяется на весь ресурс), либо создавать индивидуальные правила для какого-либо раздела/пути. Правила позволяют управлять заголовками, кэшированием, CORS и авторизацией.
Укажите путь до директории или к конкретному файлу, к которому нужно применить данное правило.
В этом разделе Вы можете указать специальные заголовки, которые требуется добавить при обращении к источнику данных (вид "to origin"), либо при раздаче контента конечным пользователям (вид "to customer").
В этом разделе Вы можете указать допустимые таймауты при обращении узлов CDN к вашему ориджину. В случае, если фактические значения начнут превышать допустимые — произойдёт переключение на другой источник контента, указанный в разделе Источник данных.
В этом разделе Вы можете указать время кэширования в зависимости от кода ответа (2xx, 3xx, 4xx, 5xx), установить игнорирование заголовков управления кэшированием ("Expires" и "Cache-Control"), а также включить учет query string при кэшировании.
В определённых случаях обращение к контенту, размещённому в сети CDN, расценивается браузером как кросс-доменный запрос и блокируется. В первую очередь это касается шрифтов. Проблема решается выставлением заголовков CORS (Cross-Origin Resource Sharing) для кэшируемых объектов.
Вариантов два:
Механизм проверки CORS, предоставляемый для конфигурации, основывается на работе нашего собственного модуля. Его функциональность базируется на рекомендациях W3C.
Основные принципы работы модуля:
При включенном CORS заголовки Access-Control-* от ориджина не учитываются ни при каких условиях и удаляются из ответа.
Запрос без заголовка Origin не является кросс-ресурсным и заголовки Access-Control-* клиенту не передаются.
Заголовки Access-Control-Request-* не добавляются нашим модулем ни при каких условиях, т.к. это входящие заголовки запроса, формируемые браузером, как и Origin.
При наличии заголовка Origin его содержимое проверяется на соответствие с заданным пользователем. В случае отсутствия ограничений заголовок Access-Control-Allow-Origin ответа будет содержать "*", в случае наличия ограничений и попадания Origin в список разрешенных ACAO будет содержать http(s?)://${http_origin}, в любом другом случае ответ заголовков Access-Control-* содержать не будет.
Заголовок Access-Control-Expose-Headers добавляется в том случае, если такие заголовки заданы пользователем. По умолчанию мы проставляем разрешение на доступ к Content-Range для работы range-запросов (для плееров на JS).
Заголовок Access-Control-Allow-Credentials (ACAC) выставляется в соответствии с заданным пользователем.
Заголовки Access-Control-Allow-Methods, Access-Control-Allow-Headers и Access-Control-Max-Age проставляются только в ответе на запрос с методом OPTIONS, который обрабатывается локально и на ориджин не передается.
Заголовок Access-Control-Allow-Methods выставляется равным содержимому заголовка Access-Control-Request-Method в случае его наличия и попадания его содержимого в список простых запросов (GET, HEAD, POST), либо в список, заданный пользователем. Если метод не попадает в список разрешенных - ответ заголовков Access-Control-* содержать не будет. В случае отсутствия в запросе Access-Control-Request-Method Access-Control-Allow-Methods не выставляется.
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 не выставляется.
Заголовок Access-Control-Max-Age выставляется в соответствии с заданным пользователем, по умолчанию не выставляется.
Дополнительные заголовки ответа, определяемые клиентом, добавляются/переопределяются после отработки модуля CORS и, например, Access-Control-Alow-Origin: * в секции заголовков будет добавлен вне зависимости от результатов работы модуля CORS.
По умолчанию проверка CORS активна. В случае отключения CORS авторизации все preflight запросы будут перенаправляться на ваш ориджин. Заголовки, описанные выше и выставленные на ориджине, не будут затронуты и передадутся конечным пользователям без изменений.
Вы можете внести корректировки в работу модуля, задав следующие параметры:
Разрешенные домены (по умолчанию не проверяется, все домены разрешены)
Значение можно задавать одним из следующих способов:
Безопасные заголовки запроса
По умолчанию разрешены 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. |
В этом разделе Вы можете настроить локальную (на основе подписи), либо внешнюю авторизацию для ограничения доступа к вашему контенту.
Если локальная авторизация включается для правил, затрагивающих плейлисты (m3u8, mpd), то для корректной работы необходимо отключить кэширование в этих правилах. |
Решение о доступе к потоку принимается средствами нашей сети на основе критериев, обозначенных владельцем контента. В данном случае авторизация запросов пользователей выполняется исключительно в сети CDN, внешние ресурсы не используются. В момент обращения пользователя к защищённому ресурсу владельцу контента необходимо сформировать специальную ссылку.
Пример:
http://example.a.trbcdn.net/md5(ycmYPfxHwqjnIM93o7JNOA,1387984517)/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-хэша с использованием IP-адреса пользователя в качестве одного из входных параметров:
md5 = base64_url(md5(SECRET/path/to/stream1.2.3.4expiretime))
Пример алгоритма расчета MD5-хэша, если IP-адрес не учитывается:
md5 = base64_url(md5(SECRET/path/to/streamexpiretime))
Обратите внимание
Доменная часть URI при вычислении хэша не используется!
Обратите внимание
При генерации MD5 в URL не должно быть символов в формате urlencode, а должны быть исходные символы: кириллица, пробелы, проценты и т.д. Запрашивать с этим хешом необходимо кодированный вариант URL.
Обратите внимание
Можно подписывать часть пути (например, для /path/to/file можно подписать сам файл, /path/to, /path)
Пример генерации ссылки:
Есть следующие входные данные:
Вычисляем время действия ссылки. В приведённом примере – неделя с момента генерации.
$ php -r 'print time() + (7 * 24 * 60 * 60) . "\n";' 1387984517
$ php -r 'print str_replace("=", "",strtr(base64_encode(md5("zah5Mey9Quu8Ea1k/path/to/stream1.2.3.41387984517", TRUE)), "+/", "-_")) . "\n";'
ycmYPfxHwqjnIM93o7JNOA
Итоговая ссылка:
http://example.a.trbcdn.net/md5(ycmYPfxHwqjnIM93o7JNOA,1387984517)/path/to/stream/playlist.m3u8
Внимание!
Хэш MD5, вычисленный для HTTP, является базовым для данного ресурса. То есть, один и тот же хэш будет использован для ссылок на файл по протоколам HTTP, HTTPS несмотря на то, что URI для разных протоколов может немного отличаться.
При локальной авторизации контролируются следующие параметры:
Внешняя авторизации предназначена для возможности ограничения доступа к потоку с произвольной логикой, описанной в вашем скрипте авторизации.
Решение о доступе к потоку принимается на основе ответа вашего скрипта, ссылку на который Вы указываете в личном кабинете при создании/редактировании ресурса.
Если от скрипта авторизации пришел ответ со статусом 200, то доступ к потоку разрешен. В противном случае - доступ запрещен.
Авторизационному скрипту передаются следующие заголовки:
Host
: содержит имя домена, для которого предназначен запрос;X-Request-URI
: содержит URI запрашиваемого потока;X-Forwarded-For
: содержит реальный IP-адрес пользователя, который запрашивает поток;X-Remote-Addr
: содержит IP-адрес пользователя, который запрашивает поток, или прокси-сервера.В этом разделе Вы можете установить ограничения раздачи контента в зависимости от страны и региона, IP адреса, referer или User-Agent