<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.xiph.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ThomasVanderStichele</id>
	<title>XiphWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.xiph.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ThomasVanderStichele"/>
	<link rel="alternate" type="text/html" href="https://wiki.xiph.org/Special:Contributions/ThomasVanderStichele"/>
	<updated>2026-05-01T22:42:36Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=MIME_Types_and_File_Extensions&amp;diff=6780</id>
		<title>MIME Types and File Extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=MIME_Types_and_File_Extensions&amp;diff=6780"/>
		<updated>2007-05-28T13:52:01Z</updated>

		<summary type="html">&lt;p&gt;ThomasVanderStichele: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;STATUS: final editing before being turned into an official Xiph recommendation and work on rfcs will start to reflect these policies&lt;br /&gt;
&lt;br /&gt;
DISCLAIMER: currently, only application/ogg is a registered mimetype. Registration for the others will need to be undertaken. In the meantime, use of the &amp;quot;x-&amp;quot; mimetype is recommended.&lt;br /&gt;
&lt;br /&gt;
IMPLEMENTATION recommendations and patches: see [[MIME-Migration]].&lt;br /&gt;
&lt;br /&gt;
== .ogx - application/ogg ==&lt;br /&gt;
&lt;br /&gt;
* Ogg Multiplex Profile (anything in [[Ogg]])&lt;br /&gt;
* can contain any logical bitstreams multiplexed together in an ogg container&lt;br /&gt;
* will replace the .ogg extension from RFC 3534 http://www.ietf.org/rfc/rfc3534.txt&lt;br /&gt;
* random multitrack files SHOULD contain a [[Skeleton]] track to identify all containing logical bitstreams&lt;br /&gt;
* apps that identify a logical bitstream which they cannot decode SHOULD drop but MAY still decode the ones they can&lt;br /&gt;
&lt;br /&gt;
== .oga - audio/ogg ==&lt;br /&gt;
&lt;br /&gt;
* Ogg Audio Profile (audio in Ogg container)&lt;br /&gt;
* apps supporting .oga, .ogv SHOULD support decoding from muxed Ogg streams&lt;br /&gt;
* covers [[Vorbis]], [[Speex]], [[FLAC]], [[Ghost]], [[OggPCM]] inside Ogg, though Ogg Vorbis and Ogg Speex also have special profiles&lt;br /&gt;
* May contain Ogg Skeleton and/or [[CMML]] logical bitstreams.&lt;br /&gt;
&lt;br /&gt;
RATIONALE: This distinguishes audio-only files, using any of the Xiph audio codecs, from Ogg Vorbis I files (traditional .ogg) which may not contain more than one logical bitstream.&lt;br /&gt;
&lt;br /&gt;
== .ogv - video/ogg ==&lt;br /&gt;
&lt;br /&gt;
* Ogg Video Profile (a/v in Ogg container)&lt;br /&gt;
* apps supporting .oga, .ogv SHOULD support decoding from muxed Ogg streams&lt;br /&gt;
* covers [[Theora]], Theora + Vorbis, Theora + Speex, Theora + FLAC, [[Dirac]] + Vorbis, [[OggMNG|MNG]] + FLAC, [[OggUVS]] inside Ogg&lt;br /&gt;
* This list is not exhaustive (for example, [[Dirac]] + FLAC is acceptable too)&lt;br /&gt;
* May contain Ogg Skeleton and/or CMML logical bitstreams.&lt;br /&gt;
&lt;br /&gt;
== .ogg - audio/ogg+vorbis ==&lt;br /&gt;
&lt;br /&gt;
* Ogg Vorbis I Profile&lt;br /&gt;
* .ogg applies now for Ogg Vorbis I files only&lt;br /&gt;
* .ogg has more recently also been used for Ogg FLAC and for Ogg Theora, too - these uses are deprecated now in favor of .oga and .ogv&lt;br /&gt;
* has been defined in RFC 3534 http://www.ietf.org/rfc/rfc3534.txt for application/ogg, so rfc 3534 will be re-defined&lt;br /&gt;
&lt;br /&gt;
RATIONALE: .ogg has traditionally been used for Ogg Vorbis I files, in particular in HW players, which needs to continue to be supported&lt;br /&gt;
&lt;br /&gt;
== .spx - audio/ogg+speex ==&lt;br /&gt;
&lt;br /&gt;
* Ogg Speex Profile&lt;br /&gt;
* .spx has traditionally been used for Ogg Speex files and should be considered for backwards-compatibility&lt;br /&gt;
&lt;br /&gt;
== .flac - application/flac ==&lt;br /&gt;
&lt;br /&gt;
* flac in native encapsulation format&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Codec MIME types ==&lt;br /&gt;
&lt;br /&gt;
Codecs need their own MIME types for streaming and to be used in multitrack ogg files using skeleton:&lt;br /&gt;
&lt;br /&gt;
* audio/vorbis for Vorbis without container&lt;br /&gt;
* video/theora for Theora without container&lt;br /&gt;
* audio/speex for Speex without container&lt;br /&gt;
* audio/flac for FLAC without container, but extra FLAC Ogg header (?)&lt;/div&gt;</summary>
		<author><name>ThomasVanderStichele</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=OggPCM_Draft3&amp;diff=2077</id>
		<title>OggPCM Draft3</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=OggPCM_Draft3&amp;diff=2077"/>
		<updated>2005-11-15T11:13:11Z</updated>

		<summary type="html">&lt;p&gt;ThomasVanderStichele: /* Supported PCM Formats */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Just in case it&#039;s not obvious, this page is just meant to be funny. Don&#039;t take this as a spec.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Alternate format for OggPCM ==&lt;br /&gt;
