HI All,
I am trying to stream 4K video with a Jetson TX2 board. This board will be adapted to a drone over 5G network. When I tested gstreamer pipeline on the Jetson TX2 developer board, there were no problem to play 4K 30 FPS and to stream 4K RTP 30 FPS. The picture has a good quality when I stream 4K video with bandwidth 10Mbps.
However, the Jetson TX2 carrier board, which was brought from a drone service provider, displays only 18-20 FPS no matter what method it takes. Also, the frame breaks a lot when transmitted over the network. The carrier board has one TC358840 chip. I also tested with Magewell USB Capture HDMI 4K Plus (It is USB3 type encoder).
The kernel version of Jetson TX2 developer board is lastest, but the Jetson TX2 carrier board has 28.2.1 kernel and a gstreamer version is 1.8.3. The best choice is to upgrade the kernel of the carrier board and install the corresponding chipset driver, but we can’t do it right away. I searched the related posts many times and tried them, but I couldn’t solve the problem. I want to know what should I do more before upgrading the kernel.
The carrier board :
- cat /etc/nv_tegra_release
R28 (release), REVISION: 2.1, GCID: 11272647, BOARD: t186ref, EABI: aarch64, DATE: Thu May 17 07:29:06 UTC 2018
- 3840x2160 : 18~20 FPS
GST_DEBUG=“GST_TRACER:7” GST_TRACERS=“framerate” gst-launch-1.0 v4l2src device=/dev/video0 ! ‘video/x-raw, width=3840, height=2160, framerate=30/1, format=I420’ ! nvvidconv ! ‘video/x-raw(memory:NVMM), width=3840, height=2160, format=(string)I420, framerate=(fraction)30/1’ ! nvoverlaysink sync=false
0:00:00.063211315 3096 0x601d80 DEBUG GST_TRACER gsttracer.c:163:gst_tracer_register: update existing feature 0x5fb300 (cpuusage)
0:00:00.063290548 3096 0x601d80 DEBUG GST_TRACER gsttracer.c:163:gst_tracer_register: update existing feature 0x5fb240 (graphic)
0:00:00.063322708 3096 0x601d80 DEBUG GST_TRACER gsttracer.c:163:gst_tracer_register: update existing feature 0x5fb180 (proctime)
0:00:00.063353845 3096 0x601d80 DEBUG GST_TRACER gsttracer.c:163:gst_tracer_register: update existing feature 0x5fb0c0 (interlatency)
0:00:00.063380501 3096 0x601d80 DEBUG GST_TRACER gsttracer.c:163:gst_tracer_register: update existing feature 0x5fb000 (scheduletime)
0:00:00.063404341 3096 0x601d80 DEBUG GST_TRACER gsttracer.c:163:gst_tracer_register: update existing feature 0x42bef0 (framerate)
0:00:00.063429493 3096 0x601d80 DEBUG GST_TRACER gsttracer.c:163:gst_tracer_register: update existing feature 0x42be30 (queuelevel)
0:00:00.063460854 3096 0x601d80 DEBUG GST_TRACER gsttracer.c:163:gst_tracer_register: update existing feature 0x42bd70 (bitrate)
0:00:00.063487094 3096 0x601d80 DEBUG GST_TRACER gsttracer.c:163:gst_tracer_register: update existing feature 0x42bcb0 (buffer)
0:00:00.063865242 3096 0x601d80 TRACE GST_TRACER gsttracerrecord.c:110:gst_tracer_record_build_format: framerate.class, pad=(structure)“scope,\ type=(GType)NULL,\ related-to=(GstTracerValueScope)GST_TRACER_VALUE_SCOPE_PAD;”, fps=(structure)“value,\ type=(GType)NULL,\ description=(string)"Frames\\ per\\ second",\ flags=(GstTracerValueFlags)GST_TRACER_VALUE_FLAGS_AGGREGATED,\ min=(uint)0,\ max=(uint)4294967295;”;
0:00:00.063974652 3096 0x601d80 DEBUG GST_TRACER gsttracerrecord.c:124:gst_tracer_record_build_format: new format string: framerate, pad=(string)%s, fps=(uint)%u;
Setting pipeline to PAUSED …
Pipeline is live and does not need PREROLL …
Setting pipeline to PLAYING …
New clock: GstSystemClock
0:00:01.387161423 3096 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)v4l2src0_src, fps=(uint)16;
0:00:01.387284945 3096 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)capsfilter1_src, fps=(uint)16;
0:00:01.387354449 3096 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)capsfilter0_src, fps=(uint)16;
0:00:01.387405394 3096 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)nvvconv0_src, fps=(uint)16;
0:00:02.387528549 3096 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)v4l2src0_src, fps=(uint)19;
0:00:02.387621254 3096 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)capsfilter1_src, fps=(uint)19;
0:00:02.387657990 3096 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)capsfilter0_src, fps=(uint)19;
0:00:02.387689607 3096 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)nvvconv0_src, fps=(uint)19;
0:00:03.387774080 3096 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)v4l2src0_src, fps=(uint)19;
0:00:03.387847297 3096 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)capsfilter1_src, fps=(uint)19;
0:00:03.387882753 3096 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)capsfilter0_src, fps=(uint)19;
0:00:03.387913314 3096 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)nvvconv0_src, fps=(uint)19;
0:00:04.387016856 3096 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)v4l2src0_src, fps=(uint)19;
0:00:04.387103353 3096 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)capsfilter1_src, fps=(uint)19;
0:00:04.387130137 3096 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)capsfilter0_src, fps=(uint)19;
0:00:04.387150777 3096 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)nvvconv0_src, fps=(uint)19;
- 2560x1440 : 30 FPS
0:00:01.725192255 3112 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)v4l2src0_src, fps=(uint)39;
0:00:01.725283775 3112 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)capsfilter1_src, fps=(uint)38;
0:00:01.725318656 3112 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)capsfilter0_src, fps=(uint)39;
0:00:01.725346368 3112 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)nvvconv0_src, fps=(uint)38;
0:00:02.725432261 3112 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)v4l2src0_src, fps=(uint)30;
0:00:02.725522342 3112 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)capsfilter1_src, fps=(uint)30;
0:00:02.725554502 3112 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)capsfilter0_src, fps=(uint)30;
0:00:02.725581222 3112 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)nvvconv0_src, fps=(uint)30;
0:00:03.724669904 3112 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)v4l2src0_src, fps=(uint)30;
0:00:03.724757200 3112 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)capsfilter1_src, fps=(uint)30;
0:00:03.724788593 3112 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)capsfilter0_src, fps=(uint)30;
0:00:03.724815697 3112 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)nvvconv0_src, fps=(uint)30;
- 1920x1080 : 30 FPS
0:00:01.487055944 3154 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)v4l2src0_src, fps=(uint)34;
0:00:01.487242536 3154 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)capsfilter1_src, fps=(uint)34;
0:00:01.487350217 3154 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)capsfilter0_src, fps=(uint)34;
0:00:01.487445769 3154 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)nvvconv0_src, fps=(uint)34;
0:00:02.487651169 3154 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)v4l2src0_src, fps=(uint)30;
0:00:02.487837249 3154 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)capsfilter1_src, fps=(uint)30;
0:00:02.487937250 3154 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)capsfilter0_src, fps=(uint)30;
0:00:02.488029122 3154 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)nvvconv0_src, fps=(uint)30;
0:00:03.487216178 3154 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)v4l2src0_src, fps=(uint)30;
0:00:03.487394099 3154 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)capsfilter1_src, fps=(uint)30;
0:00:03.487489971 3154 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)capsfilter0_src, fps=(uint)30;
0:00:03.487580595 3154 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)nvvconv0_src, fps=(uint)30;
0:00:04.486795934 3154 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)v4l2src0_src, fps=(uint)30;
0:00:04.486989119 3154 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)capsfilter1_src, fps=(uint)30;
0:00:04.487110911 3154 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)capsfilter0_src, fps=(uint)30;
0:00:04.487197503 3154 0x601d80 TRACE GST_TRACER :0:: framerate, pad=(string)nvvconv0_src, fps=(uint)30;
- 3840x2160 RTP Streaming option :
gst-launch-1.0 v4l2src -vvv device=/dev/video0 do-timestamp=true ! nvvidconv ! ‘video/x-raw(memory:NVMM), width=3840, height=2160, format=I420, framerate=30/1’ ! omxh264enc control-rate=2 bitrate=10000000 insert-sps-pps=true insert-aud=true ! ‘video/x-h264, stream-format=(string)byte-stream’ ! h264parse ! rtph264pay mtu=1316 ! udpsink host=192.168.1.8 port=8554 async=false sync=false
- Network performance is not enough : The Jetson TX2 dev kit shows 924 Mbits/sec.
nvidia@tegra-ubuntu:~$ iperf3 -c x.x.x.x -u -b 1G -t 300 -l 1316
Connecting to host x.x.x.x, port 5201
[ 4] local x.x.x.x port 53004 connected to x.x.x.x port 5201
[ ID] Interval Transfer Bandwidth Total Datagrams
[ 4] 0.00-1.00 sec 61.9 MBytes 519 Mbits/sec 49283
[ 4] 1.00-2.00 sec 66.8 MBytes 560 Mbits/sec 53193
[ 4] 2.00-3.00 sec 62.9 MBytes 527 Mbits/sec 50087
[ 4] 3.00-4.00 sec 67.7 MBytes 568 Mbits/sec 53971
[ 4] 4.00-5.00 sec 63.6 MBytes 533 Mbits/sec 50644
[ 4] 5.00-6.00 sec 69.6 MBytes 583 Mbits/sec 55421
[ 4] 6.00-7.00 sec 72.4 MBytes 607 Mbits/sec 57666
[ 4] 7.00-8.00 sec 72.8 MBytes 611 Mbits/sec 57996
[ 4] 8.00-9.00 sec 68.2 MBytes 572 Mbits/sec 54346
[ 4] 9.00-10.00 sec 71.1 MBytes 597 Mbits/sec 56666
[ 4] 10.00-11.00 sec 65.8 MBytes 552 Mbits/sec 52421
^C[ 4] 11.00-11.47 sec 32.6 MBytes 584 Mbits/sec 25950
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 4] 0.00-11.47 sec 775 MBytes 567 Mbits/sec 0.000 ms 0/617644 (0%)
[ 4] Sent 617644 datagrams
iperf3: interrupt - the client has terminated
- /boot/extlinux/extlinux.conf
APPEND ${cbootargs} root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0 usb_port_owner_info=2 usbcore.usbfs_memory_mb=1024 usbcore.autosuspend=-1 isolcpus=
I also did sudo ./jetson_clocks.sh, sudo nvpmodel -m 0
My questions are;
- In Jetson TX2 custom carrier board, 4K local display and 4K RTP streaming do not shows enough FPS(only 18~20).
- Network performance is not good. RTP pictures do not show good quality.
What shoud I check??
Any help would be appreciated!
Thanks.