retransmission (rtx) in rtpjitterbuffer is sent too late

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

retransmission (rtx) in rtpjitterbuffer is sent too late

bojan74
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/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: retransmission (rtx) in rtpjitterbuffer is sent too late

Nicolas Dufresne-5
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
> [hidden email]
> https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel