# Ogg (bestandsindeling)

Ogg is een open standaard voor een vrij formaat dat gebruikt wordt om multimedia te omvatten. De standaard wordt niet beperkt door softwarepatenten en is ontworpen voor efficiënte streaming en bewerking. Het formaat wordt onderhouden door de Xiph.Org Foundation.
De naam 'Ogg' refereert aan het bestandsformaat, waar verscheidene onafhankelijke, vrije en opensource-codecs in kunnen worden samengevoegd, die audio, video, tekst (zoals ondertitels) en andere metagegevens kunnen beschrijven. De term is een afkorting van "ogging", wat jargon is in het computerspel Netrek. De term ogg wordt vaak incorrect gelijkgesteld aan het audioformaat Ogg Vorbis, doordat er geen verschil in extensie is tussen het audioformaat en andere type codecs. Dit verwarrende concept zorgt ervoor dat veel mensen incorrect denken dat het ogg-formaat enkel audio kan bevatten. Andere prominente Xiph codecs die opgeslagen worden in het Ogg-containerformaat zijn de videocodering Theora en het formaat om menselijke spraak te comprimeren, Speex.
Tot 2007 werd de .ogg-bestandsextensie gebruikt voor alle type media die omvat kunnen worden met Ogg. Vanaf 2007 heeft Xiph.Org verzocht om de .ogg-bestandsextensie enkel voor Vorbis te gebruiken, in verband met compatibiliteit met vorige versies. De Xiph.Org foundation heeft besloten om een nieuwe set van bestandsextensies te gebruiken die aangeven welk type content in het omvattende Ogg-bestand is opgeslagen, zoals .oga voor audio, .ogv voor video (inclusief Theora) en .ogx voor applicaties.
De huidige versie van de referentie-implementatie, vrijgegeven op 27 november 2005, is libogg 1.1.3. De softwarebibliotheek is vrij beschikbaar, vrijgegeven onder de BSD-licentie.
Zowel commerciële als niet-commerciële en zowel vrije als beschermde mediaspelers hebben het Ogg-formaat en de verschillende codecs geïmplementeerd, mede doordat het formaat vrij is. Het formaat is inmiddels ook beschikbaar op verscheidene draagbare mediaspelers en zelfs op gps-ontvangers van verscheidene producenten.

## Indeling

Een ogg-bestand wordt onderverdeeld in verschillende blokken, en ieder blok heeft een vaste structuur waarmee deze begint.

### Een gegevensblok van een ogg-bestand

Ieder nieuw gegevensblok in een ogg-bestand begint met een vast aantal gegevens, waarbij iedere bit een betekenis is gegeven. Een nieuw gegevensblok begint als volgt:
* Beginpatroon, 32 bits: magisch getal, ter herkenning dat dit een ogg-bestand is.
* Versie, 8 bits: versie van de bitstream, voorlopig altijd 0.
* Headertype, 8 bits: opties die duidelijk maken over wat voor soort bestandsdeel het gaat. Deze opties kunnen bijvoorbeeld aangeven dat dit het eerste of het laatste deel is.
* Positie, 64 bits: deze wordt bepaald door de codec en bevat informatie zoals bitstream en samplesnelheid.
* Bitstreamseriecode, 32 bits: een unieke code voor elke bitstream, wordt gebruikt om verschillende bitstreams uit elkaar te houden.
* Opvolgingsnummer, 32 bits: het opvolgingsnummer van dit bestandsdeel.
* Checksum, 32 bits: code die gegenereerd wordt afhankelijk van de inhoud. Wordt gebruikt om de inhoud op fouten te controleren.
* Aantal segmenten, 8 bits: het aantal segmenten aanwezig in dit blok. Een segment is een gedeelte van de gegevens.
* Segmenttabel: een tabel met daarin voor ieder segment zijn lengte, het aantal onderdelen, de positie etc. Deze tabel wordt gebruikt om dit bestanddeel gemakkelijk in pakketten te kunnen verdelen.