Published on 2022-03-31 by Kenneth FlakBack to Tech Research
Lately I've been having troubles with my openFrameworks programs breaking after upgrading
gstreamer and its myriad plugins to version 1.20. Video playback stopped working, both in processing and in
oF, which is very far from ideal... This has led me to do some rather dangerous procedures on my system. So far it seems I have been successful in this, but there are definitely risks involved, especially over the longer term as various packages start using features from 1.20. So I am hoping this is purely a temporary fix until a better solution comes up. The wonderful people of
⚠️ This is not for the faint of heart. Nor is it recommended practice. Only do this if you really, really mean it.
In normal circumstances I would use the excellent downgrade tool to downgrade individual packages, but
gstreamer is far too entangled with far too many packages that use it for all kinds of media playback. And so: surgery is required. First of all we need to get rid of all the packages by running
sudo pacman -Rdd gstreamer-vaapi gstreamer gst-plugins-bad gst-plugins-bad-libs gst-plugins-base gst-plugins-base-libs gst-plugins-good gst-plugins-ugly gst-libav
-Rdd flag means: remove the package in question no matter what depends on it. Dangerous stuff, in other words.
Next thing we want to do is install the older versions of the packages from the Arch Linux Archive. In order to do so, go to the archive and find the gstream-related packages here. Install each of them one by one by issuing the command
sudo pacman -Udd https://archive.archlinux.org/packages/g/gstreamer/gstreamer-1.18.5-1-x86_64.pkg.tar.zst
I am including the
dd flag to skip dependency checking here as well, otherwise
pacman will try to install the latest version of the
gstreamer dependencies, which is exactly what we don't want.
Keep doing this for each individual package. You will need to install the
-lib versions before the regular versions, for example install
Finally, we need to make sure all of our work is not undone on our next
sudo pacman -Syu by adding all the packages to
pacman ignore list. Put this line into
IgnorePkg = gstreamer gstreamer-vaapi gst-plugins-bad gst-plugins-bad-libs gst-plugins-base gst-plugins-base-libs gst-plugins-good gst-plugins-ugly gst-libav
That's it! Now just lean back, relax, and wait for something to break because of this. At which point I will have to find a better solution.