Ogg
From XiphWiki
The Ogg transport bitstream is designed to provide framing, error protection and seeking structure for higher-level codec streams that consist of raw, unencapsulated data packets, such as the Vorbis audio codec or Theora video codec.
Contents |
[edit]
Name
Ogg derives from "ogging", jargon from the computer game Netrek. Ogg is not an acronym and should not be mentioned as "OGG".
[edit]
Design constraints for Ogg bitstreams
- True streaming; we must not need to seek to build a 100% complete bitstream.
- Use no more than approximately 1-2% of bitstream bandwidth for packet boundary marking, high-level framing, sync and seeking.
- Specification of absolute position within the original sample stream.
- Simple mechanism to ease limited editing, such as a simplified concatenation mechanism.
- Detection of corruption, recapture after error and direct, random access to data at arbitrary positions in the bitstream.
[edit]
Projects using Ogg
[edit]
Codecs
- CELT
- CMML
- FLAC (Ogg mapping)
- Kate
- PCM
- Skeleton
- Speex (Ogg mapping)
- Theora (Ogg mapping)
- Vorbis (Ogg mapping)
- Writ
[edit]
Servers
[edit]
Developer info
- GranulePosAndSeeking -- a discussion of the interpretation of granulepos, and the algorithm for seeking on Ogg files
[edit]
Ogg page format
The LSb (least significant bit) comes first in the Bytes. Fields with more than one byte length are encoded LSB (least significant byte) first.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1| Byte +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | capture_pattern: Magic number for page start "OggS" | 0-3 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | version | header_type | granule_position | 4-7 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | 8-11 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | bitstream_serial_number | 12-15 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | page_sequence_number | 16-19 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | CRC_checksum | 20-23 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |page_segments | segment_table | 24-27 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ... | 28- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
[edit]
Implementations
The Ogg encapsulation format can be handled with the following libraries:
- libogg: libogg svn (C, cross-platform) Low-level Ogg parsing and writing.
- liboggz: liboggz svn or liboggz (C, cross-platform) liboggz wraps libogg and provides features such as seeking.
- the Ogg Directshow filters: see illiminable (C++, Win32)
- HOgg (pure Haskell)
- JOrbis (pure Java) contains com.jcraft.jogg
- Mutagen (pure Python)
[edit]
See also
[edit]
