Комментарии 21
Интересно как захватывается экран dosbox в ffmpeg ?
В меднафене же, при сетевой игре, помимо нажатия, синхронизируются области памяти эмуляторов у игроков, что гарантирует что оба игрока всегда будут видеть одну и ту же картинку, одни и те же действия.
Вот и вопрос, где гарантия что все нажатия дойдут до досбокса?
Интересно, я решил проверить, и у меня игра запустилась на стороне клиента, через эмулятор JSDOS. Я даже пробовал сетевой кабель выключить, и игра продолжала работать.
Правильно я понял, что для игры по описанной в статье схеме нужно использовать турбо-режим? а в обычном игра обсчитывается только на стороне клиента. Я попробовал поиграть в DOOM в обычном режиме и не почувствовал никаких тормозов. Но у меня мощная машина, попробую на слабой.
На слабой (проверял на EEE PC 901) обычный режим не запускается вовсе, зависает на "JSDOS Starting". Турбо-режим запускается, но не реагирует на ввод.
Пробовал на мобильном (среднем samsung galaxy 2018 года) — и в обычном режиме производительности достаточно, чтобы поиграть в DOOM.
Версия браузера на обоих устройствах (нормальном ноутбуке и старом EEE PC) одинаковая (Firefox 84.0.1). Возможно, старенькому EEE PC просто не хватает производительности. Если бы я взял устройство помощнее, чтобы хватало мощности на турбо-режим (на обработку ввода с клавиатуры и декод видео), ему скорее всего хватило бы мощности и на обычный локальный режим.
Мне кажется, что трудно найти вариант использования, при котором стриминг для таких не очень ресурсоёмких задач, как старые игры, имел бы преимущество перед локальным выполнением. Если устройство слишком слабое, то на нём и стриминг не пойдёт комфортно. Если оно достаточно производительное, на нём лучше пойдёт локальный режим. Если среднее — трудно сказать, в зависимости от сетевого подключения и загрузки сервера. Стриминг или терминальный доступ имеет преимущество перед локальным выполнением лишь тогда, когда запускаемая задача требует достаточно высокой производительности, на слабых задачах его преимущества не очевидны.
Потестировал ещё.
На сайте js-dos.com есть аналогичная возможность запустить игры для DOS в браузере через JS. И там даже на EEE PC Дум запустился, хотя шёл с большими тормозами, играть было неудобно. В простые игры типа Тетриса игралось нормально.
Я также попробовал запустить стриминг Дума на нормальном ноутбуке. Игра запускается, ввод обрабатывается, тормозов нет, но иногда неприятно смазывается картинка. Локальный режим лучше.
Ещё для теста запустил Дум с EEE PC на сервере через обычный VNC. Никаких тормозов не наблюдалось, игра запустилась с достаточной скоростью. Может быть, и вам лучше попробовать вместо ffmpeg попробовать использовать VNC или другой подобный протокол с более высокой производительностью? VNC клиенты, работающие через браузер, существуют, Apache Guacamole например.
И ещё один тест. Запустил noVNC, подключался с EEE PC через браузер — производительность нормальная, ничего не тормозит даже на слабом железе! Но нет звука, VNC его не поддерживает.
Для стриминга игр звук всё же желателен. Лучше подумать в этом направлении. На сервере звук можно перенаправить через PulseAudio на прокси, который через webrtc будет отдавать его клиенту. На декод и воспроизведение звука много ресурсов не уйдёт (тем более в ограниченном качестве 8000 Гц — для старых игр этого достаточно).
WebRTC стандартизован, но тем не менее даже он глючит на некоторых устройствах, что же говорить о самописной системе.
1. Вы правильно поняли, для стриминг игры нужно использовать Turbo.
2. Ваши размышления насчет применимость стриминг платформы тоже верны. Но здесь есть один очень тонкий момент. dosbox имеет различные типы эмуляции, простой и динамический. Так вот с помощью WebAssembly можно запустить только простой режим. Динамический режим выполняет динамическую компиляцию игры в машинные команды современных процессоров и работает на порядки быстрее простого режима. Как я уже сказал, современные спецификации WebAssembly не позволяют реализовать его. Поэтому все что Вы сказали верно для игр которым хватает мощностей простого режима. Да таких игр очень много, но есть и другие игры, которые даже на самом мощном PC будет тормозить. Для таких игр и нужен Turbo режим, а DOOM я просто использую для тестирования. Например, поробуйте запустить в js-dos C&C или Deluxe Ski Jump 2 иди Dagerfall и Вы поймете о чём я.
Архитектура любительского стримингового сервиса DOS игр