Steam

Steam

Not enough ratings
[SIH] Essentials & Workarounds
By Hewis.Lamilton
This guide helps you setting up Steam Inhome-Streaming in a comfortable way.
   
Award
Favorite
Favorited
Unfavorite
Introduction

Since 22nd May 2014 Steam Inhome-Streaming (referred to as "SIH") is available to all Steam-Users. SIH relies on a framework called Moonlight[moonlight-stream.com] and is capable of streaming your games to any of your devices, which can run the Steam-Client and have a dedicated GPU. (iGPU, Nvidia, AMD)

Depending on your home-network, your host-machine (Steam Machine), used codecs, resolution and fps, SIH adds an input-lag of 10-20ms (milliseconds). You won't notice lags most of the time if you set up everything correctly. Here we got one reason for creating this guide. Another problem which could even be complicated to experienced users, is setting up everything in a comfortable way, so you won't even need to plug in a monitor into your host-machine or get to your host-machine at all to start it or shut it down. The holy grail would be to set up a headless host-machine with only 2 cables plugged in. (power-cable, lan-cable) This said, this guide isn't for SteamLink-Users who mostly got all of the features I will describe in this guide.

For the host-machine this guide expects you to run Windows, since it's still the No.1 OS to run all your games. For the client-machine this guide expects you to run Linux or Windows.

Setup

Before you start to use this guide, here are some expectations:
  • You're running Windows 7/8/8.1/10 (referred to as OS) on your host-machine
  • You've Steam and your OS installed on drive C:\ on your host-machine
  • You've created a folder C:\sih\
  • Mostly this guide isn't meant for SteamLink-Owners/-Users
Essential Programs
Like the title says, here is a list of essential programs you'll probably need on your host-machine (assuming you'll only use it as a "Steam Machine"):

