Downgrade Gstreamer on Arch Linux"
Published on: 2022-03-31
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 processing has.
:warning: 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
The -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
gst-base-lib before gst-base.
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 /etc/pacman.conf:
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.