Как стать автором
Обновить

Комментарии 21

Интересно как захватывается экран dosbox в ffmpeg ?

На самом деле используется не dosbox, а мой форк js-dos. В версии 7 я переделал dosbox, теперь он выводит кадры не на экран, а ввиде массива RGBA. Тоже самое со звуком, — массив сэмплов.
И будет как с кайлерой и игрой по сети, где то лаг и пошел рассинхрон. Единственное решение, это как реализовано у mednafen, когда кроме нажатий синхронизируются еще и области в памяти.
Не понял, про что вы. Синхронизация памяти между чем и чем?
В Вашем случае все сложнее. А вот если рассматривать просто случай игры по сети на эмуляторах, через кайлеру, передаются так же, только нажатия. И при первом лаге — начинается всё расходиться куда попало.
В меднафене же, при сетевой игре, помимо нажатия, синхронизируются области памяти эмуляторов у игроков, что гарантирует что оба игрока всегда будут видеть одну и ту же картинку, одни и те же действия.
Вот и вопрос, где гарантия что все нажатия дойдут до досбокса?
Мне кажется у меня случай попроще. Сетевой игры здесь нет, эмулятор один и он не может пойти вразнос.
Нажатия могут пропадать в случае плохого соединения, но в этом случае скорее всего играть будет не возможно по очевидным причинам.

Интересно, я решил проверить, и у меня игра запустилась на стороне клиента, через эмулятор 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 Дум запустился, хотя шёл с большими тормозами, играть было неудобно. В простые игры типа Тетриса игралось нормально.
Я также попробовал запустить стриминг Дума на нормальном ноутбуке. Игра запускается, ввод обрабатывается, тормозов нет, но иногда неприятно смазывается картинка. Локальный режим лучше.

js-dos это и есть мой проект. На dos.zone работает его последняя вресия v7, различия в производительности на слабом ПК объясняются тем, что v7 стартует эмуляцию в worker, v6.22 (js-dos.com) стартует эмуляцию в основном потоке браузера (что быстрее). v7 тоже поддерживает этот режим, но на мощных ПК я рекомендую использовать worker режим.

Ещё для теста запустил Дум с EEE PC на сервере через обычный VNC. Никаких тормозов не наблюдалось, игра запустилась с достаточной скоростью. Может быть, и вам лучше попробовать вместо ffmpeg попробовать использовать VNC или другой подобный протокол с более высокой производительностью? VNC клиенты, работающие через браузер, существуют, Apache Guacamole например.

И ещё один тест. Запустил noVNC, подключался с EEE PC через браузер — производительность нормальная, ничего не тормозит даже на слабом железе! Но нет звука, VNC его не поддерживает.
Для стриминга игр звук всё же желателен. Лучше подумать в этом направлении. На сервере звук можно перенаправить через PulseAudio на прокси, который через webrtc будет отдавать его клиенту. На декод и воспроизведение звука много ресурсов не уйдёт (тем более в ограниченном качестве 8000 Гц — для старых игр этого достаточно).

Для VNC нет стандартизованного протокола стриминга через браузер. WebRTC это не только сам стриминг, но ещё куча всего (обход NAT, дата каналы, SSL). Турбо режим должен работать везде: Windows, *nix, Mac, Android, iPhone, т.е. без команды это сделать фактически невозможно.
WebRTC стандартизован, но тем не менее даже он глючит на некоторых устройствах, что же говорить о самописной системе.

VNC через браузер работает не напрямую, а через прокси, который работает через WebSocket — тоже стандартный протокол, поддерживаемый в разных браузерах.
Спасибо за большой отзыв.
1. Вы правильно поняли, для стриминг игры нужно использовать Turbo.
2. Ваши размышления насчет применимость стриминг платформы тоже верны. Но здесь есть один очень тонкий момент. dosbox имеет различные типы эмуляции, простой и динамический. Так вот с помощью WebAssembly можно запустить только простой режим. Динамический режим выполняет динамическую компиляцию игры в машинные команды современных процессоров и работает на порядки быстрее простого режима. Как я уже сказал, современные спецификации WebAssembly не позволяют реализовать его. Поэтому все что Вы сказали верно для игр которым хватает мощностей простого режима. Да таких игр очень много, но есть и другие игры, которые даже на самом мощном PC будет тормозить. Для таких игр и нужен Turbo режим, а DOOM я просто использую для тестирования. Например, поробуйте запустить в js-dos C&C или Deluxe Ski Jump 2 иди Dagerfall и Вы поймете о чём я.

Резюмирую: если работает локальный режим — супер, его и следует использовать. Но, если по каким-то причинам нет, то можно попробовать стриминг.
А как осуществляется охранение в игре? Будет ли возможность получать доступ к определенным файлам эмулятора? В идеале общий диск, диск на сервере или на клиенте.
Для каждого игрока используется своя песочницаю Все изменения сохраняются в файловой системе при закрытии сессии.
Планируется ли в будущем обеспечить доступ к файлам, чтоб использовать эмулятор DOS для прикладных DOS-программ и иметь доступ к созданным в программе файлам? Планируется ли возможность организации игры по сети между игроками?
1. Фактически доступ есть, можно скачать последнею весрию ФС по прямой ссылке. Пожалуй, это отличная идея и я сделаю соответствующею кнопку.
2. По сети игра планируется, но вначале нужно доделать поддержку мышки)
Нужен пример прямого доступа к файлам. Некоторым захочется сохранять свое прохождение (сохраненные файлы) к себе на компьютер.
Теперь появилась возможность скачивать бандлы с прогрессом.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории