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 792696 - rtp: Implement support for generic RTP Forward Error Correction
rtp: Implement support for generic RTP Forward Error Correction
Status: RESOLVED FIXED
Product: GStreamer
Classification: Platform
Component: gst-plugins-good
unspecified
Other All
: Normal enhancement
: 1.13.90
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on: 792695 793008
Blocks:
 
 
Reported: 2018-01-19 18:57 UTC by Mathieu Duponchelle
Modified: 2018-05-03 06:17 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
rtpptdemux: Add ssrc to output caps (1.61 KB, patch)
2018-01-19 18:57 UTC, Mathieu Duponchelle
committed Details | Review
rtpptdemux: Add ignored-payload-types property (5.52 KB, patch)
2018-01-19 18:57 UTC, Mathieu Duponchelle
committed Details | Review
rtp: Implement ULPFEC (RFC 5109) (529.17 KB, patch)
2018-01-19 18:58 UTC, Mathieu Duponchelle
none Details | Review
rtpbin: Expose FEC support signals (22.69 KB, patch)
2018-01-19 18:58 UTC, Mathieu Duponchelle
none Details | Review
rtp: Implement ULPFEC (RFC 5109) (529.16 KB, patch)
2018-01-29 15:46 UTC, Mathieu Duponchelle
none Details | Review
rtpbin: Expose FEC support signals (22.69 KB, patch)
2018-01-29 15:46 UTC, Mathieu Duponchelle
none Details | Review
rtp: Implement ULPFEC (RFC 5109) (529.17 KB, patch)
2018-01-30 13:24 UTC, Mathieu Duponchelle
committed Details | Review
rtpbin: Expose FEC support signals (22.69 KB, patch)
2018-01-30 13:24 UTC, Mathieu Duponchelle
committed Details | Review

Description Mathieu Duponchelle 2018-01-19 18:57:41 UTC
While this commit set does not implement FLEX FEC, the implementation
and interface have been designed with this requirement in mind.
Comment 1 Mathieu Duponchelle 2018-01-19 18:57:45 UTC
Created attachment 367099 [details] [review]
rtpptdemux: Add ssrc to output caps

It may be useful downstream
Comment 2 Mathieu Duponchelle 2018-01-19 18:57:49 UTC
Created attachment 367100 [details] [review]
rtpptdemux: Add ignored-payload-types property

Packets with these payload types will be dropped. A use case
for this is FEC, where we want FEC packets to go through the
jitterbuffer, but not be output by rtpbin.
Comment 3 Mathieu Duponchelle 2018-01-19 18:58:00 UTC
Created attachment 367101 [details] [review]
rtp: Implement ULPFEC (RFC 5109)

We expose a set of new elements:

* ULPFEC encoder / decoder
* A storage element, which should be placed before jitterbuffers,
  and is used to store packets in order to attempt reconstruction
  after the jitterbuffer has sent PacketLost events
* RED encoder / decoder (RFC 2198), these are necessary to
  use FEC in webrtc, as browsers will propose and expect ulpfec
  packets to be wrapped in red packets

With contributions from:

Mathieu Duponchelle <mathieu@centricular.com>
Sebastian Dröge <sebastian@centricular.com>
Comment 4 Mathieu Duponchelle 2018-01-19 18:58:05 UTC
Created attachment 367102 [details] [review]
rtpbin: Expose FEC support signals

Also slightly refactor complete_session_src
Comment 5 Mathieu Duponchelle 2018-01-19 19:00:45 UTC
A rust example has been proposed at https://github.com/sdroege/gstreamer-rs/pull/73
Comment 6 Mathieu Duponchelle 2018-01-29 15:46:11 UTC
Created attachment 367584 [details] [review]
rtp: Implement ULPFEC (RFC 5109)

We expose a set of new elements:

* ULPFEC encoder / decoder
* A storage element, which should be placed before jitterbuffers,
  and is used to store packets in order to attempt reconstruction
  after the jitterbuffer has sent PacketLost events
* RED encoder / decoder (RFC 2198), these are necessary to
  use FEC in webrtc, as browsers will propose and expect ulpfec
  packets to be wrapped in red packets

With contributions from:

Mathieu Duponchelle <mathieu@centricular.com>
Sebastian Dröge <sebastian@centricular.com>
Comment 7 Mathieu Duponchelle 2018-01-29 15:46:17 UTC
Created attachment 367585 [details] [review]
rtpbin: Expose FEC support signals

