safijari / decky-recorder-fork

Other
48 stars 13 forks source link

[BUG] GStreamer version mismatch will cause Recorder to silently fail #25

Open lonkelle opened 10 months ago

lonkelle commented 10 months ago

This occurs every time a user updates Decky Recorder and the GStreamer version library is changed or every time a user updates SteamOS and the GStreamer version library is changed.

Maybe dynamically loading this library will fix the issue?

@siglmf - "SteamOS includes GStreamer and Decky Recorder includes some additional libraries for that, and if there is a version mismatch between those, then recording will fail silently. Decky Recorder just starts the gst-launch-1.0 process (which fails immediately), and then it never checks the status of that process (until after you stop the recording), so it does not notice or report any issue."

0:00:00.002044135  5821 0x55c7c9ffb800 WARN      GST_PLUGIN_LOADING gstplugin.c:491:gst_plugin_register_func: plugin "/home/deck/homebrew/plugins/decky-recorder/bin/gstreamer-1.0/libgstsbc.so" has incompatible version (plugin: 1.22, gst: 1.20), not loading
0:00:00.003126953  5821 0x55c7c9ffb800 WARN      GST_PLUGIN_LOADING gstplugin.c:491:gst_plugin_register_func: plugin "/home/deck/homebrew/plugins/decky-recorder/bin/gstreamer-1.0/libgstcodecalpha.so" has incompatible version (plugin: 1.22, gst: 1.20), not loading
0:00:00.004118218  5821 0x55c7c9ffb800 WARN      GST_PLUGIN_LOADING gstplugin.c:491:gst_plugin_register_func: plugin "/home/deck/homebrew/plugins/decky-recorder/bin/gstreamer-1.0/libgstaudiovisualizers.so" has incompatible version (plugin: 1.22, gst: 1.20), not loading

Reference: https://github.com/marissa999/decky-recorder/issues/52

jvalecillos commented 10 months ago

I noticed a similar behaviour of failing silently and not recording anything on SteamOS 3.4.11 (I don't know if it is relevant). In my case, I've found a combination of missing libraries with "undefined symbols".

For example this is what I see in the log, decky-recorder-std-err.log (for the future reader, since not documented by decky-loader, it's located at /home/deck/homebrew/logs/decky-recorder):

(gst-plugin-scanner:13355): GStreamer-WARNING **: 22:08:45.503: Failed to load plugin '/home/deck/homebrew/plugins/decky-recorder/bin/gstreamer-1.0/libgstfaac.so': libfaac.so.0: cannot open shared object file: No such file or directory
(gst-plugin-scanner:13355): GStreamer-WARNING **: 22:08:45.526: Failed to load plugin '/home/deck/homebrew/plugins/decky-recorder/bin/gstreamer-1.0/libgstudp.so': /home/deck/homebrew/plugins/decky-recorder/bin/gstreamer-1.0/libgstudp.so: undefined symbol: g_string_free_and_steal
(gst-plugin-scanner:13355): GStreamer-WARNING **: 22:08:45.531: Failed to load plugin '/home/deck/homebrew/plugins/decky-recorder/bin/gstreamer-1.0/libgstdtls.so': libcrypto.so.3: cannot open shared object file: No such file or directory
(gst-plugin-scanner:13355): GStreamer-WARNING **: 22:08:45.534: Failed to load plugin '/home/deck/homebrew/plugins/decky-recorder/bin/gstreamer-1.0/libgstvideofilter.so': /home/deck/homebrew/plugins/decky-recorder/bin/gstreamer-1.0/libgstvideofilter.so: undefined symbol: gst_navigation_event_set_coordinates

.... a bunch more warnings

WARNING: erroneous pipeline: no element "pipewiresrc"

Here's the full output: https://pastebin.com/i505T6yC

I think that the warnings are probably harmless and the main issue is with pipewiresrc (plugin?).

I tried the stable version, the testing version and also building the plugin myself.

This also is probably the same bug as in #20.

jvalecillos commented 10 months ago

You were right @lonkelle. I checked the comment from @siglmf and, thanks to that, I could verify that the cause of the issue is the recorder using gst-launch-1.0 (included in gstreamer package) from SteamOS and the gst-plugins (plugins for gstreamer) from Archlinux Repository. The latter are always newer, because SteamOS doesn’t update that frequently.

The solution is to target specific versions of gstreamer plugin instead of downloading the latest available in Arch. I tested it for SteamOS 3.4.10 in here and it works as expected.

The recorder probably works on SteamOS 3.5 because Arch still ships the same major version, 1.22.x, but that could change at any moment. Here's what I found about the versions:

System / Repo GStreamer Version
SteamOS 3.4.10 1.20.4-1
SteamOS 3.5.7 1.22.3-6
Archlinux (2024-01-16) 1.22.8-2

One would need to tie together the plugin version with the backend libraries included on it. It would help also if Decky-Loader would have a mechanism to only install plugin versions compatible with the OS, or at least let you install an older version from UI (I think it is possible manually providing the URL).

I'll continue experimenting to see if I can find a solution that would work with both major versions of SteamOS.