Ogg

From Wikipedia, the free encyclopedia
Jump to: navigation, search
Ogg
Vorbis Logo
Filename extension .ogv, .oga, .ogx, .ogg, .spx,
Internet media type video/ogg, audio/ogg, application/ogg
Magic number OggS
Developed by Xiph.Org Foundation
Type of format Container format
Container for Vorbis, Theora, Speex, FLAC, Dirac, and others.
Open format? Yes
libogg
Developer(s) Xiph.Org Foundation
Stable release 1.2.2[1][2] / December 7, 2010; 6 months ago (2010-12-07)
Operating system Cross-platform
Type reference implementation (multiplexer/demultiplexer)
License BSD-style license[3]
Website Xiph.org downloads

Ogg is a free, open container format maintained by the Xiph.Org Foundation. The creators of the Ogg format state that it is unrestricted by software patents[4] and is designed to provide for efficient streaming and manipulation of high quality digital multimedia.

The Ogg container format can multiplex a number of independent streams for audio, video, text (such as subtitles), and metadata.

In the Ogg multimedia framework, Theora provides a lossy video layer. The audio layer is most commonly provided by the music-oriented Vorbis format but other options include the human speech compression codec Speex, the lossless audio compression codec FLAC, and OggPCM.

Before 2007, the .ogg filename extension was used for all files whose content used the Ogg container format. Since 2007, the Xiph.Org Foundation recommends that .ogg only be used for Ogg Vorbis audio files. The Xiph.Org Foundation decided to create a new set of file extensions and media types to describe different types of content such as .oga for audio only files, .ogv for video with or without sound (including Theora), and .ogx for multiplexed Ogg.[5]

As of December 7, 2010, the current version of the Xiph.Org Foundation's reference implementation, is libogg 1.2.2.[1] Another version, libogg2, has been in development, but is awaiting a rewrite as of 2008.[6] Both software libraries are free software, released under the new BSD license. Ogg reference implementation was separated from Vorbis on September 2, 2000.[7]

Because the format is free, and its reference implementation is non-copylefted, Ogg's various codecs have been incorporated into a number of different free and proprietary media players, both commercial and non-commercial, as well as portable media players and GPS receivers from different manufacturers.

Contents

[edit] Naming

It is sometimes assumed that the name Ogg comes from the character of Nanny Ogg in Terry Pratchett's Discworld novels, but the Ogg developers say that is not true.[8] Ogg derives from ogging, jargon from the computer game Netrek, which came to mean doing something forcefully, possibly without consideration of the drain on future resources. At its inception, the Ogg project was thought to be somewhat ambitious given the power of the PC hardware of the time.[8] Still, to quote the same reference: "Vorbis, on the other hand is named after the Terry Pratchett character from the book Small Gods."

The project started in 1994. It was originally named Squish but that was already trademarked so the project underwent a name change. The new name, OggSquish, was used until 2001 when it was changed again to Ogg. Ogg has since come to refer to the file format, which is now part of the larger Xiph.org multimedia project. Today, the Squish only refers to a particular codec of the Ogg format.[9]

[edit] File format

Big Buck Bunny small.ogv
Ogg Example

The Ogg bitstream format, spearheaded by the Xiph.Org Foundation, has been created as the framework of a larger initiative aimed at developing a set of components for the coding and decoding of multimedia content, which are available free of charge and freely re-implementable in software.

The format consists of chunks of data each called an Ogg Page. Each page begins with the characters, OggS, to identify the file as Ogg format.

A serial number and page number in the page header identifies each page as part of a series of pages making up a bitstream. Multiple bitstreams may be multiplexed in the file where pages from each bitstream are ordered by the seek time of the contained data. Bitstreams may also be appended to existing files, a process known as chaining, to cause the bitstreams to be decoded in sequence.

A BSD-licensed library, called libogg, is available to encode and decode data from Ogg streams. Independent Ogg implementations are used in several projects such as RealPlayer and a set of DirectShow filters.

[edit] Page structure

The following is the field layout of an Ogg page header:

