Commit graph

14 commits

Author SHA1 Message Date
Thibault Saunier
64f664c859 plugin: Implement bandwidth estimator based on the Google Congestion Control algorithm
See https://datatracker.ietf.org/doc/html/draft-ietf-rmcat-gcc-02

This commit implements the bandwidth estimation as a GStreamer element
that is then used in webrtcbin through the new `request-bandwidth-estimator`
signal.

This keeps our Homegrown congestion controller but removes the possibility
to switch CC algorithm at runtime.
2022-08-05 03:13:05 +02:00
Thibault Saunier
f6f079f3a8 Use StreamConsumer from gstreamer itself
Merged in https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/merge_requests/1022
2022-05-23 13:52:39 +02:00
Vivienne Watermeier
f091e90b24 Depend on gstreamer-rs main to add a feature for v1_22 2022-05-09 22:49:24 +02:00
Thibault Saunier
075a625305 Make our "loss based control" algorithm closer to what is defined in [GCC]
As specified in Google Congestion Control we should run the packet loss
estimation algorithm "every time feedback from the receiver is
received".

And, also as defined by GCC, we now have 2 different estimated bitrates,
one for the delay-based controller value and one for the loss-based one,
and we use the minimum value between those 2 as our current estimation.

[GCC]: https://datatracker.ietf.org/doc/html/draft-ietf-rmcat-gcc-02
2022-05-03 15:21:20 +02:00
Raphael Dürscheid
55d30db53b Add property to specify certificate authority
Under certain circumstances one would like to use a self signed
certificate without the obstacles many browsers implement to
safeguard their users. One approach is to create a certificate
authority. One can now add this to the OS certificate store, or simply
add it to the browser. In the latter case one also needs to specify the
new authority on the webrtcsink. This commit enables this.
2022-03-31 15:23:11 +02:00
Mathieu Duponchelle
bd88395859 signalling: update protocol, reimplement in rust 2022-03-17 18:31:54 +01:00
Sebastian Dröge
1983041770 Update to gstreamer-rs 0.18 instead of using it from git
And update all other dependencies.
2022-01-25 20:12:23 +01:00
Thibault Saunier
689bd93055 Implement the GstNavigation interface using a dedicated DataChannel protocol
This allows interacting with the source element from within the browser
very easily
2022-01-03 22:30:44 +01:00
Mathieu Duponchelle
8128c14fa9 API: refactor error signalling
* Expect Box<dyn Error> from custom signaller

* Use thiserror to define the error codes returned to custom
  signallers
2021-12-21 23:37:29 +01:00
Mathieu Duponchelle
1826111278 Implement support for FEC / retransmission 2021-12-10 01:12:19 +01:00
Mathieu Duponchelle
5f98e61c91 examples: implement webrtcsink-stat-server 2021-11-30 22:55:28 +01:00
Sebastian Dröge
e7a9c2b054 Update dependencies
This involves removing lots of unnecessary `unwrap()`s and simplifies
the `lookup_codecs()` function a bit.
2021-11-21 18:44:00 +01:00
Mathieu Duponchelle
8c6ff24052 webrtcsink: Initial congestion control implementation
Naive heuristic lifted from an earlier proof of concept,
augmented with logic from
https://datatracker.ietf.org/doc/html/draft-ietf-rmcat-gcc-02#section-5.5

A property is exposed to disable congestion control for
testing purposes, it can be extended in the future to allow
selecting a different congestion control scheme.

+ Update the documentation
2021-11-10 02:55:46 +01:00
Mathieu Duponchelle
79fb66f338 Initial commit 2021-10-28 05:14:41 +02:00