After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 658419 - Add FIR support to rtpsession
Add FIR support to rtpsession
Status: RESOLVED FIXED
Product: GStreamer
Classification: Platform
Component: gst-plugins-good
git master
Other Linux
: Normal normal
: 0.10.31
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Blocks:
 
 
Reported: 2011-09-07 00:09 UTC by Olivier Crête
Modified: 2011-11-14 11:33 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
base: rtcpbuffer: Add feedback message types from RFC 5104 (2.04 KB, patch)
2011-09-07 00:09 UTC, Olivier Crête
committed Details | Review
rtpsession: Process received Full Intra Requests (5.43 KB, patch)
2011-09-07 00:11 UTC, Olivier Crête
committed Details | Review
rtpsession: Hack to FIR because Google doesn't set the sender ssrc correctly (1.29 KB, patch)
2011-09-07 00:11 UTC, Olivier Crête
committed Details | Review
rtpsession: Put the PLI requests in each RTPSource (5.85 KB, patch)
2011-09-07 00:11 UTC, Olivier Crête
committed Details | Review
rtpsession: Send FIR requests in response to key unit requests with all-headers=TRUE (7.63 KB, patch)
2011-09-07 00:11 UTC, Olivier Crête
none Details | Review
gstrtpsession: Add special mode to use FIR as repair as Google does (1.07 KB, patch)
2011-09-07 00:11 UTC, Olivier Crête
committed Details | Review
rtpsession: Send FIR requests in response to key unit requests with all-headers=TRUE (7.64 KB, patch)
2011-11-04 23:32 UTC, Olivier Crête
none Details | Review
rtpsession: Send FIR requests in response to key unit requests with all-headers=TRUE (7.68 KB, patch)
2011-11-11 22:44 UTC, Olivier Crête
committed Details | Review

Description Olivier Crête 2011-09-07 00:09:19 UTC
I have two sets of patches to add support for RFC 5104 RTCP FIR  (Full Intra Request). The first set is for receiving FIR requests and just emits an upstream GstForceKeyUnit event with all-headers=TRUE. It also includes a patch to -base to add the numbers from RFC 5104 to the rtcpbuffer.h header.

