Привет, Хабр! Снова с вами Дмитрий Новожилов — техлид онлайн-кинотеатра KION. В прошлый раз я рассказал, откуда берется контент на киносервисах и как он обрабатывается. Для этого разобрал источники данных и элемент Headend, включающий пункт приема сигнала, кодер и пакетайзер.
На предварительных этапах контент нормализуется, делится на чанки, обрабатывается DRM и попадает в «сердце видеосервиса» — Middleware. Это тот самый элемент, который управляет контентом, когда вы открываете приложение на умном телевизоре или смартфоне. Он обеспечивает логику работы витрины: когда вы заходите в сервис, показывает доступный на площадке контент. Затем вы выбираете нужный фильм и получаете его через ближайший узел CDN.
В этом посте я расскажу, какие компоненты и сервисы объединяются термином Middleware и что конкретно делает этот комплекс.

Обогащение контента метаинформацией
Мы рассмотрели, как контент (физические кадры видеоряда) преобразуется в финальную версию того, что в конечном итоге вы будете видеть на своем экране. В подавляющем большинстве платформ после кодера с видеопотоком (его качеством, разрешением, цветопередачей и так далее) уже ничего не происходит. Он не меняется: только преобразуется транспорт, как именно тот или иной кадр видео будет доставлен до вас. Если представить, что 1 секунда видео — это 24 кадра, а каждый кадр — это условно обычная статическая картинка, то вот с ней никаких изменений уже не происходит. Именно поэтому весь контент с Headend можно смело перекладывать на Origin, о котором расскажу в следующем тексте.
Но сам по себе видеоряд неинформативен. Представьте, что вы пришли в кинотеатр, а там на афише увидели бы «Film_№1.mp4», «Film_№2.mp4». Совсем не понятно, что именно можно посмотреть, когда идет сеанс, сколько он стоит и так далее. Вот эта информация о контенте индустриальным языком называется метаданными. Их формирование идет параллельно загрузке самого видеоряда на платформу. И за работу с этим процессом уже отвечает Middleware.
При публикации контента в Middleware к нему добавляется вся нужная информация. Если мы говорим про Video on Demand (фильмы, сериалы и так далее), то это будет название, краткое описание, длительность, состав актеров, режиссеров и даже рейтинг на разных платформах. Я уже не говорю, что добавятся трейлеры и большое количество постеров, баннеров, иконок и других статических изображений, нужных для удобной навигации в приложении. У Live TV (эфирных каналов) также большое количество постеров, баннеров, иконок и других статических изображений, которые будут отображаться в вашем приложении для удобной навигации. Если мы говорим про Live TV (эфирные каналы), то у них тоже есть описание и программа передач (ее еще называют EPG — Electronic Program Guide), которая может загружаться раз в неделю, а потом обновляться, если идут какие-то сдвиги в эфирной сетке.
Обеспечение биллинга
Метаинформация помогает понять, что это за фильм или серия и действительно ли стоит тратить на нее время. Но, как и в любом кинотеатре, перед просмотром вам нужно оплатить билет. Это одна из фундаментальных функций комплекса сервисов, которые я объединил в термин Middleware. Она выполняется в рамках Business Support System (BSS).
BSS — индустриальное название большого и сложного сервиса, который отвечает за все связанное с бизнес-процессами — биллинг. Этот термин пришел из телекома: сначала он использовался в фиксированной (проводной) связи, затем пришел в мобильную, а потом стал использоваться в так называемых Valued Added Service (VAS), которые сейчас стали полноценными и независимыми ИТ-системами. К ним как раз и относятся онлайн-кинотеатры.
Если не вдаваться глубоко в историю в этом месте, то кратко: BSS ориентирован именно на поддержку взаиморасчетов с клиентами. Как только вы зарегистрировались в онлайн-кинотеатре, к вам привязывается внутренний счет. Этот счет вы можете пополнять, и с него могут списываться средства за покупки. В терминах индустрии назовем их подписками. Есть более-менее стандартные варианты подписок, предоставляемых большинством кинотеатров:
SVoD: (Subscription Video on Demand). Этот вариант предусматривает помесячную оплату. Есть также стандартные варианты с автоматическим продлением либо без него. Другими словами, BSS самостоятельно отслеживает даты подключений, продлевает вашу подписку и списывает при этом средства, если это нужно.
AVoD: (Advertising Video on Demand). Этим, я уверен, пользовалось подавляющее большинство из вас. Вы смотрите контент бесплатно, но в начале или периодически в середине фильма вам включают рекламу, которую еще и нельзя пропустить. Это и есть AVoD-подписка. Платформа и создатели контента получают деньги с рекламодателей, а вы «платите» просмотром рекламы.
Time-based Video on Demand (TVoD). Пользователь платит за аренду контента на определенный период. Например, можно в течение трех месяцев смотреть фильм сколько угодно раз, а потом он вновь становится недоступным.
Electonic Sell Through (EST) или Download To Own (DTO). Пользователь платит один раз и имеет неограниченный доступ к контенту.
Pay Per View (PPV). Это частный случай TVoD, который чаще всего применяется к передачам или эфирным каналам. Например, вы хотите посмотреть один футбольный матч в прямом эфире, но не собираетесь подписываться на спортивный канал по модели SVoD. Для таких бизнес-сценариев можно использовать PPV: вам будет открыт доступ к каналу только в определенное временное окно.
FrontEnd
Итак, мы загрузили видеоряд, добавили ему описание и постеры, сформировали стоимость просмотра и возможность это оплатить. Но теперь нам надо дать возможность клиенту этим всем воспользоваться. И вот тут в процесс вступает другая часть платформы Middleware — FrontEnd. Это тот комплекс, который непосредственно взаимодействует с вашим приложением на телефоне или телевизоре.
Тут я хочу подчеркнуть масштаб этого комплекса: представьте, что у нас миллионы пользователей одновременно находятся в своих приложениях и что-то листают, читают, просматривают. Эти запросы должны кем-то приниматься и обрабатываться настолько быстро, насколько это вообще возможно. Есть метрики, которые показывают, что задержки ответа от FrontEnd клиенту уже вызывают негатив. В терминах индустрии — создают Bad UX. Такие запросы обычно весят мало — это не видеопоток, где данные нельзя сжать, поэтому они и исчисляются в терабитах в секунду. Зато они выделяются своей частотой — это десятки тысяч RPS (Request per second).
Один из важных самых важных FrontEnd-сервисов — это витрина. Как только вы авторизовались в приложении (а в большинстве случаев даже до авторизации), можете просматривать информацию о всем доступном контенте. Видеть постеры, читать описание, смотреть трейлеры. Почти вся функциональность витрины будет открыта даже без оплаты.
Одна из отдельных функций витрины — это система рекомендаций. Да, саму подборку рекомендаций для вас производит другой модуль Middleware — BigData (возможно даже с участием AI) на основе большого числа метрик, но отображает на вашем устройстве результат именно витрина.
Но и это еще не все. При регистрации (а чаще даже ранее, при запуске приложения) вы проходите три стадии, которые объединяют индустриальным термином AAA или «ТриплЭй»:
Аутентификацию: ответ на вопрос «Кто именно хочет воспользоваться сервисом?». Упрощенно это ввод логина и пароля, по которым система идентифицирует вас как уникального пользователя.
Авторизацию: ответ на вопрос «К чему есть доступ у этого пользователя?». В вашем аккаунте будут представлены сервисы которые, например, вы уже оплатили. Или доступные только на вашем устройстве или в вашем регионе.
Аккаунтинг: ответ на вопрос «Что именно вы сейчас делаете в сервисе?». В нашем случае это можно сопоставить с отслеживанием доступности тех или иных функций в каждый момент времени.
На этом этапе во всех системах Middleware создаются записи про ваш аккаунт, устройство входа, оформленные подписки. Это позволяет вам пользоваться сервисом не с одного устройства, а бесшовно пользоваться любым парком устройств. Например, вы можете дома, через ваш smart-телевизор подписаться и запустить понравившийся вам фильм, потом перейти в другую комнату и продолжить просмотр на другом устройстве, например, через ноутбук, и с того момента, где вы остановились ранее.
Все подписки будут привязаны к вашему аккаунту, а ваш аккаунт — ко всем устройствам. И тут хотел бы затронуть тему Terminal Management System (TMS) — еще одного важного элемента Middleware, который не всегда существует в явном виде. У него много функций: например, через него вы можете отправить подробную информацию о каком-либо сбое приложения. Этих данных будет достаточно, чтобы найти и исправить ошибку. Этот сервис также может отвечать за количество устройств, которые вы можете одновременно использовать. Например, некоторые правообладатели требуют, чтобы один и тот же контент нельзя было смотреть параллельно более чем на 2–5 устройствах у одного пользователя. И так далее. Ну и мы плавно перешли к еще одной составляющей MiddleWare — Operation Support System (OSS).
Функции OSS
OSS — это такой же большой и сложный комплекс, как и BSS. Я перечислю только основные:
Мониторинг всех систем онлайн-кинотеатра.
Предоставление инструментов для выявления и исправления любых сбоев.
Отображение отчетов с огромным количеством разных метрик. Они дают множество возможностей для обслуживания платформы и позволяют следить за доступностью системы.
Трассировка. Она может присутствовать не у всех кинотеатров, но ее надо озвучить. Если пользователь столкнулся с проблемой при работе онлайн-кинотеатра, то ему не обязательно обращаться в техническую поддержку. В отчетах будет выстроена последовательность всех действий, которые привели к ошибке, и найти причину уже не так сложно. На всякий случай подчеркну, что все персональные данные в подобного рода системах защищены. Инженеры технической поддержки оперируют, скорее, некими идентификаторами. Им не нужно знать ваше имя чтоб решить проблему — они будут работать с уникальным набором символов, который позволяет отследить все действия. Связать этот идентификатор именно с вами нельзя без наивысшего уровня доступа, сопоставимого с банковской сферой.
На этом у меня пока все. В Middleware может входить еще много разных систем которые предоставляют функциональность как конечному клиенту, так и сотрудникам платформы. Я постарался перечислить самые основные, но за кадром остается еще много интересного: например, системы поиска, работы с рекламными акциями или профилирования, когда под вашим аккаунтом может зайти ребенок и для него будет доступен только детский контент. Все это — часть Middleware как того главного элемента, который отвечает за предоставление услуг онлайн-кинотеатра.
В следующей части я расскажу дальше про прохождение видеопотока, который после пакетайзера попадает на Origin. Готов ответить на все возникшие вопросы в комментариях. Хорошего дня!