Manjaro - Use Steam In-Home Streaming with HW-Decoding on nvidia GPU

Currently I am pulling my hair out because I can’t figure out how to enable HW decoding in Steam on my Manjaro system with an nvidia GPU. It always defaults back to software decoding. To test if it is an issue with my setup: I have Manjaro also installed on PC1 and tried streaming from a third Windows PC to it but even with the GTX 1080 in PC1 it defaults to SW decoding. Edit: The only PC with working HW decoding in Steam is my old HP Probook 6570 with a Intel GPU.

What I am trying to do:
In-Home Streaming from Windows 10 PC (Source) to my Manjaro Linux PC (Target). Encoding and decoding should be done in hardware on client and source to reduce bandwidth and latency.

PC 1 (Source):
Intel i7 8700K
16GB RAM
Geforce GTX 1080
Windows 10 Pro
Hardware Encoding is working (according to the performance-overlay)

PC 2 (Client)
Intel i5 3570K
8GB RAM
Geforce GTX 660 Ti
Linux Manjaro 18.0.4
Kernel: Linux 4.19.36-1-MANJARO
I am using the propiarty nvidia driver

What I tried:

  1. Installing the lib32-libva1 and libva1 libaries
  2. Verifing that Steam uses the system libraries with “pgrep steam | xargs -I {} cat /proc/{}/maps | grep libva”. Indeed it uses the libraries in /usr/lib32/libva1
  3. Making sure HW Acceleration is checked in Steam (Client option)
  4. Making sure video acceleration is running. vainfo gives me following output:
    “vainfo: VA-API version: 1.4 (libva 2.4.1)
    vainfo: Driver version: Splitted-Desktop Systems VDPAU backend for VA-API - 0.7.4
    vainfo: Supported profile and entrypoints
    VAProfileMPEG2Simple : VAEntrypointVLD
    VAProfileMPEG2Main : VAEntrypointVLD
    VAProfileMPEG4Simple : VAEntrypointVLD
    VAProfileMPEG4AdvancedSimple : VAEntrypointVLD
    : VAEntrypointVLD
    VAProfileH264Main : VAEntrypointVLD
    VAProfileH264High : VAEntrypointVLD
    VAProfileVC1Simple : VAEntrypointVLD
    VAProfileVC1Main : VAEntrypointVLD
    VAProfileVC1Advanced : VAEntrypointVLD”

When I start steam in a console I get following output:
“ffmpeg verbose: Opened VA display via X11 display :0.
ffmpeg error: Failed to initialise VAAPI connection: -1 (unknown libva error).
CVAAPIAccel: av_hwdevice_ctx_create() failed”

So it seems it failed to start HW decoding and falls back to software. The same happens on both PCs which have fresh Linux installs. Googling, I couldn’t find that there is general problem with nvidia and Manajro/Arch and HW decoding in Steam - Most of the issues reported are from 2015 or earlier. I hope somebody can point me in the right direction.

Looks like this is your problem. You probably aren’t using the steam runtime, which is a chrooted jail with all the library versions that steam requires.

According to the Steam - System information window the runtime is enabled - Steam Runtime Version: “jenkins-steam-runtime-beta-release_0.20190320.2”. In the issue above from the user shoober the system.txt reported “Steam Runtime Version: disabled”. I did not modify the Steam installation or put symlinks in it. But I’ll try reinstalling it.

Ahh. Also try installing the older libva version.

So I reinstalled steam. Removed the .steam folder in my user folder. But HW decoding is still not working with nvidia HW in Steam. Unfortunately older libva versions aren’t available (unless I want to replace the driver by hand which I am not to keen to do). Edit: I also tried removing all libva libraries from my system, testing without it (steam uses its own libraries then) and readding them. Didn’t help.

I am near giving up and simply let a small VFIO Windows VM handle this task for this particular machine.