The second set adds support for sending FIR requests. I think it should only be used when the RTP depayloader detects that the codec data is missing. Which would happen if you switch sources or something. The problem is that the FIR request has a sequence number that should not be incremented if the same request is being re-transmitted. So I think this requires adding a count number to the GstForceKeyUnit event (see bug #607742 comment #24).
Comment 1 Olivier Crête 2011-09-07 00:09:46 UTC
Created attachment 195830 [details] [review]
base: rtcpbuffer: Add feedback message types from RFC 5104
Comment 2 Olivier Crête 2011-09-07 00:11:02 UTC
Created attachment 195831 [details] [review]
rtpsession: Process received Full Intra Requests

Process FIR requests according to RFC 5104
Comment 3 Olivier Crête 2011-09-07 00:11:04 UTC
Created attachment 195832 [details] [review]
rtpsession: Hack to FIR because Google doesn't set the sender ssrc correctly
Comment 4 Olivier Crête 2011-09-07 00:11:07 UTC
Created attachment 195833 [details] [review]
rtpsession: Put the PLI requests in each RTPSource

Also refactor a bit and put all the keyframe request code in one
place inside rtpsession.c
Comment 5 Olivier Crête 2011-09-07 00:11:09 UTC
Created attachment 195834 [details] [review]
rtpsession: Send FIR requests in response to key unit requests with all-headers=TRUE
Comment 6 Olivier Crête 2011-09-07 00:11:12 UTC
Created attachment 195835 [details] [review]
gstrtpsession: Add special mode to use FIR as repair as Google does
Comment 7 Olivier Crête 2011-09-07 00:12:22 UTC
Comment #1 to #3 contain the first series of patches and comments #4, #5 and #6 have the seconid.
Comment 8 Mark Nauwelaerts 2011-10-24 11:47:08 UTC
(In reply to comment #5)
> Created an attachment (id=195834) [details] [review]
> rtpsession: Send FIR requests in response to key unit requests with
> all-headers=TRUE

Looks like there is a
 started_fir = TRUE;
missing (probably in the first if alongside ret = TRUE; if I get the drift).
Comment 9 Mark Nauwelaerts 2011-10-24 11:49:45 UTC
(In reply to comment #6)
> Created an attachment (id=195835) [details] [review]
> gstrtpsession: Add special mode to use FIR as repair as Google does

Not sure about the semantics/specs or whatever the sender of the even is doing here, but the comment says
"even if we just want regular PLI"
while the code checks for
if (!pli ...)
(which does not seem to match "wanting regular PLI").
Comment 10 Olivier Crête 2011-11-04 23:32:52 UTC
Created attachment 200725 [details] [review]
rtpsession: Send FIR requests in response to key unit requests with all-headers=TRUE

Original patch had a tiny bug, here is an updated version
Comment 11 Mark Nauwelaerts 2011-11-11 11:31:00 UTC
Any comments on previous comments/nitpicks ?

In particular, latest patch still has a started_fir that looks pretty (a)stray.
Comment 12 Olivier Crête 2011-11-11 22:44:06 UTC
Created attachment 201260 [details] [review]
rtpsession: Send FIR requests in response to key unit requests with all-headers=TRUE

The Google hack is a bit special.. It's because Google uses FIR request when they should be using PLI. So basically what we mean is, if you didn'T negotiate pli, but you negotiated the Google FIR, then send a FIR. Hopefully we can remove it when we Google updates their stuff.

I also updated the other patch to actually set started_fir, good catch.
Comment 13 Mark Nauwelaerts 2011-11-14 11:30:34 UTC
Committed to -base:

commit 82827df405170035213dcef062cf9e6d1a4cdc6e
Author: Olivier Crête <olivier.crete@collabora.com>
Date:   Tue Aug 30 18:27:09 2011 -0400

    rtcpbuffer: Add feedback message types from RFC 5104
    
    These are Codec Control messages (CCM)
    
    https://bugzilla.gnome.org/show_bug.cgi?id=658419


Committed to -good:

commit 1169bb05af25d6f0902a8d29c067b237ebfd6849
Author: Olivier Crête <olivier.crete@collabora.com>
Date:   Fri Sep 2 19:20:07 2011 -0400

    gstrtpsession: Add special mode to use FIR as repair as Google does
    
    https://bugzilla.gnome.org/show_bug.cgi?id=658419

commit 79a9564c688773aae3ed1df006f82beb6e2d038e
Author: Olivier Crête <olivier.crete@collabora.com>
Date:   Thu Sep 1 17:47:38 2011 -0400

    rtpsession: Send FIR requests in response to key unit requests with all-headers=TRUE
    
    https://bugzilla.gnome.org/show_bug.cgi?id=658419

commit 12a6b9613bd081f16719734a1706c8f2b9d6b36f
Author: Olivier Crête <olivier.crete@collabora.com>
Date:   Thu Sep 1 16:25:21 2011 -0400

    rtpsession: Put the PLI requests in each RTPSource
    
    Also refactor a bit and put all the keyframe request code in one
    place inside rtpsession.c
    
    https://bugzilla.gnome.org/show_bug.cgi?id=658419

commit 59c028a4ceb96a71e7d37c965ff72d9bc2cc4641
Author: Olivier Crête <olivier.crete@collabora.com>
Date:   Wed Aug 31 14:35:33 2011 -0400

    rtpsession: Hack to FIR because Google doesn't set the sender ssrc correctly
    
    https://bugzilla.gnome.org/show_bug.cgi?id=658419

commit 0ad78db0a30bda6b9be9b674c4b1ecf90a8a69c0
Author: Olivier Crête <olivier.crete@collabora.com>
Date:   Tue Aug 30 19:06:13 2011 -0400

    rtpsession: Process received Full Intra Requests
    
    Process FIR requests according to RFC 5104
    
    https://bugzilla.gnome.org/show_bug.cgi?id=658419