Video Pipeline
samples
check video source
gst-launch-1.0 -ev v4l2src device=/dev/video0 num-buffers=1 ! jpegenc ! filesink location=videotest.jpg
gst-launch-1.0 v4l2src device=/dev/video1 do-timestamp=true num-buffers=10 ! image/jpeg,width=1920,height=1080,framerate=20/1 ! jpegparse ! multifilesink location=videotest_%03d.jpeg
play camera video
gst-launch-1.0 -ev v4l2src device=/dev/video1 num-buffers=100 ! image/jpeg,width=1920,height=1080,framerate=20/1 ! xvimagesink
display test video
gst-launch-1.0 -vvv videotestsrc ! autovideosink
gst-launch-1.0 -vvv videotestsrc ! 'video/x-raw,width=1280,height=720,format=RGB,framerate=60/1' ! fpsdisplaysink
gst-launch-1.0 -vvv videotestsrc ! videoconvert ! fpsdisplaysink text-overlay=false
record to file
# record video to flv
gst-launch-1.0 -v -e videotestsrc ! x264enc ! flvmux ! filesink location=xyz.flv
# record vidoe to mp4
gst-launch-1.0 -v -e videotestsrc ! x264enc ! qtmux ! filesink location=xyz.mp4
# record video to m3u8 and ts
gst-launch-1.0 videotestsrc is-live=true ! x264enc ! h264parse ! hlssink2 max-files=5
record and display at the same t e(queue)
GStreamer Recording and Viewing Stream Simultaneously
gst-launch-1.0 -vvv videotestsrc \
! tee name=t \
t. ! queue ! x264enc ! mp4mux ! filesink location=xyz.mp4 -e \
t. ! queue leaky=1 ! autovideosink sync=false
tips:
-e (EOS signal)
: Pipelines for file saving require a reliable EOS(End of Stream) signalqueue leaky=1 ! autovideosink sync=false
: prevent blockingdrop=true
: drop frame if cannot read quickly enough
record webcam to *.mp4
(jetson nano)
gst-launch-1.0 nvarguscamerasrc ! fakesink
gst-launch-1.0 -ev nvarguscamerasrc num-buffers=2000 ! 'video/x-raw(memory:NVMM),width=1920, height=1080, framerate=30/1, format=NV12' ! omxh264enc ! qtmux ! filesink location=test.mp4
gst-launch-1.0 -ev v4l2src device=/dev/video0 num-buffers=100 ! capsfilter caps='video/x-raw,width=1920, height=1080, framerate=60/1' ! nvvideoconvert ! videorate ! capsfilter caps='video/x-raw,width=1920, height=1080, framerate=20/1' ! nvv4l2h264enc ! h264parse ! mp4mux ! filesink location=test.mp4
gst-launch-1.0 -ev v4l2src device=/dev/video0 num-buffers=100 ! capsfilter caps='video/x-raw,width=1920, height=1080, framerate=60/1' ! nvvideoconvert ! videorate max-rate=30 drop-only=1 ! nvv4l2h264enc ! h264parse ! mp4mux ! filesink location=test.mp4
gst-launch-1.0 -ev v4l2src device=/dev/video0 num-buffers=100 ! capsfilter caps='video/x-raw,width=1920, height=1080, framerate=60/1' ! nvvideoconvert ! videorate max-rate=30 ! capsfilter caps='video/x-raw,framerate=30/1' ! nvv4l2h264enc ! h264parse ! mp4mux ! filesink location=test.mp4
gst-launch-1.0 -ev v4l2src device=/dev/video0 num-buffers=100 ! capsfilter caps='video/x-raw,width=1920, height=1080, framerate=60/1' ! nvvideoconvert ! videorate max-rate=30 ! nvv4l2h264enc ! h264parse ! mp4mux ! filesink location=test.mp4
fps test
gst-launch-1.0 -v videotestsrc ! videorate ! video/x-raw,framerate=30/1 ! videoconvert ! autovideosink
gst-launch-1.0 -v videotestsrc ! videorate ! video/x-raw,framerate=30/1 ! x264enc tune=zerolatency bitrate=16000000 speed-preset=superfast ! rtph264pay ! udpsink port=5000 host=$HOST
gst-launch-1.0 -v videotestsrc ! videorate ! video/x-raw,framerate=60/1 ! x264enc tune=zerolatency bitrate=16000000 speed-preset=superfast ! h264parse ! rtph264pay ! udpsink port=5000 host=$HOST
gst-launch-1.0 -v videotestsrc ! video/x-raw,framerate=30/1 ! videorate ! video/x-raw,framerate=60/1 ! x264enc tune=zerolatency bitrate=16000000 speed-preset=superfast ! rtph264pay ! udpsink port=5000 host=$HOST
capture screen and display the video
gst-launch-1.0 ximagesrc startx=160 endx=1080 use-damage=0 ! video/x-raw,framerate=30/1 ! videoscale method=0 ! video/x-raw,width=640,height=480 ! ximagesink
read mp4 and demux to audio and video
gst-launch-1.0 filesrc location=talk.mp4 ! decodebin name=dec ! videoconvert ! autovideosink dec. ! audioconvert ! audioresample ! autoaudiosink
```sh
### add a clock on the above video
```sh
gst-launch-1.0 filesrc location=talk.mp4 ! decodebin name=dec ! videoconvert ! clockoverlay ! autovideosink dec. ! audioconvert ! audioresample ! autoaudiosink
send/receive video stream over udp
# send video
gst-launch-1.0 -v v4l2src device=/dev/video1 ! decodebin \
! videoconvert ! omxh264enc ! video/x-h264,stream-format=byte-stream \
! rtph264pay ! udpsink host=192.168.104.236 port=5000
# receive video
gst-launch-1.0 -v udpsrc port=5000 caps=application/x-rtp \
! rtph264depay ! avdec_h264 ! autovideosink