Ogg

Ogg je projekt, který si klade za cíl vytvořit svobodný software pro digitální multimédia. Datový formát Ogg propagovaný nadací Xiph.org byl vytvořen jako výchozí materiál větší iniciativy, která si klade za cíl vyvinout komponenty pro kódování a dekódování multimediálního obsahu, přičemž tyto komponenty budou svobodně dostupné a svobodně reimplementovatelné v softwaru (BSD licence). Formát Ogg je definován v RFC 3533 a jeho MIME typ application/ogg v RFC 3534.
Různé části projektu jsou zamýšleny jako alternativy k nesvobodným standardům, jakými jsou formáty MPEG, Real, QuickTime, Windows Media Audio; formáty RIFF – WAV a AVI.

Ogg jako formát 
Datový formát Ogg propagovaný nadací Xiph.org byl vytvořen jako výchozí materiál větší iniciativy, která si klade za cíl vyvinout komponenty pro kódování a dekódování multimediálního obsahu, přičemž tyto komponenty budou svobodně dostupné a svobodně reimplementovatelné v softwaru (BSD licence). Formát Ogg je definován v RFC 3533 a jeho MIME typ application/ogg v RFC 3534.

Formát se skládá z kusů dat nazývajících se stránka ogg. Každá stránka začíná řetězcem „OggS“ k identifikaci souboru jako Ogg formátu. Sériové číslo a číslo stránky v záhlaví stránky identifikuje každou stránku jako část série stránek tvořících proud bitů (bitstream). Vícenásobný bitstreams může být multiplexní v souboru kde stránky z každého bitstreamu jsou seřazené podle doby hledání obsažených dat. Bitstream může být také připojený k existujícím souborům, proces známý jako spojování, způsobuje, že bitstreamy jsou dekódovány po sekvencích.
Knihovna libogg, spadající pod BSD licenci, je k dispozici ke kódování a dekódování dat z Ogg streamů. Nezávislé implementace Ogg jsou užívány v několika projektech jako RealPlayer a sada DirectShow filtrů.

Struktura stránky 
Následující je rozložení pole z hlavičky Ogg stránky:

  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
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | zachytávací_zdroj: kouzelné číslo pro začátek stránky "OggS"  | 0-3
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | verze         | typ_hlavičky  | pozice_zrna                   | 4-7
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                                                               | 8-11
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                               | sériové_číslo bitstreamu      | 12-15
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                               | číslo_sekvence_stránky        | 16-19
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                               | CRC_kontrolní_součet          | 20-23
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                               | segmenty_str.|segment_tabulky | 24-27
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | ...                                                           | 28-
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Zachytávací zdroj – 32bitové
Zachytávací vzor nebo synchronizační kód je kouzelné číslo užívané pro zajišťování synchronizace při rozebírání Ogg souborů. Každá stránka začíná čtyř bajtovou sekvencí 'OggS'. Toto napomáhá při synchronizaci kontrolujícího programu v případech kde data byla ztracena nebo porušena a je to rozumná kontrola před zahájením rozboru stránkové struktury.

Verze – 8bitové
Toto pole ukazuje verzi bitstreamu Ogg formátu k povolení pro budoucí rozšíření. V současné době je nastaveno na 0.

Hlavičkový typ – 8bitové
Je to 8bitové pole příznaků, které ukazují typ stránky která následuje. Pravý krajní nebo nejnižší platný bit je považovaný za bit 0 s hodnotou 0x01 a další nejnižší platná číslice je bit 1 s hodnotou 0x02. Třetí je bit 2 s hodnotou 0x04, a tak dále.

Pozice zrna – 64bitové
Pozice zrna je časová značka v Ogg souborech. Je to abstraktní hodnota, jejíž význam je určen kodekem. To může být například součet počtu vzorků, počet rámů nebo větší komplexní schéma.

Sériové číslo bitstreamu – 32bitové
Toto pole je sériové číslo, které identifikuje stránku náležící částečnému logickému bitstreamu. Každý logický bitstream v souboru má jedinečnou hodnotu a toto pole povoluje implementace k doručení stránek příslušnému dekodéru. V typickém Vorbis+Theora souboru bude jeden proud audio (Vorbis), a další bude video (Theora).

Stránkové pořadové číslo – 32bitové
Toto pole je monotonně rostoucí pole pro každý logický bitstream. První stránka je 0, druhá 1, atd. Dovoluje implementacím zjistit, kdy byla data ztracena.

Kontrolní součet – 32bitové
Toto pole poskytuje kontrolní součet dat na celé stránce, pole nastaveno na 0 po vykonaném kontrolním součtu. To povoluje ověření, že data nebyla porušena od vytvoření. Stránky, kterým selže kontrolní součet by měly být vyřazené.

