gstreamer/gst/rtpmanager
Antonio Ospite 8dd03042cc rtpsession: add support for buffer lists on the recv path
The send path in rtpsession processes the buffer list along the way,
sharing info and stats between packets in the same list, because it
assumes that all packets in a buffer list are from the same frame.

However, in the receiving path packets can arrive in all sorts of
arrangements:

  - different sources,
  - different frames (different timestamps),
  - different types (multiplexed RTP and RTCP, invalid RTP packets).

so a more general approach should be used to correctly support buffer
lists in the receive path.

It turns out that it's simpler and more robust to process buffers
individually inside the rtpsession element even if they come in a buffer
list, and then reassemble a new buffer list when pushing the buffers
downstream.

This avoids complicating the existing code to make all functions
buffer-list-aware with the risk of introducing regressions,

To support buffer lists in the receive path and reduce the "push
overhead" in the pipeline, a new private field named processed_list is
added to GstRtpSessionPrivate, it is set in the chain_list handler and
used in the process_rtp callback; this is to achieve the following:

  - iterate over the incoming buffer list;
  - process the packets one by one;
  - add the valid ones to a new buffer list;
  - push the new buffer list downstream.

The processed_list field is reset before pushing a buffer list to be on
the safe side in case a single buffer was to be pushed by upstream
at some later point.

NOTE:

The proposed modifications do not change the behavior of the send path.

The process_rtp callback is called in rtpsource.c by the push_rtp
callback (via source_push_rtp) only when the source is not internal.

So even though push_rtp is also called in the send path, it won't end up
using process_rtp in this case because the source would be internal in
the send path.

The reasoning from above may suggest a future refactoring: push_rtp
might be split to better differentiate the send and receive path.
2019-08-07 15:32:30 -04:00
..
gstrtpbin.c rtpbin: Improve RTPStorage action signal documentation 2019-05-25 13:44:00 +02:00
gstrtpbin.h Revert "rtpbin: receive bundle support" 2018-12-20 13:25:10 +00:00
gstrtpdtmfmux.c docs: Port all docstring to gtk-doc markdown 2019-05-13 10:24:40 -04:00
gstrtpdtmfmux.h rtpmux: Fix FSF address 2012-12-16 16:36:39 +00:00
gstrtpfunnel.c rtpfunnel: forward correct segment when switching pad 2019-08-06 14:02:50 +00:00
gstrtpfunnel.h rtpfunnel: Stop using G_DECLARE_FINAL_TYPE 2018-11-13 00:37:11 +01:00
gstrtpjitterbuffer.c rtpjitterbuffer: Unlock output if the queue is full 2019-07-03 18:03:42 +00:00
gstrtpjitterbuffer.h rtpjitterbuffer: small optimizations 2014-04-29 16:21:44 +02:00
gstrtpmanager.c Initial commit of GstRtpFunnel 2018-10-15 14:20:58 +02:00
gstrtpmux.c docs: Port all docstring to gtk-doc markdown 2019-05-13 10:24:40 -04:00
gstrtpmux.h doc: Fix some docstrings 2019-05-13 17:00:00 -04:00
gstrtpptdemux.c doc: Port documentation to hotdoc 2019-05-13 11:34:56 -04:00
gstrtpptdemux.h docs: Port all docstring to gtk-doc markdown 2019-05-13 10:24:40 -04:00
gstrtprtxqueue.c doc: fix element section documentations 2019-05-25 16:57:31 +02:00
gstrtprtxqueue.h rtprtxqueue: implement handling of the max-size-time property 2017-04-11 09:44:33 +03:00
gstrtprtxreceive.c docs: Port all docstring to gtk-doc markdown 2019-05-13 10:24:40 -04:00
gstrtprtxreceive.h rtprtxreceive: Wait until timeout to clear association requests 2014-05-04 22:36:59 -04:00
gstrtprtxsend.c docs: Port all docstring to gtk-doc markdown 2019-05-13 10:24:40 -04:00
gstrtprtxsend.h rtprtxsend: run a new GstTask on the src pad 2014-01-21 14:54:01 +01:00
gstrtpsession.c rtpsession: add support for buffer lists on the recv path 2019-08-07 15:32:30 -04:00
gstrtpsession.h rtpsession: use the correct segment seqnum 2019-02-04 13:14:37 +00:00
gstrtpssrcdemux.c rtpssrcdemux: Avoid taking streamlock out-of-band 2019-06-04 09:26:06 -04:00
gstrtpssrcdemux.h rtpssrcdemux: Remove unused GstSegment 2013-04-02 23:42:41 -04:00
Makefile.am Initial commit of GstRtpFunnel 2018-10-15 14:20:58 +02:00
meson.build doc: Port documentation to hotdoc 2019-05-13 11:34:56 -04:00
rtpjitterbuffer.c rtpjitterbuffer: Unlock output if the queue is full 2019-07-03 18:03:42 +00:00
rtpjitterbuffer.h rtpjitterbuffer: Unlock output if the queue is full 2019-07-03 18:03:42 +00:00
rtpsession.c rtpmanager: consider UDP and IP headers in bandwidth calculation 2019-08-02 17:22:51 +02:00
rtpsession.h rtpsession: Allow overriding NACK packet creation 2019-04-05 18:36:36 -04:00
rtpsource.c rtpsource: fix receiver source stats to consider previously queued packets 2019-08-02 17:22:51 +02:00
rtpsource.h rtpsession: Send as many nack seqnum as possible 2019-04-05 14:53:09 +00:00
rtpstats.c rtpjitterbuffer: don't try and calculate packet-rate if seqnum are jumping 2019-06-12 11:39:31 +02:00
rtpstats.h rtpmanager: consider UDP and IP headers in bandwidth calculation 2019-08-02 17:22:51 +02:00