Moonlight Game Streaming

If you have read this blog for any period of time, then you have probably seen me extoll the virtues of Parsec for game streaming. If you have not, then a quick 500ft view is that my world works a little different than your average gamer. I have one beefy but aging gaming machine upstairs, but I also spend a lot of time downstairs on my laptop. Said laptop is old enough that it is long beyond any useful ability to play games on it with its GeForce 960M graphics card in it. However I mitigate this fact by streaming games from my upstairs machine to the laptop over my local area network. I’ve been doing this since 2018 with pretty solid success after having tried a few other options that never quite panned out. There are however a bunch of things that you just sort of take for granted while using Parsec.

First off the connection is going to have intermittent lag causing the audio and controls to have what I can only describe as a “hiccup” where the audio drags for a moment and controls go a little wonky. If this happens at the wrong time it could mean a death, so I find I kinda play accordingly as to not press my luck. The other problem is that the video can artifact something fierce if there is a large amount of movement going on with the screen. For example if a game has rain… prepare for a pixelated mess until you get indoors. I found this particularly bad in Minecraft for some reason, making it extremely hard to play if there was rain or snow happening on screen. These are all things that I have just sort of dealt with because it was the price of entry for being able to play games on my laptop remotely.

The challenge however is that over the last year these have seemingly gotten worse. I know with the pandemic, Parsec has been selling its services heavily not just as a game streaming platform but as a super duper terminal services client. No matter how much I tell the client to directly connect to machines on my network, there is still a remote connection overhead of the client dialing home in order to locate the box it is attempting to connect to. This overhead seems to have gotten worse causing the audio/visual hiccups to come more often. I’ve done everything that I can think of to try and remove issues from the chain… but the end result is that I am less likely to play “serious” games from my laptop leading me to spend way more time at my desktop… which is also doubling as my work computer in the time for remote work.

I am not sure exactly what lead me to stumble onto Moonlight last night, but stumble onto it I did. I remember hearing about this project at one point in the past but never actually getting around to testing it out. Effectively Moonlight is an open source client that takes advantage of the Nvidia Gamestream tools built into GeForce Experience and the Shield infrastructure to allow you to stream games to lots of different platforms. Officially Moonlight has the following clients:

  • Windows
  • MacOS
  • Linux
  • Steam Link
  • Raspberry Pi and other SBCs
  • iOS and Apple TV
  • Android
  • Amazon FireOS
  • Google ChromeOS
  • PlayStation Vita (homebrew)

Essentially it supports all of the platforms that Parsec does with a few more thrown into the mix. For awhile I had been contemplating trying to build a set top box that would let me stream Parsec to a television but never got around to it. Moonlight however apparently just straight up natively supports the Android TV box that I already own. I will have to hook up a controller to it and test this out more closely to determine how well it works.

One of the challenges with Moonlight is that it is quite a bit more fiddly than Parsec. Essentially Parsec involves setting up an account, installing the client on two machines and then adding one as a host and then you are up and running pretty quickly. Moonlight requires you to have GeForce Experience installed on the host machine and then going into the client under the Shield section and toggling on Gamestream (which requires a GTX 650 or newer graphics card). If you are an AMD graphics card user, it requires more fiddling and apparently the OpenStream platform installed on your host machine. After you have Gamestream turned on, your machine should be findable as host in any Moonlight client that is installed on your network. There is a handshake that requires you to have access to both machines that is reminiscent of bluetooth pairing. When you attempt to connect the first time with Moonlight on a new platform it will show a short code and that code will have to be entered on your host machine in order to verify access.

From there you will be presented with a list of the games that GeForce Experience thinks you have installed on your machine. You might have to manually add games if they don’t show up, or just do what I did and configure a windows app to open… which effectively allows me desktop access to the machine. I did MSTSC.exe because it seemed fitting given that is the Remote Desktop client, but you could just as easily configure it to open Notepad.exe because the end result is it giving you access to the desktop. From there it works just like a normal remote desktop session and you can launch any games you might have on your host system. The individual game shortcuts seem to work pretty well as it will connect you and then automagically launch that specific game.

