[R-C] Feedback mechanisms
Randell Jesup
randell-ietf at jesup.org
Wed Aug 8 18:35:52 CEST 2012
So, there are a few possible feedback mechanisms (regardless of the
exact algorithm):
1) TMMBR
Has issues in that it's SSRC-specific
Requires most of the algorithm to run in the receiver
Travels over RTCP and is subject to AVPF rules, otherwise can send
whenever needed
Pro:
Already exists, has some chance of being useful in interop
situations (iffy)
Con:
In extreme congestion, can fail to be delivered.
If congestion information is merged between multiple streams
between endpoints, it's confusing what should be sent for a specific
SSRC - requires the receiver to make decisions about inter-stream
tradeoffs without knowing the parameters, or requires revising the TMMBR
spec.
2) REMB
Multiple SSRCs (good)
Requires most of the algorithm to run in the receiver
Travels over RTCP and is subject to AVPF rules, otherwise can send
whenever needed
Pro:
Eases merging congestion information for streams
Lower "extra" packet rate than explicit ack
Can be suppressed when nothing interesting is happening -
Lower bandwidth usage
Con:
If RTCP fraction is too low, can be blocked (so don't make it
too low)
In extreme congestion, can fail to be delivered.
3) Explicit RTCP C-ACK packets (Congestion-ACK)
1 packet per incoming packet (or short queuing time before sending
to cut packet rate)
Algorithm runs mostly in the sender
Travels over RTCP and is subject to AVPF rules
Pros:
Sender can trigger on failure to receive C-ACKs - though we
don't know if there's congestion in the sending direction, just in the
feedback direction
Cons:
Extra bandwidth and packet traffic - increases congestion and
uses queue slots
If RTCP fraction is too low, can be blocked (and this uses a
lot more than 1 or 2)
I'm going to propose a fourth mechanism:
4) CHEX (Congestion Header EXtension) - ok, come up with a better name!
Multiple SSRCs - multiple 'acks' in the extension
Allows most of the algorithm to run in the sender
Piggybacks in header extensions, can only send with an RTP packet
(i.e. may be delayed)
Pros:
Extends existing support for actual send time header
extensions (XXXX)
Sender can trigger on failure to receive - though we don't
know if there's congestion in the sending direction, just in the
feedback direction
Minimal additional bandwidth compared to C-ACK (3)
Cons:
Anything that strips header extensions causes failover to basic
Requires waiting for an outgoing packet - fallback to sending
via RTCP if we need to send "now" or if we've waited too long for a
media packet (or anticipate waiting too long).
Only one header extension per packet may be a small issue.
Cuts max payload some (not a lot), but that may limit the
number of updates in a single packet.
Noticeably more bandwidth than REMB (2)
Basically, it would be a combination of the actual send time (like
XXXX), and reception data (equivalent to TCP ACKs, but including the
time received or the inter-packet delta difference from the send time
stamp (i.e. the input to the Kalman filter).
I'm not saying this is my preference (I currently believe it makes more
sense to run at least the Kalman filter in the receiver, and probably
omit some , but it makes sense to explore the tradeoffs between sender
and receiver running the algorithm.
If we feel we want to use explicit acknowledgment or seriously consider
it, we'll need to talk more about this and the tradeoffs and make this
more fleshed-out.
--
Randell Jesup
randell-ietf at jesup.org
More information about the Rtp-congestion
mailing list