- 7zip[7-zip.org] (can pack and unpack a lot of different archive-formats)
- Notepad++[notepad-plus-plus.org] (powerful editor you'll probably need at some point)
- ClassicShell[www.classicshell.net] (for Windows 8 & 8.1 users)
General Settings - Steam
Some of these settings like encoding/decoding and choosing the bandwidth needs some testing. It is useful to activate performance statistics when you setup your configurations to find the best experience for yourself.

Host
  • obviously activate Steam Inhome-Streaming
  • activate Hardware-Encoding if available (also see the Codec-section)
  • use client resolution
  • start Steam with Windows
  • set up prioritized network-transfer if you've a stable and fast connection (LAN to LAN)

Client
  • obviously activate Steam Inhome-Streaming
  • activate Hardware-Decoding if available (also see the Codec-section)
  • use client resolution
  • start Steam with OS
  • set bandwidth to unlimited if you've a stable and fast connection (LAN to LAN)
General Settings - Windows
Auto-Login

You want your host-machine to automatically log into your user-account when you start it? Just follow the tutorial below to enable auto-login or visit WikiHow[www.wikihow.com]. (the account is still protected by a password if you set it up this way)


Turn off UAC

You want to turn off your UAC (User-Account-Control) to avoid UAC-Popups while streaming? Just follow the tutorial below or visit WikiHow[www.wikihow.com] for further explanations.
Codecs
This part could be tricky, especially for people who are using Linux as their client. The following table lists the best codecs your machines should use, depending on your OS, GPU and CPU. Sadly I don't have any experience on what encoder/decoder should be used in combination with AMD's new Ryzen-CPUs and will leave the fields blank, until I get some feedback.

OS
GPU
CPU
Encoding
Decoding
Thread
Windows
Nvidia
Intel
D3D11 + NVIFR
to be added
Windows
Nvidia
AMD
-/-
-/-
Windows
AMD
Intel
D3D11 NV12 + libx264
D3D9 NV12 + libx264
to be added
Windows
AMD
AMD
-/-
-/-
Windows
none
Intel
to be added
to be added
Windows
none
AMD
-/-
-/-
Linux
Nvidia
Intel
to be added
VAAPI hardware decoding
Linux
Nvidia
AMD
-/-
-/-
Linux
AMD
Intel
to be added
VAAPI hardware decoding
Linux
AMD
AMD
-/-
-/-
Linux
none
Intel
to be added
VAAPI hardware decoding
Linux
none
AMD
-/-
-/-

To sum this table up, I'm quoting a VALVe employee from this thread:
Originally posted by henryg:
QuickSync on anything older than a 4xxx series Intel CPU is not performing very well. We should probably disable it by default if we detect this type of CPU on the host.

In general, Software Encoding is the best possible quality, but it takes some CPU cycles away from the game. NVENC (NVIDIA) and QuickSync (Intel) are on by default because most systems that support them can do so with pretty decent quality, and they do not use as many CPU cycles.

If Software Encoding does not slow down your game too much, then it is always the best choice.

I can share the experience, that Intel's QuickSync aka Hardware-Decoding/-Encoding with iGPU is faster than Decoding/Encoding with AMD GPU. Several users also report QuickSync is faster than Nvidia's Hardware-Decoding/-Encoding. For Linux-Clients with Intel-CPU we need to install additional software to use the "VAAPI Hardware Decoding" for which I included links to in the table. Above are just recommendations of myself or others, which works best for a lot of people at this point. (15.06.17 - dd/mm/yyyy)
Remote-Control
work in progress
Remote-Desktop
Windows RDP-Connection

Windows has a built-in Remote-Connection-Tool which you need to set up directly on your host-machine first. Since there could be a lot you've to keep in mind, I'll just link to some tutorials:
To connect to your host-machine via RDP you could use the client "Remotedesktop-Connection" on Windows and for Linux clients like Remmina[wiki.ubuntuusers.de].

Windows RDP - Shortcuts (Taskbar)



This part is important if you use RDP to connect to your host-machine, especially if you just want to close the connection. If you close an RDP-connection Windows doesn't automatically resumes the current session and this way you're not able to stream any game to your client. We need to set up some shortcuts, which we can attach to our taskbar. Here[www.wikihow.com] I will link to a tutorial on how to create shortcuts.

This question[superuser.com] gives you two explanations on how to create the needed shortcut, which you can put in your taskbar and click when you want to close the RDP-Connection. A description on how to create desktop-shortcuts is included. Since the second approach (by Kim) works in all cases, I'm just explaining this one here.

Resume Session
⛙ Shortcut
······························································································································

1. create a file named "resume.bat" under "C:\sih\" (don't save it as textfile [.txt]!)
2. open the file and copy the following content into and save it:
for /f "skip=1 tokens=3 usebackq" %%s in ( `query user %username%` ) do ( %windir%\System32\tscon.exe %%s /dest:console )
3. create a shortcut and set the following as location:
C:\Windows\System32\cmd.exe /C "C:\sih\resume"

Restart
⛙ Shortcut
······························································································································

1. create a shortcut like for "Resume Session"-Shortcut
2. as location enter the following code:
C:\Windows\System32\shutdown.exe /r /t 0

Shutdown
⛙ Shortcut
······························································································································

1. create a shortcut like for "Resume Session"-Shortcut
2. as location enter the following code:
C:\Windows\System32\shutdown.exe -s /t 0

Other Remote-Desktop Software

There are plenty of other Remote-Desktop-Clients which you can use to connect to your host-machine. You probably want to set up a static and strong password within these clients on your host-machine and add them to autostart. More or less obviously you have to install these clients on the host- and client-machine.

Currently I prefer Anydesk, because there are no Ads or Popups (compared to TeamViewer) yet and you can even run the free version for as long as you want. Additionally I tested nomachine lately and it is fast, reliable and very easy to connect to, because it uses Windows Login-Credentials and can find machines on your network with running Nx-Servers (nomachine uses the NX-Protocol) on its own.

I think there is no tutorial needed on how to set up those clients, since their settings are self-explanatory. For Anydesk and Teamviewer there are portable clients which doesn't include all functions. I recommend to actually install those clients. If your client-machine runs on Linux you could use Remmina to connect via VNC to your host-machine - maybe you have to install additional plugins for Remmina. For me VNC is very slow compared to other protocols and Anydesk was a good alternative. There are also Linux-Clients for the other mentioned RemoteDesktop-Clients.


Sound
The following informations seem to be outdated, since Steam added drivers for input and sound recently. (Nov 2017 afaik) The following tweaks can still be used as workarounds.

The following steps are only needed if you want to have sound without plugging in speakers or headphones while streaming. Every recent motherboard should have its built-in soundcard which we can use for the following steps. There are different approaches, probably the first one is the easiest for you, if your mainboard has a Realtek-Soundcard.

Deactivate JackSense (Realtek Sound-Manager)

Probably Windows already installed your soundcard-drivers, if not you should install them first. Then right-click the speaker-symbol (red box) and open "Sound-Manager" by left-clicking.


Now in the Sound-Manager window click the yellow folder (arrow) to open the dialog for deactivating the JackSense.



Finally tick the checkbox for deactivating JackSense and hit OK. Now when you click on the volume-icon on your taskbar, you should be able to adjust the volume. You should be done!



Just for the completeness: I tried to track down which registry-keys got changed when deactivating JackSense via Sound-Manager, below are the paths to the changed keys. The keys get changed from "FF C6 40 00" to "7F C6 40 00" when deactivating JackSense and if one of the keys get changed, the other key gets changed too. Sadly for me it wasn't enough to change these keys to deactivate JackSense.

HKLM\SYSTEM\ControlSet001\Control\Class\{4d36e96c-e325-11ce-bfc1-08002be10318}\0009\Settings\JackCtrl: FF C6 40 00 HKLM\SYSTEM\ControlSet001\Control\Class\{4d36e96c-e325-11ce-bfc1-08002be10318}\0009\Settings\JackCtrl: 7F C6 40 00 HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e96c-e325-11ce-bfc1-08002be10318}\0009\Settings\JackCtrl: FF C6 40 00 HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e96c-e325-11ce-bfc1-08002be10318}\0009\Settings\JackCtrl: 7F C6 40 00




