- DIY
- A
The best self-hosted solution for game streaming and more for Windows
With the advent of handheld consoles on Android, Windows, and SteamOS, and a controller for the phone, there is a desire to play PC games on these devices. The simplest solution would be to use Steam Link, but due to constant disconnections and freezes, it became clear that the solution is not the most optimal.
What are the alternatives?
The most popular is the combination of the client application Moonlight and the server Sunshine. A rather convenient solution, as there are no restrictions on PC hardware, the latency for solo games is imperceptible, and the connection is (often) stable.
Personal experience
With the combination of Moonlight and Sunshine, I completed RDR2 on the Nintendo Switch (and yes, there is also a client for it), The Legend of Zelda: Breath of the Wild on Legion Go, and Doom Eternal on Steam Deck. The saddest experience, predictably, was on the Nintendo Switch, as it has a rather weak Wi-Fi module and Moonlight does not have access to the GPU, but I played with pleasure, even though the picture sometimes crumbled.
What's missing?
What was really missing was the automatic creation of virtual screens and connection to them. For example, the Nintendo Switch and Steam Deck have non-standard PC screen resolutions (1280x720 and 1280x800, respectively), and the Steam Deck OLED can even output HDR images!
One of the solutions was IddSampleDriver and scripts that are triggered when the client connects/disconnects to the server. In my experience, this works unstably, sometimes after disconnecting the device, the virtual monitor remains, and sometimes the PC monitor does not turn back on. The best alternative for me was the fork of Sunshine - Apollo.
Apollo
Built-in support for virtual screens with HDR support.
Client permissions system.
Clipboard synchronization between client and server (Works only in the Android client Artemis, which is a fork of Moonlight).
Apollo, when connecting a device, creates a virtual screen with the client's height/width/frame rate values and HDR support if available on the client, which allows stretching content to non-standard screens (for example, when connecting from a client with a 16:10 screen resolution).
The implementation of virtual screens works much better than a separate IddSampleDriver and scripts. You can read about the implementation of the functionality in the project's readme.
My verified setup
Currently, I use Apollo on a PC with Windows 11, Ryzen 7500F, and RX7700XT, this configuration is sufficient for comfortable streaming of most games.
As clients, I used all my devices - Android phone, Oculus Quest 3, Macbook, Steam Deck, Nintendo Switch Oled. If the device supports 5GHz Wi-Fi, you can try it as a client. But even for devices with an old Wi-Fi module, there are clients, for example, Playstation Vita, Nintendo 3DS.
As a router, I use Xiaomi AX3000T, flashed with OpenWRT.
Apollo did not require any additional configurations, everything works out of the box.
What else can you do?
You can connect to Apollo from outside the local network, following the instructions from the Wiki, and connect a separate device as a full-fledged additional monitor to the PC.
How to install?
The server installation is described in detail in the Sunshine documentation, it is similar to the Apollo installation. You can download Apollo from the project's Github page.
On most devices, Moonlight can be installed directly from the app store, if it is not there — click here.
Write comment