[vorbis-dev] RFC draft for Vorbis over RTP
Tor-Einar Jarnbjo
Tor-Einar at Jarnbjo.de
Wed May 26 01:46:45 PDT 2004
Aaron Colwell wrote:
>I was planning on retransmitting the headers periodically. In the case of
>an unicast delivery the client could ACK the headers via an RTCP APP packet.
>This would tell the server to stop sending the headers for that chain. Even
>if the ACK gets dropped the client will send another one when it gets a header
>it already has. In low loss conditions, only one ACK will be needed.
>
This sounds to me like a potential relevant waste of bandwidth. I
suppose a typical codebook would be split into so many RTP packets, that
a transmission failure is rather likely, even with a typically low
packet loss. It is also possible, that future encoders may use a more
complex (larger) codebook lists to obtain better compression of the
actual audio data, making this situation even worse.
I also don't like the idea about having a codebook URL in the SDP
descriptor. Would such a solution allow a midstream change of the
codebooks at all, or wouldn't this lock the entire stream to one set of
codebooks?
I have been thinking a bit about a combination of these two concepts,
which hopefully may solve some of the problems (especially bandwidth
usage) and make the delivery more robust:
- As Aaron already wrote, each RTP packet must contain an id of the
codebooks used to encode it. As I can see, this is the only way to
ensure that a packet is decoded using the correct codebook.
- Some time before a codebook switch, the server will start sending RTCP
packets informing the client about this and the new codebook id. These
packets will typically be only a few bytes and I don't see it as a huge
drawback if the server periodically repeats the same packet for some
time. The packets should also include a field defining the time (e.g.
number of seconds) until the codebook change will become active and the
codebook size. This allows the client a better bandwidth management in
cases where the main RTP stream consumes a large part of the available
bandwidth. E.g. the client is playing a 48kbps stream over a 64kbps
line. In this case, starting a normal, bandwidth unrestricted HTTP
download will probably break the RTP stream. If the client however
knows, that it yet has 30 seconds to download a 15 kB codebook, the
client could throttle the HTTP download, preventing the RTP stream to break.
- There is an SDP header field for the codebook URL and there is a
placeholder defined for the codebook id (and if it turns out necessary
later, even other relevant attributes). If the URL is defined as
http://foo.com/cgi-bin/codebook?id={cbid} and the client is notified,
that a codebook with id 4711 will become active, the client would
request the codebook from http://foo.com/cgi-bin/codebook?id=4711.
Gregory already mentioned the advantage of proxying the HTTP requests,
but also regular HTTP caching mechanisms would save bandwidth. Low
bandwidth broadcasts (e.g. targeted for mobile clients) may choose to
use the same codebooks over a longer period of time. A rejoining client
could then even after several days with a small GET requests with an
If-Modified-Since header be determined that it can keep using the
codebooks it still has from the last session.
<p>--- >8 ----
List archives: http://www.xiph.org/archives/
Ogg project homepage: http://www.xiph.org/ogg/
To unsubscribe from this list, send a message to 'vorbis-dev-request at xiph.org'
containing only the word 'unsubscribe' in the body. No subject is needed.
Unsubscribe messages sent to the list will be ignored/filtered.
More information about the Vorbis-dev
mailing list