Deactivate JackSense (Registry)

This approach seems to only work on Windows 7 and not for all sound-cards.
(thx to byteframe for this tip, if you want to know more refer to superuser[superuser.com])

Since we want to edit the registry we have to open the Registry-Editor first, by searching for "regedit" or using the shortcut ❖ Win + R. If you don't know how to open the registry-editor, refer to this tutorial[www.wikihow.com].

Now you just need to unfold some folders until you get to the following path:
HKLM\SYSTEM\ControlSet001\Control\Class\{4d36e96c-e325-11ce-bfc1-08002be10318}\

If you've done it right, your folder-tree should look like this now:



There are several folders with names like "0000", "0001", "0002" and so on, of whom some have a sub-folder "GlobalSettings", which for themself should have a key with the name "EnableDynamicDevices".

You need to set this key from "01 00 00 00" to "00 00 00 00" by just right-clicking on the key, clicking "change binary data", replacing the 1 with 0 and saving the key. I can't tell you which folder is the right one, but most users who report this worked for them, changed the key for:

HKLM\SYSTEM\ControlSet001\Control\Class\{4d36e96c-e325-11ce-bfc1-08002be10318}\0000\GlobalSettings\EnableDynamicDevices or HKLM\SYSTEM\ControlSet001\Control\Class\{4d36e96c-e325-11ce-bfc1-08002be10318}\0003\GlobalSettings\EnableDynamicDevices

Restart you pc and you should be able to adjust the volume now.


Install virtual sound-card (VB cable)

