GStreamer RaspberryPi Streaming
Prerequisites:
Install rpicamsrc
rpicamsrc
is officially part of gstreamer 1.18. However, at the time of this writing, the latest supported gstreamer on Raspberry Pi OS is 1.14.
We can build and install rpicamsrc
from source.
Firstly, install build dependencies:
sudo apt-get install autoconf automake libtool pkg-config \
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
libraspberrypi-dev
Now, clone and install the library from source:
git clone https://github.com/thaytan/gst-rpicamsrc
cd gst-rpicamsrc
./autogen.sh --prefix=/usr --libdir=/usr/lib/arm-linux-gnueabihf/
make
sudo make install
Create a stream on the Pi
I like using rpicamsrc
because it gives me really great control over the camera.
gst-launch-1.0 rpicamsrc \
sensor-mode=4 keyframe-interval=1 preview-opacity=50 ! \
h264parse ! \
rtph264pay config-interval=1 pt=96 ! \
gdppay ! \
tcpserversink host=0.0.0.0 port=5000
sensor-mode=4
gives the best viewing anglekeyframe-interval=1
sends each frame as a keyframe- This prevents streamed frames from going grey due to the H264 encoding
preview-opacity=50
means you can still use your RPi display- especially useful when using CLI mode
- See gstreamer rpicamsrc docs for more properties
An alternative to rpicamsrc
is v412src
; but, often frames get dropped doing this because of the H264 encoding.
gst-launch-1.0 v4l2src device=/dev/video0 ! \
video/x-h264,width=640,height=480,framerate=30/1 ! \
h264parse ! \
rtph264pay config-interval=1 pt=96 ! \
gdppay ! \
tcpserversink host=0.0.0.0 port=5000
Watch the stream using gstreamer
gst-launch-1.0 -v tcpclientsrc host=192.168.50.202 port=5000 ! \
gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! \
autovideosink sync=false
sync=false
means we always get the latest frame. This helps keep the latency as low as possible.