gstreamer upgrade to 1.16

Hi,
Does someone already managed to upgrade gstreamer to version 1.16 on the jetson nano? I already tried apt-get update//upgrade but the packaging-tool still has version 1.14.1. What’s the easiest way to upgrade to 1.16? Do I have to compile and install it from source?
Any help is appreciated!

1 Like

Hi,
Please refer to [Gstreamer Build Instructions] in gstreamer user guide.

1 Like

Hi DaneLLL, thank you for the clue. I tried both ways - installing from source and installing with “gst-install” but I wasn’t successful. I got “installation successful” in the command-line but “gst-launch-1.0 --version” showed always the same result: version 1.14.1 . Then I tried to uninstall gstreamer first before installing version 1.16 but after the uninstallation, I lost the desktop-environment and the jetson nano only booted to command-line. It seems quite difficult to uninstall gstreamer in a proper way. What would be the best approach to successfully upgrading gstreamer 1.14.1 to version 1.16? Thanks!

Hi,
Is there any strong reason to use 1.16?

r32.1 release is based on 1.14.1 and SQA tests are performed. There is stability concern if you upgrade to another vision.

Hi,
Version 1.16 has a new element and a plugin I’ll need for a project I’m currently working on, but I understand your concerns. Do you know if the new release will be based on 1.14.1 or 1.16?

Has there been any progress here? We need WebRTC to support data channels and that is in 1.16

1 Like

Hi sms,
Please check #2 to manually upgrade to 1.16.
You may also check https://developer.nvidia.com/embedded/dlc/WebRTC-R32.2.0

I have built 1.16 using those instructions, they actually don’t come close to working as you need things like
libnice and gstreamer-python which are not included in these instructions. They also short-cut necessary steps in the build process like cd’ing into the directories before running configure, etc. While I still don’t have a working 1.16.0 version, I do have an evolving build script in which /home/jetbot is the user’s home directory:

git clone GitHub - libnice/libnice: An implementation of the IETF’s Interactive Connectivity Establishment (ICE) standard — this is an official read-only mirror of the upstream repository at https://gitlab.freedesktop.org/libnice/libnice/. File issues there and create pull requests there too instead of here.
cd libnice
./autogen.sh --prefix=/usr --with-gstreamer --enable-static --enable-static-plugins --enable-shared --without-gstreamer-0.10 --disable-gtk-doc --enable-compile-warnings=no
make install

export PKG_CONFIG_PATH=/home/ubuntu/gst_1.16.0/out/lib/pkgconfig
export PATH=/home/ubuntu/gst_1.16.0/out/bin:$PATH

gstreamer

cd /home/jetbot/gst_1.16.0/gstreamer-1.16.0
sudo apt-get install build-essential dpkg-dev flex bison autotools-dev automake liborc-dev autopoint libtool gtk-doc-tools libgstreamer1.0-dev
export PKG_CONFIG_PATH=/home/ubuntu/gst_1.16.0/out/lib/pkgconfig
./configure --prefix=/home/ubuntu/gst_1.16.0/out
make
sudo make install

export LD_LIBRARY_PATH=/home/ubuntu/gst_1.16.0/out/lib

gstreamer plugins-base

cd /home/jetbot/gst_1.16.0/gst-plugins-base-1.16.0
sudo apt-get install libxv-dev libasound2-dev libtheora-dev libogg-dev libvorbis-dev
./configure --prefix=/home/ubuntu/gst_1.16.0/out
make
sudo make install

gstreamer plugins-good

cd /home/jetbot/gst_1.16.0/gst-plugins-good-1.16.0
sudo apt-get install libbz2-dev libv4l-dev libvpx-dev libjack-jackd2-dev libsoup2.4-dev libpulse-dev
./configure --prefix=/home/ubuntu/gst_1.16.0/out
make
sudo make install

gstreamer plugins-bad

cd /home/jetbot/gst_1.16.0/gst-plugins-bad-1.16.0
sudo apt-get install faad libfaad-dev libfaac-dev
./configure --prefix=/home/ubuntu/gst_1.16.0/out
make
sudo make install

gstreamer plugins-ugly

cd /home/jetbot/gst_1.16.0/gst-plugins-ugly-1.16.0
sudo apt-get install libx264-dev libmad0-dev
./configure --prefix=/home/ubuntu/gst_1.16.0/out
make
sudo make install

gstreamer-python

export PYTHON=/usr/bin/python3
cd /home/jetbot/gst_1.16.0/gst-python-1.16.0
./autogen.sh --disable-gtk-doc --noconfigure
./configure --prefix=/home/ubuntu/gst_1.16.0/out --with-libpython-dir=“/usr/lib/python3.6”
make
sudo make install

#cd /usr/lib/aarch64-linux-gnu/gstreamer-1.0/

export LD_LIBRARY_PATH=/home/ubuntu/gst_1.16.0/out/lib/
export PATH=/home/ubuntu/gst-1.16.0/bin:$PATH
#sudo cp libgstnv* libgstomx.so /home/ubuntu/gst_1.16.0/out/lib/gstreamer-1.0/

OK it’s a week later and nothing new has happened. The gstreamer build instructions in the latest gstreamer build guide can actually work and will build gstreamer 1.16 if you use the gstinstall.sh script and make sure to install:

libvorbis-dev , libopus-dev and libnice-dev

