Self-hosted решения для стриминга

Зачем вообще это нужно?

Я рассматриваю следующие юзкейсы:

  1. Стриминг игр с ПК на клиенты. Клиентом может быть что угодно, главное требование - это 5GHz Wi-Fi, либо возможность подключения по проводу.
    Вместо того, что бы покупать несколько устройств, способных в поддержку современных игр, вы можете обзавестись тонкими клиентами с встроенным GPU (мини-пк, ультрабуки), ПК с dedicated GPU и играть подключаясь к нему с клиентов.
  2. Замена KVM свитча. Если у вас есть несколько ПК (Игровой / Рабочий / Личный / Сервер на Windows), к ним можно подключаться по сети с минимальной задержкой ввода.

За все время протестировано множество решений:

  1. Sunshine
  2. Apollo
  3. Duo
  4. Steam Link
  5. Magic Mirror

Основным предназначением Steam Link является стриминг игр, но в теории вы можете стримить всё, что можно добавить в библиотеку Steam, включая приложения или игры из других магазинов.

Плюсы:

  1. Хорошая интеграция с Steam Deck и устройствами с Steam клиентами - просто нажал и играешь.
  2. Удобно настраиваются дополнительные клавиши.
  3. Игры самостоятельно включаются и выключаются.

Минусы:

  1. Нестабильная работа.
  2. Отсутствие виртуальных экранов (игры будут в разрешении и с частотой кадров монитора хост ПК).

В целом, я бы пользовался Steam Link, если бы не встретился с артефактами и лагами, но какого-либо решения этим проблемам я найти не смог.

Платформы:

  • Хост: macOS, Linux, Windows
  • Клиенты: любые

Sunshine и его форки

Sunshine - это логическое продолжение NVIDIA Gamestream protocol, но с поддержкой видеокарт от Intel, AMD и NVIDIA и с открытым исходным кодом.
Подходит как для стриминга игр, так и для обычного удаленного использования ПК.

С ним я прошел:

  1. RDR2 на Nintendo Switch.
  2. The Legend of Zelda: Breath of the Wild на Legion Go.
  3. Doom Eternal на Steam Deck.

Помимо игр, я использовал его для доступа к приложениям на Windows, которых нет на других платформах (например Microsoft Access).

Sunshine

Плюсы:

  1. Стабильная работа.
  2. Наличие клиентского приложения почти под все подходящие платформы.

Минусы:

  1. Отсутствие удобного решения для создания виртуальных экранов повторяющих разрешение и частоту кадров клиента.

Платформы:

  • Хост: macOS, Linux, Windows
  • Клиенты: любые

Apollo

Форк Sunshine, основным отличием которого является встроенная поддержка виртуальных экранов через SudoDVA.

Плюсы:

  1. Автоматическая работа с виртуальными экранами.
  2. Система разрешений для клиентов.
  3. Синхронизация буфера обмена между клиентом и сервером.

Минусы:

  1. Отсутствие поддержки систем кроме Windows, так как "взрослых" решений для работы с виртуальными экранами на Linux и macOS сейчас нет.

Платформы:

  • Хост: Windows
  • Клиенты: любые

Duo

Форк Sunshine, который добавляет поддержку одновременного использования ПК несколькими клиентами.

Плюсы:

  1. Возможность одновременного использования несколькими клиентами.
  2. Наличие Sandbox режима для клиентов.

Минусы:

  1. Для полноценного использования нужно заплатить 10$.
  2. Закрытый исходный код.
  3. Нет точной информации о том, как это работает и насколько это безопасно.
  4. Нет поддержки для других систем, и скорее всего никогда не будет.

Я не смог найти рабочих альтернатив этому приложению, поэтому считаю, что заплатить 10$ стоит того, либо вы можете попытаться обойти это ограничение. Юзкейсов довольно много - вы можете полноценно использовать ПК пока на нем кто-то играет под другим пользователем или играть на одном ПК одновременно с несколькими людьми.

Я использовал Duo несколько месяцев и почти не встретил проблем. Единственное что заставило меня перейти на другое решение - это желание упростить свой сетап, так как я не совсем понимал как работает Duo и возникнут ли у меня проблемы с ним в будущем.

Платформы:

  • Хост: Windows
  • Клиенты: любые

Magic Mirror

Magic-Mirror

Экспериментальный проект эксклюзивно под Linux с Wayland. Может стримить множество приложений на фоне, не блокируя доступ к ПК. В основном, создан для стриминга игр и работает довольно схоже с Steam Link (Сам запускает приложения и управляет их состоянием, не умеет стримить систему полностью).

Плюсы:

  1. Возможность одновременного использования несколькими клиентами.
  2. Поддержка Linux.

Минусы:

  1. Работает нестабильно.
  2. Есть клиенты только под Linux и macOS

Платформы:

  • Хост: Linux с Wayland
  • Клиенты: macOS с GUI или Linux через терминал

Чем я пользуюсь сам

Для себя я выбрал Apollo, так как он работает просто и стабильно. Из альтернатив я предлагаю рассмотреть:

  1. Sunshine, если вы предпочитаете использовать Linux на ПК для игр. Можно изучить возможные решения для виртуальных экранов и самостоятельно реализовать через скрипты.
  2. Duo, если вы хотите использовать ПК одновременно на нескольких клиентах или использовать его пока кто-то играет.

Технические тонкости

У каждого клиента разное время требуемое для декода стрима, от этого зависит задержка ввода. Сообщество создало таблицу, где указаны клиенты и их decoding performance: SoC-Benchmark. Если ссылка сейчас неактуальна, таблицу можно найти по запросу "Moonlight decoding performance excel".

Если вы пользуетесь Steam Deck, можно столкнуться с нестабильным стримом из-за странной работы Wi-Fi модуля. Решение можно найти в этом Github Issue.