Segmenty stránky – 8bitové
Toto pole ukazuje počet segmentů, které existují na této stránce. To také ukazuje kolik bajtů je v segmentu tabulky, které následují toto pole. Tam může být maximálně 255 částí na každé stránce.

Tabulka segmentů
Tabulka segmentů je 8bitový vektor hodnot ukazující délku každého segmentů uvnitř těla stránky. Počet segmentů je stanovený z předcházejícího pole segmentů stránky. Každý segment má délku mezi 0 a 255 bajty.

Segmenty poskytují způsob jak seskupit segmenty do paketů, které jsou smysluplnými jednotkami dat pro dekodér. Když délka segmentu ukazuje na 255, to ukazuje, že následující segment je zřetězený do jednoho a je částí stejného paketu. Když délka segmentu je 0–254, ukazuje to, že tento segment je konečný segment v tomto paketu. Kde délka paketu je násobek 255, konečná segment bude délky 0.
Kde konečný paket pokračuje na další stránce, konečná hodnota segmentu bude 255 a pokračující příznak bude nastaven na následující stránku aby ukazovala, že začátek nové stránky je pokračováním poslední stránky.

Zdroje 
Výchozí prací byl bezeztrátový kodek Squish. Dnes je základem ztrátový zvukový formát Vorbis (16–256 Kb/s na kanál). Dalšími jsou video formát Theora, který vychází z komerčního kodeku VP3 firmy On2 Technologies, zvukový kodek pro mluvenou řeč Speex (8–32 Kb/s na kanál) a bezeztrátový zvukový kodek pro kvalitní přenos zvuku FLAC. Writ je kodek pro vkládání titulků.

Název 
Laikové často předpokládají, že název Ogg je odvozen od postavy stařenky Oggové z fantasy série Terryho Pratchetta Zeměplocha. Ve skutečnosti jde o slangový termín pocházející z počítačové hry Netrek. Původně znamenal sebevražedný útok, později získal širší význam vrhat se do něčeho po hlavě –důrazně a možná bez rozmyslu, zejména bez ohledu na možné vyčerpání zdrojů: tak musel být projekt vnímán vzhledem k jeho hardwarovým požadavkům v době vzniku v roce 1994.

Ogg kodeky 
Ogg je jen kontejnerový formát. Vlastní audio nebo video zakódované kodekem bude uložené uvnitř Ogg kontejneru. Ogg kontejnery mohou obsahovat streamy zakódované s vícenásobnými kodeky, například, audio nebo video soubor může obsahovat data zakódovaná audio kodekem i video kodekem.
Formát Ogg může uložit audio a video v různých formátech (jako MPEG-4 , MP3 a jiné), ale obvykle je Ogg používaný s následujícími:

 Audio formáty
 ztrátová komprese
 Vorbis: hlavní zvuková data ve střední až vysoké úrovni proměnného bitratu (~16 500 kbit/s/kanál)
 Opus: zvukový formát pro hudbu i řeč
 Speex: hlasová data v nízkém bitratu (~8 32 kbit/s/kanál)
 bezeztrátová komprese
 FLAC: pro archivní a vysoce přesná zvuková data
 Textový kodek
 Writ: textový kodek k vkládání titulků nebo popisků
 CMML: textový/aplikační kodek pro časová metadata, popisování, a formátování
 Video formáty
 Theora: formát, který byl vyvinut nadací Xiph.org jako součást projektu Ogg. Theora by měla konkurovat formátu MPEG-4 a kodekům RealVideo, Windows Media Video.
 Tarkin: experimentální kodek využívající Diskrétní vlnkovou transformaci v třech dimenzích (šířka, výška a čas). To bylo dané na od února 2000, příchodem kodeku Theora jako hlavní ohnisko zakódování videa.
 Dirac: experimentální formát vyvinutý BBC jako základ nového kodeku pro přenos videa přes internet. Projekt Schrödinger chce poskytovat přenosné knihovny, napsané v C obsažené v kodeku Dirac. To také dovoluje vložit Dirac dovnitř kontejnerového formátu Ogg.
 OggUVS: kodek pro ukládání nekomprimovaného videa.
 Daala: videoformát ve vývoji.
 Titulkové struktury
 Annodex: Volná a opensource sada standardů od CSIRO k poznámkování a indexování síťových medií.

Přípony souborů 
Doporučené přípony ogg souborů podle Xiph.org:

Odkazy

Reference

Externí odkazy 
 
 Nadace Xiph.org 
 RFC 3533 – The Ogg Encapsulation Format Version 0
 RFC 3534 – The application/ogg Media Type

Svobodné multimediální kontejnery