but it does NOT install the python bindings. Since ALL OF JETBOT USES THE PYTHON BINDINGS it would be nice if they could update this so that worked.

here is the source:

Tried building it, it doesn’t work, something about GST-instropection.

So, idk about that (a fuller picture of the error message might help), but I did look at your install prefix and I don’t think that’s what you want. You probably want /usr/local which is the default (so just remove --prefix…)

If you’re going to do a user install in something like ~/.local, then you want to do a regular “make install” with no sudo. One or the other. The way you have it now, you’re installing files owned by root in your build directory inside your $HOME which you probably don’t want.

All that being said, I think you’re just hurting yourself trying to build an untested, new, version of GStreamer for which there’s a good likelihood you’ll run into issues using with Nvidia’s software. Recommend developing for the version installed in the default repositories.

The reason for gstreamer 1.5 or 1.6 is that the WebRTCbin plugin in 1.14 does NOT support data channels. If you’re trying to control your JETBOT from a regular web page from across the Internet, you need some mechanism like TURN which is built into WebRTC. 1.14 does NOT support data channels which is also necessary. If NVIDIA were really interested in using GStreamer as their camera interface platform for JETBOT, they would make sure that 1.16 (which gstreamer claims as a mainstream version, is supported.

In my opinion you’re using the wrong framework. Gstreamer is meant for monitoring things like video cameras… for “smart cities” and in security monitoring in places like airports.

Nvidia has the Isaac framework for robots. Even if you did get it working with gstreamer you’d probably have latency issues. Jetbot from what I understand doesn’t even use gstreamer, except to get frames from the camera.

You are correct. Jetbot does use it that way, but the WebRTC platform was designed for real-time control and two way video and audio, the 1.14 Gstreamer webrtc works fairly well at that, We have everything working EXCEPT the data channels.

Really? I mean, have you actually tested it for this sort of application before? I’m not saying that the selection of protocol is wrong, or that what you want to do is entirely impossible, just that it’s probably not the easiest tool for the job. IF you do it, just don’t expect it to be easy, and don’t expect it to be very responsive without a lot of work, if it’s even possible.

Yes, we also tried it and it works beautifully, only thing to optimise is the latency, we’ve got 62ms gstreamer - RTP - gstreamer and 95ms gstreamer - webrtc - chrome (added jitter buffer).

We compiled 1.16.2 using gst-install helper script, and we also needed libnice & usrsctp for webRTC:

git clone https://github.com/libnice/libnice.git
cd libnice
git checkout 0.1.15
./autogen.sh --prefix=/usr --libdir=/usr/lib/aarch64-linux-gnu
make -j4
sudo make install
sudo mv /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnice.* /home/jetson/gst-1.16.2/lib/aarch64-linux-gnu/gstreamer-1.0/

git clone https://github.com/sctplab/usrsctp.git
cd usrsctp
./configure --prefix=/usr --libdir=/usr/lib/aarch64-linux-gnu
make -j4
sudo make install

git clone https://github.com/GStreamer/gst-python.git
cd gst-python
export PYTHON=/usr/bin/python3
git checkout 1.16.2
./autogen.sh --disable-gtk-doc --noconfigure
export GST_CFLAGS='-pthread -I/home/jetson/gst-1.16.2/include/gstreamer-1.0 -I/usr/include/glib-2.0 -I/usr/lib/aarch64-linux-gnu/glib-2.0/include -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0'
export GST_LIBS=/home/jetson/gst-1.16.2/lib/aarch64-linux-gnu/
./configure --with-libpython-dir=/usr/lib/aarch64-linux-gnu --prefix=/usr
make -j4
sudo make install
export LD_LIBRARY_PATH=/home/jetson/gst-1.16.2/lib/aarch64-linux-gnu
export PATH=/home/jetson/gst-1.16.2/bin:$PATH

I have successfully built 1.16.2 using gst-install script and when I run gst-inspect-1.0 I can see that Gstreamer version is 1.16.2 instead of the bundled 1.14.5.

However, when I run ldconfig -p | grep libgst I actually see that all libgst* are still pointing to the .so in /usr/lib/aarch64-linux-gnu/, also when I run pkg-config --modversion gstreamer-1.0 I see the result is 1.14.5.
I am writing some c++ programs and need to build against gstreamer. May I ask how I cam completely replace all gstreamer libraries from 1.14.5 to 1.16.2?

I could not find a way to upgrade to version 1.16 let alone version 1.18 that is the one I need that has a lot of features I want to test like SCTE35 support, DVB compliant Transport Stream Muxer, etc etc.

Why there is no way to upgrade to latest version? Why is so difficult to install and make Gstreamer work on this Jetson Nano environment?

Can anybody share their experiences on Gstreamer, I mean if someone was ever able to compile and build a latest version, can you share the steps on this forum?

I could not find a way to upgrade to version 1.16 let alone version 1.18 that is the one I need that has a lot of features I want to test like SCTE35 support, DVB compliant Transport Stream Muxer, etc etc.

Why there is no way to upgrade to latest version? Why is so difficult to install and make Gstreamer work on this Jetson Nano environment?

Can anybody share their experiences on Gstreamer, I mean if someone was ever able to compile and build a latest version, can you share the steps on this forum?

Like egj said before, Any help is appreciated, but it looks like there is no help here.