annodex headers (Re: [theora-dev] My issues with ogg and directshow...)

Conrad Parker conrad at
Tue May 11 17:58:43 PDT 2004

On Mon, May 10, 2004 at 11:50:13PM -0700, Ralph Giles wrote:
> On Tue, May 11, 2004 at 04:45:38PM +1000, Andre Pang wrote:
> > The 'metaheader' that you speak of is pretty much what OGM and Annodex 
> > is: Ogg bitstreams with an extra header.  It's not a separate logical 
> > bitstream as you'd like, but on a practical level keeping the header in 
> > the same logical bitstream is simpler, and also works.
> Ah? I thought Annodex used an interleaved substream within a normal Ogg
> file? We like that approach better than what the OGM developers did
> because it better respects the Ogg abstractions.

Annodex uses both: a new substream to describe general info relevant to
the entire stream, and an extra per-substream header to describe info
relevant to that stream. There is usually also a separate logical
bitstream for the actual CMML (metadata, annotations, hyperlinks etc.).

The extra per-logical header is to describe features of that particular
stream -- otherwise it's difficult to rip and recombine streams in any
meaningful way, without introducing new interstream dependencies.

Annodex is designed so that much of this recombining and time based
serving can be done by dumb network devices which don't pretend to do
anything vaguely related to playback. You can serve (from arbitrary
time offsets), proxy/cache, do time range -> byte range conversions,
crawl/index for search, query table of contents, and so on, without
knowing whether the actual data being shipped is Vorbis, Theora,
heartrate graphs, bandwidth logs, share prices, whatever.

In order to acieve this, it must be possible to completely decouple
demux and decode, which in turn means that all the info required for
stream identification and temporal seeking is available at demux. This
is not possible with the existing native-Ogg formats because they each
have the framerate/samplerate info in completely different locations,
sizes, and endiannesses, even with different semantics for theora.

Hence, an extra per-stream header with the timing info in a known
location and format, followed by HTTP style headers (mandatory
Content-Type, optional headers like avg. bitrate, width, height in
an A/V profile).

Beyond that, the normal vorbis/theora/speex streams are untouched.

--- >8 ----
List archives:
Ogg project homepage:
To unsubscribe from this list, send a message to 'theora-dev-request at'
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 Theora-dev mailing list