1. Indroduction
File Elements
filesrc
Read data from a file in the local file system.
Basic pipeline
gst-launch-1.0 filesrc location=video.mp4 ! qtdemux ! h264parse ! avdec_h264 ! videoconvert ! autovideosink
VA-API hardware acceleration pipeline
gst-launch-1.0 filesrc location=video.mp4 ! qtdemux ! h264parse ! vaapih264dec ! vaapipostproc ! autovideosink
OpenMAX hardware acceleration pipeline
gst-launch-1.0 filesrc location=video.mp4 ! qtdemux ! h264parse ! omxh264dec ! videoconvert ! autovideosink
filesink
Write incoming data to a file in the local file system.
Basic pipeline
gst-launch-1.0 videotestsrc ! videoconvert ! x264enc ! h264parse ! mp4mux ! filesink location=output.mp4
VA-API hardware acceleration pipeline
gst-launch-1.0 videotestsrc ! vaapipostproc ! vaapih264enc ! h264parse ! mp4mux ! filesink location=output.mp4
OpenMAX hardware acceleration pipeline
gst-launch-1.0 videotestsrc ! videoconvert ! omxh264enc ! h264parse ! mp4mux ! filesink location=output.mp4
Network Elements
udpsrc
udpsrc is a network source that reads UDP packets from the network. It can be combined with RTP depayloaders to implement RTP streaming.
Basic pipeline
gst-launch-1.0 udpsrc port=5000 ! application/x-rtp, payload=96 ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! autovideosink
VA-API hardware acceleration pipeline
gst-launch-1.0 udpsrc port=5000 ! application/x-rtp, payload=96 ! rtph264depay ! h264parse ! vaapih264dec ! vaapipostproc ! autovideosink
OpenMAX hardware acceleration pipeline
gst-launch-1.0 udpsrc port=5000 ! application/x-rtp, payload=96 ! rtph264depay ! h264parse ! omxh264dec ! videoconvert ! autovideosink
change buffer-size
gst-launch-1.0 udpsrc port=5000 buffer-size=1048576 ! application/x-rtp, payload=96 ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! autovideosink
udp multicast pipeline
gst-launch-1.0 udpsrc address=224.1.1.1 port=5000 ! application/x-rtp, payload=96 ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! autovideosink
Note:
Check system buffer usage
netstat -s | grep -i buffer
change system buffer size
To make temporary changes to the network buffer size:
sudo sysctl -w net.core.rmem_max=8388608
sudo sysctl -w net.core.wmem_max=8388608
To make permanent changes that persist across reboots:
net.core.rmem_max=8388608
net.core.wmem_max=8388608
Apply Permanent changes
sudo sysctl -p
udpsink
udpsink is a network sink that sends UDP packets to the network. It can be combined with RTP payloaders to implement RTP streaming.
Basic pipeline
gst-launch-1.0 videotestsrc ! videoconvert ! x264enc ! h264parse ! rtph264pay ! udpsink host=<ip address> port=5000
VA-API hardware acceleration pipeline
gst-launch-1.0 videotestsrc ! vaapipostproc ! vaapih264enc ! h264parse ! rtph264pay ! udpsink host=<ip address> port=5000
OpenMAX hardware acceleration pipeline
gst-launch-1.0 videotestsrc ! videoconvert ! omxh264enc ! h264parse ! rtph264pay ! udpsink host=<ip address> port=5000
udp multicast pipeline
gst-launch-1.0 videotestsrc ! videoconvert ! x264enc ! h264parse ! rtph264pay ! host=224.1.1.1 port=5000
v4l2 Elements
v4l2src
v4l2src can be used to capture video from v4l2 devices, like webcams and tv cards.
Basic pipeline
gst-launch-1.0 v4l2src /dev/video0 ! videoconvert ! autovideosink
Video Processing Elements
videoconvert
Convert video frames between a great variety of video formats.
gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink
videorate
This element takes an incoming stream of timestamped video frames. It will produce a perfect stream that matches the source pad's framerate.
gst-launch-1.0 videotestsrc ! video/x-raw,framerate=30/1 ! videorate ! video/x-raw,framerate=15/1 ! autovideosink
videoscale
This element resizes video frames. By default the element will try to negotiate to the same size on the source and sinkpad so that no scaling is needed. It is therefore safe to insert this element in a pipeline to get more robust behaviour without any cost if no scaling is needed.
gst-launch-1.0 videotestsrc ! videoconvert ! videoscale ! video/x-raw,width=1280,height=720 ! autovideosink
videocrop
This element crops video frames, meaning it can remove parts of the picture on the left, right, top or bottom of the picture and output a smaller picture than the input picture, with the unwanted parts at the border removed.
gst-launch-1.0 videotestsrc ! videoconvert ! videocrop top=140 bottom=140 left=160 right=160 ! autovideosink
Test Media Generation Elements
videotestsrc
The videotestsrc element is used to produce test video data in a wide variety of formats. The video test data produced can be controlled with the "pattern" property.
By default the videotestsrc will generate data indefinitely, but if the num-buffers property is non-zero it will instead generate a fixed number of video frames and then send EOS.
gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink
audiotestsrc
AudioTestSrc can be used to generate basic audio signals. It support several different waveforms and allows to set the base frequency and volume. Some waveforms might use additional properties.
gst-launch-1.0 audiotestsrc ! audioconvert ! autoaudiosink
Multithreading Elements
queue
Data is queued until one of the limits specified by the max-size-buffers, max-size-bytes and/or max-size-time properties has been reached. Any attempt to push more buffers into the queue will block the pushing thread until more space becomes available.
The queue will create a new thread on the source pad to decouple the processing on sink and source pad.
gst-launch-1.0 videotestsrc ! videoconvert ! queue ! autovideosink
tee
Split data to multiple pads. Branching the data flow is useful when e.g. capturing a video where the video is shown on the screen and also encoded and written to a file. Another example is playing music and hooking up a visualisation module.
One needs to use separate queue elements (or a multiqueue) in each branch to provide separate threads for each branch. Otherwise a blocked dataflow in one branch would stall the other branches.
gst-launch-1.0 videotestsrc ! videoconvert ! tee name=t ! queue ! autovideosink t. ! queue ! autovideosink
Capabilities Elements
capsfilter
The element does not modify data as such, but can enforce limitations on the data format.
gst-launch-1.0 videotestsrc ! videoconvert ! video/x-raw,format=BGRA ! autovideosink
Debugging Elements
fakesink
Dummy sink that swallows everything.
gst-launch-1.0 videotestsrc ! videoconvert ! fakesink
fakevideosink
This element is the same as fakesink but will pretend to support various allocation meta API like GstVideoMeta in order to prevent memory copies. This is useful for throughput testing and testing zero-copy path while creating a new pipeline.
gst-launch-1.0 videotestsrc ! videoconvert ! fakevideosink
fpsdisplaysink
Can display the current and average framerate as a testoverlay or on stdout.
gst-launch-1.0 videotestsrc ! videoconvert ! fpsdisplaysink
gst-launch-1.0 videotestsrc ! videoconvert ! fpsdisplaysink text-overlay=false -v
gst-launch-1.0 videotestsrc ! videoconvert ! fpsdisplaysink text-overlay=false video-sink="waylandsink fullscreen=true" -v