Хочу рассказать вам еще об одном стартапе который я пилю на досуге. "Пилю" - это, конечно, громко сказано, так как проект был запущен три года назад и с тех пор почти не развивался, но обо всем по порядку.
Причины:
Лет пять назад, когда в наш сегмент ютуба пришла монетизация и появился качественный контент, появились каналы, за которыми я стал следить на регулярной основе. Я размышлял над проблемами шаблонов использования и заметил, что часть каналов которые мне интересны я игнорирую почти постоянно. Дело в том, что формат некоторых шоу мне не подходил. У меня не получалось смотреть эти видео сидя перед монитором.
Поэтому и появилась идея что необходимо сделать инструмент, который будет конвертировать ютуб канал в подкаст ленту, которая, в свою очередь, будет скачиваться телефоном и тогда у меня будет возможность смотреть эти видео в дороге или в любой другой ситуации.
Первая версия:
Первая версия была сделана на коленке за один вечер. У меня был yaml
файл через который я добавлял каналы, на сервере крутился cron
который через youtube api
следил за обновлениями данных каналов и формировал xml
ленту подкаста.
Ссылки на видео проксировались через другой микросервис, который на лету выкачивал видео с ютуба и отдавал в stdout
. Точно уже не вспомню, но, кажется, все это дело крутилось bananapi
(из которой я когда-то делал онлайн радио будильник).
Сервис оказался весьма удачным и я начал уделять время тем каналам которые раньше игнорировал.
Сама механика подкастов сильно к этому располагала: настроить подкаст (канал) нужно один раз и он автоматически доставляется в телефон где видео всегда под рукой.
Сейчас этим трудно кого-нибудь удивить, но на дворе был примерно 2014 год, интернет в Московском метро только появлялся, а тарифы LTE были достаточно скромными.
Вторая версия:
Около двух лет я пользовался этим скриптом написанным на коленке, но в голове варилась мысль о том что нужно сделать для него веб-интерфейс и дать возможность использовать его другим людям.
Вторая версия разрабатывалась не сильно дольше первой. В качестве фреймворка был взят Laravel
и за неделю "кодинга по вечерам" я набросал основные пользовательские сценарии:
- Регистрация по инвайтам
- Добавление каналов
- Привязка социальных сетей для авторизации
- Разные способы отправить ссылку на подкаст в телефон. Ссылка на почту, показ QR кода, ссылка в формате iTunes
- Механизмы ограничений для видео. Я не хотел чтобы летсплейщики гоняли через меня 9 часовые записи стримов в 4к
- Различные "сервисные" механизмы для сбора статистики и управления контентом
При этом я отказался от механики "проксирования" видео и теперь начал их выкачивать автоматически. В новой версии все видео, если они не попадают под ограничения, скачиваются на сервер и раздаются с него.
Это позволило реализовать такие сценарии как фильтрация видео по плейлистам. Пользователь может подписаться на канал и потом выбрать за какими плейлистами следить, при этом изменения в наборе плейлистов происходят "на лету" и нет необходимости удалять или скачивать видео.
Это позволило экономить на трафике и оптимизировать хранение видео. Если 10 пользователей подписаны на один канал, то видео мне нужно выкачать только 1 раз.
Но, в свою очередь, это добавило проблему с тем что видео нужно хранить и это не дешевое удовольствие. В сервисе есть механизмы которые позволяют работать с различными облачными хранилищами, но, тем не менее, речь идет о сотнях гигабайт.
Дополнительно были реализованы различные механизмы для самодиагностики сервиса. Так как сервис представляет из себя слепок данных из другого сервиса, то это несет в себе все риски связанные с денормализацией данных. Чтобы не разбираться с этим вручную я написал наборы скриптов которые запускаются по крону и проверяют что все связи соответсвуют тому как и должно быть:
- Пользователи подписаны на каналы
- У каналов есть более одного подписчика
- Видео скачаны, имеют верные hash суммы во всех хранилищах
- На ютубе не появилось видео в лучшем качестве
И тому подобные проверки, которые сводят поддержку сервиса к минимуму.
В качестве бета-пользователей я раздавал инвайты на Лепре (на тот момент она уже умирала, но еще жизнь в ней еще была) и приглашал знакомых, в обмен просил фидбэк и идеи. Так появилось примерно сотня адептов, которые помогли отловить множество багов (вы знали что на ютубе есть полностью платные каналы?) и сгенерировали бэклог на месяцы разработки.
Монетизация
Одним из мотиваторов разработки второй версии была идея о монетизации проекта. Хотя я изначально понимал что делать это будет сложно т.к. модель выглядела очень кривой.
- N каналов бесплатно - расширение за деньги. Модель ломается тем что будут регать новые аккаунты
- Подписочная модель, с тарифами на объем каналов. Модель ломается т.к. рынок холодный и привлекать новых адептов сложно. Плюс вся схема выглядит очень сложной, т.к. нужно руками добавлять каналы, потом настраивать подкасты, не для простого обывателя
- Ограничивать объем видео, например сколько угодно каналов, но видео длиннее 10 минут за подписку. Модель ломается из-за того что вне зависимости от подписки видео нужно скачивать, хранить и раздавать клиентам
- А еще, делать монетизацию сервиса который может быть закрыт по первому требованию Google - выглядит глупой идеей
Стагнация
Запуск сервиса позволил закрыть те проблемы которые были катализатором для его разработки. Поэтому дальнейшие доработки из категории "важно и срочно" плавно перекочевали в категорию "хорошо бы когда-нибудь". Мне не удалось найти единомышлеников которые захотели бы войти в проект и тратить свое время на доработки, а понимание того что в любой момент это может быть закрыто по просьбе владельцев контента убивают все остатки морали.
Таким образом сервис живет в состояние "заморозки" и ждет своего часа. Кажется что ютуб уже тестирует аналогичную фичу в составе Youtube Premium и как только он её реализует можно будет спокойно остановить сервера.