The field layout of an Ogg page header
Capture pattern – 32 bits
The capture pattern or sync code is a magic number used to ensure synchronisation when parsing Ogg files. Every page starts with the four ASCII character sequence OggS. This assists in resynchronising a parser in cases where data has been lost or is corrupted, and is a sanity check before commencing parsing the page structure.
Version – 8 bits
This field indicates the version of the Ogg bitstream format, to allow for future expansion. It is currently mandated to be 0.
Header type – 8 bits
This is an 8 bit field of flags, which indicates the type of page that follows. The rightmost or least significant bit is considered bit 0, with value 0x01, the next least significant digit is bit 1, with value 0x02. The third is bit 2, with value 0x04, and so on.
Bit Value Flag Page type
0 0x01 Continuation The first packet on this page is a continuation of the previous packet in the logical bitstream.
1 0x02 BOS Beginning Of Stream. This page is the first page in the logical bitstream. The BOS flag must be set on the first page of every logical bitstream, and must not be set on any other page.
2 0x04 EOS End Of Stream. This page is the last page in the logical bitstream. The EOS flag must be set on the final page of every logical bitstream, and must not be set on any other page.
Granule position – 64 bits
A granule position is the time marker in Ogg files. It is an abstract value, whose meaning is determined by the codec. It may for example be a count of the number of samples, the number of frames or a more complex scheme.
Bitstream serial number – 32 bits
This field is a serial number that identifies a page as belonging to a particular logical bitstream. Each logical bitstream in a file has a unique value, and this field allows implementations to deliver the pages to the appropriate decoder. In a typical vorbis and theora file, one stream is the audio (vorbis), and the other is the video (theora)
Page sequence number – 32 bits
This field is a monotonically increasing field for each logical bitstream. The first page is 0, the second 1, etc. This allows implementations to detect when data has been lost.
Checksum – 32 bits
This field provides a checksum of the data in the entire page, performed with the checksum field set to 0. This allows verification that the data has not been corrupted since it was created. Pages that fail the checksum should be discarded.
Page segments – 8 bits
This field indicates the number of segments that exist in this page. It also indicates how many bytes are in the segment table that follows this field. There can be a maximum of 255 segments in any one page.
Segment table
The segment table is an 8 bit vector of values indicating the length of each segment within the page body. The number of segments is determined from the preceding Page Segments field. Each segment is between 0 and 255 bytes in length.

The segments provide a way to group segments into packets, which are meaningful units of data for the decoder. When the segment's length is indicated to be 255, this indicates that the following segment is to be concatenated to this one and is part of the same packet. When the segment's length is 0–254, this indicates that this segment is the final segment in this packet. Where a packet's length is a multiple of 255, the final segment is length 0.

Where the final packet continues on the next page, the final segment value is 255, and the continuation flag is set on the following page to indicate that the start of the new page is a continuation of last page.

[edit] Metadata

Currently, there is no official standard for including metadata in Ogg containers. Implementation is still a long way off as of Quarter 3, 2007. The Xiph.Org Foundation are currently welcoming suggestions and feedback. Suggested metadata implementation methods include the following:[10]

Metadata must currently be included in the codec. There is fairly good software support for Vorbis metadata—often referred to as comments. But software support for Theora and FLAC comments in Ogg containers is very limited.

[edit] History

The Play Ogg web button

The Ogg project began with a simple audio compression package as part of a larger project in 1993.[8] The software was originally named Squish but due to an existing trade mark it was renamed to OggSquish. This name was later used for the whole Ogg project. In 1997, the Xiphophorus OggSquish was described as "an attempt both to create a flexible compressed audio format for modern audio applications as well as to provide the first audio format that is common on any and every modern computer platform".[11] The OggSquish was in 2000 referred to as "a group of several related multimedia and signal processing projects". In 2000, two projects were in active development for planned release: Ogg Vorbis format and libvorbis - the reference implementation of Vorbis. Research also included work on future video and lossless audio coding.[8][12][13][14][15] In 2001, OggSquish was renamed to Ogg and it was described as "the umbrella for a group of several related multimedia and signal processing projects".[16] Ogg has come to stand for the file format, as part of the larger Xiph.org multimedia project. Squish became just the name of one of the Ogg codecs.[9] In 2009, Ogg is described as "a multimedia container format, and the native file and stream format for the Xiph.org multimedia codecs".[17]

Ogg reference implementation was separated from Vorbis on September 2, 2000.[7]

In May 2003, two Internet RFCs were published relating to the format. The Ogg bitstream was defined in RFC 3533 (which is classified as 'informative') and its Internet content type (application/ogg) in RFC 3534 (which is, as of 2006, a proposed standard protocol). In September 2008, RFC 3534 was obsoleted by RFC 5334, which added content types video/ogg, audio/ogg and filename extensions .ogx, .ogv, .oga, .spx.

[edit] OGM

In 2002, the lack of formal video support in Ogg resulted in the creation of the OGM file format, a hack on Ogg that allowed embedding of video from the Microsoft DirectShow framework into an Ogg-based wrapper. OGM was initially supported only by closed source Windows-only tools, but the code base was subsequently opened. Later, video (and subtitle) support were formally specified for Ogg but in a manner incompatible with OGM. Independently, the Matroska container format reached maturity and provided another alternative for people interested in combining Vorbis audio and arbitrary video codecs. As a result OGM is no longer supported or developed and is formally discouraged by Xiph.org.[18] Today, video in Ogg is found with the .ogv file extension, which is formally specified and officially supported.

