[xiph-rtp] Lots of proposals

David Barrett dbarrett at quinthar.com
Tue Aug 30 10:29:48 PDT 2005


Aaron Colwell wrote:
> Inline delivery is mainly for forward link only and multicast scenarios.
> The periodic transmission of the codebooks is added to the cost of delivering
> the stream and is a necessesary component for cases where you have no way to
> insure reliable transmission.

Yes, this makes sense.


> I go back and forth about whether it is appropriate to create our own
> "codebook ACK" or whether we should use existing IETF standards and drafts that
> have similar purposes. There are several options mainly RTCP XR 
> (RFC 3611), AVPF (AVT Internet Draft), and perhaps the retransmission draft.
> The conflict I have about using the existing stuff is that it seems to apply to
> the whole session. We really only want to reliably transmit part of the
> session. It's not clear to me whether this is justification enough to create
> our own reliability mechanism or not.

I agree, we only care about reliable codebook delivery, and certainly 
not every packet.

Also, I agree we *could* beat an existing round standard into our square 
peg, but it wouldn't be pretty.  A minimal, purpose-built RTCP profile 
that solves just this problem might be appropriate.  We needn't limit it 
to just Xiph codecs, but it will be used by *at least* those.


> I think this conflict is mainly the reason why I've leaned towards HTTP for
> codebook retrieval. It allows you to use a seperate reliable transport for the 
> only data that needs to be transmitted in a reliable fashion.

I agree in theory, but in practice I find it very problematic to use two 
separate communication channels (especially using two entirely different 
protocols, contacting entirely different sources) to accomplish a single 
action.  It confuses the code, compounds the failure rate, decelerates 
performance, burdens my central resources, etc, etc.

Granted, when you only have a hammer, everything looks like a nail.  But 
I would vastly prefer to send a *single packet* along a RTCP stream that 
is *already established* -- even if it means creating a new RTCP profile 
-- to any of the proposed alternatives.


It seems to me that we could do away with HTTP codebook delivery 
altogether, while gaining performance and reducing complexity. 
Furthermore, we could make chaining (true chaining, with an entirely new 
codebooks and not just framerate/quality tweaks) as simple as:

1) If you receive a packet with a 'chainID' you don't recognize, the 
codebook was probably lost, so send a 'retransmit codebook' request with 
the 'chainID' you need.

2) Whenever you receive a codebook, send a 'codebook acknowledged' 
message indicating its associated 'chainID'.

This makes an RTP session entirely standalone -- you needn't be aware of 
its SDP before decoding.  (SDP would still be used for negotiating the 
high-level encoding options, but it's really just advisory; you could 
get away with just broadcasting raw RTP and the client has all the 
information necessary to decode.)

On the server, if it knows it can receive RTCP from the client, it 
doesn't bother sending any audio/video until the codebook its using has 
been acknowledged.  (Likewise, the server knows to generate a video 
keyframe after codebook acknowledgment, further reducing the perceived 
end-to-end delay between clicking "broadcast" and the receiver seeing an 
image.)

And if the server can't receive RTCP from the client, it just uses an 
exponential backoff of codebook delivery inserted into the video stream 
(ie, it doesn't need to wait for advisory feedback it'll never get), or 
uses a separate multicast stream, or any other mechanism that has 
already been proposed.


Basically, I hear all this talk about HTTP being the "safe fallback 
option", but in my experience, and for my application, it simply isn't. 
  I believe inline transmission with ack/retransmit would be superior in 
almost all cases, eliminate the need for HTTP delivery altogether, and 
thereby vastly reduce the client complexity while simultaneously 
improving performance.

-david


More information about the xiph-rtp mailing list