Quark Carrier Gstreamer UDP video stream problem

Hello,

I am trying to stream video from a CSI Camera (Arducam IMX477) to a laptop over the network via udp with rtp using gstreamer.

The thing is that this already was working, but after I installed the Jetson OS on an external SD card, it was not working anymore. I also reverted everything to normal install, but not working anymore. (https://connecttech.com/resource-center/kdb377-booting-off-external-media-cti-jetson-carriers/)

The command that I use:
Jetson Xavier NX:
gst-launch-1.0 nvarguscamerasrc sensor-id=0 ! “video/x-raw(memory:NVMM),width=1920,height=1080,framerate=30/1” ! nvvidconv ! omxh264enc ! rtph264pay ! udpsink host=10.0.0.9 port=5004 -v

PC:
gst-launch-1.0 -v udpsrc port=5004 caps = “application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96” ! rtph264depay ! decodebin ! videoconvert ! autovideosink

I tried multiple setups: Connection over Wifi, Connection via direct ethernet, Connection ethernet over router.
I looked on the PC into the network with wireshark and it was receiving UDP packets on the correct port:

The camera is working, I tried with fakesrc and also just to record an mp4 file, which was working.

I had a similar issue with the Jetson TX2, 2 years ago, I could solve it there by just implementing the gstreamer pipeline in c, but here I wanted to use the AI examples which use gstreamer.

Should I compile the gstreamer by myself or what could be wrong?

Quark Carrier: https://connecttech.com/product/quark-carrier-nvidia-jetson-xavier-nx/

gst-launch-1.0 nvarguscamerasrc sensor-id=0 ! "video/x-raw(memory:NVMM),width=1920,height=1080,framerate=30/1" ! nvvidconv ! omxh264enc ! rtph264pay ! udpsink host=10.0.0.9 port=5004 -v
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Framerate set to : 30 at NvxVideoEncoderSetParameterNvMMLiteOpen : Block : BlockType = 4 
===== NVMEDIA: NVENC =====
/GstPipeline:pipeline0/GstNvArgusCameraSrc:nvarguscamerasrc0.GstPad:src: caps = video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080, format=(string)NV12, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080, format=(string)NV12, framerate=(fraction)30/1
/GstPipeline:pipeline0/Gstnvvconv:nvvconv0.GstPad:src: caps = video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080, format=(string)NV12, framerate=(fraction)30/1
NvMMLiteBlockCreate : Block : BlockType = 4 
H264: Profile = 66, Level = 40 
/GstPipeline:pipeline0/GstOMXH264Enc-omxh264enc:omxh264enc-omxh264enc0.GstPad:sink: caps = video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080, format=(string)NV12, framerate=(fraction)30/1
/GstPipeline:pipeline0/Gstnvvconv:nvvconv0.GstPad:sink: caps = video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080, format=(string)NV12, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:sink: caps = video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080, format=(string)NV12, framerate=(fraction)30/1
GST_ARGUS: Creating output stream
CONSUMER: Waiting until producer is connected...
GST_ARGUS: Available Sensor modes :
GST_ARGUS: 4032 x 3040 FR = 29,999999 fps Duration = 33333334 ; Analog Gain range min 1,000000, max 22,250000; Exposure Range min 13000, max 683709000;

GST_ARGUS: 1920 x 1080 FR = 59,999999 fps Duration = 16666667 ; Analog Gain range min 1,000000, max 22,250000; Exposure Range min 13000, max 683709000;

GST_ARGUS: Running with following settings:
   Camera index = 0 
   Camera mode  = 1 
   Output Stream W = 1920 H = 1080 
   seconds to Run    = 0 
   Frame Rate = 59,999999 
GST_ARGUS: Setup Complete, Starting captures for 0 seconds
GST_ARGUS: Starting repeat capture requests.
CONSUMER: Producer has connected; continuing.
/GstPipeline:pipeline0/GstOMXH264Enc-omxh264enc:omxh264enc-omxh264enc0.GstPad:src: caps = video/x-h264, alignment=(string)au, profile=(string)baseline, level=(string)4, stream-format=(string)avc, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1, interlace-mode=(string)progressive, colorimetry=(string)bt709, chroma-site=(string)mpeg2
/GstPipeline:pipeline0/GstRtpH264Pay:rtph264pay0.GstPad:sink: caps = video/x-h264, alignment=(string)au, profile=(string)baseline, level=(string)4, stream-format=(string)avc, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1, interlace-mode=(string)progressive, colorimetry=(string)bt709, chroma-site=(string)mpeg2
/GstPipeline:pipeline0/GstOMXH264Enc-omxh264enc:omxh264enc-omxh264enc0.GstPad:src: caps = video/x-h264, alignment=(string)au, profile=(string)baseline, level=(string)4, stream-format=(string)avc, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1, codec_data=(buffer)014240150301000b6742402895a01e0089f95001000468ce3c80, interlace-mode=(string)progressive, colorimetry=(string)bt709, chroma-site=(string)mpeg2
/GstPipeline:pipeline0/GstRtpH264Pay:rtph264pay0.GstPad:src: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, packetization-mode=(string)1, profile-level-id=(string)424015, sprop-parameter-sets=(string)"Z0JAKJWgHgCJ+VA\=\,aM48gA\=\=", payload=(int)96, ssrc=(uint)718637537, timestamp-offset=(uint)3330920441, seqnum-offset=(uint)3751, a-framerate=(string)30
/GstPipeline:pipeline0/GstUDPSink:udpsink0.GstPad:sink: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, packetization-mode=(string)1, profile-level-id=(string)424015, sprop-parameter-sets=(string)"Z0JAKJWgHgCJ+VA\=\,aM48gA\=\=", payload=(int)96, ssrc=(uint)718637537, timestamp-offset=(uint)3330920441, seqnum-offset=(uint)3751, a-framerate=(string)30
/GstPipeline:pipeline0/GstRtpH264Pay:rtph264pay0.GstPad:sink: caps = video/x-h264, alignment=(string)au, profile=(string)baseline, level=(string)4, stream-format=(string)avc, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1, codec_data=(buffer)014240150301000b6742402895a01e0089f95001000468ce3c80, interlace-mode=(string)progressive, colorimetry=(string)bt709, chroma-site=(string)mpeg2
/GstPipeline:pipeline0/GstRtpH264Pay:rtph264pay0: timestamp = 3330998562
/GstPipeline:pipeline0/GstRtpH264Pay:rtph264pay0: seqnum = 3759

on PC:

gst-launch-1.0 -v udpsrc port=5004 caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96" ! rtph264depay ! decodebin ! videoconvert ! autovideosink
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
/GstPipeline:pipeline0/GstUDPSrc:udpsrc0.GstPad:src: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96
/GstPipeline:pipeline0/GstRtpH264Depay:rtph264depay0.GstPad:sink: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96
Setting pipeline to PLAYING ...
New clock: GstSystemClock

Hi @user56209,
Have you been in touch with the Connect Tech support team? If you fill out our Customer Support Form, a member of the support team will be in touch and can help you troubleshoot.

Thanks!
Kara

I found it out by myself, seems I was using the wrong gstreamer commands…
I think instead of just
omxh264enc
it should be
omxh264enc control-rate=2 bitrate=4000000 ! video/x-h264, stream-format=byte-stream

So the stream format is the key I think.

Here are the correct ones:

Hi user56209,
I’m glad that you could resolve your issue by yourself.
I almost have the same setup as you, except that I use a IMX219 camera.
Did you encounter that kind of error when you try to launch a Gstreamer pipeline from a IMX219 camera on a Quark :

tegra194-vi5 15c10000.vi: no reply from camera processor
tegra194-vi5 15c10000.vi: vi capture get status failed

See related topic for more information, any advice will be appreciated.