Ogg

From XiphWiki

(Difference between revisions)
Jump to: navigation, search
m (add index.html to oggz link)
(Implementations)
(18 intermediate revisions not shown)
Line 1: Line 1:
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.
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.
 +
 +
== Name ==
 +
Ogg derives from "ogging", jargon from the computer game Netrek.  Ogg is not an acronym and should not be mentioned as "OGG".
== Design constraints for Ogg bitstreams ==
== Design constraints for Ogg bitstreams ==
Line 11: Line 14:
== Projects using Ogg ==
== Projects using Ogg ==
-
* [[Vorbis]]
+
=== Codecs ===
-
* [[Theora]]
+
 
-
* [[FLAC]]
+
* [[CMML]]
-
* [[Speex]]
+
* [[FLAC]] ([http://flac.sourceforge.net/ogg_mapping.html Ogg mapping])
 +
* [[OggKate|Kate]]
 +
* [http://opus-codec.org/ Opus] ([[OggOpus|Ogg mapping]])
 +
* [[OggPCM|PCM]]
 +
* [[Ogg Skeleton|Skeleton]]
 +
* [[Speex]] ([[OggSpeex|Ogg mapping]])
 +
* [[Theora]] ([[OggTheora|Ogg mapping]])
 +
* [[Vorbis]] ([[OggVorbis|Ogg mapping]])
 +
* [[OggWrit|Writ]]
 +
 
 +
=== Servers ===
 +
 
 +
* [http://www.annodex.net/ Annodex]
* [[Icecast]]
* [[Icecast]]
-
* [[Ogg_Skeleton]]
+
* [http://www.metavid.org/ Metavid]
-
* [http://www.annodex.net/ CMML & Annodex]
+
-
* [[Writ]]
+
-
== Development Libraries ==
+
== Developer info ==
 +
 
 +
* [[GranulePosAndSeeking]] -- a discussion of the interpretation of granulepos, and the algorithm for seeking on Ogg files
 +
 
 +
=== 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-
 +
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +
 
 +
 
 +
== Implementations ==
The Ogg encapsulation format can be handled with the following libraries:
The Ogg encapsulation format can be handled with the following libraries:
* libogg: [http://svn.xiph.org/trunk/ogg/ libogg svn] (C, cross-platform) Low-level Ogg parsing and writing.
* libogg: [http://svn.xiph.org/trunk/ogg/ libogg svn] (C, cross-platform) Low-level Ogg parsing and writing.
-
* liboggz: [http://svn.annodex.net/liboggz/ liboggz svn] or [http://annodex.net/software/liboggz/index.html liboggz] (C, cross-platform) liboggz wraps libogg and provides features such as seeking.
+
* liboggz: [http://git.xiph.org/?p=liboggz.git liboggz git] or [http://annodex.net/software/liboggz/index.html liboggz] (C, cross-platform) liboggz wraps libogg and provides features such as seeking.
* the Ogg Directshow filters: see [http://www.illiminable.com/ogg/ illiminable] (C++, Win32)
* the Ogg Directshow filters: see [http://www.illiminable.com/ogg/ illiminable] (C++, Win32)
-
* [http://www.annodex.net/~conrad/software/hogg HOgg] (Haskell)
+
* [http://www.kfish.org/software/hogg HOgg] (pure Haskell)
 +
* [http://www.jcraft.com/jorbis/ JOrbis] (pure Java) contains com.jcraft.jogg
 +
* [http://www.sacredchao.net/quodlibet/wiki/Development/Mutagen Mutagen] (pure Python)
 +
 
 +
== See also ==
 +
 
 +
* [[Oggless]]
 +
* [[MIME Types and File Extensions]]
 +
* [[OggIssues]]
 +
* [[RFC_3533_Errata]] - errors and flaws in the specification
 +
* [[Nut_Container]]
== External links ==
== External links ==
Line 33: Line 87:
* [http://www.xiph.org/ogg/doc/ Ogg documentation]
* [http://www.xiph.org/ogg/doc/ Ogg documentation]
* [http://www.ietf.org/rfc/rfc3533.txt Ogg RFC]
* [http://www.ietf.org/rfc/rfc3533.txt Ogg RFC]
 +
* [http://wiki.multimedia.cx/index.php?title=Ogg Ogg at Multimedia Wiki]
 +
 +
[[Category:Ogg]]

Revision as of 14:30, 8 May 2012

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

Name

Ogg derives from "ogging", jargon from the computer game Netrek. Ogg is not an acronym and should not be mentioned as "OGG".

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.

Projects using Ogg

Codecs

Servers

Developer info

  • GranulePosAndSeeking -- a discussion of the interpretation of granulepos, and the algorithm for seeking on Ogg files

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-
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


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 git 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)

See also

External links

Retrieved from "http://wiki.xiph.org/Ogg"
Personal tools


Main Page

Xiph.Org Projects

Audio—

Video—

Text—

Container—

Streaming—