retransmission (rtx) in rtpjitterbuffer is sent too late

bojan74 bojan.flander at gmail.com
Sat Apr 11 09:02:55 UTC 2020


Hi,

I want to postprocess vp8 dump rtp file (rtp headers + payloads) to generate
webm file.

I am using:
appsrc -> rtprtxreceive -> rtpjitterbuffer -> rtpvp8depay -> webbmux ->
filesink

In my test vp8 file I have quite a lot of rtx packets (retransmissions) and
since my postprocessing is not involved in real communication between two
sides I am noticing a problem because I am getting rtx packets despite my
rtpjitterbuffer still didn't ask for retransmission.
So rtprtxreceive element says ... "dropping rtx packet 24792 because its
orig seqnum (#12576) is not in our pending retransmission requests"
Some moments later rtpjitterbuffer found out that packet #12576 didn't
arrive and send retransmission demand but that's too late cause rtx packet
is already dropped.

I tried to play with different settings but without success - maybe is
problem combination of all these?:
	g_object_set(G_OBJECT(rtpjitterbuffer), "latency", 2000, NULL);
	g_object_set(G_OBJECT(rtpjitterbuffer), "do-retransmission", TRUE, NULL);
	g_object_set(G_OBJECT(rtpjitterbuffer), "mode", 0, NULL);
	g_object_set(G_OBJECT(rtpjitterbuffer), "rtx-delay", 10, NULL);
	g_object_set(G_OBJECT(rtpjitterbuffer), "rtx-delay-reorder", 1, NULL);
	g_object_set(G_OBJECT(rtpjitterbuffer), "rtx-next-seqnum", TRUE, NULL);
	g_object_set(G_OBJECT(rtpjitterbuffer), "rtx-retry-timeout", 1, NULL);

Is there any option that retransmission will be send on first detection that
expected packet didnt' arrive?

For example in my case that retransmission for #12576 will be send when this
happens - expected packet 12576 didnt arrive:


In my case retransmission was send about 75ms later:


But in the mean time rtx packet for #12576 arrived and was dropped - even I
was holding it additional 30ms before pushing it in appsrc because I was
hoping that in the mean time rtpjitterbuffer will send retransmission:


But it looks that even if I wait longer with rtx packet it didn't help to
trigger retransmision. Looks like a few more other packets must arrive
before retransmission is triggered even I set "rtx-delay-reorder" to 1?


Here is complete log from arriving of 12575 (this one is still ok), 12576 is
missing and arrive as rtx (retransmission):



Expected #12576 didn't arrive:



After my "artificial" delay of 30ms at appsrc rtx packet with orig seqnum
#12576 arrive but it is dropped cause rtpjitterbuffer didn't send
retransmission:



Rtpjitterbuffer detect that #12576 didn't arrive and ask for retransmission
but that's too late cause rtx already arrived:



So is there any rtpjitterbuffer setting that retransmission will be send
faster, for example imediatelly after expected packet does not arrive?

Additional question here is why is master ssrc as FFFFFFFF?
As I was looking at source code ssrc info is not send from rtpjitterbuffer
and so rtprtxreceive set it as -1 (FFFFFFFF).

gstrtpjitterbuffer.c - no ssrc here?


gstrtprtxreceive.c


Thanks a lot in advanced for any idea/advice!




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


More information about the gstreamer-devel mailing list