net stop NvContainerLocalSystem && net start NvContainerLocalSystem

I did end up needing to create a batch file with the above command in order to sort of “reset” the system if anything goes south on the host machine. This is essentially the equivalent of going into GeForce Experience and toggling on and off Gamestream. The default key combination for disconnecting from a Moonlight session is shift+alt+clt+q. However this morning while trying to take screenshots of how the Moonlight process worked, I stranded a session forcing me to run the batch file to disconnect and restore things back to normal. I did notice one of the pieces that did not get restored was my audio settings, so I had to go in and manually flip things back to speakers. Again Moonlight is way more fiddly than using Parsec which more or less just works.

Another thing that I encountered last night is when I first attempted to connect in remote desktop mode, I ended up getting a 4k window with a tiny 1080p window up in the corner. After some googling and messing about I found that I needed to go into the Nvidia Control Panel and change the Desktop Scaling settings. Since I run in native 4k mode while at the machine it doesn’t really do anything, but while remotely connected it takes the 1080p version of the desktop and blows it up full screen granting me easier access to it.

So at this point you are asking yourself… Bel why the hell would you go through this much trouble when you yourself have admitted that Parsec just works easier? Because running Moonlight was the best version of remote game streaming that I have ever experienced. Like I have long said that Parsec when it is working well is like sitting at the machine and controlling the games… but that is a lie. Even when it is working best, there are always some telltale signs in games that I am connected remotely and streaming. Last night while playing through Moonlight it legitimately did feel like I was upstairs playing at the keyboard when instead I was down on my laptop. I played a bunch of different games last night but at some point during the evening I started playing Generation Zero. The above screenshot is taken from the laptop of the game client running over Moonlight and there is no artifacting going on in the rain.

I played quite a bit of Outriders as well and it was so smooth and responsive. Like I think I had just gotten used to the subtle lag that Parsec added to the gameplay experience and don’t get me wrong… Parsec was better than anything I had tried up to that point. Moonlight was just a whole other level of smoothness and I think I could even probably do competitive modes in Destiny 2 through this connection. I remember it lagging three times during the entire night and even then it was only for a second before immediately returning control. I am not sure if Nvidia Gamestreaming has something built in to handle this, but it felt like the game just paused for a second before giving me access again rather than the game continuing running in the background and then having to deal with overcorrection by my character continuing along whatever path they were moving before the lag.

As much as I have loved Parsec these last three years, I think I might have a new main squeeze. As I said before these screenshots were grabbed via Fraps that just happened to be running on the laptop since I used to use that for game capture. Parsec does this thing where it intercepts a number of buttons and keeps them from being intercepted on the client machine, which is what stops voice chat from working but this also stopped me from capturing screenshots of what the Parsec client looked like performance wise. So unfortunately I don’t have any good examples of it artifacting out on me, but I am hopeful that maybe just maybe I can get voice chat working once again while on my laptop downstairs. This has been a huge source of disconnection for me because so often when I am just wanting to chill out I am on the laptop which prevents me from using it.

I will of course keep sharing my thoughts as I get used to Moonlight. I want to try a number of the other platforms like streaming games from my phone with the client. I will obviously report my findings in later posts.

2 thoughts on “Moonlight Game Streaming”

  1. Have you tried the Steam Link app on the Android TV store? My wife uses it fairly regularly and it works perfectly for her. Granted the signal only needs to go about 20 feet through only one wall.

    I suspect it should be capable of streaming large amounts of data. I use a physical Steam Link box to stream my VR play to the upstairs TV so my wife can watch, and it seems to do so without minimal artifacting and no lag.

    • I’ve actually got a physical steam link box, I never ended up setting it up. Got it for free with some game purchase on Steam eons ago. I should play with that as well.

Comments are closed.