[edit] 2006

Although Ogg hasn't reached anywhere near the ubiquity of the MPEG standards[19] (e.g., MP3/MP4), as of 2006, it is commonly used to encode free content (such as free music, multimedia on Wikimedia projects and Creative Commons files) and has started to be supported by a significant minority of digital audio players. Also supporting the Ogg format have been many popular video game engines, including Doom 3, Unreal Tournament 2004, Halo: Combat Evolved, Jets n Guns, Mafia: The City of Lost Heaven, Myst IV: Revelation, Stepmania, Serious Sam: The Second Encounter, Lineage 2, Vendetta Online, Battlefield 2 and the Grand Theft Auto engines. The more popular Vorbis codec has built-in support on many software players, and extensions are available for nearly all the rest. Other codecs are less well supported, although extensions are often available.

[edit] 2007

On May 16, 2007, the Free Software Foundation started a campaign to increase the use of Vorbis "as an ethically, legally and technically superior audio alternative to the proprietary MP3 format."[20] People are also encouraged to support the campaign by adding a web button to their website or blog. For those who don't want to download and use FSF's suggested Ogg player (VLC), the Xiph.Org Foundation has an official codec[21] for QuickTime-based applications in Windows and Mac OS X, such as iTunes players and iMovie applications; and Windows users can install a Windows Media Player Ogg codec.[22]

[edit] 2009

By June 30, 2009, the Ogg container, through the use of the Theora and Vorbis, is currently the only container format included in Firefox 3.5 web browser's implementation of the HTML 5 <video> and <audio> elements.[23][24] This was in accordance with the original recommendation outlined in, but later removed from, the HTML 5 draft specification (see Ogg controversy).

[edit] 2010

On March 3, 2010, a technical analysis of an FFmpeg developer is critical about the general purpose abilities of Ogg as a multimedia container format.[25] In a lengthy response, the creator of Ogg refutes these claims.[26]

[edit] Ogg codecs

Ogg is only a container format. The actual audio or video encoded by a codec is stored inside an Ogg container. Ogg containers may contain streams encoded with multiple codecs, for example, a video file with sound contains data encoded by both an audio codec and a video codec.

Being a container format, Ogg can embed audio and video in various formats[27][28] (such as Dirac, MNG, CELT, MPEG-4, MP3 and others) but Ogg was intended and usually is used with the following Xiph.org free codecs:

[edit] See also

