As the Nintendo Switch phases out, I'm wondering how to fill the gap in my gaming setup. With a growing library of games on my PC, I'm hesistent to buy a Nintendo Switch 2, especially since its currently library is sparse, and it'll no doubt get an upgraded edition in a few years. PC handhelds like the Steam Deck are tempting but they're yet more devices to maintain, and with its size, power and battery life, I'm not sure I'd use it much.
The ideal solution seems to be local game streaming. I already do most of my software development on servers using containers, so naturally streaming makes sense. I can have a big, powerful and loud PC in another room while I play on lighter devices around the house. No additional purchases necessary.
Steam Remote Play and Steam Link
Steam Remote Play is the most streamlined solution. While other companies like Nvidia have stopped supporting local game streaming, in favour of remote subscription-based services, Valve continues to provide Steam Remote Play across most of Steam's catalogue.
Limited Clients
Steam Remote Play is closed source, so only devices which Valve provides a Steam or Steam Link client for is supported. This is mostly fine since it supports PC and Android, but I'll get into why it's a blocker for me right now.
Xbox Game Pass Support
Windows Apps can't be streamed properly through Steam Remote Play due to how they are launched. I have Xbox Game Pass, so this is a major limitation.
There are solutions to launching these games from Steam. However, because they end up running on detached processes, Steam cannot forward remote inputs to the game. This breaks Steam's universal "Steam Input" solution. There are additional workarounds using virtual gamepads, but it makes Steam Remote Play unnecessary as Sunshine provides support out-of-the-box.
Sunshine and Moonlight
Sunshine is an open source alternative to Nvidia's end-of-life GameStream. Moonlight is an open-source GameStream client available across a wide range of devices.
Android Support
Moonlight's Android app hasn't had any changes since Feb 28, 2024. Well over a year ago as of writing. Since then a lot of improvements have been made to the ecosystem, so it's questionable if Moonlight is working the best it can. There has since been a large number of forks trying to address various issues.
Latency and Media Codecs
One issue, not specific to Moonlight but Android in general, is that there's no standard for accessing "low latency" media codecs. While most system-on-a-chips (SoCs) support low latency codecs, most software can't access them. So they end up using the wrong codec and increasing latency by 1 frame. To be specific, a frame can take 4ms to decode but ends up stalling for an additional 16ms if the display is running at 60Hz. That's 5 times as slow as it can be.
This issue affects Mediatek, Exynos, and many more chips. It even affects software like Chromium, the mother of most modern web browsers and desktop apps. Years later, it has yet to be fixed. I would've expected Google, Microsoft, or Amazon to at least start an initiative to get this resolved. Stadia is dead now, but xCloud and Luna is still being sold. Amazon's Fire Sticks use Mediatek SoCs and while HEVC decoding on these devices doesn't have this issue, it can be faster, and AV1 decoding definitely does have issues.
Audio Crackling
An odd issue with Moonlight is audio crackling. It's usually a sign of low bitrate. Moonlight provides settings for video bitrate, but not for audio bitrate. Increasing any of these makes no difference. Some articles mention issues with the audio sink Sunshine uses to disable host audio, but even changing and disabling that didn't help.
Enabling 5.1 sound on Moonlight actually fixes it. I'd guess this works because it's another way to increase the audio bitrate.
LG webOS Support
Moonlight TV provides a webOS build of Moonlight. LG TVs run webOS, and webOS has a Developer Mode to install apps outside of LG's Content Store. There's also a neat homebrew app manager called webOS Dev Manager to streamline the process.
While Moonlight TV itself is great, my remote TV is an LG A2 which is a few years old now and is on the lower-end of LG's OLED offerrings. Its weaker processor is likely the cause for the 32ms decode time. The screenshots on the GitHub repo show a 0.43ms decode time, which must be on the higher-end TVs which I don't have. Since an Amazon Fire Stick 4K Max has a 3ms decode time, I don't have much reason to use the webOS build right now.
Apollo and Artemis
Apollo is a fork of Sunshine. Its main feature is it's built-in virtual display. Artemis automates Apollo's various features for a more streamlined experience. Both are compatible with Sunshine and Apollo too.
Virtual Display
Virtual displays let hosts run "headless", without a monitor, like a true server. This is important for monitors which disconnect their display when they are switched off since the PC needs somewhere to render to before it can be streamed.
I'm using a TV which is always connected, even when switched off, so the virtual display isn't a major benefit. If Apollo could isolate remote inputs to a specific process, it might be useful for letting others stream games while I use the PC, but that's currently not possible. There are other solutions for that, but I'm not going down that rabbit hole yet.
Android Only
Artemis only supports Android. Like with Steam, I'll get into why it's a blocker for me right now.
Inherited Issues
While Apollo/Artemis adds features, the main issues in Sunshine/Moonlight haven't be resolved yet. Though, I can see movement in fixing some of the latency issues on Android.
Security Updates
It's vital for remote access software to have security processes and timely fixes. Sunshine tracks security issues and made a bunch of security updates in September, while Artemis' last update was back in July. Apollo is a personal fork so it's not unexpected, but it's a trade-off worth mentioning.
Network Stability
While the streaming host can be wired up to the network, most streaming clients like phones and tablets will be on WiFi. In my case, almost all clients are on WiFi 6 at 5GHz, even the TV. While generally stable and low latency, it's worth tweaking some network settings to make the most out of it.
Disable Router MIMO
At the start of this adventure, I noticed a huge increase in instability when lots of devices were connected and actively using WiFi. A number of articles point to enabling QoS features, but I've found QoS to degrade bandwidth so I'd rather not.
The actual fix was to disable all MIMO-related features on the router. These are often enabled by default and are headline features. Since disabling, I haven't noticed any new issues and all the instability during periods of high traffic have pretty much stopped.
WiFi 8
WiFi 8 aims to improve stability, specifically for use cases like game streaming. However it's not finalised and will probably take years to hit the consumer market at a reasonable price.
Decode Latency
When it comes to picking streaming clients, decode latency is the most important factor. They are all over the place, ranging from 1ms to 40ms, regardless of the actual on-paper specs. Latency can make or break the experience. It isn't a problem for mostly static and turn-based games, but action games really struggle, especially if they have camera controls.
Moonlight's community maintains a spreadsheet which is somewhat useful. But to keep it simple, most smartphones are terrible, Amazon Fire Sticks are okay, Nvidia Shields are great, PCs are perfect.
Since the Nintendo Switch uses an Nvidia Shield SoC, it's also pretty good, beating most newer devices even though it's over 8 years old now. But getting the most out of it requires additional modifications. On Atmosphere, decode latency is around 4ms but it's limited to 10Mbps without overclocking. Its WiFi is also pretty dated now.
AV1 and HEVC
AV1 and HEVC are video formats. AV1 being newer and often flagged as "experimental". HEVC uses more bandwidth but has faster decode than AV1. The idea being if the hardware supports AV1 decoding, AV1 will provide better stability. The network is the most unstable part of the process so using less of it results in more stability. Makes sense.
However, AV1 decoding, even on devices which support hardware decoding, is slower than HEVC. Possibly due to low latency decoding issues mentioned before. So for local streaming, I've always gone with HEVC.
Conclusion
Game streaming is a bit of a mess right now, the hardware is there but the client software is holding it back.
I've currently using Sunshine with Moonlight on a Fire Stick 4K Max for TVs, a Nintendo Switch for handheld, and phones and tablets for more casual games where latency can be higher.
Since I'm using a Nintendo Switch, that also means I've stopped using Steam Remote Play. It felt a bit unreliable anyway compared to Sunshine.
For future purchases, I'll have to take note of all of these limitations. On the bright side, my Nintendo Switch has found a new lease of life!
Thanks for reading.

Comments
Nothing yet. Say the first thing.
Sign in to join the conversation.