День рождения 41

Продолжаем традицию ежегодных заметок.
Самое важное событие этого года - я разобрался с финансами и могу работать по найму только половину дня, другую половину посвящая семье и отдыху. И своим проектам, конечно.
Про личное писать нечего, там всё стабильно хорошо - домашние сыты, довольны, шёрстка лоснится. А рассказать хочется про новый личный проект.
Называется он Орбита и будет self-hosted системой для публикации своего творчества и получения денег от подписчиков. Да-да, как Boosty или Patreon, только свой личный, на собственном сервере.
Такой подход позволяет решить массу вопросов:
  • Автор сам владеет всем своим контентом, никто не может его заблокировать или удалить
  • Автор может выкладывать любой контент, никто его не модерирует (пока он соблюдает закон)
  • Автор не платит комиссию площадке, но зато оплачивает свой сервер любой мощности
  • Автор будет получать оплату на свой счёт в банке, без посредников
  • Автор сам разбирается со своими налогами
А я могу релизовать все свои программистские хотелки: новейшие версии PHP, Node, Vue, Nuxt, поддержка Typescript, Socket.io и т.д. и т.п. Всё это в Docker, конечно же, чтобы можно было запустить одной командой. Заодно обновляю и тестирую vesp-core и vesp-frontend.
Самый большой вопрос, который меня беспокоил - это работа с видео.
  • Файлы могут быть на много гигабайт, так что нужно грузить их частями
  • Загрузка может прерываться по разным причинам - нужно уметь догружать
  • Ну и скорость должна быть на уровне
Это я реализовал с помощью протокола Tus.io
После загрузки видео нужно подготовить для стриминга, и тут я провозился больше всего. Пробовал разные форматы, настройки, разбивал файлы на мелкие части, склеивал, и в итоге пришёл к самой удобной для меня схеме:
  1. Файл грузится во временную директорию на сервере
  2. Через cron запускается транскодирование через FFMPEG в разные форматы, от меньшего разрешения к большему
  3. Версии кодируются в формат h264, контейнер mp4, одним файлом. К ним генерируется m3u8 манифест (плейлист) в котором прописаны части видео с битрейтом
  4. После кодирования файлы могут быть перемещены в облако на долгосрочное хранение
  5. При показе файл в нужном разрешении читается не сразу весь, а кусками из манифеста, по 10 секунд
  6. Все запросы на показ видео проходят через API, так что можно проверять права доступа
Это, получается, формат стиминга HLS. Есть и предзагрузка, и смена потоков, и сохранение настроек проигрывания: громкость, скорость, время. На мой взгляд, работает уже лучше Boosty.
Обновление статуса кодирования, кстати, сделано через Socket.io. Фронтенд подписывается на разные события, типа изменения статуса видео, PHP отправляет обновления, и фронт их отрисовывает.
Подобным способом можно на лету обновлять что угодно сразу у всех пользователей онлайн, например, настройки сайта.
В общем, самое сложное и непонятное в проекте я уже реализовал, дальше всё по обычной схеме: создание постов, комментарии, подписки и платежи.
Проект бесплатный, надеюсь опубликовать в Open Source уже до конца года более-менее работающую версию. Ну а там дорабатывать, если будет какой-то интерес и отзывы.
Вот такой анонс на день рождения, следите за новостями!

Обновлено 09.12.2023

Орбита запущена на собственном сайте, можно щупать.

6 комментариев

Константин
Поздравляю, Василий, давно смотрю за вашей работой (слежу за тобой =) ), не использую к сожалению пока новые наработки (давний опыт по modx не считается), желаю оставаться таким же творческим, целеустремленным - вы пример для подражания (намечаете путь и идете как танк). Видео хостинг - это бомбическое решение, а реализация дает пищу для ума. Заинтересовало сообщение, что решили финансовый вопрос - как?) нам интересно) Спасибо за вашу работу.
Василий Наумкин
Заинтересовало сообщение, что решили финансовый вопрос - как?) нам интересно)
Про это есть отдельная заметка
Спасибо за вашу работу.
Спасибо за комментарий!
Константин
наверное про финансы ответ - работа на пол дня
Александр Наумов
Василий, с Днем рождения!!!
Желаю счастья, здоровья, радости, творческих и профессиональных успехов!
Классная разработка!!!
Василий Наумкин
Спасибо!
Василий! Как всегда очень круто! Моё почтение!
bezumkin.ru
Personal website of Vasily Naumkin
Прямой эфир
Василий Наумкин
01.07.2024, 11:56:41
Да, верно, именно так. А в контроллере, скорее всего, ловить данные методом post.
Василий Наумкин
26.06.2024, 09:38:15
О, точно, вылезает если не залогинен. Спасибо, исправил!
Василий Наумкин
09.04.2024, 04:45:01
> Ошибка 500 Это не похоже на ошибку Nginx, это скорее всего ошибка PHP - надо смотреть его логи. ...
Futuris
04.04.2024, 08:56:12
Я просто немного запутался. Когда в абзаце "Vesp/Core" ты пишешь про "новый trait FileModel", я поду...
Василий Наумкин
20.03.2024, 21:21:52
Volledig!
Андрей
14.03.2024, 13:47:10
Василий! Как всегда очень круто! Моё почтение!
russel gal
09.03.2024, 20:17:18
> А этот стоило написать хотя бы затем, чтобы получить комментарий от юзера, который ничего не писал...
Александр Наумов
27.01.2024, 03:06:18
Василий, спасибо! Извини, тупанул.
Василий Наумкин
22.01.2024, 07:43:20
Давай-давай!
Василий Наумкин
24.12.2023, 14:26:13
Спасибо!