Что Пишут В Техподдержку Видеостримера?

Всем привет. В нашу поддержку ежедневно поступают десятки различных запросов, от простых вопросов «помогите настроить кластер» до очень сложных «поток не работает, иногда стрим заикается», но есть вопросы, от которых дергается глаз и у каждого сотрудника компания может ответить подробно.

А раз вопросы не прекращаются, значит, мы можем ответить и здесь.



Почему видео трансляция идет с задержкой?

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

Иногда DASH, но это не важно, ведь они оба сегментные.

Как это работает? Потоковое видео «разрезается» на небольшие файлы (обычно 2-8 секунд, в зависимости от динамики контента), таких сегментов накапливается от 3 до 10 и описывается специальным плейлистом, который автоматически обновляется при удалении старого сегмента и добавляется новый.

Это так просто.

Больше сегментов означает большую задержку, большая продолжительность каждого сегмента означает большую задержку.

10-20 секунд это нормально.

Почему это необходимо? Зачем накапливать столько видео в памяти видеосервера? Сегментация позволяет плееру не реагировать на нестабильное интернет-соединение и не прерывать видео при переключении с сети Wi-Fi на мобильное соединение.

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

новые данные.

Что делать, если нужно видео без задержки? Выбирайте другой протокол, если собираетесь общаться в веб-чате, управлять коптером через Интернет или смотреть видео с IP-камеры.

Вот примеры: WebRTC, MSE-LD, RTMP.

Как защитить видео? Встраивайте только на свой сайт

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

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

На все подобные просьбы у меня всегда один ответ – вы вам необходимо настроить Securelink на вашем сайте.

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

Многие читатели хабра знают о специальном модуле для Nginx — ngx_http_secure_link_module. Мы не используем Nginx, но есть аналогичная и не менее эффективная реализация, разница лишь в порядке параметров.

Как это работает? Сайт генерирует уникальный одноразовый вариант ссылка на основе пользовательских данных.

Что веб-сервер знает о клиенте? Правильно, это IP-адрес, User-Agent, Cookie, запрошенный URL. Если клиент авторизован, то в переменных сеанса можно получить и другую информацию, например, уникальный идентификатор клиента в базе данных сервиса или, например, срок действия подписки.

Собираем параметры в одну строку и хэшируем любимым алгоритмом, например SHA1. Получается набор бесполезных символов.

Например, хеш строки «127.0.0.1Habr» будет: 70ebe94671dd21bd65f4a00dfd988adc83fe6bda. Эта строка будет отправлена видеостримеру и его задачей будет проверка валидности ссылки, того, что она сгенерирована вашим сайтом, не «сгнила» и не была передана третьим лицам.

Обратная связь с веб-сайта отсутствует, поэтому видеостример должен сгенерировать хэш, используя те же данные, которые использовал веб-сайт. Видеостример также знает IP-адрес клиента и запрашиваемый контент, но не может знать ни идентификатор пользователя, ни время жизни ссылки.

Вам придется передать эти данные прямо в ссылке и использовать секретный ключ, чтобы никто не мог генерировать ссылки для себя.

Берём строку «127.0.0.1Habr1540327100SECRET» и получаем SHA1 99fe961672c52aa3033b98b545ec2cdec93bf515, и теперь создаём ссылку вида: example.com/Habr/index.m3u8Эtoken=99fe961672c52aa3033b98b545ec2cdec93bf515-1540327100 example.com — ваш видеосервер, Хабр — запрошенное видео, index.m3u8 — стандартное имя плейлиста HLS, значение токена — сгенерированная нами строка с веб-сервера.

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

Такую ссылку нельзя отправить другу или открыть в другом браузере — в формуле хеширования указан IP-адрес, а время жизни изменить нельзя — тогда хеш не совпадет.

Подводные скалы

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

Это первая проблема — не все готовы вникать в такие детали, ведь вставить статическую ссылку гораздо проще.

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

Часто случается, что сайт и веб-сервер неправильно определяют IP-адрес клиента; это нормально, если используются сети CDN, например CloudFlare. В этом случае вам нужно взять IP-адрес из правильного заголовка; вам может понадобиться помощь провайдера CDN. Например, у CloudFlare есть CF-Connecting-IP. Не то время.

Неправильное время на одном из серверов в сочетании с попытками минимизировать время жизни ссылки часто приводит к неработающим ссылкам.

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

Время жизни ссылки 3–24 часа — это нормально, они по-прежнему защищены, и есть способы ограничить количество одновременных просмотров.



Вместо общей суммы

Расскажите в комментариях, как обойти этот механизм защиты ссылок? Теги: #видео #техническая поддержка #видеонаблюдение #поддержка #iptv #flussonic #защита ссылок
Вместе с данным постом часто просматривают: