[xiph-rtp] P2P Theora Header delivery; why not SDP?
David Barrett
dbarrett at quinthar.com
Wed May 11 00:26:06 PDT 2005
Excellent detail, thanks.
With all that in mind, chalk up one more vote for standard codebooks
that can be specified in the SDP description.
I mean, I acknowledge the optimal configurability of dynamic codebooks.
But for my needs, I'd prefer a couple pre-configured options that can be
easily selected. I don't really have the expertise to tweak the
settings too closely, so I'd like a small selection of preconfigured
options, like:
- Option #1: High quality, high framerate
- Option #2: Low quality, high framerate
- Option #3: High quality, low framerate
- Option #4: Low quality, low framerate
In the meantime, I'll probably just oversend the header packets inline
(maybe resend with an exponential falloff in frequency) and skip the
complexity of out-of-band codebook delivery.
-david
On Wed, 11 May 2005 12:01 am, Ralph Giles wrote:
> On Tue, May 10, 2005 at 10:32:07PM -0700, David Barrett wrote:
>> Thanks, you and Aaron have given me a good start. Perhaps I'm
>> confused on
>> terminology. I'll define:
>>
>> - Codebook: The header data generated by the encoder, and required by
>> the
>> decoder. In other words, the sum of the Ogg packets output by:
>> theora_encode_header( )
>> theora_encode_comment( )
>> theora_encode_tables( )
>>
>> - Codebook parameters: The parameters that the encoder uses to
>> generate the
>> codebook. In other words, the input to:
>> theora_encode_init( )
>>
>> I was assuming that for a given set of "codebook parameters", there is
>> exactly one "codebook". Thus I proposed that rather than send over
>> the
>> codebook (which is big), just send the codebook parameters (which are
>> small)
>> and generate the codebook "just in time" before decoding.
>>
>> However, I think you're saying this assumption is wrong, and that
>> there are
>> many possible codebooks from the same set of codebook parameters.
>> (Ie, the
>> "codebook parameters" are directly tied to a specific version of the
>> encoding engine; different versions or different encoders might have
>> different codebook parameters, or use them in different ways.) If
>> that's
>> the case, then my proposal obviously won't work.
>>
>> Is this correct?
>
> That is correct.
>
> To clarify a bit, there are three standard headers in a Theora
> bitstream. Each is a separate packet. We refer to:
>
> 1. the 'info' or 'ident' header, the output of theora_encode_header()
> 2. the 'comment' or 'metadata' header, the output of
> theora_encode_comments()
> 3. the 'setup' or 'codebook' header, the output of
> theora_encode_tables()
>
> These are sometimes referred to collectively as 'the codebooks', but
> this is obviously imprecise. The spec also allows additional optional
> headers, (like an ICC profile) but these must be ignorable and so don't
> concern us here.
>
> Of these, 1 and 3 are actually required to properly decode data
> packets.
> The comment header is required for completeness, but the client can
> construct an empty (or custom) packet if necessary and substitute. None
> of the current implementations actually require it.
>
> So only two of the three have to be transmitted reliably. 1 is what you
> were thinking of as the input to theora_encode_init(). It is very
> small,
> and as you and Aaron suggest can be included directly in the SDP. The
> idea of this header is the same as with SDP; to identify the stream as
> Theora, and give the externally interesting parameters like frame size
> and rate. The third header is much larger and contains data for the
> configurable parts of the decoder: quantizers, huffman tables and so
> on.
> So each can be changed intependently of the other, and an encoder or
> decoder need both to function properly.
>
> So yes, while the reference implementation uses the same setup header
> for all input, and only varies the info header, other encoders (can)
> generate different setup headers based not just on the elements of the
> info header, but also on the content itself.
>
> HTH,
> -r
More information about the xiph-rtp
mailing list