Also slightly refactor complete_session_src
Comment 8 Mathieu Duponchelle 2018-01-30 00:06:53 UTC
I know this is a pretty large change set, but we could maybe limit the scope of the review to API concerns to make things easier?
Comment 9 Mathieu Duponchelle 2018-01-30 13:24:02 UTC
Created attachment 367645 [details] [review]
rtp: Implement ULPFEC (RFC 5109)

We expose a set of new elements:

* ULPFEC encoder / decoder
* A storage element, which should be placed before jitterbuffers,
  and is used to store packets in order to attempt reconstruction
  after the jitterbuffer has sent PacketLost events
* RED encoder / decoder (RFC 2198), these are necessary to
  use FEC in webrtc, as browsers will propose and expect ulpfec
  packets to be wrapped in red packets

With contributions from:

Mathieu Duponchelle <mathieu@centricular.com>
Sebastian Dröge <sebastian@centricular.com>
Comment 10 Mathieu Duponchelle 2018-01-30 13:24:08 UTC
Created attachment 367646 [details] [review]
rtpbin: Expose FEC support signals

Also slightly refactor complete_session_src
Comment 11 Mathieu Duponchelle 2018-02-21 01:55:55 UTC
If no one has any objections, I propose we merge this, it's already been reviewed by a few different people (at pexip where it's been in use for quite some time, Sebastian and I)
Comment 12 Sebastian Dröge (slomo) 2018-02-21 07:43:23 UTC
+1
Comment 13 Tim-Philipp Müller 2018-02-21 09:22:38 UTC
Yes, I think we should get it in. The API surface is quite small and the code base is battle tested.

Only niggle I have is the name of that "percentage-imp" property ;)
Comment 14 Mathieu Duponchelle 2018-02-21 13:19:11 UTC
Attachment 367099 [details] pushed as 36b991f - rtpptdemux: Add ssrc to output caps
Attachment 367100 [details] pushed as 82d0950 - rtpptdemux: Add ignored-payload-types property
Attachment 367645 [details] pushed as d5ad50b - rtp: Implement ULPFEC (RFC 5109)
Attachment 367646 [details] pushed as fdf6419 - rtpbin: Expose FEC support signals
Comment 15 Nicolas Dufresne (ndufresne) 2018-02-21 16:06:47 UTC
Review of attachment 367100 [details] [review]:

::: gst/rtpmanager/gstrtpptdemux.c
@@ -202,0 +240,5 @@
+  gobject_klass->set_property = gst_rtp_pt_demux_set_property;
+  gobject_klass->get_property = gst_rtp_pt_demux_get_property;
+
... 2 more ...

I'm not sure how, but if we could add a since marker it would be nice.
Comment 16 Nicolas Dufresne (ndufresne) 2018-02-21 16:08:21 UTC
Review of attachment 367646 [details] [review]:

::: gst/rtpmanager/gstrtpbin.c
@@ +2116,3 @@
+   * @id: the session id
+   *
+   * Request the internal RTPStorage object as #GObject in session @id.

Missing Since 1.14 here.
Comment 17 Nicolas Dufresne (ndufresne) 2018-02-21 16:09:24 UTC
Review of attachment 367645 [details] [review]:

These elements seems to be missing the documentation for element section and examples, and are missing from the generated documentation.
Comment 18 Nicolas Dufresne (ndufresne) 2018-02-21 16:09:48 UTC
Would it be possible to document before the next release ?
Comment 19 Mathieu Duponchelle 2018-02-21 17:39:40 UTC
Will do
Comment 20 Mathieu Duponchelle 2018-02-26 15:49:08 UTC
(In reply to Nicolas Dufresne (stormer) from comment #18)
> Would it be possible to document before the next release ?

Done, thanks for pointing out!
Comment 21 Mathieu Duponchelle 2018-02-26 15:53:55 UTC
(In reply to Nicolas Dufresne (stormer) from comment #15)
> Review of attachment 367100 [details] [review] [review]:
> 
> ::: gst/rtpmanager/gstrtpptdemux.c
> @@ -202,0 +240,5 @@
> +  gobject_klass->set_property = gst_rtp_pt_demux_set_property;
> +  gobject_klass->get_property = gst_rtp_pt_demux_get_property;
> +
> ... 2 more ...
> 
> I'm not sure how, but if we could add a since marker it would be nice.

Done

(In reply to Nicolas Dufresne (stormer) from comment #16)
> Review of attachment 367646 [details] [review] [review]:
> 
> ::: gst/rtpmanager/gstrtpbin.c
> @@ +2116,3 @@
> +   * @id: the session id
> +   *
> +   * Request the internal RTPStorage object as #GObject in session @id.
> 
> Missing Since 1.14 here.

Done too, thanks!