Обычный или облачный гейминг в EvertyDesk

от автора

Сразу оговорюсь: это не технический разбор и не попытка кого-то чему-то научить. Просто заметка из личного блога о проекте, которым я занимался последние несколько лет. Здесь будет больше истории, наблюдений и личного опыта, чем сухих цифр и графиков.

В прошлых статьях я рассказывал про терминал и про AI. Можно было бы зайти и про DLL — но это «для зелёных», и многим будет непонятно, как оно работает на самом деле. Поэтому сегодня — про другое. Про то, как вы вообще что-то видите на экране. Про кодеки.

Разберём на примере Everty Desk Lite — нашего клиента удалённого доступа. И заодно расскажу, как мы протестировали захват картинки и её апскейл прямо на клиенте.

Небольшое лирическое отступление

Мой наставник, учитель информатики, ещё в 8 классе сказал мне: «Мы пишем 10% кода, а 90% — лечим». Не знаю, о чем он думал ночами, врать не буду. Но он мой ментор, а я его ученик. Только с годами пропорция стала жёстче: теперь каждый мой проект — это 1% кода и 99% отладки. Как проклятие.

Так вот, про отладку и кодеки.

Старая навязчивая идея

Идея родилась из простого наблюдения: у людей дома простаивают мощные игровые компьютеры, которые по ночам просто выключены. В то же время у миллионов пользователей есть дешевые ТВ-приставки (или старые Android-устройства). У этих приставок слабый процессор, но есть аппаратный кодек, способный без тормозов воспроизводить тяжелое видео.

Проект связывает их напрямую: спящий ночью ПК превращается в удаленный сервер и стримит топовые игры на копеечную приставку клиента.

Tekken 8

Tekken 8

Почему кодеки — это кошмар

Чтобы картинка с сервера долетела до вашего экрана и не превратилась в слайд-шоу, её нужно закодировать, передать и декодировать. И желательно — аппаратно, иначе на дешёвом железе всё умрёт.

Вот зоопарк, через который мир заставляет нас «видеть»:

  • Media Foundation (Windows)

  • DXVA / DXVA2 (Windows, аппаратное декодирование)

  • VideoToolbox (macOS / iOS)

  • MediaCodec (Android — тот самый аппаратный H.264, на котором всё и держится)

А под капотом — полная грязь: прослойки, обрезы, проприетарщина от Google, Microsoft, Apple. Туда же — AV1, мой личный фаворит. По мне — лучший кодек, имхо.

Создать кодек — это безумие. А создать его аппаратно — оооо. Я читал статью о том, как AI буквально «рисуют» на кремнии. Ребята, описать кодер на кремнии — это поклон в пояс. Весь мир творит здесь чудеса, и это правда впечатляет.

Что сделали мы

Я на время отошёл от основных проектов — хотелось рассказать, как круто в принципе творить. Так вот, что получилось:

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

  • У нас своя интерпретация AV1. Чертовски быстрая.

На дешевой приставке PC HI BOX TV A3 Light, я добился кошмарных результатов)
Справа приставка с подключенным по USB DualSense 5 — Слева пк с эмулятором ps2 (Все через WIFI5)

Главный результат, которым горжусь: играть можно даже на самой «старой» Android-приставке — на аппаратном H.264. И это, честно, звучит безумно.
Но круто) Разумеется если есть аппаратный кодек.

Тут я не буду рассказывать как я технически добивался такого отклика. Но функционально:

  • Native C++ core — UDP sender и видео декодер написаны на C++ через JNI, не через Java. Максимальная скорость на критическом пути.

  • TouchLatencySprint — отдельный accessibility service специально для минимизации задержки ввода. Это нетривиальная фича, немногие стриминговые решения так делают.

  • Adaptive ROI Split-Stream — стриминг с динамическим регионом интереса. Вместо полного кадра — умный выбор что сжимать сильнее.

  • GamepadBoost — отдельный путь обработки геймпада с приоритизацией.

  • Двойной транспорт — UDP (нативный через NativeUdpSender.cpp) + TCP tunnel fallback, переключение на лету.

Архитектура Control Plane:

  • Managed session lifecycle с NAT probe, relay fallback, route policy diagnostics.

  • Биллинг с тремя режимами провайдера (manual / external stub / real HTTP).

  • Device auth + user auth, JWT access/refresh.

  • Persistence с restart recovery (snapshot state.json).

  • Полный smoke-test suite под каждый слой.

Мультиплатформенность:

  • Android sender (Kotlin + C++)

  • Desktop receiver/client (Avalonia / .NET, кроссплатформа)

  • ASP.NET Core backend — Docker-ready из коробки.

    исходники

Зачем это всё (и при чём тут Everty Desk)

Тот же стек кодеков, что делает возможным облачный гейминг на копеечном железе, — это ровно то, на чём живёт удалённый доступ. Низкая задержка, аппаратное декодирование, умный апскейл — в Everty Desk это не «для игр», это база комфортной удалёнки. Просто игры — самый жестокий стресс-тест: если тут картинка летит плавно, то рабочий стол подавно. Тут то, что мы пытаемся подружить с обычным удаленным доступом.

Вместо вывода

Этот проект родился не из сухих графиков или желания просто заработать. Он родился из личной боли и усталости. Я помню, каково это — страдать от отсутствия помощи, когда у тебя есть идея, но нет ресурсов, поддержки или нужного железа под рукой

Сегодня без технических примеров.
https://github.com/vaalimusic/EvertyGame
Собирайте и играйте.

info@everty.ru

ссылка на оригинал статьи https://habr.com/ru/articles/1043420/