Skip to content

[Help] Gstreamer won't load videos for non-Steam games in the standalone Runtime container unless I set STEAMVIDEOTOKEN #829

@forgotthepen

Description

@forgotthepen

Hello, first I acknowledge this isn't an issue, just a help request given how niche it is.
Please feel free to close this any time.

I migrated to Linux some recent years ago and started to dig my way through making everything standalone whenever I gain new knowledge, the relevant part is that I want to run my non-Steam games using the steam container runtime but without the full Steam client.

I don't know how to set ths env var STEAMVIDEOTOKEN, and its actual value is some random number + a UID, and there seems to be no docs for it, so I wanted to ask how should I set this?

The long story is that I've been using the non-Steam games feature of the store for quite some time now, but I stumbled upon this magnificent dev guide Launching non-Steam games in a Steam Linux Runtime container which does exactly what I really needed for a long time since all other online stores are really bad on Linux and without official support.

I noticed that all in-game videos are playing the fallback RGB-test video, and GStreamer log always shows failure loading opus plugin

0:00:00.007230065 71603 0xcda8d4f0 WARN                    WINE unixlib.c:124:find_element_factories: Failed to find any element factory matching type 64x, caps audio/x-opus, layout=(string)interleaved, rate=(int)48000, channels=(int)2, channel-mask=(bitmask)0x0000000000000003, codec_data=(buffer)4f707573486561640102380180bb0000000000, channel-mapping-family=(int)0, block_align=(int)0, depth=(int)0, bitrate=(int)0 / audio/x-opus, parsed=(boolean)true.

But if I run the same non-Steam game inside the Steam client all videos work.
To debug this, first I spawned a shell inside the container

PRESSURE_VESSEL_SHELL=instead %command%

And tried to mimic what proton does manually by prepending ubuntu12_32/video/ and Proton 11.0/files/lib/i386-linux-gnu/ dir to LD_LIBRARY_PATH and ran something this to make sure the .so files will load

ldd '<PROTON_PATH>/files/lib/i386-linux-gnu/gstreamer-1.0/libgstopus.so' | grep -i found

This works fine and to confirm it, I removed the LD_LIBRARY_PATH override and got some failure, so next I dumped all env vars to compare them against my bare environemnt

And also modified proton script to dump all env vars before spawning wine

    ...
    g_session.init_session(sys.argv[1] != "runinprefix")

    # custom code BEGIN
    with open('/home/myuser/Desktop/py-proton.json', 'w', encoding='utf-8') as fff:
        fff.write(json.dumps(g_session.env, indent=2, sort_keys=True, ensure_ascii=False))

    # custom code END

    #determine mode
    rc = 0
    if sys.argv[1] == "run":
    ...

And what I discovered eventually is that this env var STEAMVIDEOTOKEN is what makes the ffmpeg plugins which live in ~/.steam/steam/ubuntu12_*/video/ load properly and finally the videos work without the Steam client.
Adding a dummy value to this env var doesn't work and I can't find any dev docs for it.

Any guidance would be appreciated.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions