I’m a gstreamer noob. My goal is to show a live video preview while recording and encoding a compressed video file in the background on its own time.
1. Preiew and record mjpeg:
Preview and file recording work well. No frames noticeably dropped in either sink. Problem is a HUGE video file size.
gst-launch-1.0 -vv v4l2src device=/dev/video0 io-mode=2 do-timestamp=true ! image/jpeg,width=2592,height=1944,framerate=25/1 ! tee name=t t. ! queue ! jpegparse ! jpegdec ! videocrop top=0 left=160 right=160 bottom=0 ! nvoverlaysink sync=false t. ! queue ! qtmux ! filesink location=test.mp4 sync=false -e
2. Preiew and record h265:
Preview works great but the video file ends up with less than 1fps. Drops vast majority of frames.
gst-launch-1.0 -vv v4l2src device=/dev/video0 io-mode=2 do-timestamp=true ! image/jpeg,width=2592,height=1944,framerate=25/1 ! jpegparse ! jpegdec ! tee name=t t. ! queue ! videocrop top=0 left=160 right=160 bottom=0 ! nvoverlaysink sync=false t. ! queue ! nvvidconv ! nvv4l2h265enc ! 'video/x-h265, stream-format=(string)byte-stream' ! h265parse ! qtmux ! filesink location=test.mp4 sync=false -e
Hoping someone with gstreamer experience can point out why my frames are dropping so hard.
Thanks!
Hi,
Please share information about the camera so that we can suggest next.
$ v4l2-ctl -d /dev/video0 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
Index : 0
Type : Video Capture
Pixel Format: 'MJPG' (compressed)
Name : Motion-JPEG
Size: Discrete 3840x2160
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 1920x1080
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 1280x720
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 2592x1944
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 2048x1536
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 1600x1200
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 1280x960
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 1024x768
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 800x600
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 320x240
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 3840x2880
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 3264x2448
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Index : 1
Type : Video Capture
Pixel Format: 'YUYV'
Name : YUYV 4:2:2
Size: Discrete 3840x2160
Interval: Discrete 1.000s (1.000 fps)
Size: Discrete 1920x1080
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 1280x720
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 2592x1944
Interval: Discrete 1.000s (1.000 fps)
Size: Discrete 2048x1536
Interval: Discrete 0.333s (3.000 fps)
Size: Discrete 1600x1200
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 1280x960
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 1024x768
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 800x600
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 320x240
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 3840x2880
Interval: Discrete 1.000s (1.000 fps)
Size: Discrete 3264x2448
Interval: Discrete 1.000s (1.000 fps)
Hi,
Please execute ‘sudo jetson_clocks’ and try
$ gst-launch-1.0 v4l2src num-buffers=600 device=/dev/video0 io-mode=2 ! image/jpeg,width=1920,height=1080,framerate=25/1 ! nvjpegdec ! video/x-raw ! nvvidconv ! 'video/x-raw(memory:NVMM)' ! tee name=t t. ! queue ! nvv4l2h264enc maxperf-enable=1 ! h264parse ! qtmux ! filesink location=a.mp4 t. ! queue ! fpsdisplaysink text-overlay=false video-sink=nvoverlaysink -v
Let’s check if 1080p25 is working.
[EDIT]there is a known memleak in nvjpegdec. please apply libnvjpeg.so in
https://elinux.org/L4T_Jetson/r32.2.1_patch
[MMAPI][DS4.0] Memory leak in MJPEG decoding
Thanks for the answer.
I tried to apply libnvjpeg.so and nvjpegdec stopped working entirely. In fact when I run
gst-inspect-1.0 nvjpegdec
I get
Segmentation fault (core dumped)
Can you provide details on how to replace libnvjpeg.so correctly?
Thanks!
How can I check? I tried
cat /etc/nv_tegra_release
and also
head -n 1 /etc/nv_tegra_release
and in both cases got
No such file or directory
.
Update:
This worked
dpkg-query --showformat='${Version}' --show nvidia-l4t-core
and shows
32.2.3-20191105135548
DaneLLL
8
Hi,
r32.3.1 is fresh out of oven. Please give it a try. The fix is included and you don’t need to replace libnvjpeg.so.