Quite often I find myself wanting to enjoy PC games but not actually sit at the desk that was until now all but required. I'm not going to stir up the age old argument of PC vs console as in my case it's irrelevant. This post will focus on bringing some of the perks console gaming has to offer to the PC.
the setup and the dream
There are 3 major components in my setup
- My desktop computer running Windows and built around 4 years ago that I have since been maintaining with small and frequent upgrades.
- My Server running Unraid (A stripped down Linux OS with support for software raiding, Docker and virtual machines). Picked this one up about 2 years ago and since then I have frankensteined in a graphics card that I patch directly through to a Windows virtual machine.
- Finally my laptop, a MacBook Pro.
The "dream" is to reliably and with minimal fuss fire up a game on either the desktop or the virtual machine running on the server and stream the video output to my laptop. We also need to forward mouse and keyboard input from the laptop to the desktop or VM. Some other key points we will also be looking for are
- Latency (Which for me means the delay between performing an action and seeing the result on my laptop)
- Quality (Fairly self explanatory but I'm aiming for the game to appear almost identical on both machines)
- Consistency/Reliability (Which in my case means a stable quality and latency)
options options options...
steam in home streaming
The first solution was readily available and built right into the Steam client. Steam in home streaming allows you stream games from one machine to another providing you're logged into to the same account and both machines are on the same network. The product itself has come a long way since initial release and has showed good results in terms of latency, quality and consistency. I was able to easily achieve a 1920x1080 video stream @ 60fps. The software reported an average of less than 1ms of input latency and around 30ms of output latency as shown below.
A full house? almost... just a few nit picks and the lack of support for games living outside my steam library. While you can get around this by launching something like notepad, then causing that application to open a new window which in turn will get you a desktop, this still requires physical access to the host which is at the very least inconvenient. Over to the nit picks, quite often I found it a struggle to get the client and the host to find each other requiring many restarts of the application. I also occasionally was subject to massive latency spikes sometimes lasting a good few seconds and usually costing me the win (blame the lag). The final nit pick, even with steam games if running the game requires any user intervention at all more often than not you will find yourself running upstairs to your host to do just that.
The next solution I came across was Nvidia Gamestream. All fairly recent Nvidia graphics cards come with a built in encoder purpose built for game capture and streaming. They also offer a product called the Nvidia shield which is sort of like a console controller with a monitor attached to the top of it. While we are not interested in the product we are interested in the interface it uses to stream games. Plenty of open source projects exist that allow you to tap this interface with anything from a phone to a laptop. One project I had success with was called Moonlight and I made use of their chrome app. Once paired with the host a list of games appear including steam's big picture mode.
While I was unable to extract any metrics (coming soon according to git) performance was very similar to that of Steam's in home streaming minus the random latency spikes so all good on that front. However, unfortunately the same problem of the lack of a desktop. The host is limited to only launching games supported by either Steam or Nvidia. As a final note this technology relies on specific hardware (A Nvidia graphics card) and my server currently uses an AMD card :(
I stumbled across parsec reading another article that claimed to have achieved latencies of around 30ms using an amazon GPU instance to run a game and stream across the internet to a laptop. Almost immediately I wondered if this could solve my local streaming problem. The solution consists of a minimal server that quietly runs as a service on the host and once again a minimal client supporting either Windows or OSX. The server is linked to a parsec account and once up and running can be seen in their webui. The webui itself can be used to establish a connection or connection parameters can be passed when launching the client. The server client will bind to the local network interface for localised connections and utilise UPnP for remote connections. The results are in and speak for themselves.
I was able to achieve a solid 60fps at superb quality all at a latency of around 5ms. Not to mention the fact I finally had a desktop and could play anything I wanted to also eliminating the need to run up and downstairs to quickly do something on the host. I didn't come across any stability issues and the software performed well on both hosts and a variety of clients. As a bonus I can use parsec to enjoy my games wherever I may be and also privately share my experiences with friends. Shoutout to the parsec community and developers whom where incredibly helpful and friendly even to the point of releasing a feature I personally requested.
Everyone has their own personal preferences and mine here was to be able to play anything I wanted with an almost local experience. I understand the decisions made to create a closed environment in Steam in home streaming and Nvidia gamestream solutions as it simplifies the end user experience. But I am happy to sacrifice a few clicks around a desktop for an almost boundless experience.
If you enjoyed the read, drop us a comment below or share the article, follow us on Twitter or subscribe to our #MetaBeers newsletter. Before you go, grab a PDF of the article, and let us know if it's time we worked together.