Commit graph

1045 commits

Author SHA1 Message Date
Sebastian Dröge 9d22ad421b rtpsession: The stats min_interval is in seconds, not nanoseconds
We have to scale it to compare it against our clock times.
2015-05-04 14:12:07 +02:00
Sebastian Dröge afe1d5a89f rtpsession: Only return TRUE if early feedback was requested already and it's early enough 2015-05-04 14:11:00 +02:00
Sebastian Dröge 73c0c2920f rtpstats: Average RTCP packet size is in bytes, bandwidths in bits
We need to convert the size to bits for our calculations.

https://bugzilla.gnome.org/show_bug.cgi?id=747863
2015-04-27 16:45:40 +02:00
Sebastian Dröge 475b1e607e rtpstats: Use the same lower limit for RTCP bandwidth to stop sending RTCP everywhere
https://bugzilla.gnome.org/show_bug.cgi?id=747863
2015-04-27 16:45:33 +02:00
Sebastian Dröge 7596ed91b8 rtpsession: Use bandwidth calculation by default instead of some arbitrary hardcoded value
https://bugzilla.gnome.org/show_bug.cgi?id=747863
2015-04-27 16:45:25 +02:00
Sebastian Dröge 928cd110bc rtpsession: Bandwidth is supposed to be in bits/s, not bytes/s
https://bugzilla.gnome.org/show_bug.cgi?id=747863
2015-04-27 16:45:14 +02:00
Luis de Bethencourt 9391622579 Rename property enums from ARG_ to PROP_
Property enum items should be named PROP_ for consistency and readability.
2015-04-27 11:22:11 +01:00
Ilya Konstantinov fd391a5404 rtpjitterbuffer: Fix "stats" property docs
https://bugzilla.gnome.org/show_bug.cgi?id=748436
2015-04-26 21:15:44 +02:00
Tim-Philipp Müller d753a3eeb1 Remove obsolete Android build cruft
This is not needed any longer.
2015-04-26 17:55:07 +01:00
Luis de Bethencourt 671b4d25cd remove unused enum items PROP_LAST
This were probably added to the enums due to cargo cult programming and are
unused. Removing them.
2015-04-24 17:01:12 +01:00
Sebastian Dröge edcc5be297 rtpjitterbuffer: When request retransmissions for future packets, consider the packet spacing in the extra delay
We now take the maximum of 2*jitter and 0.5*packet_spacing for the extra
delay. If jitter is very low, this should prevent unnecessary retransmission
requests to some degree.

https://bugzilla.gnome.org/show_bug.cgi?id=748041
2015-04-22 20:27:18 +02:00
Sebastian Dröge 3fe8ceff14 rtpjitterbuffer: Take a running average of the packet spacings instead of just the latest
https://bugzilla.gnome.org/show_bug.cgi?id=748041
2015-04-22 20:25:43 +02:00
Miguel París Díaz f81c9a9568 rtpjitterbuffer: Add "rtx-next-seqnum" property
If this is set to FALSE, rtpjitterbuffer will not request retransmissions for
future packets based on when they are estimated to arrive.

See also https://bugzilla.gnome.org/show_bug.cgi?id=748041

https://bugzilla.gnome.org/show_bug.cgi?id=739868
2015-04-22 19:51:18 +02:00
Sebastian Dröge 68dfe93463 rtxreceive: Put debug output for retransmission requests at the right place
Before it was only ever printed once for every time a ssrc was associated with
a specific stream.
2015-04-22 19:51:18 +02:00
Sebastian Dröge 80268e7d37 rtpsource/rtprtxsend: Also pass correct seqnum-offset and payload to the RTX rtpsource
https://bugzilla.gnome.org/show_bug.cgi?id=747394
2015-04-16 17:33:37 +02:00
Arun Raghavan 26bec72e52 rtpsession: Track RTX ssrc caps
This is needed so that we can generate SR for RTX stream correctly (the
clock rate is required).

https://bugzilla.gnome.org/show_bug.cgi?id=747394
2015-04-16 17:33:37 +02:00
Sebastian Dröge 17c6532b75 rtprtxsend: Copy over timestamps from the orignal buffers to the RTX buffers
https://bugzilla.gnome.org/show_bug.cgi?id=747394
2015-04-16 17:33:37 +02:00
Sebastian Dröge caa255d2ed rtprtx*: Fix typos 2015-04-14 19:08:38 +02:00
Sebastian Dröge bd19b08d6d rtpsession: Not sending early RTCP now because of dithering means we send it with the next compound packet 2015-04-14 18:42:44 +02:00
Sebastian Dröge 4223d0c114 rtpsession: Improve debug output a bit if we can't allow early feedback 2015-04-14 18:42:44 +02:00
Sebastian Dröge 6c27293ffe rtpjitterbuffer: Change resyncing GST_WARNING to GST_INFO
This also happens in the very beginning when we receive the first packet, a
warning would be very confusing here. In all places where we should warn about
this, we would've printed a warning already before.
2015-04-13 20:25:48 +02:00
Miguel París Díaz c4bb6a098b rtpjitterbuffer: Add "rtx-max-retries" property
This property allows to limit the maximum number of retransmission
for a specific packet.