This approach is more easy than the ones before, but adds additional software to your system. Just visit VB Cable Homepage[vb-audio.pagesperso-orange.fr], scroll down to the section "VB-Audio Virtual Cable" and click the Download-Button.

Now just execute the Install and after completing restart your pc. You should have a new soundcard "CABLE input" now and you should be able to adjust the volume.


Known Problems & Solutions
This section covers bugs and "common behaviour" while using SIH and provides you with solutions on how to avoid or fix them.

The RDP-Problem (crashing programs, failing installations, ...)

Problem
Some users should've noticed, that the built-in RDP-Feature of Windows uses its own drivers for display, sound and inputs. In my experience a new user isn't aware of this situation and expects all programs to work as usual. But to give you some examples which programs have problems with RDP-Sessions:
  • the AMD-ControlCenter can't detect your GPU, since you're just using a "virtual gpu-driver"
  • the GOG-Client crashes continously when started via RDP
  • lots of installations partially or if not at all fail to install the specific software
Solution
Use other clients like Teamviewer, Anydesk, VNC to connect to your host-machine.

Mouse is visible, but can't be moved

Problem
The mouse is visible while streaming, doesn't visibly move, but interacts with the UI.
Solution
Probably you don't have a mouse plugged into your host-machine. Use Windows built-in feature "Mouse keys" to fix this problem for a lot of games.

Mouse is visible, but doesn't interact with GUI

Problem
The mouse is visible, can even have an ingame-cursor, but doesn't interact with GUI.
Solution
Some games, like Resident Evil 7, are optimized for consoles/controllers and just have a bad integration of input-driver. Other games are using a Desktop-Codec + NVxx while streaming and appear to not being started in fullscreen. In my experience the last problem was due to faulty installation and reinstalling the game fixed it for me. Also, streaming with a Desktop-Codec makes the Stream much worse.

Installing VAAPI-Support on Linux (Intel)

Problem
VAAPI doesn't seem to work for ArchLinux and Ubuntu derivates even after symlinking the correct libraries.
Solution
This topic is complex and there is no easy solution, but I were succesfull by installing the following packages under ArchLinux:

yaourt -S libva libva-intel-driver libva-mesa-driver libva1 libva1-intel-driver lib32-libva lib32-libva-intel-driver lib32-libva1 lib32-libva1-intel-driver

And then symlinking the following libraries to the steam-runtime:
sudo ln -s /usr/lib32/libva1/libva-x11.so ~/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libva-x11.so.1 sudo ln -s /usr/lib32/libva1/libva-glx.so ~/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libva-glx.so.1 sudo ln -s /usr/lib32/libva1/libva.so ~/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libva-so.1
Alternatives to SIH
Since the market of Games as a service starts to grow bigger and there are even servers to rent, from whom you can stream your games, the applications to stream your games from your very own "Cloud"-PC also became more. SIH has its pros and cons and I'm still using it, but there are so much different setups out there, that some people might prefer other applications over SIH.

The following list is probably incomplete and I'm not advertising them, I just want to give you a heads up, of what is possible:

parsec[ui.parsecgaming.com]
rainway[rainway.io]
paperspace[www.paperspace.com]
NVidia Shield[www.nvidia.com]
GEFORCE NOW [Beta][www.nvidia.com]
LiquidSky[gaming.liquidsky.com]
shadow[shadow.tech]
{LINK REMOVED}
simplay[www.simplay.io]
Summary
This guide can be kinda outdated, since I set it up in 2017 and now releasing it in 2018 for public use. Some areas needs to get worked on in the future or if I find more culprits. But most importantly I set this guide up for myself, since I had a hard time to set up SIH correctly everytime I had to reinstall my host or client. That said, I'm not experienced with Steam Link in example and I'm a bit biased, since I use Linux as client - which causes more problems than Windows. So yeah, this guide covers more Linux problems than Windows problems. Feel free to contribute your experiences or just give me some feedback on what I could optimize or add. Thanks for your reading!