Heroic-Games-Launcher / HeroicGamesLauncher

A games launcher for GOG, Amazon and Epic Games for Linux, Windows and macOS.
https://heroicgameslauncher.com
GNU General Public License v3.0
8.04k stars 422 forks source link

MP4 video does not play on Flatpak #1291

Open xerz-one opened 2 years ago

xerz-one commented 2 years ago

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

  1. Run a program which plays MP4 videos - in this case, Moonlighter
  2. Let the program fail playback, e.g. showing a blank screen

Expected behavior

Video plays as intended

Screenshots

No response

System Information

Additional information

No response

flavioislima commented 2 years ago

Are you sure this game runs fine on the non-flatpak version?

flavioislima commented 2 years ago

Can confirm the issue. will try to fix for next release.

flavioislima commented 2 years ago

Tried several configs and could not make this game run. Tried openH264 and org.freedesktop.Platform.ffmpeg-fullas 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?

xerz-one commented 2 years ago

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.

flavioislima commented 2 years ago

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.

imLinguin commented 2 years ago

I would give a soldier runtime a try @flavioislima. It provides needed libraries in it's own container.

flavioislima commented 2 years ago

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.

nthansen commented 2 years ago

Any updates on this? Still running into this issue on Flatpack Heroic version: 2.4.1

Arakynn commented 2 years ago

Have any work arounds been found for this struggling with the issue?

Etaash-mathamsetty commented 2 years ago

might be fixed with #1852

nickalcock commented 1 year ago

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.)

nickalcock commented 1 year ago

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.

nickalcock commented 1 year ago

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.

nickalcock commented 1 year ago

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.

nickalcock commented 1 year ago

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?

nickalcock commented 1 year ago

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.

flavioislima commented 1 year ago

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.

nickalcock commented 1 year ago

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.

Etaash-mathamsetty commented 1 year ago

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

Karrq commented 1 year ago

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

imLinguin commented 1 year ago

How about Wine-GE, almost in every case I tried Wine-GE works better than proton for those videos

Karrq commented 1 year ago

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

doogie544 commented 11 months ago

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?

nickalcock commented 11 months ago

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...