Grand Guide Pedestrian

Нахакатонил тут проектик, называется Grand Guide Pedestrian.

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

Демка:

Принцип работы:

Герой стримит видео с экшн-камеры на рестример, откуда оно забирается SPAшкой для игрока. Игрок, в свою очередь, управляет героем "классической" комбинацией WASD. Нажатия кнопок отсылаются по вебсокету на сервер, и оттуда улетают по вебсокету же герою в мобильную прилажку.

Итого, прототип состоит из:

  • Видео рестримера

  • Вебсокет-сервера

  • Мобильного приложения для героя

  • SPA для игрока

Потратил 27 дней от момента, когда начал что-то делать, до первой прогулки по городу. Из них реально я потратил лишь два-три вечера на сервер и поиски и настройку видео-рестримера, а остальное время искал фронтовика среди знакомых, готового накидать прототип за "спасибо" и, собсно, ждал пока этот фронт появится. Ещё неделю я рисовал постер, который всратый и ненужный, но мне по фану и смешно. Кстати, вот он:

Ну и ещё вечер я потратил пытаясь придумать выносное крепление для камеры, чтоб было "как в GTA", а не "как в контре". Однажды я уже делал что-то похожее, но тогда у меня под рукой было много инструментов и некое подобие мастерской, сейчас же у меня был только мультитул Leatherman Rev™. Сварганил его из обычного штатива, который примотал к рюкзаку карабинами. Получилось "как в PUBG".

Мобильное приложение для героя написал на Flutter. Потому что я его немного знаю и могу написать более-менее работающее приложение самостоятельно, не прибегая к посторонеей помощи.

Сервер на Kotlin. Потому что я его хорошо знаю и могу сделать на нём что угодно.

Рестример для видеопотока — SRS. Я в теме не очень разбираюсь, поэтому взял первое рабочее решение.

SPA web-app для игрока сделал мой друг Лёша на React. Очень благодарен ему за это.

Буквально за день до первой прогулки с камерой по городу автор Телеграм-канала Derp Learning запустил нового бота: Face 2 Sticker. Этот бот очень помог закончить с крупноплановыми лицами (и котом) на постере.

Основной блокер, абсолютно перекрывающий всё остальное — это рестриминг видео. Это очень сложно и ресурсоёмко. Мне не удалось снизить задержку видео ниже 3-х секунд на идеальном интернете в квартире. В городе же, на 4G, задержка составляет 5-10 секунд.

С такой задержкой невозможен интерактив. Я немного почитал там-сям и выяснилось, что во времена Flash можно было проигрывать RTMP-поток без транскодинга, что позволяло добиваться сабсекундной задержки. А сейчас же, в мире HTML5, видео необходимо транскодить в какой-нить FLV, что занимает драгоценное время. По-другому стал смотреть на YouTube с его задержкой в десяток секунд на стримах. Раньше я думал "чего так много, где мой абсолютный рилтайм", сейчас я понимаю, что с их количеством пользователей это невероятно хороший результат, требующий талантлевейших инженеров и огромных ресурсов.

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

Код — здесь, спасибо за внимание.