HeroicGamesLauncher
HeroicGamesLauncher copied to clipboard
MP4 video does not play on Flatpak
Describe the bug
When trying to run applications from the Heroic Launcher on Flatpak, video does not play. This might be because it lacks the OpenH264 extension for the Freedesktop SDK or some other alternative.
Add logs
winegstreamer error: decodebin0: Your GStreamer installation is missing a plug-in.
winegstreamer error: decodebin0: ../src-gst_base/gst/playback/gstdecodebin2.c(4719): gst_decode_bin_expose (): /GstBin:bin0/GstDecodeBin:decodebin0:
no suitable plugins found:
Missing decoder: MPEG-4 AAC (audio/mpeg, mpegversion=(int)4, framed=(boolean)true, stream-format=(string)raw, level=(string)2, base-profile=(string)lc, profile=(string)lc, codec_data=(buffer)1190, rate=(int)48000, channels=(int)2)
Missing decoder: H.264 (Main Profile) (video/x-h264, stream-format=(string)avc, alignment=(string)au, level=(string)4.1, profile=(string)main, codec_data=(buffer)014d4029ffe10019674d4029965280f0044fcb2901010140000003004000000f2101000568e9093520, width=(int)1920, height=(int)1080, framerate=(fraction)30/1, pixel-aspect-ratio=(fraction)1/1)
Steps to reproduce
- Run a program which plays MP4 videos - in this case, Moonlighter
- Let the program fail playback, e.g. showing a blank screen
Expected behavior
Video plays as intended
Screenshots
No response
System Information
- OS: SteamOS 3, build 20220227.3
- Heroic Version: 2.2.6 (Flathub)
Additional information
No response
Are you sure this game runs fine on the non-flatpak version?
Can confirm the issue. will try to fix for next release.
Tried several configs and could not make this game run. Tried openH264
and org.freedesktop.Platform.ffmpeg-full
as well, without success.
I wonder why other games runs just fine like Outer Worlds for instance.
Tried with Proton-GE and Wine-ge but Moonlighter doesn't show any video, while on the AppImage it works fine.
do you have any other idea?
I suspect other software working might be due to using their own codecs instead of relying on DirectShow. As for why openH264 doesn't work: I made a custom build of the Flatpak and found out the same issue, and it doesn't seem like wine64
locates the libraries at all, despite proper usage of add-ld-path
. My experience is limited here, but it might be because the Flatpak extensions do not contain 32-bit builds of their respective libraries, only 64-bit ones.
Yes, I suspected that as well so I added both 64 and 32 bits, and still didn't work. I did just like the Steam Flatpak is doing and no luck. I will try asking around a bit since I am also not a flatpak expert.
I would give a soldier runtime a try @flavioislima. It provides needed libraries in it's own container.
Hmm, yes. I just don't know if we can implement it until the next release or if we could do it in a 2.3.1 in a couple of weeks. We could try.
Any updates on this? Still running into this issue on Flatpack Heroic version: 2.4.1
Have any work arounds been found for this struggling with the issue?
might be fixed with #1852
Still observed with 2.5.0. (Note: I had to switch to Proton 7 from Proton Experimental, since Proton Experimental fails to start entirely, claiming the Proton version is not found.)
Full logs indicate the problem more clearly, shared objects missing from the perspective of the flatpak, probalby due to a missing LD_LIBRARY_PATH:
Launch Command: STEAM_COMPAT_CLIENT_INSTALL_PATH=/home/deck/.var/app/com.heroicgameslauncher.hgl/.steam/steam STEAM_COMPAT_DATA_PATH="/run/media/mmcblk0p1/Heroic/Prefixes/Deliver Us The Moon" PROTON_NO_ESYNC=1 PROTON_NO_FSYNC=1 STEAM_COMPAT_APP_ID=0 SteamAppId=0 SteamGameId="heroic-Deliver Us The Moon" PROTON_LOG_DIR=/home/deck/.var/app/com.heroicgameslauncher.hgl /app/bin/heroic/resources/app.asar.unpacked/build/bin/linux/gogdl launch "/run/media/mmcblk0p1/Heroic/Deliver Us The Moon" 1395742506 --no-wine --wrapper "'/home/deck/.local/share/Steam/steamapps/common/Proton 7.0/proton' run" --platform windows
Game Log:
wineserver: using server-side synchronization.
wine: RLIMIT_NICE is <= 20, unable to use setpriority safely
[S_API] SteamAPI_Init(): SteamAPI_IsSteamRunning() did not locate a running instance of Steam.
[S_API FAIL] SteamAPI_Init() failed
(wine:474): GStreamer-WARNING **: 13:55:36.900: Failed to load plugin '/home/deck/.local/share/Steam/steamapps/common/Proton 7.0/dist/lib64/gstreamer-1.0/libgstlibav.so': libavfilter.so.7: cannot open shared object file: No such file or directory
(wine:474): GStreamer-WARNING **: 13:55:36.946: Failed to load plugin '/home/deck/.local/share/Steam/steamapps/common/Proton 7.0/dist/lib64/gstreamer-1.0/libgstvpx.so': libvpx.so.5: cannot open shared object file: No such file or directory
(wine:474): GStreamer-WARNING **: 13:55:36.982: Failed to load plugin '/home/deck/.local/share/Steam/steamapps/common/Proton 7.0/dist/lib/gstreamer-1.0/libgstlibav.so': /home/deck/.local/share/Steam/steamapps/common/Proton 7.0/dist/lib/gstreamer-1.0/libgstlibav.so: wrong ELF class: ELFCLASS32
(wine:474): GStreamer-WARNING **: 13:55:36.983: Failed to load plugin '/home/deck/.local/share/Steam/steamapps/common/Proton 7.0/dist/lib/gstreamer-1.0/libgstvpx.so': /home/deck/.local/share/Steam/steamapps/common/Proton 7.0/dist/lib/gstreamer-1.0/libgstvpx.so: wrong ELF class: ELFCLASS32
winegstreamer error: decodebin0: Your GStreamer installation is missing a plug-in.
winegstreamer error: decodebin0: ../src-gst_base/gst/playback/gstdecodebin2.c(4719): gst_decode_bin_expose (): /GstBin:bin0/GstDecodeBin:decodebin0:
no suitable plugins found:
Missing decoder: H.264 (Main Profile) (video/x-h264, stream-format=(string)avc, alignment=(string)au, level=(string)4, profile=(string)main, codec_data=(buffer)014d4028ffe10027674d4028965200f0044fcb80a840000003004000000f38980002dc6c0000927c3f18e0ed0c18c901000468eb7352, width=(int)1920, height=(int)1080, framerate=(fraction)30/1, pixel-aspect-ratio=(fraction)1/1)
Missing decoder: MPEG-4 AAC (audio/mpeg, mpegversion=(int)4, framed=(boolean)true, stream-format=(string)raw, level=(string)2, base-profile=(string)lc, profile=(string)lc, codec_data=(buffer)1190, rate=(int)48000, channels=(int)2)
winegstreamer error: decodebin1: Your GStreamer installation is missing a plug-in.
These are indeed found in the Soldier runtime, specifically in its current container temp dir. Either we need to use Soldier (which is another container inside a Flatpak, dunno how well that works), or we need to find the right temp dir and pass in a suitable LD_LIBRARY_PATH, which might change as Soldier changes.
Hm, resetting LD_LIBRARY_PATH won't help: with Proton (7.0 at least) doing that without setting up the rest of Soldier results in a failure because a DX11-capable GPU is not found, probably because we pick up Mesa from there but things like the Vulkan icds aren't where the container would expect to find them.
Even Proton-GE fails. No codec messages, but all I get from intro video playback in Deliver Us The Moon is the same black screen.
OK so I tried using run-in-soldier, but a) /app is not preserved even when using PRESSURE_VESSEL_FILESYSTEMS_RO, so gogdl can't be found, b) /usr/share/vulkan/icd.d is missing in the Heroic flatpak, so Vulkan isn't going to work for anything it runs as long as that is true, and c) even if that was there, run-in-soldier drops the entirety of /usr/share/vulkan from its subcontainer so nothing is going to work at all.
This is the fifth bug I've hit in Heroic trying to get one game to download and run. Has anyone ever actually made this thing work on the Steam Deck? How?
OK so for other Steam Deck users, it seems like the right way to avoid all this is to use the Heroic Launcher strictly as a downloader (for GOG games anyway), and set them up in Steam directly, letting Steam run Proton and all the rest of it. The result works perfectly (and perhaps the Heroic Launcher should set up such Steam links for you). I don't know why a custom launcher is even needed for running a specific Windows game from Steam: Steam already has all the necessary nightmarish magic for doing exactly that without a launcher interposing itself.
This is the fifth bug I've hit in Heroic trying to get one game to download and run. Has anyone ever actually made this thing work on the Steam Deck? How?
I think a lot of people uses Heroic on the deck without issues. Me included and that's why everyone recommends it for Epic and GOG games. It is perfect? definitely not. we spend hours and hours every week working for free trying to figure out everything for the end user just click install and play without the need of tinkering. Unfortunately, things will not always work as we wanted them to.
that's why you can use Steam, Bottles, Lutris, Gamehub, or any other launcher, even your own scripts instead. Sometimes some will behave better than others. And you heroic for the games that work there, or you can ofc do not use it at all as well. It is a matter of choice.
And about the issue, we will continue to investigate in the future, I can confirm I still have it on 2.5.0, so probably the environmental variables that we added to point to the gst-plugins are not working properly.
The problem is that Debugging the flatpak is a pain and takes a lot of time.
Oh hell yes: I was just a bit surprised that there were this many gamestopping bugs doing something as simple as a download-and-run: I'd have expected the more obvious ones to have been fixed by now. I understand that I deserve to get exactly everything I paid for, which is nothing :)
I have managed to work around more or less everything now by writing my own one-liner scripts to invoke dosbox (where necessary) or run Proton directly from Steam, so I'm happy now. And yes, writing your own scripts is what this sort of emulation is all too often all about! I was just hoping I didn't have to do it by hand for >250 games, is all :/ guess I'll be writing a bit of automation to write those from a template or something.
Debugging the flatpak wasn't that horrible for me once I figured out that flatpak enter still doesn't work and you have to do it by using flatpak run --command=/bin/bash instead, but handling the flatpak's interaction with Soldier's different container approach and containers-inside-containers is making my head spin a bit.
Oh hell yes: I was just a bit surprised that there were this many gamestopping bugs doing something as simple as a download-and-run: I'd have expected the more obvious ones to have been fixed by now. I understand that I deserve to get exactly everything I paid for, which is nothing :)
I have managed to work around more or less everything now by writing my own one-liner scripts to invoke dosbox (where necessary) or run Proton directly from Steam, so I'm happy now. And yes, writing your own scripts is what this sort of emulation is all too often all about! I was just hoping I didn't have to do it by hand for >250 games, is all :/ guess I'll be writing a bit of automation to write those from a template or something.
Debugging the flatpak wasn't that horrible for me once I figured out that flatpak enter still doesn't work and you have to do it by using flatpak run --command=/bin/bash instead, but handling the flatpak's interaction with Soldier's different container approach and containers-inside-containers is making my head spin a bit.
also the app image is a thing if you want to use that
Issue still present on 2.9.1 Tried adding shortcut manually on steam to the installed .exe even, still black screen with Proton Experimental & Proton 8
How about Wine-GE, almost in every case I tried Wine-GE works better than proton for those videos
That's my setting on Heroic, but that doesn't work. With the shortcut in steam workaround I can only select proton, unless I'm missing something
I was having this issue with any wine-ge version newer than 8-15. They worked with that version but not with anything newer.
I think I just stumbled across a fix/workaround for this issue.
In a desperation of trying different settings whether they seemed like they would make a difference or not, I selected "prefer system libraries" for the game and tested wine-ge-8-22 (I had previously tested all the version of wine ge between 8-15 and 8-22) The video is now playing in the one game I have that has been an issue (remothered broken porcelain)
Not sure why it worked, as the flatpak version would not need that one would think, but maybe one of the flatpak runtimes includes a lib that is needed to allow newer wine-ge to play the videos.
Could anyone else verify that this is working with wine-ge 8-16 and up?
FYI: all the bugs affecting me were fixed some time ago, and the autogenerated launchers work well. But then I'm not using wine-ge...