Sebastian Dröge
0ca4a3778a
rtp: av1depay: Parse internal size fields of OBUs and handle them
...
They're not recommended by the spec to include in the RTP packets but it
is valid to include them. Pion is including them.
When parsing the size fields also make sure to only take that much of a
payload unit and to skip any trailing data (which should not exist in
the first place).
Pion is also currently storing multiple OBUs in a single payload unit,
which is not allowed by the spec but can be easily handled with this
code now.
Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/560
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1612 >
2024-06-14 13:13:21 +00:00
Sebastian Dröge
69c3c2ae46
Fix various new clippy 1.79 warnings
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1620 >
2024-06-14 08:33:49 +03:00
Matthew Waters
260b04a1cf
rtpbin2: protoct against adding with overflow
...
If jitter is really bad, then this calculation may overflow. Protect
against that.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1605 >
2024-06-06 11:43:26 +00:00
Tim-Philipp Müller
ab2f5e3d8d
rtp: ac3: add some unit tests
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1586 >
2024-06-01 12:43:27 +00:00
Tim-Philipp Müller
2b68920f82
rtp: tests: add possibility to make input live
...
.. for payloaders that behave differently with live
and non-live inputs (e.g. audio payloaders which by
default will pick different aggregation modes based
on that.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1586 >
2024-06-01 12:43:27 +00:00
Tim-Philipp Müller
6597ec84eb
rtp: tests: add possibility to check duration of depayloaded buffers
...
.. and clarify an expect panic message.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1586 >
2024-06-01 12:43:27 +00:00
Tim-Philipp Müller
6b628485c5
rtp: Add AC-3 RTP payloader/depayloader
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1586 >
2024-06-01 12:43:27 +00:00
Sebastian Dröge
a7418fb483
rtp: Use released version of rtcp-types
2024-05-29 10:30:40 +03:00
Matthew Waters
df32e1ebfa
rtpsend: ensure only a single rtcp pad push
...
Otherwise, it can occur that multiple rtcp packets may be produced out
of order.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1426 >
2024-05-28 19:58:09 +10:00
Matthew Waters
525179f666
rtpbin2: handle ssrc collisions
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1426 >
2024-05-28 19:58:09 +10:00
Matthew Waters
1600d3b055
rtpbin2: split send and receive halves into separate elements
...
There is now two elements, rtpsend and rtprecv that represent the two
halves of a rtpsession. This avoids the potential pipeline loop if two
peers are sending/receiving data towards each other. The two halves can
be connected by setting the rtp-id property on each element to the same
value and they will behave like a combined rtpbin-like element.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1426 >
2024-05-28 19:58:09 +10:00
Matthew Waters
0121d78482
rtpbin2: expose session signals for new/bye ssrc
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1426 >
2024-05-28 19:58:09 +10:00
Matthew Waters
d480c6c2d3
rtpbin2/config: add stats to session GObject
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1426 >
2024-05-28 19:58:09 +10:00
Matthew Waters
7d5789032a
rtpbin2/config: add a new-ssrc signal
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1426 >
2024-05-28 19:58:09 +10:00
Matthew Waters
06f40e72cb
rtpbin2: implement a session configuration object
...
Currently only contains pt-map
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1426 >
2024-05-28 19:58:09 +10:00
Matthew Waters
48e7a2ed06
jitterbuffer: handle flush-start/stop
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1426 >
2024-05-28 19:58:09 +10:00
Matthew Waters
66306e32f2
jitterbuffer: remove mpsc channel for every packet
...
It is very slow.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1426 >
2024-05-28 19:58:09 +10:00
Mathieu Duponchelle
327f563e80
jitterbuffer: implement support for serialized events / queries
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1426 >
2024-05-28 19:58:09 +10:00
Mathieu Duponchelle
74ec83a0ff
rtpbin2: implement and use synchronization context
...
Co-authored-by: Sebastian Dröge <sebastian@centricular.com>
Co-Authored-By: Matthew Waters <matthew@centricular.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1426 >
2024-05-28 19:58:09 +10:00
Mathieu Duponchelle
1865899621
rtpbin2: implement jitterbuffer
...
The jitterbuffer implements both reordering and duplicate packet
handling.
Co-Authored-By: Sebastian Dröge <sebastian@centricular.com>
Co-Authored-By: Matthew Waters <matthew@centricular.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1426 >
2024-05-28 17:35:41 +10:00
Sebastian Dröge
2b4ec75bc5
rtpbin2: Add support for receiving rtcp-mux packets
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1426 >
2024-05-28 17:35:41 +10:00
Sebastian Dröge
e09ad990fa
rtpbin2: Implement support for reduced size RTCP (RFC 5506)
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1426 >
2024-05-28 17:35:41 +10:00
Sebastian Dröge
1e4a966c92
rtpbin2: Add support for sending NACK/PLI and FIR
...
Co-Authored-By: Matthew Waters <matthew@centricular.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1426 >
2024-05-28 17:35:41 +10:00
Sebastian Dröge
66c9840ad8
rtpbin2: Add handling for receiving NACK/PLI and FIR
...
Co-Authored-By: Matthew Waters <matthew@centricular.com>
Co-Authored-By: Mathieu Duponchelle <mathieu@centricular.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1426 >
2024-05-28 17:35:41 +10:00
Matthew Waters
2c86f18a99
rtpbin2: add support for RFC 4585 (RTP/AVPF)
...
Implements the timing rules for RTP/AVPF
Co-Authored-By: Sebastian Dröge <sebastian@centricular.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1426 >
2024-05-28 17:35:41 +10:00
Matthew Waters
27ad26c258
rtp: Initial rtpbin2 element
...
Can receive and recevie one or more RTP sessions containing multiple
pt/ssrc combinations.
Demultiplexing happens internally instead of relying on separate
elements.
Co-Authored-By: François Laignel <francois@centricular.com>
Co-Authored-By: Mathieu Duponchelle <mathieu@centricular.com>
Co-Authored-By: Sebastian Dröge <sebastian@centricular.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1426 >
2024-05-28 17:35:41 +10:00
Sebastian Dröge
984a9fe5ff
rtp: Don't restrict payload types for payloaders
...
WebRTC uses payload types 35-63 as dynamic payload types too to be able
to place more codec variants into the SDP offer.
Instead of allowing just certain payload types, completely remove any
restrictions and let the user decide. There's technically nothing wrong
with using any payload type, especially when using the encoding-name.
Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/551
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1587 >
2024-05-27 09:34:16 +00:00
Tim-Philipp Müller
4f74cb7958
rtp: klv: add test for fragmented payloads with packet loss
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1580 >
2024-05-26 12:34:44 +03:00
Tim-Philipp Müller
b6e24668a7
rtp: klv: add unit test with some packet loss
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1580 >
2024-05-26 12:34:44 +03:00
Tim-Philipp Müller
92a1e222f4
rtp: tests: add functionality to drop RTP packets after payloading
...
Add ExpectedPacket::drop() to flag RTP packets that should not
be forwarded to the depayloader.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1580 >
2024-05-26 12:34:44 +03:00
Tim-Philipp Müller
de71e9dadd
rtp: tests: print rtp timestamp mismatch minus the initial offset
...
Unit tests specify a 0-based offset, so printing that plus the
random initial offset on failure is just needlessly confusing,
so subtract the initial offset when printing expected/actual
values. The real values are still printed as part of the assert.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1580 >
2024-05-26 12:34:44 +03:00
Tim-Philipp Müller
be7da027f8
rtp: klv: add some basic tests
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1580 >
2024-05-26 12:34:44 +03:00
Tim-Philipp Müller
1e33926dc5
fixup: klv payloader indentation
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1580 >
2024-05-26 12:34:44 +03:00
Tim-Philipp Müller
c2f67bd3c9
fixup: klv depay: debug log indentation
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1580 >
2024-05-26 12:34:44 +03:00
Tim-Philipp Müller
e7d0e0702a
fixup: payloader
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1580 >
2024-05-26 12:34:44 +03:00
Tim-Philipp Müller
566e6443f4
rtp: Add KLV RTP payloader/depayloader
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1580 >
2024-05-25 20:21:50 +03:00
Sebastian Dröge
58e91c154c
rtp: basedepay: Reset last used ext seqnum on discontinuities
...
The ext seqnum counting is reset too so keeping the old one around will
cause problems with timestamping of the next outgoing buffer.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1584 >
2024-05-24 10:23:06 +03:00
Sebastian Dröge
dcc0b47349
rtp: basepay: Fix header extension negotiation
...
Only configure header extensions from the source pad caps if they exist
already in the source pad caps, otherwise the configuration will fail.
Extensions that are added via the signals might not exist in the source
pad caps yet and would be added later.
Also, if configuring an existing extension from the new caps fails,
remove it and try to request a new extension for it.
Additionally don't remove extensions from the caps that can't be
provided. No header extensions for them would be added to the packets,
but that's not a problem. Removing them on the other hand would cause
negotiation to fail. This only affects extensions that are already
included in the caps.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1577 >
2024-05-20 07:53:50 +00:00
Sebastian Dröge
0d33077df6
rtp: basedepay: Clean up header extension negotiation
...
If configuring an existing extension from the new caps fails, remove it
and try to request a new extension for it.
Also remove all extensions from the list that are not provided in the
caps, instead of passing RTP packets to all of them anyway.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1577 >
2024-05-20 07:53:50 +00:00
Tim-Philipp Müller
16608d2541
rtp: opus: add multichannel depay/pay test
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1571 >
2024-05-18 09:29:29 +00:00
Tim-Philipp Müller
bab3498c6a
rtp: opus: add multichannel pay/depay test
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1571 >
2024-05-18 09:29:29 +00:00
Tim-Philipp Müller
72006215cb
rtp: tests: add run_test_pipeline_full() that checks output caps too
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1571 >
2024-05-18 09:29:29 +00:00
Tim-Philipp Müller
10e0294d5a
rtp: opus: fix payloader caps query handling and add tests
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1571 >
2024-05-18 09:29:29 +00:00
Tim-Philipp Müller
61523baa7b
rtp: opus: add minimal depayload / re-payload test
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1571 >
2024-05-18 09:29:29 +00:00
Tim-Philipp Müller
6f871e6ce2
rtp: opus: add simple payload / depayload test
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1571 >
2024-05-18 09:29:29 +00:00
Tim-Philipp Müller
92c0cf1285
rtp: opus: add test for payloader dtx packet handling
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1571 >
2024-05-18 09:29:29 +00:00
Tim-Philipp Müller
2585639054
rtp: Add Opus RTP payloader/depayloader
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1571 >
2024-05-18 09:29:29 +00:00
Martin Nordholts
9a7f37e2b7
rtpgccbwe: Support linear regression based delay estimation
...
In our tests, the slope (found with linear regression) on a
history of the (smoothed) accumulated inter-group delays
gives a more stable congestion control. In particular,
low-end devices becomes less sensitive to spikes in
inter-group delay measurements.
This flavour of delay based bandwidth estimation with Google
Congestion Control is also what Chromium is using.
To make it easy to experiment with the new estimator, as
well as add support for new ones in the future, also add
infrastructure for making delay estimator flavour selectable
at runtime.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1566 >
2024-05-14 16:25:48 +00:00
Martin Nordholts
71e9c2bb04
rtpgccbwe: Also log self.measure
in overuse_filter()
...
Also log `self.measure` in overuse_filter() since tracking
`self.measure` over time help a lot in making sense of
`self.estimate` (and `amplified_estimate`).
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1566 >
2024-05-14 16:25:48 +00:00
Martin Nordholts
d9aa0731f4
rtpgccbwe: Rename variable t
to amplified_estimate
...
We normally multiply `self.estimate` with `MAX_DELTAS` (60).
Rename the variables that holds the result of this
calculation to `amplified_estimate` to make the distinction
clearer.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1566 >
2024-05-14 16:25:48 +00:00