retransmission (rtx) in rtpjitterbuffer is sent too late

Nicolas Dufresne nicolas at ndufresne.ca
Sun Apr 12 01:47:09 UTC 2020


Le samedi 11 avril 2020 à 04:02 -0500, bojan74 a écrit :
> 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);


It's a bit more complex. In standard RTP, retransmissions are sent over
RTCP, which is a different stream. To get this working, you'll have to
use rtpbin, and setup the same pipeline as if this was live, but of
course without sending RTCP. I suggest you start looking into RTPBin
first, as explaining all this is a lot of work. 
> 
> 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/
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel



More information about the gstreamer-devel mailing list