День рождения 41
Продолжаем традицию ежегодных заметок.
Самое важное событие этого года - я разобрался с финансами и могу работать по найму только половину дня, другую половину посвящая семье и отдыху. И своим проектам, конечно.
Про личное писать нечего, там всё стабильно хорошо - домашние сыты, довольны, шёрстка лоснится. А рассказать хочется про новый личный проект.
Называется он Орбита и будет self-hosted системой для публикации своего творчества и получения денег от подписчиков. Да-да, как Boosty или Patreon, только свой личный, на собственном сервере.
Такой подход позволяет решить массу вопросов:
- Автор сам владеет всем своим контентом, никто не может его заблокировать или удалить
- Автор может выкладывать любой контент, никто его не модерирует (пока он соблюдает закон)
- Автор не платит комиссию площадке, но зато оплачивает свой сервер любой мощности
- Автор будет получать оплату на свой счёт в банке, без посредников
- Автор сам разбирается со своими налогами
А я могу релизовать все свои программистские хотелки: новейшие версии PHP, Node, Vue, Nuxt, поддержка Typescript, Socket.io и т.д. и т.п. Всё это в Docker, конечно же, чтобы можно было запустить одной командой. Заодно обновляю и тестирую vesp-core и vesp-frontend.
Самый большой вопрос, который меня беспокоил - это работа с видео.
- Файлы могут быть на много гигабайт, так что нужно грузить их частями
- Загрузка может прерываться по разным причинам - нужно уметь догружать
- Ну и скорость должна быть на уровне
Это я реализовал с помощью протокола Tus.io
После загрузки видео нужно подготовить для стриминга, и тут я провозился больше всего. Пробовал разные форматы, настройки, разбивал файлы на мелкие части, склеивал, и в итоге пришёл к самой удобной для меня схеме:
- Файл грузится во временную директорию на сервере
- Через cron запускается транскодирование через FFMPEG в разные форматы, от меньшего разрешения к большему
- Версии кодируются в формат h264, контейнер mp4, одним файлом. К ним генерируется m3u8 манифест (плейлист) в котором прописаны части видео с битрейтом
- После кодирования файлы могут быть перемещены в облако на долгосрочное хранение
- При показе файл в нужном разрешении читается не сразу весь, а кусками из манифеста, по 10 секунд
- Все запросы на показ видео проходят через API, так что можно проверять права доступа
Это, получается, формат стриминга HLS. Есть и предзагрузка, и смена потоков, и сохранение настроек проигрывания: громкость, скорость, время. На мой взгляд, работает уже лучше Boosty.
Обновление статуса кодирования, кстати, сделано через Socket.io. Фронтенд подписывается на разные события, типа изменения статуса видео, PHP отправляет обновления, и фронт их отрисовывает.
Подобным способом можно на лету обновлять что угодно сразу у всех пользователей онлайн, например, настройки сайта.
В общем, самое сложное и непонятное в проекте я уже реализовал, дальше всё по обычной схеме: создание постов, комментарии, подписки и платежи.
Проект бесплатный, надеюсь опубликовать в Open Source уже до конца года более-менее работающую версию. Ну а там дорабатывать, если будет какой-то интерес и отзывы.
Вот такой анонс на день рождения, следите за новостями!
Обновлено 09.12.2023
Орбита запущена на собственном сайте, можно щупать.
2
👍
👎
❤️
🔥
😮
😢
😀
😡
516
24.10.2023, 09:23:29
6 комментариев
Константин
25.10.2023, 10:00:44
Поздравляю, Василий, давно смотрю за вашей работой (слежу за тобой =) ), не использую к сожалению пока новые наработки (давний опыт по modx не считается), желаю оставаться таким же творческим, целеустремленным - вы пример для подражания (намечаете путь и идете как танк). Видео хостинг - это бомбическое решение, а реализация дает пищу для ума. Заинтересовало сообщение, что решили финансовый вопрос - как?) нам интересно) Спасибо за вашу работу.
25.10.2023, 10:22:22
Про это есть отдельная заметка
Спасибо за комментарий!
Константин
25.10.2023, 10:11:14
наверное про финансы ответ - работа на пол дня
29.10.2023, 23:28:02
Василий, с Днем рождения!!!
Желаю счастья, здоровья, радости, творческих и профессиональных успехов!
Классная разработка!!!
30.10.2023, 04:21:08
Спасибо!
Андрей
14.03.2024, 13:47:10
Василий! Как всегда очень круто! Моё почтение!
bezumkin.ru
Личный сайт Василия Наумкина
Прямой эфир
Василий Наумкин
01.07.2024, 11:56:41
Да, верно, именно так.
А в контроллере, скорее всего, ловить данные методом post.
Василий Наумкин
26.06.2024, 09:38:15
О, точно, вылезает если не залогинен.
Спасибо, исправил!
Василий Наумкин
09.04.2024, 04:45:01
> Ошибка 500
Это не похоже на ошибку Nginx, это скорее всего ошибка PHP - надо смотреть его логи.
...
Андрей
14.03.2024, 13:47:10
Василий! Как всегда очень круто! Моё почтение!
День рождения 41
6
russel gal
09.03.2024, 20:17:18
> А этот стоило написать хотя бы затем, чтобы получить комментарий от юзера, который ничего не писал...
Александр Наумов
27.01.2024, 03:06:18
Василий, спасибо!
Извини, тупанул.