Hi all,
I have been trying to get an RTSP H264 1080p/30 stream working at 8mbits.
The stream works if I keep the bitrate to around 1Mbit, but above this it struggles. There is a similar issue with a udpsink/udpsrc even if run from the same machine.
I am on Xavier AGX with Jetpack 5.02, and GStreamer 1.16.3.
Sending stream for UDP: sudo gst-launch-1.0 -v v4l2src device=/dev/video0 ! ‘image/jpeg,width=1920,height=1080,framerate=30/1,format=MJPG’ ! jpegdec ! queue ! nvvidconv ! nvv4l2h264enc control-rate=1 bitrate=8000000 idrinterval=10 maxperf-enable=1 ! “video/x-h264” ! queue ! h264parse config-interval=1 ! rtph264pay mtu=1024 config-interval=1 ! queue ! udpsink host=127.0.0.1 port=5600
If I then background this and run a receiving task:
gst-launch-1.0 udpsrc port=5600 ! “application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96” ! rtph264depay ! h264parse ! matroskamux ! filesink location=“Cam.mkv”
I get a file that doesn’t play, and if I look at the size it is 0.5Mbytes/second (rather than the 1Mbyte it should be).
I can make things work with the UDP by adding a buffer-size=2500000 to both sink and src. Or if I increase packet size (rtph264pay mtu=45000) then the file transfers correctly. However neither of these can be used on the RTSP stream.
Looking at the H264 file received, I think we are receiving nearly all P frames, but when we get a burst of packets from an I frame a lot are lost. Once in a while an I-Frame gets through, and then the video displays correctly for a while before getting worse and worse again.
If it makes a difference, my RTSP stream is launched with
gst_rtsp_media_factory_set_launch(factory1,
"( udpsrc address=127.0.0.1 port=50000 caps = "application/x-rtp, "
"media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, "
"payload=(int)96" ! rtph264depay ! rtph264pay name=pay0 pt=96 "
"udpsrc address=127.0.0.1 port=50001 caps = "application/x-rtp, "
“media=(string)audio, clock-rate=(int)44100, encoding-name=(string)”
"MP4A-LATM, payload=(int)97, cpresent=(string)0, "
"config=(string)40002410" ! rtpmp4adepay ! rtpmp4apay name=pay1 pt=97 "
"udpsrc address=127.0.0.1 port=50002 caps = "application/x-rtp, "
“media=(string)audio, clock-rate=(int)44100, encoding-name=(string)”
"MP4A-LATM, payload=(int)98, cpresent=(string)0, "
“config=(string)40002410" ! rtpmp4adepay ! rtpmp4apay name=pay2 pt=98 )”);
Has anyone got ideas on where I am going wrong?
Thank you in advance.