[edit] References

  1. ^ a b Xiph.org (2010-12-07). "Xiph.org Press releases". http://www.xiph.org/press/. Retrieved 2010-12-16. 
  2. ^ Montgomery, Christopher (2009-06-23). "Libogg 1.1.4 final release announcement". ogg-dev mailing list. http://lists.xiph.org/pipermail/ogg-dev/2009-June/001484.html. Retrieved 2009-09-24. 
  3. ^ "Sample Xiph.Org Variant of the BSD License". Xiph.Org Foundation. http://www.xiph.org/licenses/bsd/. Retrieved 2009-08-29. 
  4. ^ http://www.vorbis.com/faq/#what
  5. ^ "MIME Types and File Extensions". XiphWiki. 2007-09-07. http://wiki.xiph.org/index.php/MIME_Types_and_File_Extensions. Retrieved 2007-09-10. 
  6. ^ Giles, Ralph (2008-01-05). "r14372 - in trunk/theora: . lib/dec lib/enc". xiph-commits mailing list. "This library was never released and now looks like it needs to be redesigned." 
  7. ^ a b Xiph.Org (2002-07-19) Ogg releases - libogg-1.0.tar.gz - CHANGES. Retrieved 2009-09-01.
  8. ^ a b c d "Xiph.org: naming". Xiph.org Foundation. 2006-01-07. http://xiph.org/xiphname. Retrieved 2008-02-16. "At the time Ogg was starting out, most personal computers were i386s and the i486 was new. I remember thinking about the algorithms I was considering, "Woah, that's heavyweight. People are going to need a 486 to run that..." While the software ogged the music, there wasn't much processor left for anything else." 
  9. ^ a b "Xiph.org: naming". Xiph.org Foundation. 2006-01-07. http://xiph.org/xiphname. Retrieved 2009-09-02. 
  10. ^ "Ogg Metadata". Xiph Wiki. 2005-12-20. http://wiki.xiph.org/Metadata. Retrieved 2007-08-31. 
  11. ^ Christopher Montgomery (1997). "Ogg 98.9". Xiphophorus company. http://people.xiph.org/~giles/historic/www.mit.edu/afs/sipb/user/mwhitson/Project/Ogg/98.9/. Retrieved 2009-09-02. 
  12. ^ Xiph.org (2000-01-18). "OggSquish Vorbis encoding format documentation". Archive.org. http://web.archive.org/web/20000118132124/www.xiph.org/ogg/doc/vorbis.html. Retrieved 2008-09-02. 
  13. ^ Xiph.org (2000-01-18). "OggSquish logical and physical bitstream overview". Archive.org. http://web.archive.org/web/20000118122008/www.xiph.org/ogg/doc/oggstream.html. Retrieved 2008-09-02. 
  14. ^ a b Xiphophorus company (2001-04-05). "The Ogg project homepage". Archive.org. http://web.archive.org/web/20010405060456/www.xiph.org/ogg/index.html. Retrieved 2009-09-02. 
  15. ^ Xiph.org (2001-12-04). "The Ogg project homepage". Archive.org. http://web.archive.org/web/20011204194046/www.xiph.org/ogg/index.html. Retrieved 2008-09-02. 
  16. ^ Xiphophorus company (2001-12-04). "The Ogg project homepage". Archive.org. http://web.archive.org/web/20011204194046/www.xiph.org/ogg/index.html. Retrieved 2009-09-02. 
  17. ^ "The Ogg container format". Xiph.Org Foundation. 2006-01-07. http://xiph.org/ogg/. Retrieved 2009-09-02. 
  18. ^ "does not support OGM". Xiph.org. 2004-07-07. http://www.xiph.org/container/ogm.html. Retrieved 2010-03-04. 
  19. ^ "MP3's Loss, Open Source's Gain". Wired.com. http://www.wired.com/entertainment/music/news/2007/02/72785?currentPage=all. Retrieved 2010-03-04. 
  20. ^ "'Play Ogg': FSF launches free audio format campaign" (in (Latin)). Fsf.org. http://www.fsf.org/news/playogg.html. Retrieved 2010-03-04. 
  21. ^ "Foundation: Ogg QuickTime Components for iTunes and iMovie (Windows and Mac OS X)". Xiph.org. http://xiph.org/quicktime/. Retrieved 2010-03-04. 
  22. ^ "Directshow Filters for Ogg Vorbis, Speex, Theora and FLAC". Xiph.org. 2010-02-22. http://www.xiph.org/dshow/. Retrieved 2010-03-04. 
  23. ^ "Mozilla Developer Center - HTML - Element - Video". 2009-09. https://developer.mozilla.org/En/HTML/Element/Video. Retrieved 2009-12-28. 
  24. ^ "Mozilla Developer Center - HTML - Element - Audio". 2009-09. https://developer.mozilla.org/En/HTML/Element/Audio. Retrieved 2009-12-28. 
  25. ^ Rullgard, Mans (2010-03-03). "Ogg objections". hardwarebug.org. http://hardwarebug.org/2010/03/03/ogg-objections/. Retrieved 2010-05-02. 
  26. ^ Montgomery, Christopher (2010-04-27). "Monty - In Defense of Ogg's Good Name". people.xiph.org/~xiphmont. http://people.xiph.org/~xiphmont/lj-pseudocut/o-response-1.html. Retrieved 2010-05-02. 
  27. ^ "MIME Types and File Extensions". XiphWiki. 2009-10-04. http://wiki.xiph.org/index.php/MIME_Types_and_File_Extensions. Retrieved 2009-10-24. 
  28. ^ "RFC 5334 - Ogg Media Types". IETF. 2008-09. http://tools.ietf.org/html/rfc5334. Retrieved 2009-10-24. 
  29. ^ Ralph Giles (2000-12-19) vorbis-dev - Tarkin video codec?, Xiph.org vorbis-dev mailinglist. Retrieved 2009-09-06.
  30. ^ Jack Moffitt (2001-01-03) vorbis-dev - Tarkin at last, Xiph.org vorbis-dev mailinglist. Retrieved 2009-09-06.
  31. ^ Chris Montgomery (2001-02-11) Tarkin developer mailing list, Retrieved on 2009-09-06
  32. ^ Michael Smith (2005-08-29) Tarkin. Retrieved 2009-09-06.
  33. ^ Dirac specification - integration of Dirac encoded video into commonly used container formats Retrieved on 2009-07-05

[edit] External links

Personal tools
Namespaces
Variants
Actions
Navigation
Interaction
Toolbox
Print/export
Languages