Привет, Хабр! Я Дмитрий Новожилов, техлид в онлайн-кинотеатре KION. Сейчас в России 53 млн человек смотрят онлайн-кинотеатры, но принцип их работы остается загадкой не только для зрителей, но (иногда) и для разработчиков. И это действительно проблема. Если вы не говорите с людьми на одном языке, не оперируете одинаковыми терминами, то бывает довольно сложно не просто сформулировать задачу, а даже передать смысл разработки того или иного узла.
Чтобы быстро погружать членов своей команды в нашу профессиональную сферу, я подготовил много разных обзорных материалов о внешнем и внутреннем устройстве видеосервисов. В процессе я понял, что они могут быть полезны широкому кругу читателей. Иногда смотреть кино еще интереснее, если вы понимаете, что происходит по ту сторону экрана.
Итак, это первый текст из запланированного цикла. В нем я крупными мазками расскажу основные этапы, через которые изображение проходит от «стекла до стекла»: от камеры у кинооператора на съемочной площадке до вашего смартфона или телевизора.
Сразу оговорюсь, я не претендую на истину в последней инстанции. Есть много реализаций для любых из ниже описанных систем. Но существуют индустриальные стандарты, от которых я отталкиваюсь. Это как у транспортных средств: в них обязательно должны быть движитель и двигатель. Двигатель у автомобиля — его мотор, а движитель — колеса. Так и у онлайн-кинотеатров есть пять основных элементов, через которые проходит видеоряд. Одни из них интегрированы так, что их сложно рассмотреть раздельно, а вот другие выделяются достаточно четко. Про каждый из них мы поговорим в этом цикле статей. Но начнем с того, откуда вообще в онлайн-кинотеатрах берется контент.
Источники данных
Рассказывать, как из окружающего вас многообразия формируется картинка на экране или что цвета в действительности не существует, а есть только отражение света с определенной частотой, не буду. Это слишком душно. Зафиксирую два типа источников данных: прямой эфир и видеоархив.
Дисклеймер: онлайн-кинотеатр, видеоплатформу и видеосервис предлагаю считать определениями одной сущности, просто используемыми в разных контекстах.
Прямой эфир
Представим телевизионную студию, где идет какое-то шоу или передача, а зрители смотрят ее в прямом эфире. Например, это уже всеми забытые утренние новости по телевизору. Стримы — то же, но мы все же будем говорить про традиционные видеосервисы и обойдем эту часть, так как там есть много своих нюансов.
Итак, в этом формате как-то изменить сделанное или исправить сказанное нельзя: если ведущий запнулся, не смог выговорить какую-то фамилию или, еще страшнее для него, засмеялся, то это увидят все. Прямой эфир можно либо включить и показывать, либо выключить.
На таких мероприятиях всегда много камер, и вам могут показывать одну и ту же сцену с разных сторон — переключением камер управляет режиссер со специального пульта с множеством экранов. Он сам решает, какую из камер показать в каждый из моментов. Если он пропустил какую-то эмоцию ведущего или актера и не вывел эту камеру в эфир, то больше не сможет это исправить.
Самое главное в таком видеоряде то, что видеосигнал доходит до зрителя только с одной камеры, которая выбрана в данный момент времени. Чтобы не потерять качество картинки, видеосигнал со всех камер идет максимально несжатый. Одним из наиболее распространенных интерфейсов для передачи такого сигнала является SDI (Serial Digital Interface). Скорость может варьироваться от сотен Мбит/с до десятков Гбит/с.
Такой объем данных нельзя напрямую отправить на ваше устройство. Никакое оборудование не выдержит, если прямой эфир будут смотреть миллионы человек. Именно поэтому изображение необходимо подготовить — обработать и сжать. Этим занимаются остальные элементы видеосервиса.
Видеоархив
Это библиотека фильмов, сериалов и так далее. Передачу из примера выше могли и не показывать в прямом эфире, а записать и затем смонтировать. Если кто-то оговорился или что-то сделал не так в кадре, неудачный фрагмент переснимают снова. И снова. И снова. Пока не получат идеальную картинку. Все эти материалы отправляют на монтаж, где убирают лишнее. Готовые записи уже можно в любой момент показать зрителям.
В случае с видеоархивом скорость выходного сигнала будет ниже, так как уже сделаны все возможные оптимизации и не нужно избыточности. Такие данные могут передаваться со скоростью от одной до нескольких сотен Мбит/с.
Видеоархив также нельзя сразу взять и отправить на телевизор без подготовки. Но в отличие от прямого эфира, это можно сделать заранее. Например, взять отснятый фильм и назначить ему дату премьеры. При этом все материалы уже будут подготовлены на видеоплатформе, и опоздания актеров не смогут повлиять на начало премьеры.
Таким образом, есть два принципиальных варианта загрузки видеоданных в онлайн-кинотеатр: прямой эфир (Live Streaming, или иногда просто Live) и видеоархивы (Video On Demand).
Headend
Дисклеймер: далее в описании я пропущу часть деталей и расскажу только самые интересные моменты.
Видеоплатформа получает контент и обрабатывает его с помощью элемента видеосервиса под названием headend. Прямой эфир либо попадает сюда как есть, либо с минимальной оптимизацией объема. Здесь происходит его первая ступень подготовки для передачи конечному пользователю. В нем можно выделить три компонента: пункт приема сигнала (input), кодер (coder) и пакетайзер (packager).
Пункт приема сигнала
Это первый компонент headend, и его наличие не является обязательным. Например, им может быть станция приема спутникового сигнала, если в студии недоступны проводные каналы связи.
Кодер
Он идет за Input. Это интересный и важный компонент, от которого зависит качество конечной картинки. Он отвечает за ABR (Adaptive Bitrate) функциональность. Предположим, что на вход кодера подается канал с картинкой HD-качества и битрейтом 20 Мбит/с. Это достаточно хорошее качество, которое позволяет на телевизоре в 32 дюйма смотреть видео без каких-либо артефактов. На выходе кодера будет три одинаковых по содержанию, но разных по качеству канала: HD (15 Мбит/с), SD (8 Мбит/с) и LQ (4 Мбит/с).
А теперь представим, что вы смотрите на телевизоре видео в HD-качестве. Вдруг скорость соединения резко падает до 10 Мбит/с, которых недостаточно для HD. Чтобы не показывать вам на экране «бублик» процесса буферизации, плеер сам переключится на SD-качество. Теряя немного в качестве картинки, вы продолжаете смотреть канал без прерываний. Как только интернет восстановится, плеер вернется на HD. Это и называется ABR. Он становится возможным как раз благодаря наличию кодера на этапе подготовки контента.
Пример, описанный выше, очень сильно упрощен. Копий в разном качестве может быть гораздо больше, а у картинок будут разные параметры. Но суть сводится к тому, что кодер преобразует поток от источника данных в регламентированное для текущей платформы качество видео. Чем больше разрешений, битрейтов и других параметров, тем сложнее предоставлять стабильный и качественный сервис конечному потребителю.
Для видеоархива и прямого эфира кодер работает одинаково. Разница в том, что для прямых эфиров нужна бо́льшая производительность, так как каждый фрагмент видео нужно обрабатывать и выдавать на выход максимально быстро. Каждая секунда задержки на этом этапе будет влиять на то, с каким опозданием будет проигрываться видео у пользователей.
Для видеоархива задержки не важны. Фильм длительностью 90 минут кодер может обрабатывать и 180, и даже 300 минут. Он будет доступен для просмотра только после полной обработки, поэтому о каких-либо задержках на стороне кодера тут не может быть и речи.
Пакетайзер
Кодер и пакетайзер решают разные задачи, но в большинстве реализаций их объединяют в единую систему. Пакетайзер упаковывает выходной поток с кодера в нужный для нас протокол, но никак не меняет само изображение. Самыми распространенными протоколами являются HLS (Http Live Streaming) и DASH (Dynamic Adaptive Streaming over HTTP).
При пакетировании происходит два важных действия. Сначала идет нарезание потока видео на короткие чанки (chunks) — небольшие файлы от 2 до 10 секунд. Эта длительность зависит от протокола и пользовательских настроек. Телевизор или телефон скачивает чанки и проигрывает их в нужном порядке.
Второе важное действие — это шифрование. Пакетайзер тесно связан с DRM (Digital Rights Management) системой. В ней он получает ключ, которым зашифровывает чанки, а пользовательское устройство потом идет в эту же систему и получает ключи, чтобы расшифровать и показать видео.
Таким образом, headend — очень важный элемент, который обеспечивает качество итогового видео. После него видео больше не меняется, осуществляется только управление доступом к нему. Отвечает за это «сердце видеосервиса» — Middleware. Сюда входит множество компонентов: OSS (Operation Support System), BSS (Business Support System) и все, что их окружает. Эту тему подробнее обсудим в следующей статье.
На сегодня все. В следующих постах мы подробнее обсудим работу Middleware, виды CDN, как он связан с Origin и что это вообще такое. Также рассмотрим возможности сокращения задержки трансляции и другую функциональность видеосервисов. Если у вас возникли вопросы, пишите в комментах — с радостью на них отвечу.
Комментарии (4)
Hve2024
18.12.2024 05:51так и не сказали откуда фильмы берутся, я бы документы посмотрел на предмет лицензии, убедиться что они так же как и у меня с торрентов не стянуты)))
DNovozhilov01 Автор
18.12.2024 05:51Ну рамки статьи ограничены и если углубляться во все тонкости то будет статья на пару томиков. Я старался сделать краткое обобщение для верхнеуровнего понимания общего процесса от камеры до телефона. Но в любом случае мой коллега по КИОН уже публиковал статью как раз про то откуда мы берем контент, как взаимодействуем по лицензиям показа и тому подобное.
say_mokc_no
20 Мбит сек что-то тощая какая-то у вас колбаса на входе кодера
DNovozhilov01 Автор
Тут все зависит от многих фактором. Например поставщик, если нам эфирные каналы дают в таком качестве то мы используем то что дают. Но в любом случае, всегда нужен баланс между качество и количеством (битрейтом). На эту тему много статей и у меня были мысли тоже что-то описать. Но мои коллеги по КИОН уже публиковали статью про качество и как мы его меняли. Там часть вопросов раскрыта.