[Облачные сервисы] Архитектура любительского стримингового сервиса DOS игр

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
29-Дек-2020 23:31


Недавно я написал небольшую статью о стриминге DOS игр в браузере. Настало время сделать небольшой технический обзор. Проект ведется исключительно мной, поэтому я его позиционирую как любительский. Среди общедоступных технологий позволяющих сделать стриминг игр можно выделить только WebRTC на нём и построен мой сервис. Как вы уже наверное догадались он состоит из браузерной и серверной части.
Браузерная часть
Основной компонент сервиса — WebRTC сервер Janus. Из коробки он предоставляет простое API для подключения к серверу, и поддержки WebRTC протокола. Поэтому, браузерная часть получилось максимально простой, в виде обертки поверх Janus API.
Серверная часть
На стороне сервера используются dosbox, ffmpeg и Janus. Все они собраны вместе в docker контейнер.
Текущая версия сервиса использует:
  • Последнюю версию dosbox
  • Последнюю версию ffmpeg, скомпилированную с поддержкой кодеков vp9 и opus
  • Последнюю версию janus с небольшими дополнениями (о них ниже)

Стриминг звука и видео
Когда docker стартует, супервизор запускает все три программы. Dosbox запускает игру и начинает непрерывно генерировать кадры и звуки. Эти данные перенаправляются в ffmpeg, который создает два RTP стрима (звук, видео). Плагин для стриминга Janus (стандартный компонент), слушает эти стримы и генерирует WebRTC данные для браузера.
{dosbox} --> {ffmpeg} --> {janus streaming plugin} --> {browser}

Поддержка клавиатуры
Для поддержки игровых действий (нажатие кнопок) используются каналы данных WebRTC. Каждый раз когда игрок нажимает кнопку, срабатывает обработчик клавиатуры в браузере. Он отправляет текстовые команды через дата канал на сервер.
  • pipe kdown — когда кнопка нажата
  • pipe kup — когда кнопка отпущена

На сервере эти данные обрабатываются моим расширением (исходный код). Создается именованный пайп в который записываются поступающие команды. С другой стороны, dosbox постоянно читает этот пайп и добавляет события клавиатуры в очередь для обработки.
{browser} --> {janus data text channel} --> {pipe} --> {dosbox}

Каналы данных работают в упорядоченном режиме, время жизни одного пакета — 16 мс. Т.е. события клавиатуру будут доставлены в том же порядке в каком и были нажаты.
Инфраструктура
Сервис запущен на платформе Amazon. Для каждого клиента создается новая задача Fargate. После старта задача получает публичный IP, который отправляется в браузер. При получении IP браузер инициирует WebRTC соединение с Janus сервером. Когда dosbox заканчивает работу, задача Fargate автоматически останавливается. Технически нет никаких ограничений на количество одновременных игроков.
{browser} --> {+fargate} --> {ip} --> {browser}
...
{browser} --> {stop} --> {-fargate}

Вместо заключения
Получилось достаточно поверхностно,
Получилось достаточно поверхностно, пока не понимаю про что написать подробнее. Вцелом архитектура показала себя вполне рабочей. Сервис работает в бесплатном режиме, попробовать можно здесь.
Обзорная статья: DOS Cloud Gaming
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_oblachnye_servisy (Облачные сервисы), #_webrtc, #_dos, #_retrogaming, #_streaming, #_cloud, #_igry (игры), #_oblachnye_servisy (
Облачные сервисы
)
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 22-Ноя 14:48
Часовой пояс: UTC + 5