Разработка мультиплатформенного видеохостинга Spot

Разработка мультиплатформенного видеохостинга Spot

Задача

В рамках проектной деятельности стояла задача создать мультиплатформенный видеохостинг с открытым исходным кодом, современной архитектурой и продвинутыми алгоритмами рекомендаций для долгосрочного развития.

Решение

Для реализации поставленной задачи были выбраны следующие технологии и компоненты:

Архитектура:
Для серверной части используется микросервисный подход.

Стек:
Spring, в качестве главного сервера.
Flask, в качестве сервера, отвечающего за обработку видео.
Для обработки используются нейросети, такие как:
YOLO
EfficientNet
Для поиска ElasticSearch
Для кеширования Redis
Для реализации стримов RTMP сервер на Go
Nginx для распределения нагрузки на серверную часть.

Результат

Создан рабочий прототип, включающий микросервисный бэкенд и фронтенд.

Бэкенд, реализованный на Java с использованием фреймворка Spring, взаимодействует с MySQL для хранения данных, Redis для кэширования, ElasticSearch для эффективного поиска, а также микросервисом на Flask для видеообработки с использованием нейронных сетей.

Сервис на Flask проводит обработку видео с использованием нескольких нейронных сетей для извлечения тегов, описывающих содержание видео. Полученные теги применяются для реализации поискового и рекомендательного алгоритма на главной странице. Кроме того, этот микросервис сжимает видео с использованием FFMPEG для экономии места, обеспечивая эффективное хранение и уменьшение объема занимаемого пространства.

Помимо обработки, реализован сервис на Java, который занимается отдачей контента (видео, фото).

Поддерживается потоковая трансляция видео (стримы).

База данных: Состоит из 20 табличек и нормализована до третьей нормальной формы (см. по ссылке)

Фронтенд: Рабочий протоип разработан на React, с использованием компонентного подхода.

Существуют стилевые компоненты, например: кнопки, формы, навигационные панели, динамическая лента.

Одним из ключевых стилевых компонентов является видеоплеер, который является полностью самописным и глубоко проработанным, с большим количеством функций чем предоставляют библиотеки по типу Video.js.

В связи с возможной нехваткой мощностей сервера при больших нагрузках при перемотке используется подход отложенного обновления.

Используется навигация React Router Dom, для использования преимуществ SPA(single page application), а именно: быстрая загрузка страниц, плавный пользовательский опыт, отсутствие перезагрузки страницы и задержек.

Также используется Redux Toolkit для управления глобальным состоянием приложения (авторизацией, регистрацией, проверкой авторизации), а также для запросов к серверу по технологии REST. Веб-приложение адаптивно и поддерживает все типы устройств.

Данная разработка получила высокую оценку на всероссийском конкурсе научных работ школьников “ЮНИОР” в секции "Инженерные науки: информационные технологии"

Работа выполнена в соавторстве

Аношин Арсений (серверная часть)
Матвей Дудукин (визуальный интерфейс)