Расскажите о себе и сути проекта?
Grand Guide Pedestrian — это виртуальный интерактивный экспириенс, в котором игрок управляет реальным человеком, героем, "как в GTA". Только без стрельбы, угонов, и прочих нарушений законов, разумеется 😕
Всратое демо-видео:
Запасное всратое демо-видео без звука на случай бана алгоритмами YouTube за тему из GTA: тыц.
Как появилась идея? Что вдохновило?
Вдохновлялся, очевидно, игрой GTA. Фильмами "Аватар", "Геймер", и менее известным "Nerve" (2016).
Идея… За полгода, в разгар ковида, при по-Шрёдингеровски закрытых границах родины, судьба раскидала моих друзей по разным городам и странам. В какой-то момент и я, не без радости, обнаружил себя на новом месте. И я подумал, что было бы здорово показать его друзьям, тем более, шансов встретиться в реале практически не предвиделось (но мы смогли!). Фотки — скучно, а сторисами и так все сыты. К тому же, хотелось интерактивности. Так и родилась идея дать возможность кому-то побродить по городу моими ногами.
А вообще, идея снимать видео покатушек на сноуборде от третьего лица ко мне пришла года два-три назад, потому что стандартные ракурсы скучны. Правда, я уже джва года жду покатушек из-за уханьского вируса.
Что вошло в прототип и сколько времени на него было потрачено?
Принцип работы такой:
Герой стримит видео с экшн-камеры на рестример, откуда оно забирается SPAшкой для игрока. Игрок, в свою очередь, управляет героем "классической" комбинацией WASD . Нажатия кнопок отсылаются по вебсокету на сервер, и оттуда улетают по вебсокету же герою в мобильную прилажку.
Итого, прототип состоит из:
- Видео рестримера
- Вебсокет-сервера
- Мобильного приложения для героя
- SPA для игрока
Было потрачено 27 дней от момента, когда я начал что-то делать, до первой прогулки по городу. Из них реально я потратил лишь два-три вечера на сервер и поиски и настройку видео-рестримера, а остальное время искал фронтовика среди знакомых, готового накидать прототип за "спасибо" и, собсно, ждал пока этот фронт появится. Ещё неделю я рисовал постер, который всратый и ненужный, но мне по фану и смешно.
Ну и ещё вечер я потратил пытаясь придумать выносное крепление для камеры, чтоб было "как в GTA", а не "как в контре". Сварганил его из обычного штатива, который примотал к рюкзаку карабинами:
Какой технологический стек вы использовали? Почему?
Мобильное приложение для героя
Flutter. Потому что я его немного знаю и могу написать более-менее работающее приложение самостоятельно, не прибегая к посторонеей помощи.
Сервер
Kotlin. Потому что я его хорошо знаю и могу сделать на нём что угодно.
Рестример для видеопотока:
SRS. Я в теме не очень разбираюсь, поэтому взял первое рабочее решение.
SPA web-app для игрока
React. Написал мой друг, умеющий во фронт.
Постер
Буквально за день до первой прогулки с камерой по городу автор Телеграм-канала Derp Learning запустил нового бота: Face 2 Sticker. Этот бот очень помог закончить с крупноплановыми лицами (и котом) на постере.
Как вы запускались и искали первых пользователей?
С этим проблемка… Никак. Естественно, мы с другом, писавшим фронт, опробовали этот экспириенс по завершению, но лаг отбил всё желание продолжать. Пробовал, правда, ещё несколько раз с разными друзьями, на более хорошем мобильном интернете, но всё равно "ощущения не те". Да и бродить на фултайме по городу не планирую. Я не то чтоб был заинтересован в пользователях, это проект "для души".
С какими самыми неожиданными трудностями пришлось столкнуться?
Основной блокер, абсолютно перекрывающий всё остальное — это рестриминг видео. Это очень сложно и ресурсоёмко. Мне не удалось снизить задержку видео ниже 3-х секунд на идеальном интернете в квартире. В городе же, на 4G, задержка составляет 5-10 секунд.
С такой задержкой невозможен интерактив. Я немного почитал там-сям и выяснилось, что во времена Flash можно было проигрывать RTMP-поток без транскодинга, что позволяло добиваться сабсекундной задержки. А сейчас же, в мире HTML5, видео необходимо транскодить в какой-нить FLV, что занимает драгоценное время. По-другому стал смотреть на YouTube с его задержкой в десяток секунд на стримах. Раньше я думал "чего так много, где мой абсолютный рилтайм", сейчас я понимаю, что с их количеством пользователей это невероятно хороший результат, требующий талантлевейших инженеров и огромных ресурсов.
Вторая проблема это вебсокеты. Они, конечно же, постоянно рвутся, отказываются реконнектится и теряют мессаги.
Сколько потратили и заработали? Есть идеи как это можно монетизировать?
Потрачено: 0$, заработано: 0$.
Идей как это можно было бы монетизировать три:
- Довести до играбельного состояния путём понижения latency видео и продавать это как игру, где игроки оплачивали бы время героев и процентик в карман стейкхолдеров.
- Отказаться от принципа императивного управления героем через WASD, а сделать что-то более декларативное, типа "подойди вон к тому дому". Продавать как виртуальный гид по городу, который может зайти в любую подворотню по желанию игрока. Этот вариант более толерантен к качеству видео.
- Обставить эту штуку как социально хорошую: как возможность для physically challenged people совершать виртуальные прогулки. Получить денег от фондов.
⮤ делать деньги и продавать я не умею 😔
Какие планы на будущее?
Вообще-то никаких. Проект я довёл до точки, когда я могу сказать, что я молодец, что я не бросил, что я доделал MVP. Развивать его дальше "просто так" смысла не вижу. Нужно либо архивировать, либо пытаться продать. И вот с последним проблемки, конечно, а значит в архив.
Нужны ли какие-то советы или помощь Клуба?
Если у кого-нибудь есть опыт с риалтаймовыми рестримингом видео — мне очень интересен ваш опыт.
Также позадавал бы вопросы тем, кто работал с надёжными, тоже рилтаймовыми дуплексными протоколами для обмена небольшими кусочками инфы между сервером и мобилками / сайтами. Чтоб типа как вебсокет, но надёжнее. Может кто-то на пальцах сможет объяснить как работает телегин протокол.
Какой совет вы бы сами могли дать идущим по вашим стопам?
Эм… Можете взять мои наработки здесь.
Офигенно!
Осталось реализовать бег по шифту (с ограниченной стаминой, естессно) и прыжок по пробелу :)
Офигенно!
По поводу стриминга, перепробовал кучу решений, и если хочется в браузере то есть два стула: хорошее качество и большой лаг (твитч, ютуб, вот это все - что берет поток по RTMP) и хреновое качество с низким лагом (всякие решения для видеочатов на WebRTC типа daily.co). Есть еще табуреточка посередке: agora.io, дает хорошее качество и низкий лаг, у них полностью свой стек, протокол, плеер, в браузере работает, но возможны проблемы с совместимостью, основной фокус у них на SDK для мобильных приложений.