Онлайн кинотеатр, основной источник медиа - торрент.
Торренты качаются только локально, т.к. хостинги обычно запрещают bittorrent.
Для загрузки локальных файлов или архивных объектов использовать не торрент, а сразу s3.
В любом случае в кинотеатре должны быть пользователи. Но регистрация существует только в админке, т.к. никто не должен получить доступ просто из интернета.
Монетизация:
- платный доступ в приватный кинотеатр
- публикация в интернет на отдельный публичный домен для всех пользователей с рекламой на странице, без рекламы в самом видео
- целого кинотеатра - сложно собрать материал, чтобы всем угодить, слишком большой объем
- отдельных сериалов/серий фильмов/фильмографий актеров/режиссеров (отдельные домены/один домен)
- десктоп веб
- андроид приложение
- андроид ТВ приложение
- мобильная веб версия - хотя бы для админки
- фильмы
- сериалы
- мультфильмы
- мультсериалы
- документалки
- аниме
- тв шоу
имя | nullable |
---|---|
имя на русском | not null |
имя на английском | nullable |
имя на языке оригинала | nullable |
год выпуска | not null |
категория | not null |
вселенная | nullable |
список создателей | nullable |
список актёров | nullable |
рейтинг imdb | nullable |
рейтинг кинопоиска | nullable |
возрастное ограничение | nullable |
наличие матерных слов | nullable |
наличие насилия | nullable |
Вселенная - именованная или безымянная (именуется по первому фильму)
Список создателей - с указанием типа -
режиссёры, продюсеры и т.д.
Список актёров - с указанием типа -
игровые, актеры озвучки и т.д.
- сериалы:
- кол-во сезонов с годами выхода, количеством серий и статусом (выходит, полностью вышел, запланирован)
- документалки:
- теги или произвольное описание темы/категории. желательно с выбором из существующих тегов/категорий. хранить отдельно для возможности изменения имени тега/категории
- вселенные (Марвел/Гарри Поттер)
- серии фильмов без названия (Сплит 2016 + 2 фильма 2000 и 2019)
- Скачивание торрента
- Преобразование файлов
- Загрузка в хранилище
или
- Распаковка локального архива с уже преобразованными файлами
- Загрузка в хранилище
Так как всегда первым шагом будет либо скачивание торрента, либо распаковка локального архива, то весь процесс производить на машинах в домашней сети - облачные мощности под преобразование не требуются.
Локальный архив - либо просто заранее подготовленные, либо ранее уже загруженные в кинотеатр медиа объекты, которые были удалены оттуда из-за ненадобности и/или дороговизны облачного хранилища. Сохранены локально, т.к. торрент раздачи с контентом могут стать когда-то недоступны, а хранить локально на обычных внешних дисках очень дешёво.
- узнать поддерживаемые в video.js кодеки аудио и видео
- освоить ffmpeg (перекодирование, нарезка, извлечение дорожек)
- дополнить доку по основному процессу (из тегеграма)
- дополнить доку по мониторингу (прометеус, спринг актуатор, bucket4j)
java 17
vue 3
minio
docker compose
nginx
postgresql
ffmpeg
video.js
videojs.com githubtransmission
- из-за наличия консольной версии и легкости
- преобразование медиа файлов в формат HLS (формат m3u8 с мастер плейлистом)
Так как синтаксис ffmpeg
довольно сложный (особенно для формирования master плейлиста из файла с несколькими дорожками аудио и субтитров), есть вариант использовать ffmpeg
только для преобразования каждой дорожки отдельно в формат hls (нарезка на маленькие файлы и формирования списка в m3u8 файле), а master плейлист со всеми дорожками собирать уже вручную (может быть отдельный командой в ffmpeg
если в нём есть такой функционал)
Изначально ffmpeg консольный, есть оболочка для java, но она пригодится только для слежения за системным процессом ffmpeg, основной функционал остается в виде консольных опций
Так же полезно будет почитать FFmpeg libav
- умеет подгружать видео частями
- даже если дать ссылку на один видео файл, его тоже будет грузить частями
- возможно связано с http-streaming
- даже если дать ссылку на один видео файл, его тоже будет грузить частями
- умеет переключать аудио и субтитры
- поддерживает кастомизацию
- использует базовые html элементы
- умеет в потоковое аудио???
- должно хватить производительности s3 (multi node minio)
- получение через апи:
- с перенаправлением 301 на публичный s3 (непосредственно файлы качает сам клиент)
- для регулирования расположения файлов, т.к. несколько инстансов s3
Дополнительно:
- держать файлы сжатыми и производить декомпрессию на лету? через gzip
- возможно ли такие разжимать файлы на клиенте???