&lt;br /&gt;
=== Main Header Packet ===&lt;br /&gt;
Multi-byte fields in the header packets are packed in big indian order, to be consistent with network bit order. A header packet contains the following fields: &lt;br /&gt;
&lt;br /&gt;
 1   0      Codec identifier. Please make sure no other format starts with a bit set to zero.&lt;br /&gt;
 16  0x00   Version Major (increment and have fun breaking other people&#039;s applications)&lt;br /&gt;
 16  0x00   Version Minor (should be compatible, try being more creative as to how to break stuff)&lt;br /&gt;
 32  [uint] PCM format&lt;br /&gt;
 32  [uint] Phase of the moon&lt;br /&gt;
 32  [uint] Sampling rate in ROT13 format&lt;br /&gt;
 32  [uint] Number of Channels (please make use of all the bits here)&lt;br /&gt;
 16  [uint] Number of flames since creation of the spec (if 16 bits aren&#039;t enough, steel from next field)&lt;br /&gt;
 16  [uint] Number of developers implementing the spec (number will go down as previous field increases)&lt;br /&gt;
 32  [uint] Favorite colour (RGBA)&lt;br /&gt;
 1   [bool] Evil bit. Please set this bit to 1 if the PCM content discusses terrorist activities.&lt;br /&gt;
 1   [bool] Clueless bit. Please set this bit to 1 if you don&#039;t know what to set it to.&lt;br /&gt;
 1   [bool] Wiretap bit. If you are wiretapping stream content. Please alter this bit in the transmission.&lt;br /&gt;
 16  [uint] Annoyance field. Rate annoyance of the content from 0 to 65535.&lt;br /&gt;
 128 [uint] Magic number. Enter the right magic number or else I won&#039;t play your file.&lt;br /&gt;
 8x12[char] CC field. Please leave your credit number here.&lt;br /&gt;
&lt;br /&gt;
Decoder implementations SHOULD refrain from making use of the CC field for online shopping purposes.&lt;br /&gt;
&lt;br /&gt;
=== Comment packet ===&lt;br /&gt;
&lt;br /&gt;
Please rate whether you are satisfied with the spec (1: completely unsatisfied, 5: completely satisfied). Format is ASCII (1 char)&lt;br /&gt;
&lt;br /&gt;
=== Extra Headers (optional) ===&lt;br /&gt;
&lt;br /&gt;
Extra header packets contain additional information about the OggPCM stream. Each extra header is defined as:&lt;br /&gt;
&lt;br /&gt;
 32  [uint] Header ID&lt;br /&gt;
 ...        Header data&lt;br /&gt;
&lt;br /&gt;
==== Astrological Header ====&lt;br /&gt;
&lt;br /&gt;
The channel mapping header is defined as:&lt;br /&gt;
&lt;br /&gt;
 32 0x00000000   Header ID&lt;br /&gt;
 16 [uint]   Major version&lt;br /&gt;
 16 [uint]   Minor version&lt;br /&gt;
 32 [uint]   Phase of the moon (0 if unchanged from main header)&lt;br /&gt;
 32 [unit]   Position of Venus&lt;br /&gt;
&lt;br /&gt;
==== Encryption Header ====&lt;br /&gt;
&lt;br /&gt;
OggPCM supports advanced DRM features. The encryption information is defined as:&lt;br /&gt;
&lt;br /&gt;
 32 0x00000000   Header ID (we use the same as the Astrological Header, they&#039;re interchangeable)&lt;br /&gt;
 24 [uint]       ROT13 Key (ROT13 version of the string &amp;quot;KEY&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== Data Packets ===&lt;br /&gt;
&lt;br /&gt;
Data packets contain either raw or cooked PCM audio in interleaved format:&lt;br /&gt;
&lt;br /&gt;
* A PCM &amp;quot;frame&amp;quot; is composed of samples for all channels of all songs at a given time.&lt;br /&gt;
* Partial frames are forbidden. Offended frames will be prosecuted.&lt;br /&gt;
* Recommended packet size is smaller than 4 TBytes.&lt;br /&gt;
&lt;br /&gt;
=== Supported PCM Formats ===&lt;br /&gt;
&lt;br /&gt;
 Format ID      Short Name                   Description&lt;br /&gt;
  -- Integer coding&lt;br /&gt;
  0x00000000    OGGPCM_FMT_S8                Signed integer 8 bit&lt;br /&gt;
  0x00000001    OGGPCM_FMT_U8                Unsigned integer 8 bit&lt;br /&gt;
  0x00000002    OGGPCM_FMT_S16_LE            Signed integer 16 bit little endian&lt;br /&gt;
  0x00000003    OGGPCM_FMT_S16_BE            Signed integer 16 bit big endian&lt;br /&gt;
  --&lt;br /&gt;
  0x00000004    OGGPCM_FMT_ASCII             Whitespace-separated ASCII&lt;br /&gt;
  0x00000005    OGGPCM_FMT_S16_ROT13_LE      ROT13 Signed integer 16 bit little endian&lt;br /&gt;
  0x00000006    OGGPCM_FMT_S16_ROT26_LE      ROT26 Signed integer 16 bit little endian&lt;br /&gt;
  0x00000007    OGGPCM_FMT_S16_RAND_LE       Signed integer 16 bit little endian with random bit order&lt;br /&gt;
  --&lt;br /&gt;
  0x00000008    OGGPCM_FMT_FLOAT32_LE        IEEE 32-bit float, little endian [-inf,+inf]&lt;br /&gt;
  0x000000G8    OGGPCM_FMT_FLOAT32_LE_SPIN   IEEE 32-bit float, little endian, source sampled with spintronics technology [-inf,+inf]&lt;br /&gt;
&lt;br /&gt;
Float formats use linear scaling from -inf to +inf. It is part of the speficication that a float value of NaN MUST result in the destruction of the galaxy or (as a minimum) our galaxy. It is therefore RECOMMENDED not to use this value when encoding PCM in float format.&lt;/div&gt;</summary>
		<author><name>ThomasVanderStichele</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=FishFaq&amp;diff=3199</id>
		<title>FishFaq</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=FishFaq&amp;diff=3199"/>
		<updated>2005-06-09T16:19:49Z</updated>

		<summary type="html">&lt;p&gt;ThomasVanderStichele: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page combines questions related to all Xiph projects.&lt;br /&gt;
&lt;br /&gt;
== General Ogg questions ==&lt;br /&gt;
&lt;br /&gt;
=== What is a granulepos ? ===&lt;br /&gt;
&lt;br /&gt;
A granulepos is a representation for a timestamp on a scale specific to the codec.  Conrad Parker clarifies the definition of granulepos as &amp;quot;representing the presentation time for the last presentable data item in an Ogg packet.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Where is the granulepos stored in the bitstream ? ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How does the Ogg packet number work ? ===&lt;br /&gt;
&lt;br /&gt;
The Ogg bitstream does not store packet numbers in the bitstream.  Only page sequence numbers are&lt;br /&gt;
stored.  libogg will count packets and give each Ogg packet a packet number.  Normally these are&lt;br /&gt;
in sequence; when Ogg notices a discontinuity however (page sequence numbers don&#039;t match up (FIXME: is this actually in the code ?), or&lt;br /&gt;
the lacing values don&#039;t match up) it will increment the page counter by 1, which thus shows up as a missing packet (see http://trac.xiph.org/cgi-bin/trac.cgi/file/trunk/ogg/src/framing.c, _packetout()).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Player implementation questions ==&lt;br /&gt;
&lt;br /&gt;
=== What use cases do I need to consider when writing a player ? ===&lt;br /&gt;
&lt;br /&gt;
There are different ways in which an ogg stream reaches your player.  Each of these ways has some specific restrictions and potential problems that your player needs to be able to deal with.  These are:&lt;br /&gt;
&lt;br /&gt;
- the &amp;quot;ideal&amp;quot; case: a correctly muxed Ogg stream as a seekable file, with correct bos packets, header packets, and eos packets, time-correct muxing, and a continuous set of Ogg pages&lt;br /&gt;
- the &amp;quot;lossless streaming&amp;quot; case (e.g. HTTP streaming): you receive correct bos and header packets, and a string of Ogg packets in pages that are continuous, but start with a discontinuity.  The stream might or might not be seekable, and you do not get eos pages&lt;br /&gt;
- the &amp;quot;saved from lossless streaming&amp;quot; case: as above, but you can seek.  You still don&#039;t have eos pages&lt;br /&gt;
- the &amp;quot;lossy streaming&amp;quot; case (e.g. RTP streaming): some of the Ogg pages get lost in transmission. In the case of RTP, you actually may have less, or different, information to go on, since it is recommended that RTP packetizing is used instead of Ogg packetizing.  An HTTP stream could also be lossy, if the server for example decides that the client is not reading fast enough and drops a set of intermediary buffers.&lt;br /&gt;
- the &amp;quot;no feedback&amp;quot; case (e.g. satellite broadcasts): there is no way for the client to communicate with the server.  The client needs to get the header pages through other means, and then interpret the Ogg stream it receives.&lt;/div&gt;</summary>
		<author><name>ThomasVanderStichele</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=FishFaq&amp;diff=1323</id>
		<title>FishFaq</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=FishFaq&amp;diff=1323"/>
		<updated>2005-06-09T15:55:20Z</updated>

		<summary type="html">&lt;p&gt;ThomasVanderStichele: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page combines questions related to all Xiph projects.&lt;br /&gt;
&lt;br /&gt;
== General Ogg questions ==&lt;br /&gt;
&lt;br /&gt;
=== What is a granulepos ? ===&lt;br /&gt;
&lt;br /&gt;
A granulepos is a representation for a timestamp on a scale specific to the codec.  Conrad Parker clarifies the definition of granulepos as &amp;quot;representing the presentation time for the last presentable data item in an Ogg packet.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Where is the granulepos stored in the bitstream ? ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How does the Ogg packet number work ? ===&lt;br /&gt;
&lt;br /&gt;
The Ogg bitstream does not store packet numbers in the bitstream.  Only page sequence numbers are&lt;br /&gt;
stored.  libogg will count packets and give each Ogg packet a packet number.  Normally these are&lt;br /&gt;
in sequence; when Ogg notices a discontinuity however (page sequence numbers don&#039;t match up (FIXME: is this actually in the code ?), or&lt;br /&gt;
the lacing values don&#039;t match up) it will increment the page counter by 1, which thus shows up as a missing packet (see http://trac.xiph.org/cgi-bin/trac.cgi/file/trunk/ogg/src/framing.c, _packetout()).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Player implementation questions ==&lt;br /&gt;
&lt;br /&gt;
=== What use cases do I need to consider when writing a player ? ===&lt;br /&gt;
&lt;br /&gt;
There are different ways in which an ogg stream reaches your player.  Each of these ways has some specific restrictions and potential problems that your player needs to be able to deal with.  These are:&lt;br /&gt;
&lt;br /&gt;
- the &amp;quot;ideal&amp;quot; case: a correctly muxed Ogg stream as a seekable file, with correct bos packets, header packets, and eos packets, time-correct muxing, and a continuous set of Ogg pages&lt;br /&gt;
- the &amp;quot;lossless streaming&amp;quot; case (e.g. HTTP streaming): you receive correct bos and header packets, and a string of Ogg packets in pages that are continuous, but start with a discontinuity.  The stream might or might not be seekable, and you do not get eos pages&lt;br /&gt;
- the &amp;quot;saved from lossless streaming&amp;quot; case: as above, but you can seek.  You still don&#039;t have eos pages&lt;br /&gt;
- the &amp;quot;lossy streaming&amp;quot; case (e.g. RTP streaming): some of the Ogg pages get lost in transmission. In the case of RTP, you actually may have less, or different, information to go on, since it is recommended that RTP packetizing is used instead of Ogg packetizing.&lt;/div&gt;</summary>
		<author><name>ThomasVanderStichele</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=FishFaq&amp;diff=1322</id>
		<title>FishFaq</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=FishFaq&amp;diff=1322"/>
		<updated>2005-06-06T09:36:39Z</updated>

		<summary type="html">&lt;p&gt;ThomasVanderStichele: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page combines questions related to all Xiph projects.&lt;br /&gt;
&lt;br /&gt;
== General Ogg questions ==&lt;br /&gt;
&lt;br /&gt;
=== What is a granulepos ? ===&lt;br /&gt;
&lt;br /&gt;
A granulepos is a representation for a timestamp on a scale specific to the codec.  Conrad Parker clarifies the definition of granulepos as &amp;quot;representing the presentation time for the last presentable data item in an Ogg packet.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== How does the Ogg packet number work ? ===&lt;br /&gt;
&lt;br /&gt;
The Ogg bitstream does not store packet numbers in the bitstream.  Only page sequence numbers are&lt;br /&gt;
stored.  libogg will count packets and give each Ogg packet a packet number.  Normally these are&lt;br /&gt;
in sequence; when Ogg notices a discontinuity however (page sequence numbers don&#039;t match up (FIXME: is this actually in the code ?), or&lt;br /&gt;
the lacing values don&#039;t match up) it will increment the page counter by 1, which thus shows up as a missing packet (see http://trac.xiph.org/cgi-bin/trac.cgi/file/trunk/ogg/src/framing.c, _packetout()).&lt;/div&gt;</summary>
		<author><name>ThomasVanderStichele</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=FishFaq&amp;diff=1310</id>
		<title>FishFaq</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=FishFaq&amp;diff=1310"/>
		<updated>2005-06-06T09:27:40Z</updated>

		<summary type="html">&lt;p&gt;ThomasVanderStichele: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page combines questions related to all Xiph projects.&lt;br /&gt;
&lt;br /&gt;
- General Ogg questions&lt;br /&gt;
&lt;br /&gt;
* What is a granulepos ?&lt;br /&gt;
&lt;br /&gt;
A granulepos is a representation for a timestamp on a scale specific to the codec.  Conrad Parker clarifies the definition of granulepos as &amp;quot;representing the presentation time for the last presentable data item in an Ogg packet.&amp;quot;&lt;/div&gt;</summary>
		<author><name>ThomasVanderStichele</name></author>
	</entry>
	<entry>
		<id>https://wiki.xiph.org/index.php?title=FishFaq&amp;diff=1308</id>
		<title>FishFaq</title>
		<link rel="alternate" type="text/html" href="https://wiki.xiph.org/index.php?title=FishFaq&amp;diff=1308"/>
		<updated>2005-06-06T09:23:01Z</updated>

		<summary type="html">&lt;p&gt;ThomasVanderStichele: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page combines questions related to all Xiph projects.&lt;br /&gt;
&lt;br /&gt;
TECHNICAL QUESTIONS&lt;br /&gt;
&lt;br /&gt;
* What is a granulepos ?&lt;br /&gt;
&lt;br /&gt;
A granulepos is a representation for a timestamp on a scale specific to the codec.  Conrad Parker clarifies the definition of granulepos as &amp;quot;representing the presentation time for the last presentable data item in an Ogg packet.&amp;quot;&lt;/div&gt;</summary>
		<author><name>ThomasVanderStichele</name></author>
	</entry>
</feed>