gstreamer/subprojects/gst-plugins-good/gst/rtpmanager
Jan Schmidt ef8dfd7873 rtpmanager: save the report block statistics in each RTPSource
Move RB info from receiver reports into the internal source that the RR
are about, and deprecate (but retain) the old mapping where each
external source has only a single RB entry in the rtp statistics.

The old method is broken if a remote peer uses a single ssrc to send
receiver reports for more than one of our internal sources, other
as multiple RB in a single packet, or alternate RB in different reports.
In each case only the most recent entry was kept, overwriting data for
other internal sources.

In multicast scenarios each internal source may receive multiple
receiver reports from different peers. To support that, all received
RR's are now stored into a hash table indexed by the sender's SSRC,
and all RRs are placed into an array when generating statistics, so
that the information from all peers is retrievable.

The current deficient behaviour (adding RB info into non-internal RTPSources) is
deprecated but kept in order to be backward compatible, and retained
that way in the generated statistics structure.

Refs
[1] https://tools.ietf.org/html/rfc3550#section-6.4.1

Based on a patch by Fede Claramonte <fclaramonte@twilio.com>

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7424>
2024-10-11 05:20:22 +00:00
..
gstrtpbin.c rtpjitterbuffer: Set max-rtcp-rtp-sync-time to -1 (disabled) 2024-05-28 11:52:30 +00:00
gstrtpbin.h rtpbin: Add new never/ntp RTCP sync modes 2024-05-28 11:52:30 +00:00
gstrtpdtmfmux.c
gstrtpdtmfmux.h
gstrtpfunnel.c rtpfunnel: also fallback to pad default handling for unknown ssrcs 2024-09-04 08:15:38 +00:00
gstrtpfunnel.h
gstrtphdrext-clientaudiolevel.c rtphdrext-clientaudiolevel: Fix typo in documentation 2024-02-21 17:25:43 +00:00
gstrtphdrext-clientaudiolevel.h rtphdrext-clientaudiolevel: Rename RFC 6464 element 2021-10-20 00:03:09 +00:00
gstrtphdrext-mid.c rtpmanager: add support for writing RFC8843 (BUNDLE mid) RTP header extension 2022-03-21 03:18:18 +00:00
gstrtphdrext-mid.h rtpmanager: add support for writing RFC8843 (BUNDLE mid) RTP header extension 2022-03-21 03:18:18 +00:00
gstrtphdrext-ntp.c rtphdrext-ntp: Fix typo of the RFC number in the element metadata 2024-03-26 14:37:47 +02:00
gstrtphdrext-ntp.h rtpmanager: Add header extension implementation for the 64-bit RFC6051 NTP header extension 2022-04-20 14:40:25 +00:00
gstrtphdrext-repairedstreamid.c rtpmanager: add support for RFC8852 (rid) RTP header extensions 2022-03-21 03:18:18 +00:00
gstrtphdrext-repairedstreamid.h rtpmanager: add support for RFC8852 (rid) RTP header extensions 2022-03-21 03:18:18 +00:00
gstrtphdrext-streamid.c rtpmanager: add support for RFC8852 (rid) RTP header extensions 2022-03-21 03:18:18 +00:00
gstrtphdrext-streamid.h rtpmanager: add support for RFC8852 (rid) RTP header extensions 2022-03-21 03:18:18 +00:00
gstrtphdrext-twcc.c rtphdrext: Set caps without attributes as the default 2021-09-28 20:04:55 +00:00
gstrtphdrext-twcc.h
gstrtpjitterbuffer.c rtpbin: Regularly emit the sync signal 2024-05-28 11:52:31 +00:00
gstrtpjitterbuffer.h
gstrtpmanager.c rtpmanager: Add header extension implementation for the 64-bit RFC6051 NTP header extension 2022-04-20 14:40:25 +00:00
gstrtpmux.c docs: mark GstRTPMux as plugin API 2023-04-13 21:46:59 +00:00
gstrtpmux.h
gstrtpptdemux.c common: Stop using GQuark-based GstStructure field name API 2024-09-26 19:21:29 +03:00
gstrtpptdemux.h
gstrtprtxqueue.c
gstrtprtxqueue.h
gstrtprtxreceive.c common: Stop using GQuark-based GstStructure field name API 2024-09-26 19:21:29 +03:00
gstrtprtxreceive.h rtpmanager/rtx: implement initial support for reading/writing rid extensions 2022-03-21 03:18:18 +00:00
gstrtprtxsend.c common: Stop using GQuark-based GstStructure field name API 2024-09-26 19:21:29 +03:00
gstrtprtxsend.h rtpmanager/rtx: implement initial support for reading/writing rid extensions 2022-03-21 03:18:18 +00:00
gstrtpsession.c rtpsession: Only warn once if configured latency needs to be known but isn't yet 2023-12-27 11:00:44 +00:00
gstrtpsession.h
gstrtpssrcdemux.c rtpssrcdemux: set different stream-id on each src pad 2023-02-01 09:17:33 +00:00
gstrtpssrcdemux.h
gstrtpst2022-1-fecdec.c st2022-1-fecdec: fix packet trimming 2021-11-12 08:15:28 +00:00
gstrtpst2022-1-fecdec.h
gstrtpst2022-1-fecenc.c rtpst2022-1-fecenc: Drain column packets on EOS 2022-08-12 12:59:19 +00:00
gstrtpst2022-1-fecenc.h
gstrtputils.c rtpmanager: Move some duplicated constant and helper function to a single place 2022-04-20 14:40:25 +00:00
gstrtputils.h rtpmanager: Move some duplicated constant and helper function to a single place 2022-04-20 14:40:25 +00:00
meson.build meson: Call pkgconfig.generate in the loop where we declare plugins dependencies 2022-09-01 21:17:35 +00:00
rtpjitterbuffer.c rtpjitterbuffer: Don't use estimated_dts to do default skew adjustment 2024-04-07 12:24:58 +00:00
rtpjitterbuffer.h rtpjitterbuffer: Add new "rfc7273-reference-timestamp-meta-only" property 2023-11-16 15:23:29 +00:00
rtpsession.c rtpmanager: save the report block statistics in each RTPSource 2024-10-11 05:20:22 +00:00
rtpsession.h rtpsession: Remove some unused fields 2024-01-08 12:57:04 +02:00
rtpsource.c rtpmanager: save the report block statistics in each RTPSource 2024-10-11 05:20:22 +00:00
rtpsource.h rtpmanager: save the report block statistics in each RTPSource 2024-10-11 05:20:22 +00:00
rtpstats.c
rtpstats.h rtpsession: Update 64-bit NTP header extensions with the actual NTP time in senders 2022-04-20 14:40:25 +00:00
rtptimerqueue.c rtpmanager: drop use of GSlice 2023-01-24 15:25:06 +00:00
rtptimerqueue.h
rtptwcc.c twcc: Better handle duplicate packets 2023-04-10 09:37:51 +00:00
rtptwcc.h