Проект: Grand Guide Pedestrian  Публичный пост
19 июля 2021  1364
Grand Guide Pedestrian
https://github.com/Grand-Guide-Pedestrian

Расскажите о себе и сути проекта?

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. Развивать его дальше "просто так" смысла не вижу. Нужно либо архивировать, либо пытаться продать. И вот с последним проблемки, конечно, а значит в архив.

Нужны ли какие-то советы или помощь Клуба?

Если у кого-нибудь есть опыт с риалтаймовыми рестримингом видео — мне очень интересен ваш опыт.

Также позадавал бы вопросы тем, кто работал с надёжными, тоже рилтаймовыми дуплексными протоколами для обмена небольшими кусочками инфы между сервером и мобилками / сайтами. Чтоб типа как вебсокет, но надёжнее. Может кто-то на пальцах сможет объяснить как работает телегин протокол.

Какой совет вы бы сами могли дать идущим по вашим стопам?

Эм… Можете взять мои наработки здесь.

Связанные посты
12 комментариев 👇
🕵️ Юзер скрыл свои комментарии от публичного просмотра...
Andrew Konovalov Ведущий веб-разработчик 19 июля 2021

Офигенно!
Осталось реализовать бег по шифту (с ограниченной стаминой, естессно) и прыжок по пробелу :)

  Развернуть 1 комментарий

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

  Развернуть 1 комментарий

@madhead, карта, кстати, вроде на изи должна реализовываться)
А так конечно само собой, мвп всегда без усложнений

  Развернуть 1 комментарий
LexsZero Embedded Software Engineer 19 июля 2021

Офигенно!
По поводу стриминга, перепробовал кучу решений, и если хочется в браузере то есть два стула: хорошее качество и большой лаг (твитч, ютуб, вот это все - что берет поток по RTMP) и хреновое качество с низким лагом (всякие решения для видеочатов на WebRTC типа daily.co). Есть еще табуреточка посередке: agora.io, дает хорошее качество и низкий лаг, у них полностью свой стек, протокол, плеер, в браузере работает, но возможны проблемы с совместимостью, основной фокус у них на SDK для мобильных приложений.

  Развернуть 1 комментарий

@LexsZero, спасибо!

Гляну Agora как-нибудь. А WebRTC - это не P2P технология? Если P2p, то, наверное, нужна поддержка со стороны камеры...

  Развернуть 1 комментарий

@madhead, а нельзя как-то загнать поток с камеры с минимальной задержкой в апп на смартфоне и там уже делать с ним что угодно?

  Развернуть 1 комментарий

@LexsZero, 100% можно - ведь так работает официальный апплик GoPro. Я, правда, не смотрел в сторону реверс-инжиниринга их прилаги, потому что это звучит слишком сложно. А из коробки камера умеет стримить только RTMP + YouTube / Twitch / FB (тоже RTMP под капотом везде).

  Развернуть 1 комментарий
🕵️ Юзер скрыл свои комментарии от публичного просмотра...

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб