Ogg

Ogg er eit patentfritt, open standard konteinarformat for digitale multimedia-bitstraumar, definert av Xiph.Org Foundation. Ei Ogg-fil kan innehalda fleire ulike mediafiler, organiserte for effektiv avspeling.

Filene i ei Ogg konteinarfil kan kodast og dekodast med mange ulike open kjeldekode kodekar for lyd, video og tekst (for til dømes undertitlar). Filer med endinga «.ogg» kan innehalda alle typar Ogg-mediafiler og på grunn av at formatet er lisensfritt har dei ulike Ogg-kodekane vorte nytta i mange forskjellige mediaavspelarar, både gratis og kommersielle. Mange produsentar av bærbare mediaspelarar nyttar òg Ogg-kodekar.

Ogg-filer vert ofte nytta for Vorbis-koda audio-filer, som då vert kalla «Ogg-Vorbis-format», eller «Ogg-Vorbis-filer». Andre populære Xiph-kodekar er videokodeken Theora og talekodeken Speex.

Ogg-formatet, er ein del av eit større Xiph.org Foundation-initiativ for å utvikla opne og gratis standardar for koding og dekoding av multimediainnhald. Xiph har laga ein såkalla referanseimplementering som er kan lastast ned gratis. Siste versjonen er libogg 1.1.3.

Filformatet 
Ogg-filer inneheld dataeiningar som vert kalla «Ogg pages» (Ogg-sider). Kvar side startar med tekststrengen «OggS», som identifiserer fila som ei Ogg-fil. Kvar side har eit sidehovud som inneheld eit serienummer og eit sidenummer, som identifiserer sida som ei av fleire sider som til saman utgjer ein bitstraum. Ei Ogg-fil kan innehalda feire bitstraumar, som vert avspela saman (audio og video til dømes). Dei individuelle sidene i kvar bitstraum er da merkte slik at dei vert avspela til rett tid. Bitstraumar kan òg verta lagt til andre filer, slit at bitstraumane vert dekoda sekvensielt. Dette vert kalla «chaining» (lenking).

Sidestruktur 
Strukturen til sidehovudet i ei Ogg-fil ser slik ut:

  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
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | opptaksmønster: Magisk nummer for sidestart  «OggS»          | 0-3
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | versjon       | hovudtype   | granule_posisjon               | 4-7
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                                                               | 8-11
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                               | bitstraum serienummer        | 12-15
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                               | sidesekvensnummer            | 16-19
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                               | CRC_sjekksum                 | 20-23
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                               | sidesegment | segmenttabbel  | 24-27
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | ...                                                          | 28-
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Opptaksmønster - 32 bit
«Opptaksmønstret» (captur pattern), eller «synkroniseringskoden» er ein «magisk verdi» som vert nytta for synkronisering når Ogg-filer vert lesne og tyda (parced). Alle sidene startar med sekvensen «OggS», på fire Byte. Denne sekvensen kan nyttast for å resynkronisera ein parser når data er delvis tapt eller korrumpert. Sekvensen kan difor nyttast som ein delvis kontroll på at innhalder i file er intakt, før resten av innhaldet er tyda.

Versjon - 8 bits
Dette feltet syner versjonsnumret til Ogg-formatet, noko som er nyttig i samband med framtidige utvidingar. Det er for tida 0.

Hovudtype - 8 bit
Dette er eit 8-bits flagg-felt, som syner kva for sidetype som kjem etterpå. Biten heilt til høgre er bit 0 og har verdien 0x01. Den nest minst signifikante biten, bit 1, har verdien 0x02, bit 3 har verdien 0x04 og så bortetter. 
{| class="wikitable"
!width="5%"|Bit
!width="10%"|Verdi
!width="10%"|Flagg
!width="75%"|Sidetype
|-
|0
|0x01
|Framhald 
|Den fyrste pakken i denne sida er framhald av den førre pakken i den logiske bitstraumen.
|-
|1
|0x02
|BOS
|Beginning Of Stream (Straumstart). Denne sida er den fyrste sida i den logiske bitstraumen. BOS-flagget må vera sett i den fyrste sida i kvar logisk bitstraum og må ikkje vera sett i noko anna side. 
|-
|2
|0x04
|EOS
|End Of Stream (straumslutt). Denne sida er den siste sida i ein logisk bitstraum. EOR-flagget må vera sett i den siste sida av kvar logisk bitstraum og må ikkje vera sett i noko anna side. 
|}

Granule Posisjon - 64 bit
Granule posisjon er eit tidsmerke (ein abstrakt verdi) som vert tillagt meining av kodeken. Det kan til dømes vera antal sampel, talet på rammer, eller ha ei meir kompleks tyding.

Bitstraum serienummer - 32 bit
Dette feltet inneheld eit serienummer som syner at ei side høyrer til ein bestemt logisk bitstraum. Kvar logisk bitstraum i ei fil har ein unik verdi og dette feltet syter for at ei realisering vert i stand til å senda ei side til rett dekodar. Til dømes, når ei typisk vorbis+theora-fil vert dekoda vil audio-bitstraumen verta senna til ein vorbis-dekodar og video-straumen til ein theora-dekodar.

Sidesekvensnummer - 32 bit
Dette feltet er eit monotons aukande felt for kvar logisk bitstraum. I den fyrste sida er det 0, i den andre 1, osb. Dette kan nyttast av ein dekodar å detektera at det manglar sider.

Sjekksum - 32 bit
Dette feltet inneheld ein sjekksum for all data i sida. Dette kan nyttast for å kontrollere at dataen i sida ikkje har vorte endra (korrumpert) etter at sjekksummen vert utrekna. Sider som har feil sjekksum bør ikkje nytast.

Sidesegment - 8 bit
Dette feltet syner talet på segment i sida. Det indikerer òg kor mange byte etterfylgjande segmenttabell inneheld. Ei side kan maksimalt innehalda 255 segment.

Segmenttabell
Segmenttabellen er ein 8-bits vektor med verdiar som indikerer lengda på kvart segment i sida. Antal segment kan hentast frå føregåande sidesegmentfelt. Lengda på kvart segment er mellom 0 og 255 Byte.

Segmenta kan grupperast i pakkar, som er meiningsfylte dataeiningar for ein dekodar. Når segmentlengda er 255 tyder dette at det etterfyljande segmentet høyrer til i same pakke og at det skal skøytast på etter dette segmentet. Når segmentlengda er 0 - 254 tyder det at dette er det siste segmentet i denne pakken. Når pakkelengda er eit multippel av 255 vil det siste segmentet ha lengd 0.

Når den siste pakken held fram i neste side vil lengda til siste segment vera 255 og framhaldsflagget vil vera sett i den etterfyljande sida, for å syna at starten på neste side er framhald av føregåande side.

Ogg-kodekar 
Ogg er berre eit konteinarformat; audio- og/eller videomaterialet ligg i Ogg-«konteinarar» inne i Ogg-fila. Desse konteinarane kan innehalda audio og video koda med ymse kodekar. Ei Ogg-fil som inneheld ein film vil (som oftast) innehalda både ein videostraum og ein audiostraum. Desse to straumane vil vera koda med to ulike kodekar, ein videokodek og ein audiokodek.

 Audiokodekar
 Med tap
 Speex: kodar tale med låge bitratar (~8-32 kbit/s/kanal)
 Vorbis: kodar audio med middels til høge bitratar (~16-500 kbit/s/kanal) 
 Tapsfri komprimering
 FLAC: komprimerer utan tap og høver for arkivering og distribusjon med så høg kvalitet som mogleg
 Videokodekar
 Theora: Tufta på On2 sin VP3-kodek. Theora er eit alternativ til MPEG-4-video (koda med kodekar som H.264, Xvid og DivX) og proprietære videoformat (RealVideo, Windows Media Video, etc.).
 Tarkin: Eksperimentell kodek som nyttar 3D wavelet transform-koding. På grunn av fokuset på Theora er Tarkin-prosjektet førebels «lagt på is». 
 Dirac: Eksperimentell kodek utvikla av BBC for video-strauming over internett. Prosjektet Schrödinger tek sikte på å utvikla eit C-bibliotek for Dirac. 
 OggUVS: Framlegg til ein standard for tapsfri videokomprimering.
 Undertittel-strukturar
 Annodex: Opne standardar for undertekst o.l.
 Tekstkodek
 Writ: Ein tekstkodek for undertitlar o.l.

Historie 
I mars 2003 vart to Internet RHC publiserte: RFC 3533 og RFC 3534. RFC 3534 har no (2006) status som «Framlegg til protokollstandard».

Utbreiing 
Ogg har enda ikkje same utbreiing som MPEG-standarane (2006), men held på å få ei utbreiing for å koda gratis innhald, som til dømes musikk og multimedia-innhald på Wikipedia. Fleire og fleire digital audio spelarar får òg støtte for Ogg. Ogg-foratet vert òg nytta for mange spel, som til dømes Doom 3, Unreal Tournament 2004 og «Serious Sam: The Second Encounter engines». Dei mest pupulære Ogg Vorbis kodekane har innebygd støtte for mange spelarar og utvidingar er tilgjegeleg for dei fleste andre. Dei andre Ogg-kodekane har enda meir sporadisk støtte, men utvidingar er tilgjengelege for mange av dei.

Ogg-spelarar

UNIX / Linux 
 Amarok: Nettstaden til Akarok 
 Banshee: Nettstaden til Banshee 
 MPlayer: Nettstaden til MPlayer
 Rhythmbox: Nettstaden til Rhythmbox
 Totem: Nettstaden til Totem
 xine: Nettstaden til xine
 XMMS: Nettstaden til XMMS

Mac OS X 
 Amarok: Nettstaden til Akarok
 iTunes (med Ogg tilleggsmodul)
 Quicktime 7 med Ogg tilleggsmodul Nettstaden til Quicktime
 VideoLAN: VideoLAN Client (VLC) Nettstaden til VideoLAN
 xine: Nettstaden til xine

Windows 
 Ogg Vorbis spelarar, vorbis.com
 foobar2000: http://www.foobar2000.org/
 Quicktime 7 med Ogg tilleggsmodul Nettstaden til Quicktime
 VideoLAN: VideoLAN Client (VLC) Nettstaden til VideoLAN
 Winamp: Nettstaden til Winamp (med Ogg tilleggsmodul)
 xine: Nettstaden til xine
 Sound Normalizer

Andre patentfrie konteinarformat for multimedia 
 Matroska
 NUT

Kjelder

Denne artikkelen bygger på «Ogg» frå ,  den 6. desember 2006.  
 

 Referansar

Bakgrunnsstoff 
 Xiph.org - The Ogg container format
 Pfeiffer, S., RFC 3533: The Ogg Encapsulation Format Version 0, CSIRO, Mai 2003. 
 Walleij, L., RFC 3534: The application/ogg Media Type, The Ogg Vorbis Community, Mai 2003.
 Directshow Filters for Ogg Vorbis, Speex, Theora and FLAC 
 oggdropXPd A short explanation, Rarewaves
 Kahvi Collective Elektronisk musikk lagra på Ogg Vorbis-format
 63 OGG Radio Stations online! , Musicgoal

Opne filformat
Opne standardar
Lydfilformat