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
tpm
August 11, 2024, 6:22pm
2
Couple of things to check:
Do you have a system install of GStreamer libs/tools from packages in the /usr prefix?
which gst-launch-1.0
is being used? (which gst-launch-1.0
should show /usr/local/bin/gst-launch-1.0
I suppose)
from which prefix does ldd /usr/bin/gst-launch-1.0 | grep libgstreamer
pull in the gstreamer library? /usr/local/lib
?
does gst-inspect-1.0 playback
work and show in Filename
that it’s the right one?
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.
tpm
August 12, 2024, 5:41pm
4
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.