Как мы создали потоковую платформу

Веселый дневник разработки с RTMP, OBS, производственными инцидентами и опасной фразой: «Насколько это может быть сложно?»

Все началось с предложения, которое обычно заставляет опытных разработчиков молча закрыть свои ноутбуки:

«Почему бы нам не создать собственную стриминговую платформу?» Насколько это может быть сложно?

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

На самом деле между кнопкой «Начать трансляцию» и работающим продуктом мы обнаружили небольшой технический пропасть. Примерно размером с YouTube.

Команда собиралась по частям

У нас была идея, несколько энтузиастов и много уверенности, которая еще не воплотилась в реальность. Чего у нас не было, так это полноценной команды. Нам нужны были backend- и frontend-разработчики, DevOps-инженер, дизайнер, специалист по видео и кто-то, кто умеет читать логи сервера, не теряя веры в человечество.

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

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

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

Первый стрим и первые сюрпризы

Мы на удивление быстро создали базовый прием RTMP. OBS подключился, сервер принял фид и на экране появилось видео.

Несколько секунд вся команда просто смотрела на него.

Картина переместилась. Звук работал. Никто не знал, что сказать, поэтому наша историческая первая трансляция состояла из рабочего стола, курсора мыши и фразы: «Похоже, это действительно потоковая передача».

Торжество длилось недолго. При втором подключении звук начал дрейфовать. На третьем игрок решил, что буферизация — это не временная проблема, а образ жизни. Затем один стример прислал информацию о битрейте, предполагающую, что они планируют вести трансляцию прямо на Марс.

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

Когда еще одна функция перестала быть маленькой

Пока разработчики боролись с видеоконвейером, список пожеланий продолжал расти.

Нам нужно было общение. Затем модерация чата. Затем блокировка пользователя. Затем категории, теги, расписания потоков, подписки, записи и уведомления.

Каждая «небольшая функция» включала в себя таблицу базы данных, API, интерфейс, разрешения, тесты и по крайней мере одну ошибку, которая появлялась исключительно поздно вечером в пятницу.

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

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

Нам не пришлось искать одного мифического инженера, который мог бы с равным мастерством проектировать интерфейсы, настраивать Kubernetes, разбираться в FFmpeg и, возможно, варить кофе.

Что мы имеем сегодня

Сегодня 2Cast.com — это стриминг вещания для авторов, геймеров и сообществ.

Создатель может получить ключ потока, подключить OBS и вести трансляцию через RTMP. На платформе теперь есть каналы, чат, расписания, категории, новости, блоги и раздел прошлых трансляций. Мы добавили сотни игровых и тематических категорий: от популярных игр до разработки программного обеспечения, искусства, музыки и ток-шоу.

Также развивается монетизация за счет спонсоров, пожертвований и премиум-подписок. Создатели заслуживают чего-то более осязаемого, чем очередное сообщение: «Ваш звук пропал».

Мы никогда не просыпаемся с мыслью, что платформе конец. Стриминговый сервис на самом деле не может быть завершен. Его можно лишь временно привести в состояние, когда графики выглядят спокойно, пользователи довольны, а DevOps-инженер отвечает обычными словами.

Что будет дальше

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

— уменьшить задержку потока;

— улучшить качество видео при нестабильном соединении;

— развивать обнаружение каналов и рекомендации;

— расширить инструменты модерации;

— улучшить записи потоков и VOD;

— добавить больше возможностей монетизации;

— сделать мобильную работу более комфортной;

— усилить мониторинг и безопасность инфраструктуры.

Отдельная задача — помочь новым создателям найти своих первых зрителей. Запустить поток технически просто. Гораздо труднее не провести два часа, разговаривая с цифрой «1» в углу, когда этим зрителем, вероятно, является вы, просматривающий трансляцию на своем телефоне.

Чему нас научил проект

Главный урок был прост: стриминговая платформа — это не видеоплеер с чатом. Это большая система, в которой видео, серверы, интерфейсы, сообщества, безопасность и монетизация должны работать одновременно.

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

Вот как нам помог XDBay — не волшебной кнопкой «Создать Twitch», а соединив нас с людьми, которые знали, как решать отдельные сложные проблемы.

Третий урок стал нашим любимым: если во время звонка кто-то говорит: «Это простое двухчасовое задание», безопаснее зарезервировать два дня и приготовить кофе.

2Cast продолжает расти. Мы по-прежнему обсуждаем детали интерфейса, гоняемся за редкими ошибками и проверяем панели мониторинга чаще, чем прогноз погоды. Но теперь у нас есть работающий продукт, наши первые создатели и четкое представление, куда двигаться дальше.

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

Если, конечно, кто-нибудь не забыл нажать «Запись».

Посетите 2Cast.com или обратитесь к техническим специалистам на XDBay.com. Эта статья представляет собой повествовательный отчет, основанный на общедоступных функциях продукта и предоставленной истории проекта.