ERROR: pipeline could not be constructed: no element "playbin"

I’ve compiled gstreamer on x86, x86_64, aarch64 and armhf machines a number of times over the years without any particular problem.

Recently I compiled gststreamer-1.24.6 and base/good/back/ugly natively on an RPi3 without build errors, but playbin does not work.

Is there a way to check why playbin does not work?

My previous build on an RPi3 using 1.16.2 worked and I built 1.24.6 in the same way.

gst-launch-1.0 -v playbin uri=file:///path/to/somefile.mp4
ERROR: pipeline could not be constructed: no element "playbin"
cd gst-plugins-base-1.24.6

mkdir build
cd build

CC="gcc -march=armv6zk -mtune=arm1176jzf-s -mfpu=vfp -Os -pipe" CXX="g++ -march=armv6zk -mtune=arm1176jzf-s -mfpu=vfp -Os -pipe -fno-exceptions -fno-rtti" meson --prefix=/usr/local --localstatedir=/var --libexecdir=/usr/local/lib --buildtype=plain -Ddoc=disabled -Dexamples=disabled --wrap-mode=nodownload ../

ninja
sudo ninja install

Couple of things to check:

  1. Do you have a system install of GStreamer libs/tools from packages in the /usr prefix?

  2. which gst-launch-1.0 is being used? (which gst-launch-1.0 should show /usr/local/bin/gst-launch-1.0 I suppose)

  3. from which prefix does ldd /usr/bin/gst-launch-1.0 | grep libgstreamer pull in the gstreamer library? /usr/local/lib?

  4. does gst-inspect-1.0 playback work and show in Filename that it’s the right one?

  5. you might need to run sudo ldconfig after sudo ninja install and/or make sure /usr/local/lib is in your /etc/ld.so.conf

No, only the compiled version in /usr/local

Yes, /usr/local/bin/gst-launch-1.0

Yes, /usr/local/lib

No, it gives No such element or plugin ‘playback’

/usr/local/lib is in /etc/ld.so.conf

…and I’ve run ldd on /usr/local/bin/gst* and /usr/local/lib/gstreamer-1.0/* and all dependencies are met.

How about:

$ rm ~/.cache/gstreamer-1.0/registry*`

$ gst-inspect-1.0 /usr/local/lib/gstreamer-1.0/libgstplayback.so

?

That gives the following - note that it does exactly the same thing on a working version of gstreamer I compiled on an RPi4/aarch64.

gst-inspect-1.0 --help
Usage:
  gst-inspect-1.0 [OPTION?] [ELEMENT-NAME | PLUGIN-NAME]

Help Options:
  -h, --help                           Show help options
[[33mPlugin Details[[0m:
  [[94mName                     [[0m[[0mplayback[[0m
  [[94mDescription              [[0m[[0mvarious playback elements[[0m
  [[94mFilename                 [[0m[[0m/usr/local/lib/gstreamer-1.0/libgstplayback.so[[0m
[[33mPlugin Details[[0m:
  [[94mName                     [[0m[[0mplayback[[0m
  [[94mDescription              [[0m[[0mvarious playback elements[[0m
  [[94mFilename                 [[0m[[0m/usr/local/lib/gstreamer-1.0/libgstplayback.so[[0m
  [[94mVersion                  [[0m[[0m1.24.6[[0m
  [[94mLicense                  [[0m[[0mLGPL[[0m
  [[94mSource module            [[0m[[0mgst-plugins-base[[0m
  [[94mDocumentation            [[0m[[0mhttps://gstreamer.freedesktop.org/documentation/playback/[[0m                                      [[94mSource release date      [[0m[[0m2024-07-29[[0m
  [[94mBinary package           [[0m[[0mGStreamer Base Plug-ins source release[[0m
  [[94mOrigin URL               [[0m[[0mUnknown package origin[[0m                                                                       
  [[32mdecodebin[[0m: [[0mDecoder Bin[[0m
  [[32mdecodebin3[[0m: [[0mDecoder Bin 3[[0m
  [[32mparsebin[[0m: [[0mParse Bin[[0m
  [[32mplaybin[[0m: [[0mPlayer Bin 2[[0m
  [[32mplaybin3[[0m: [[0mPlayer Bin 3[[0m
  [[32mplaysink[[0m: [[0mPlayer Sink[[0m
  [[32mstreamsynchronizer[[0m: [[0mStream Synchronizer[[0m
  [[32msubtitleoverlay[[0m: [[0mSubtitle Overlay[[0m
  [[32muridecodebin[[0m: [[0mURI Decoder[[0m
  [[32muridecodebin3[[0m: [[0mURI Decoder[[0m
  [[32murisourcebin[[0m: [[0mURI reader[[0m
standard input lines 1-23

I found the problem - on this distro (piCore) packages are squashfs, loop mounted and symlinked to the root file system.

Up until at least gstreamer-1.22.8 this worked, but with 1.24.6, libgstreamer-1.0.so.0.2406.0 needs to be an actual file and not a symlink to the squashfs package or things don’t work.