https://bugzilla.gnome.org/show_bug.cgi?id=739868
2015-04-13 09:09:03 +02:00
Miguel París Díaz 05bd708fc5 rtpjitterbuffer: Fix expected_dts calc in calculate_expected
Right above we consider lost_packet packets, each of them having duration,
as lost and triggered their timers immediately. Below we use expected_dts
to schedule retransmission or schedule lost timers for the packets that
come after expected_dts.

As we just triggered lost_packets packets as lost, there's no point in
scheduling new timers for them and we can just skip over all lost packets.

https://bugzilla.gnome.org/show_bug.cgi?id=739868
2015-04-13 09:06:33 +02:00
Sebastian Dröge 1a2f253c3a rtpjitterbuffer: Make the next output buffer discont after resetting the jitterbuffer
Resetting the jitterbuffer drops all packets and other things, and will cause
a discontinuity in the packets received by the depayloaders. They should now
also flush anything they had pending as the new data will start at a different
position.

https://bugzilla.gnome.org/show_bug.cgi?id=739868
2015-04-13 09:05:34 +02:00
Tim-Philipp Müller 2fde2011b2 docs: make GstRTCPSync enum show up in rtpbin docs
https://bugzilla.gnome.org/show_bug.cgi?id=747358
2015-04-05 20:07:19 +01:00
Nicolas Dufresne 12762ad1a5 rtpjitter: Account for rtx_retry in overflow check
As rtx_retry is part of the substraction, we need to take it into
account, otherwise we may endup with a big value.
2015-03-25 15:25:56 -04:00
Sebastian Dröge 0e3609a6e1 rtpsession: Fix another instance of sticky event misordering warnings
Make sure that the sync_src pad has caps before the segment event.
Otherwise we might get a segment event before caps from the receive
RTCP pad, and then later when receiving RTCP packets will set caps.
This will results in a sticky event misordering warning

This fixes warnings in the rtpaux unit test but also in the
rtpaux and rtx examples in tests/examples/rtp

https://bugzilla.gnome.org/show_bug.cgi?id=746445
2015-03-21 19:30:32 +01:00
Sebastian Dröge 17d90b453f rtpsession: Also start the RTCP send thread when receiving RTP or RTCP
Before we only started it when either:
- there is no send RTP stream
or
- we received an RTP packet for sending

This could mean that if the send RTP pads are connected but never receive any
RTP data, and the same session is also used for receiving RTP/RTCP, we would
never start the RTCP thread and would never send RTCP for the receiving part
of the session.

This can be reproduced with a pipeline like:

gst-launch-1.0 rtpbin name=rtpbin \
udpsrc port=5000 ! "application/x-rtp, media=video, clock-rate=90000, encoding-name=H264" ! rtpbin.recv_rtp_sink_0 \
udpsrc port=5001 ! rtpbin.recv_rtcp_sink_0 \
rtpbin.send_rtcp_src_0 ! fakesink name=rtcp_fakesink silent=false async=false sync=false \
rtpbin.recv_rtp_src_0_2553225531_96 ! decodebin ! xvimagesink \
fakesrc ! valve drop=true ! rtpbin.send_rtp_sink_0 \
rtpbin.send_rtp_src_0 ! fakesink name=rtp_fakesink silent=false async=false sync=false -v

Before this change the rtcp_fakesink would never send RTCP for the receiving
part of the session (i.e. no receiver reports!), after the change it does.

And before and after this change it would send RTCP for the receiving part of
the session if the sender part was omitted (the last two lines).
2015-03-21 17:38:07 +01:00
Sebastian Dröge 1018aacb35 rtprtxsend: Add support for buffer lists 2015-03-19 11:54:37 +01:00
Sebastian Dröge 57ff27f8c8 rtprtxqueue: Implement support for buffer lists 2015-03-19 11:54:37 +01:00
Ramiro Polla 63944753b0 rtpdtmfmux: properly escape percent sign in documentation 2015-03-14 14:22:26 +00:00
Tim-Philipp Müller c4fa54da17 Fix double semicolons 2015-03-10 09:31:20 +00:00
Sebastian Dröge 9e934d076b rtpjitterbuffer: Drop packets with sequence numbers before the seqnum-base
These are outside the expected range of sequence numbers and should be
clipped, especially for RTSP they might belong to packets from before a seek
or a previous stream in general.
2015-03-09 11:10:35 +01:00
Sebastian Dröge 38bf3d3808 rtpjitterbuffer: Don't forget to unlock the mutex when receiving GAPs in TCP streams 2015-03-09 10:05:14 +01:00
Santiago Carot-Nemesio e05378ec16 rtp: Add Full Intra Request (FIR) packets to statistics
https://bugzilla.gnome.org/show_bug.cgi?id=745587
2015-03-04 12:04:40 +01:00
Santiago Carot-Nemesio 22791413f9 rtp: Add Packet Loss Indication (PLI) to statistics
This is helpful to provide statistics in the format defined in
http://w3c.github.io/webrtc-stats/#dictionary-rtcrtpstreamstats-members.

