appsrc frame rate and glass2glass latency

adam255 shunguang at yahoo.com
Fri Feb 12 20:16:06 UTC 2021


Dear developers,

We use the appsrc with udp sink to deliver live video from camera to client
on TX2 with the following signal processing pipeline.

------------------------------------- begin signal processing pipeline
-------------------------------------
Server side:
SceneTime(t0) ->camera → (t1) Capture(at 5Hz) → BayerImgQueue →
SignalProcessing–> (t2) outputYuvImgQueue →
(t3)GstreamerPipeLineSendVideoToClient

GStreamer pipeline:
pipelineStr = “appsrc format=3 is-live=true !
video/x-raw,format=(string)I420, width=(int)” + std::to_string(w) +
“,height=(int)” + std::to_string(h) +
" , framerate=" + std::to_string(frameRate)+ “/ 1” +
" ! identity check-imperfect-timestamp=true" +
" ! nvvidconv" +
" ! omxh264enc control-rate=2 target-bitrate=4000000 tune=zerolatency" +
" ! video/x-h264,stream-format=(string)byte-stream ! h264parse ! rtph264pay"
+
" ! udpsink host=" + clientIp +" port=50000";

Client side:
UdpSrc → display (t4)
------------------------------- end signal processing pipeline
-------------------------------------------

Let’s define the corresponding timestamps and time intervals as follows.
t0: time stamp on a computer screen which is captured by camera
t1: time at which a frame y is just captured
t2: time at which the frame y is processed and written into the
ouputYuvImgQueue
t3: time at which the frame y is read from ouputYuvImgQueue by
need_data_callback()
t4:time stamp on receiver side screen
dt1 = t2-t1
dt2 = t3-t2
dt3 = t4-t0 (glass-to-glass latency)

Our experiments show that the glass-to-glass latency strongly depends on the
frameRate parameter in video/x-raw cap. For example
frameRate   dt1(ms)   dt2 range(ms)	 max dt3(ms)
5                  25           [700,850]             ~1290
6                  25           [270,300]              ~740 		
7                  25           [200,260]              ~690			
10                25           [150,200]              ~630    
15                25           [110,120]              ~550
20                25           [92,100]               ~530
30                25           [75,79]                 ~500

Note: when there is no new image in outputYuvImgQueue and
need_data_callback() is called, we just repeat the previous frame.

My Question is why the frameRate parameter affects dt2 so much? To void
this, what kind of parameter shall we tune?

Thanks,



--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/


More information about the gstreamer-devel mailing list