Всем привет. В нашу поддержку ежедневно поступают десятки различных запросов, от простых вопросов «помогите настроить кластер» до очень сложных «поток не работает, иногда стрим заикается», но есть вопросы, от которых дергается глаз и у каждого сотрудника компания может ответить подробно.
А раз вопросы не прекращаются, значит, мы можем ответить и здесь.
Почему видео трансляция идет с задержкой?
В нашем блоге уже есть две статьи ( один раз , два ) по этой теме, прочтите их, если работаете с видео, и здесь я дам краткий и исчерпывающий ответ: Современное потоковое интернет-вещание 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 #защита ссылок-
«Разбор» Типовой Ит-Вакансии Между Строк
19 Oct, 24 -
Сканер Уязвимостей Spartan От Microsoft
19 Oct, 24 -
Вот, Бабушка, Вот... Виртуальный Хостинг!
19 Oct, 24 -
Похожие Поисковые Запросы На Hh.ru
19 Oct, 24