https://bugzilla.gnome.org/show_bug.cgi?id=745587
2015-03-04 12:04:07 +01:00
Sebastian Dröge 8984e18ef7 rtpsession: Add explanation why we have space for 32 hash tables
And also create only one, there's no need yet to create all 32 until
we implement RFC2762.
2015-03-04 11:30:43 +01:00
Sebastian Dröge af2bdd6e15 Revert "rtpsession: Do not use an array of maps if they are not being used"
This reverts commit 1591adf4cd.

https://bugzilla.gnome.org/show_bug.cgi?id=745586#c1:
It's the beginning of an implementation of RFC 2762, which is needed for
large multicast groups. The implementation is not yet complete but why
not leave what is there and implement RFC 2762 instead?
2015-03-04 11:26:57 +01:00
Santiago Carot-Nemesio 1591adf4cd rtpsession: Do not use an array of maps if they are not being used
rtpsession declares an array of maps to store srrcs but only the
the key 0 is being used. This patch replaces the array of maps
for just one map and remove useless parameters in rtpsession

https://bugzilla.gnome.org/show_bug.cgi?id=745586
2015-03-04 11:25:30 +01:00
Sebastian Dröge 939a95d44b rtpsession: Send initial events on sync_rtcp pad when using RTP/RTCP muxing
Otherwise we will just send buffers on the pad without any events beforehand
and will get g_warnings() about that.
2015-02-19 13:34:47 +02:00
Sebastian Dröge 735c6c40f8 rtpjitterbuffer: When resetting the jitterbuffer because of packet discont, don't flush sticky events
We will otherwise flush away STREAM_START, CAPS or SEGMENT events and will
confuse downstream with buffers that come before such events.
2015-02-17 16:57:55 +02:00
Sebastian Dröge b79eff7f9b rtpsession: Handle first RTCP packet and early feedback correctly
According to RFC 4585 section 3.5.3 step 1 we are not allowed to send
an early RTCP packet for the very first one. It must be a regular one.

Also make sure to not use last_rtcp_send_time in any calculations until
we actually sent an RTCP packet already. In specific this means that we
must not use it for forward reconsideration of the current RTCP send time.
Instead we don't do any forward reconsideration for the first RTCP packet.
2015-02-11 10:32:46 +01:00
Sebastian Dröge 075eb10e65 rtpsession: Fix signal name
This wasn't meant to be pushed at all yet, but now that it's there
already it won't hurt to make it correct at least.
2015-01-30 18:22:31 +01:00
Sebastian Dröge ec99bbb5e1 rtpstats: Fix typo in documentation 2015-01-30 16:56:35 +01:00
Sebastian Dröge 77511b156e rtpsession: Add new on-receiving-rtcp signal
This will be emitted whenever an RTCP packet is received. Different to
on-feedback-rtcp, this signal gets every complete RTCP packet and not
just the individual feedback packets.
2015-01-30 16:50:36 +01:00
Sebastian Dröge e4ed852041 rtpsession: Deprecate rtcp-immediate-feedback-threshold property
It had no effect since quite some time and also is not needed in general,
especially not to switch between immediate feedback mode and early feedback
mode. The latest understanding of the RFC is that from the endpoint point of
view, both modes are exactly the same. RTCP is only allowed to use the
bandwidth as given by the RFC constraints, as such it is only ever possible
to schedule a RTCP packet early but it's against the RFC to schedule more RTCP
packets.

The difference between immediate feedback mode and early feedback mode is that
the former guarantees that an RTCP packet can be sent for every event
"immediately", which means that the bandwidth calculations from the RFC have
resulted in an RTCP scheduling interval that is small enough. Early feedback
mode on the other hand means that we can schedule some packets early to make
that happen, but it's not guaranteed at all that it's possible to schedule
an RTCP packet per event (i.e. they need to be accumulated or dropped).
2015-01-26 18:49:31 +01:00
Sebastian Dröge b07b7736b3 rtpsession: Delay the next regular RTCP packet after early RTCP
This is required to not exceed the short term average RTCP bitrate when
using early feedback as compared to without early feedback.
2015-01-26 18:49:31 +01:00
Sebastian Dröge bc9111a03d rtpsession: Add new send-rtcp-full signal
This indicates with a boolean return value if scheduling a new RTCP packet
within the requested delay was possible. Otherwise it behaves exactly like
send-rtcp. The only reason for adding a new signal is ABI compatibility.
2015-01-26 18:49:31 +01:00
Sebastian Dröge 60e2d0c84f rtpsession: Fix indention 2015-01-22 11:03:25 +01:00
Sebastian Dröge 87c8c163a8 rtpjitterbuffer: If we get a gap with a buffer without DTS, error out
We (currently?) can't really handle gaps between RTP packets if they're not
properly timestamped. The current code would go into calculations with
GST_CLOCK_TIME_NONE and then cause assertions everywhere. It's probably
better to error out cleanly instead.
2015-01-07 18:05:18 +01:00