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 с его задержкой в десяток секунд на стримах. Раньше я думал "чего так много, где мой абсолютный рилтайм", сейчас я понимаю, что с их количеством пользователей это невероятно хороший результат, требующий талантлевейших инженеров и огромных ресурсов.
Вторая проблема это вебсокеты. Они, конечно же, постоянно рвутся, отказываются реконнектиться и теряют мессаги.
Код — здесь, спасибо за внимание.