Jump to: navigation, search

Ogg Skeleton 3

869 bytes added, 13:24, 23 November 2010
moved Ogg Skeleton to Ogg Skeleton 3: Generic name Ogg Skeleton should be redirect to latest version Ogg Skeleton 4
'''Ogg Skeleton3.0''' provides structuring information for multitrack [[Ogg]] files. It is compatible with Ogg [[Theora]] and provides extra clues for synchronization and content negotiation such as language selection. '''NOTE:''' ''The Ogg Skeleton format has been updated to [[Ogg Skeleton 4]], which includes a keyframe index to enable faster seeking. Encoding tools are recommended to use [[Ogg Skeleton 4]] in preference to version 3.0 where possible.''
Ogg is a generic container format for time-continuous data streams, enabling interleaving of several tracks of frame-wise encoded content in a time-multiplexed manner. As an example, an Ogg physical bitstream could encapsulate several tracks of video encoded in Theora and multiple tracks of audio encoded in Speex or Vorbis or FLAC at the same time. A player that decodes such a bitstream could then, for example, play one video channel as the main video playback, alpha-blend another one on top of it (e.g. a caption track), play a main Vorbis audio together with several FLAC audio tracks simultaneously (e.g. as sound effects), and provide a choice of Speex channels (e.g. providing commentary in different languages). Such a file is generally possible to create with Ogg, it is however not possible to generically parse such a file, seek on it, understand what codecs are contained in such a file, and dynamically handle and play back such content.
Ogg Skeleton is being designed to overcome these problems. Ogg Skeleton is a logical bitstream within an Ogg stream that contains information about the other encapsulated logical bitstreams. For each logical bitstream it provides information such as its media type, and explains the way the granulepos field in Ogg pages is mapped to time.
Ogg Skeleton is also designed to allow the creation of substreams from Ogg physical bitstreams that retain the original timing information. For example, when cutting out the segment between the 7th and the 59th second of an Ogg file, it would be nice to continue to start this cut out file with a playback time of 7 seconds and not of 0. This is of particular interest if you're streaming this file from a Web server after a query for a temporal subpart such as in .
== Specification ==
This is a motivation and design sketch.
'''For the current specification see'''
=== How to describe the logical bitstreams within an Ogg container? ===
* other generic name-value fields that can provide meta information such as the language of a track or the video height and width
* the number of header packets: this informs a parser about the number of actual header packets in an Ogg logical bitstream
* the granule rate: the granule rate represents the data rate in Hz at which content is sampled for the particular logical bitstream. Note that when using this to interpret timestamps, allowing the granulepos of a data page must first be parsed to map extract a granule position value using the method described in [[GranulePosAndSeeking]]. This value can then be mapped to time by calculating "granulepos granules / granulerate".
* the preroll: the number of past content packets to take into account when decoding the current Ogg page, which is necessary for seeking (vorbis has generally 2, speex 3)
* the granuleshift: the number of lower bits from the granulepos field that are used to provide position information for sub-seekable units (like the keyframe shift in theora)
* the basegranule: this represents the granule number with which this logical bitstream starts in the remuxed stream and provides for each logical bitstream the accurate start time of its data stream; this information is necessary to allow correct decoding and timing of the first data packets contained in a logcial bitstream of a remuxed Ogg stream
=== The proposed format of Ogg Skeleton version 3.0 Format Specification ===
Adding the above information into an Ogg bitstream without breaking existing Ogg functionality and code requires the use of a logical bitstream for Ogg Skeleton. This logical bitstream may be ignored on decoding such that existing players can still continue to play back Ogg files that have a Skeleton bitstream. Skeleton enriches the Ogg bitstream to provide meta information about structure and content of the Ogg bitstream.
The mime type is provided as a message header field specified in the same way that HTTP header fields are given (e.g. "Content-typeType: audio/x-vorbis"). Further meta information (such as language and screen size) are also included as message header fields. The offset to the message header fields at the beginning of a fisbone packet is included for forward compatibility - to allow further fields to be included into the packet without disrupting the message header field parsing.
The granule rate is again given as a rational number in the same way that presentation time and basetime were provided above.
* liboggz: [ liboggz svn] or [ liboggz]
* the Annodex technology: []
* [ HOgg] (Haskell)
* ffmpeg2theora (with --skeleton)
* speexenc (with --skeleton) & speexdec
* many more ...
== External links ==
* Ogg Skeleton is described in more detail in the [ Skeleton I-D in svn]* Ogg Skeleton was originally specified in Annodex v3 specification: [ I-D in svn] or [ I-D]  [[Category:Ogg]]

Navigation menu