День рождения 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)
Константин
25.10.2023 07:00

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

bezumkinВасилий Наумкин
25.10.2023 07:22

Заинтересовало сообщение, что решили финансовый вопрос - как?) нам интересно)

Про это есть отдельная заметка

Спасибо за вашу работу.

Спасибо за комментарий!

Константин
25.10.2023 07:11

наверное про финансы ответ - работа на пол дня

inetloverАлександр Наумов
29.10.2023 20:28

Василий, с Днем рождения!!!

Желаю счастья, здоровья, радости, творческих и профессиональных успехов!

Классная разработка!!!

bezumkinВасилий Наумкин
30.10.2023 01:21

Спасибо!

Андрей
14.03.2024 10:47

Василий! Как всегда очень круто! Моё почтение!

bezumkin
Василий Наумкин
09.04.2024 01:45
Ошибка 500 Это не похоже на ошибку Nginx, это скорее всего ошибка PHP - надо смотреть его логи. Во...
futuris
Futuris
04.04.2024 05:56
Я просто немного запутался. Когда в абзаце "Vesp/Core" ты пишешь про "новый trait Fil...
bezumkin
Василий Наумкин
20.03.2024 18:21
Volledig!
Андрей
14.03.2024 10:47
Василий! Как всегда очень круто! Моё почтение!
russelgal
russel gal
09.03.2024 17:17
А этот стоило написать хотя бы затем, чтобы получить комментарий от юзера, который ничего не писал ...
inetlover
Александр Наумов
27.01.2024 00:06
Василий, спасибо! Извини, тупанул.
bezumkin
Василий Наумкин
22.01.2024 04:43
Давай-давай!
bezumkin
Василий Наумкин
24.12.2023 11:26
Спасибо!
bezumkin
Василий Наумкин
27.11.2023 02:43
Ура!
bezumkin
Василий Наумкин
25.11.2023 08:30
Vesp тянет 2 зависимости: vesp-frontent для фронта и vesp-core для бэкенда. Их можно обновлять, но э...