Архив

Youcast. Просмотр youtube через подкасты

Хочу рассказать вам еще об одном стартапе который я пилю на досуге. "Пилю" - это, конечно, громко сказано, так как проект был запущен три года назад и с тех пор почти не развивался, но обо всем по порядку.

https://blog.rpsl.info/images/ca09/4191/ca09419178564de38c998d25f99247dd.jpg

Причины:

Лет пять назад, когда в наш сегмент ютуба пришла монетизация и появился качественный контент, появились каналы, за которыми я стал следить на регулярной основе. Я размышлял над проблемами шаблонов использования и заметил, что часть каналов которые мне интересны я игнорирую почти постоянно. Дело в том, что формат некоторых шоу мне не подходил. У меня не получалось смотреть эти видео сидя перед монитором.

Поэтому и появилась идея что необходимо сделать инструмент, который будет конвертировать ютуб канал в подкаст ленту, которая, в свою очередь, будет скачиваться телефоном и тогда у меня будет возможность смотреть эти видео в дороге или в любой другой ситуации.

Первая версия:

Первая версия была сделана на коленке за один вечер. У меня был yaml файл через который я добавлял каналы, на сервере крутился cron который через youtube api следил за обновлениями данных каналов и формировал xml ленту подкаста.

Ссылки на видео проксировались через другой микросервис, который на лету выкачивал видео с ютуба и отдавал в stdout. Точно уже не вспомню, но, кажется, все это дело крутилось bananapi (из которой я когда-то делал онлайн радио будильник).

Сервис оказался весьма удачным и я начал уделять время тем каналам которые раньше игнорировал.

Сама механика подкастов сильно к этому располагала: настроить подкаст (канал) нужно один раз и он автоматически доставляется в телефон где видео всегда под рукой.

Сейчас этим трудно кого-нибудь удивить, но на дворе был примерно 2014 год, интернет в Московском метро только появлялся, а тарифы LTE были достаточно скромными.

Вторая версия:

Около двух лет я пользовался этим скриптом написанным на коленке, но в голове варилась мысль о том что нужно сделать для него веб-интерфейс и дать возможность использовать его другим людям.

Вторая версия разрабатывалась не сильно дольше первой. В качестве фреймворка был взят Laravel и за неделю "кодинга по вечерам" я набросал основные пользовательские сценарии:

  • Регистрация по инвайтам
  • Добавление каналов
  • Привязка социальных сетей для авторизации
  • Разные способы отправить ссылку на подкаст в телефон. Ссылка на почту, показ QR кода, ссылка в формате iTunes
  • Механизмы ограничений для видео. Я не хотел чтобы летсплейщики гоняли через меня 9 часовые записи стримов в 4к
  • Различные "сервисные" механизмы для сбора статистики и управления контентом

При этом я отказался от механики "проксирования" видео и теперь начал их выкачивать автоматически. В новой версии все видео, если они не попадают под ограничения, скачиваются на сервер и раздаются с него.

Это позволило реализовать такие сценарии как фильтрация видео по плейлистам. Пользователь может подписаться на канал и потом выбрать за какими плейлистами следить, при этом изменения в наборе плейлистов происходят "на лету" и нет необходимости удалять или скачивать видео.

Это позволило экономить на трафике и оптимизировать хранение видео. Если 10 пользователей подписаны на один канал, то видео мне нужно выкачать только 1 раз.

Но, в свою очередь, это добавило проблему с тем что видео нужно хранить и это не дешевое удовольствие. В сервисе есть механизмы которые позволяют работать с различными облачными хранилищами, но, тем не менее, речь идет о сотнях гигабайт.

Дополнительно были реализованы различные механизмы для самодиагностики сервиса. Так как сервис представляет из себя слепок данных из другого сервиса, то это несет в себе все риски связанные с денормализацией данных. Чтобы не разбираться с этим вручную я написал наборы скриптов которые запускаются по крону и проверяют что все связи соответсвуют тому как и должно быть:

  • Пользователи подписаны на каналы
  • У каналов есть более одного подписчика
  • Видео скачаны, имеют верные hash суммы во всех хранилищах
  • На ютубе не появилось видео в лучшем качестве

И тому подобные проверки, которые сводят поддержку сервиса к минимуму.

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

Монетизация

Одним из мотиваторов разработки второй версии была идея о монетизации проекта. Хотя я изначально понимал что делать это будет сложно т.к. модель выглядела очень кривой.

  • N каналов бесплатно - расширение за деньги. Модель ломается тем что будут регать новые аккаунты
  • Подписочная модель, с тарифами на объем каналов. Модель ломается т.к. рынок холодный и привлекать новых адептов сложно. Плюс вся схема выглядит очень сложной, т.к. нужно руками добавлять каналы, потом настраивать подкасты, не для простого обывателя
  • Ограничивать объем видео, например сколько угодно каналов, но видео длиннее 10 минут за подписку. Модель ломается из-за того что вне зависимости от подписки видео нужно скачивать, хранить и раздавать клиентам
  • А еще, делать монетизацию сервиса который может быть закрыт по первому требованию Google - выглядит глупой идеей

Стагнация

Запуск сервиса позволил закрыть те проблемы которые были катализатором для его разработки. Поэтому дальнейшие доработки из категории "важно и срочно" плавно перекочевали в категорию "хорошо бы когда-нибудь". Мне не удалось найти единомышлеников которые захотели бы войти в проект и тратить свое время на доработки, а понимание того что в любой момент это может быть закрыто по просьбе владельцев контента убивают все остатки морали.

Таким образом сервис живет в состояние "заморозки" и ждет своего часа. Кажется что ютуб уже тестирует аналогичную фичу в составе Youtube Premium и как только он её реализует можно будет спокойно остановить сервера.


Другие статьи в блоге:

⟵ Идея стартапа "Рассказчик"
Настройка маршрутизации трафика через VPN в RouterOS ⟶