Downgrade Gstreamer on Arch Linux


Published on 2022-03-31 by Kenneth Flak

Back 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 processing has.

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