Создаём SPA-фронтенд и универсальный бэкенд для онлайн-кинотеатра

April 2020

ShowJet — сериальный онлайн-кинотеатр. Команда Evrone разрабатывала его первую версию — веб-интерфейс и ядро, которое управляло кинотеатром и потоками видео.

У команды ShowJet были контракты со студиями и собственная студия озвучки, то есть они могли выпускать контент с русскоязычной звуковой дорожкой практически сразу после выхода серий за рубежом. С этими преимуществами можно было привлечь много пользователей, а за счёт того, что некоторые сериалы идут годами, получить хорошие продуктовые метрики — например, LTV (life-time value).

Задача — разработать онлайн-кинотеатр и связать его с внутренними сервисами

Видеостриминг легального контента имеет сложную бизнес-логику. Например, правообладатели требуют владельцев онлайн-сервисов иметь собственные мощные сервера с ограниченным доступом. Получаемый контент должен храниться буквально под замком, а поток данных передаётся по специальному безопасному протоколу. Кроме этого владелец кинотеатра должен иметь DRM-систему для защиты от копирования.

ShowJet предстояло решить эти вопросы с обязательными требованиями студий-владельцев, а Evrone взял на себя разработку первой версии сервиса.

Решение — SPA-фронтенд и универсальный бэкенд

Мы создали первую версию кинотеатра ShowJet — веб-интерфейс и бэкенд на Ruby со всеми необходимыми функциями: управление контентом, пользователями и подписками, биллинг, видеотрансляция и т. д.

На фронтенде реализовали две версии плеера, чтобы сервис был доступен на всех нужных клиенту платформах и браузерах. С помощью бэкенда связали защищённое хранилище с пользовательским интерфейсом. Он получился универсальным и отдавал информацию не только веб-версии, но и мобильным приложениям на iOS и Android.

Создаём платформу для управления онлайн-кинотеатром

Бэкенд онлайн-кинотеатра, который мы создали, был как бы посередине между веб-приложением для зрителей и deep-бэкендом с лицензионным контентом на стороне клиента. Кроме этого у ShowJet были мобильные приложения, которые тоже должны были работать с этим бэкендом. Поэтому мы сделали ядро ShowJet универсальным — через него можно управлять практически всем, а ещё к нему можно подключать любую платформу. А чтобы команде клиента было легко с ним работать, разработали удобный интерфейс в виде отдельного SPA.

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

Таким образом у нас получалось два уровня защиты данных: управление доступом к видеоконтенту на уровне админпанели (проверка токена конкретного пользователя) и проверка лицензии на уровне DRM.

Кроме работы на «внешней» стороне, нам приходилось вовлекаться и в то, как работает внутренняя часть системы, на которой хранится и проверяется контент. Из-за требований к безопасности ShowJet давали нам API всех защищённых частей, чтобы только наш бэкенд был доступен извне. Если бы мы не разобрались в то, как всё устроено (включая DRM и ABR), то и работать с этими подсистемами нам было бы значительно сложнее.

Привязываем защиту контента и адаптивный битрейт

Для того, чтобы контент попал к зрителю, он должен сначала попасть от поставщика на защищённый сервер онлайн-кинотеатра, а потом пройти проверку DRM-системы. Чаще всего DRM для защиты онлайн-видео — это дорогое корпоративное решение. Но именно благодаря своей сложности система защищает контент. Проверку прав пользователей на контент мы реализовали через API, которое предоставила нам команда ShowJet.

Таким же образом мы работали с ABR — системой адаптивного битрейта. Она подстраивает качество видео под скорость интернет-соединения без прерываний. Если у пользователя медленный интернет, то и видео будет грузиться в качестве 360p, зато без пауз и долгих загрузок. Ну, а если канал широкий — система автоматически выберет HD-качество.

Делаем 2 версии плеера

Чтобы не писать видеоплеер с нуля, мы решили воспользоваться готовым решением. Сначала выбрали open-source плеер, который нужно было доработать под наши задачи. Мы привязали к нему DRM и ABR, связали его с нашим бэкендом и встроили в веб-интерфейс.

Но со временем задач становилось больше, а доработки занимали всё больше времени. Клиент взвесил потенциальные расходы на оба варианта и купил проприетарное, но более надёжное решение, которое мы интегрировали.

Тем не менее от первой версии плеера мы не отказались — на некоторых платформах использовать его было гораздо удобнее, чем проприетарный. Таким образом у нас получилось две версии плеера, что улучшило кроссбраузерность и кроссплатформенность.

Результат

В результате мы смогли создать работающее MVP с дизайном, разработанным клиентом и полноценной функциональностью. На момент использования эта версия онлайн-кинотеатра подходила задачам клиента. Позднее команда ShowJet переписала решение в связи с продуктовыми изменениями, а также изменила модель монетизации.

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

Дизайн Ruby ориентирован не на производительность, а на продуктивность. Это освобождает разработчиков для решения более сложных задач, связанных с самим проектом. Мы стараемся сделать Ruby максимально продуктивным, и настолько производительным, насколько это возможно.
Юкихиро Мацумото
Создатель языка Ruby
Будем на связи
Прикрепить файл
Максимальный размер файла: 8 МБ.
Допустимые типы файлов: jpg jpeg png txt rtf pdf doc docx ppt pptx.