# Ogg
Ogg ya da bir diğer yazılışıyla OGG, Xiph.org Vakfı tarafından geliştirilen açık ve özgür bir çokluortam dosya biçimidir. Yazılım patentlerinin tehdidi altında olmayan bu dosya biçimi, akışkan video için optimize edilmiş yüksek kalitede çokluortam gerçeklemeleri için geliştirilmiştir.
Ogg dosya biçimi, video, ses, metin (örneğin altyazı) ve metadata bilgilerini birlikte taşıyabilir.
OGG geliştirme çatısının önemli bir parçası olan Theora, kayıplı bir video sıkıştırma yöntemi sağlar. Ses katmanında çoğunlukla müzik dosyaları için optinmize edilmiş Vorbis sıkıştırması yaygın olmakla birlikte Opus, FLAC ya da OggPCM kayıpsız sıkıştırma algoritmaları da kullanılabilmektedir.
2007'den önce .ogg dosya uzantısı, içeriği Ogg kapsayıcı biçiminde olan tüm dosyalar için kullanılmaktaydı. 2007 yılından bu yana Xiph.org Vakfı .ogg uzantısının yalnızca Ogg Vorbis ses dosyaları için kullanılmasını tavsiye etmektedir. Xiph.org Vakfı, farklı içerikteki dosyaları tanımlamak amacıyla yeni bir uzantı serisi ve medya türleri oluşturmaya karar verdi; yalnızca ses dosyaları için .oga, sesli veya değil video dosyaları (Theora dahil) için .ogv, çoğullamalı Ogg için .ogx.
7 Kasım 2017 itibarı ile Xiph.org Vakfı'nın referans uygulamasının güncel versiyonu, libogg 1.3.3'tür. Diğer bir sürüm olan libogg2 geliştirilme aşamasındadır, ancak 2018 itibarıyla halen yeni baştan yazılmayı beklemektedir. Her iki kütüphane de yeni BSD Lisansı ile çıkarılan birer özgür yazılımdır. Ogg referans uygulaması, 2 Eylül 2000 tarihinde Vorbis'ten ayrılmıştır.
Biçim ücretsiz olduğundan ve içerikler telif hakkı ile ilgili kısıtlamalara tabi olmadığından dolayı, Ogg'un çeşitli çözücüleri, özgür ya da özel mülk yazılım ortam oynatıcıda, taşınabilir medya oynatıcıda ve farklı üreticilerin GPS alıcında kullanılmaktadır.


## Adlandırma.
Ogg ismi, Netrek bilgisayar oyunundan gelmektedir. Bu oyunda, gelecekteki durum veya kaynakları düşünmeden ve genellikle zor kullanılarak yapılan eylemler için kullanılan "ogging" fiilinden esinlenilmiştir. Başlangıç aşamasında, henüz o dönemin bilgisayar donanımlarının kısıtlı yetkinliği düşünüldüğünde fazla iddialı bir proje olarak görülüyordu. Terry Prachett'in diskdünya romanlarındaki Nanny Ogg'dan geldiği düşünülse de, biçimin geliştiricisi bunun doğru olmadığını belirtmiştir. Ancak, yine aynı ifadeyi alıntılamak gerekirse; "Diğer yandan Vorbis, Küçük Tanrılar kitabında Terry Prachett'in yarattığı bir karakterden gelmektedir".
Ogg Vorbis projesi 1993 yılında başladı. İlk olarak "Squish" olarak adlandırıldı, ancak bu isim tescillenmişti. Bu yüzden, projede isim değişikliğine gidildi. Yeni isim olan "OggSquish", 2001 yılına dek kullanıldı ki tekrar isim değiştirilerek "Ogg" olarak devam edildi. Ogg içerik biçimini ifade etmek için kullanılageldi ve Xiph.org'un daha büyük kapsamlı çoklu ortam projesinin bir parçası oldu. "Squish" ise bugün (artık "Vorbis" olarak anılıyor), Ogg içeri biçiminde belirli bir ses depolama ortam biçimini ifade etmekte kullanılıyor.


## Dosya Biçimi.
Ogg veri akış biçimi, çoklu ortam içeriklerinin kodlanması ve çözümlenmesini amaçlayan, ücretsiz olarak erişilebilen ve ücretsiz olarak yazılımlarda oynatılabilen aynı zamanda pek çok aracı içermekte olan büyük çaplı bir girişimin çerçevesini oluşturmak üzere geliştirilmiştir.
Biçim, "Ogg Sayfası" olarak isimlendirilen veri parçalarından oluşmaktadır. Her bir sayfa, "OggS" karakteriyle başlamakta, bu da dosyanın Ogg biçiminde olduğunu ifade etmektedir.
Sayfa başlığında yer alan "seri numarası" ve "sayfa numarası", veri akışını oluşturan sayfa dizilimlerini belirler. Birçok veri akışı, her veri akışının içerilen bilginin konumlannma süresine göre dosya içerisinde düzenlendiği şekilde çoklanabilir. Veri akışları, sırayla çözümlenmeleri amacıyla "zincirleme" adı verilen bir süreçle var olan dosyalara da eklenebilir.
Mogg, "Multi-Track-Single-Logical-Stream Ogg-Vorbis" (Çoklu dijital veri, tekil lojik akış Ogg-Vorbis), çoklu kanal veya çoklu dijital veri taşıyan Ogg dosyası biçimidir.


## Sayfa yapısı.
Aşağıda, Ogg sayfa şablonu aşağıdaki gibidir:
 - Aktarım düzeni– 32 bit
Aktarım düzeni veya eşzamanlama kodu, Ogg dosyalarını çözümlerken eşzamanlama yapılmasını sağlan bir sihirli sayıdır. Her bir sayfa, dört karakterden oluşan bir ASCII dizilimş ile başlar; "OggS". Bu, verinin kaybedildiği veya bozulduğu durumlarda çözümleyicinin yeniden eşzamanlama yapmasına yardımcı olur ve sayfa yapısı oluşturulmaya başlamadan önce bir tutarlılık kontrolü işlevi görür.
 - Versiyon - 8 bit
Bu alan, Ogg veri akışına ait biçim versiyonunu belirtir, ileride geliştirilebilirlik sağlar. Şu anda 0 olması zorunludur.
 - Başlık türü - 8 bit
Bu, aşağıdakileri ifade eden 8 bitlik bir işaretlemedir.
 - Granül konumu - 64 bit
Granül konumu, Ogg dosyalarında zaman işaretidir. Anlamı, kodek türüne bağlı olarak değişen soyut bir değerdir. Örneğin, kare sayısını, örneklem sayısını veya daha karmaşık bir şemayı ifade edebilir.
 - Veri akış seri numarası - 32 bit
Bu alan, bir sayfanın belirli bir lojik veri akışına ait olduğunu belirten seri numarasıdır. Bir dosya içerisindeki her bir lojik veri akışı, farklı bir değer sahiptir ve bu alan, sayfaların doğru çözücüye ulaştırılmasını uygular. Tipik bir Vorbis veya Theora dosyasında, bir akış ses (Vorbis), bir akış görüntü (Theora) olarak gerçekleşir.
 - Sayfa sıra numarası - 32 bit
Bu alan, her bir lojik veri akışı için tekdüze bir biçimde artan bir alandır. İlk sayfa 0, sonraki sayfa 1, vb... Bu, veri kaybedildiğinde tespit edilebilmesini amaçlayan bir uygulamadır.
 - Sağlama toplamı - 32 bit
Bu alan, tüm sayfadaki (sayfa başlığı da dahil) verinin döngüsel artıklık denetimi sağlamasını yapar. Veri oluşuturulduğundan bu yana herhangi bir bozulma gerçekleşip gerçekleşmediğinin doğrulanması görevini görür. Bu sağlama işlemini geçemeyen sayfalar çıkarılır. Sağlama toplamı, 0x04C11DB7 polinom değeri kullanılarak oluşturulur.
 - Sayfa segmentleri - 8 bit
Bu alan, bir sayfada yer alan segmentlerin sayısını gösterir. Aynı zamanda, bu alandan sonra gelen segment tablosunda kaç byte olduğunu da içerir. Herhangi bir sayfada, en fazla 255 segment olabilir.
 - Segment tablosu - 8 bit
Segment tablosu, her biri sayfa içerisinde karşılığı olan segmentlerin uzunluğunu gösteren 8 bitlik değerler dizinidir. Segment sayısı, bir önceki Sayfa Segmentleri alanından elde edilir. Her bir segment 0 ile 255 byte arasıdır.
Segment yapısı; segmentlerin çözümleyici için anlamlı bir veri birimi olan bir paket içerisinde gruplanabilmesi için imkan sağlar. Segment uzunluğu 255 olarak ifade edildiğinde, bir sonraki segmentin mevcut segmente iliştirilmesi ve aynı paket içerisinde bunun devamı olduğu anlamına gelir. Segment uzunluğu 0-254 arasında olduğunda, bu paket içerisindeki son segment olduğunu belirtir. Bir paketin uzunluğu 255'in katlarıysa, son segmentin değeri 0 olacaktır.
Son paketin bir sonraki sayfada devam ettiği durumlarda son segment değeri 255 olur; devamsallık işaretlemesi bir sonraki sayfada önceki sayfanın devamı olduğu şeklinde yer alır.


### Metaveri.
Vorbis açımlaması, ilkin Ogg Vorbis ile kullanılmak üzere oluşturulan bir temel-düzey metaveri biçimidir. O zamandan bu yana, Theora, Speex, FLAC ve Opus gibi diğer Xiph.org Ogg sarma (kapsülleme) kodeklerinin belirtiminde de kullanılmıştır. "VorbisComment" (Vorbis açımlaması) Xiph.org kodeklerine metaveri yerleştirmek için en yaygın olarak desteklenen, en basit yöntemdir.
"VorbisComment" içerisinde bir veya daha fazla METAVERİ_BLOK_RESMİ=... önizleme görsel veya albüm kapağı olarak Base64-kodlamalı değerlere sahiptir. Diğer bir deyişle, FLAC önizleme ve albüm kapağı resimlerini ikili bloklar halinde&mdash küçük-endian METAVERİ_BLOK_VORBIS_AÇIMLAMASI olarak saklar.
Diğer mevcut ve önerilen mekanizmalar:
  - FLAC metaveri blokları
  - Ogg Skeleton
  - Devamlı Ortam İşaretleme Dili (CMML) (artık kullanılmamaktadır)


## Tarih.
Ogg projesi, 1993 yılında daha büyük bir proje içerisinde basit bir ses dosyası sıkıştırma paketi olarak başladı. Yazılım, ilk olarak "Squish" olarak adlandırıldı, ancak var olan bir tescilli marka olduğu için OggSquish olarak yeniden adlandırıldı. Bu isim, sonradan tüm Ogg projesini ifade eder hale geldi. Xiphophorus OggSquish 1997'de "hem modern ses uygulamaları için sıkıştırılmış, esnek bir ses dosyası oluşturmak, hem de yaygın olan, mevcut tüm modern platformlarda oynatılabilecek bir ses biçimi oluşturma girişimi" olarak tanımlandı. 2000 yılında bu tanım, "birbiriyle bağlantılı çoklu-ortam ve sinyal işleme projeler grubu" olarak yapılıyordu. Yine aynı yılda, iki proje, planlı yayınlama için geliştirilme aşamasındaydı: Ogg Vorbis biçimi ve libvorbis - Vorbis'in referans uygulaması. Aynı zamanda, gelecekte görüntü ve kayıpsız ses kodlamaları üzerinde de araştırmalar yapılıyordu. 2011 yılında OggSquish Ogg olarak yeniden adlandırıldı ve "aynı şemsiye altında birbiriyle bağlantılı çoklu-ortam ve sinyal işleme projeleri" olarak tanımlandı. Ogg, daha geniş kapsamlı Xiph.org çoklu ortam projesinde bir dosya uzantısını ifade eder hale geldi. Squish, Ogg kodeklerinden birine ismini verdi. 2009 yılında, Ogg "Xiph.org'un çoklu-ortam kodekleri için çoklu-ortam kapsayıcı biçimi, yerli dosya ve veri akışı türü" olarak tanımlandı.
Ogg referans uygulaması, 2 Eylül 2000'de Vorbis'ten ayrıldı.
Mayıs 2003'te bu biçim ile ilgili iki adet yorumlar için talep yayınlandı. Ogg veri akışı bilgilendirici olarak sınıflandırılan RFC 3533'te tanımlanırken internet içerik türü (application/ogg) RFC3534'te tanımlandı. Eylül 2008'de RFC 3534'ün yerini RFC 5334 aldı; (video/ogg), (audio/ogg) ve .ogx, .ogv, .oga, .spx dosya uzantıları eklendi.


### OGM.
Ogg için Resmi görüntü desteği olmaması yüzünden 2002'de Microsoft DirectShow'un Ogg-tabanlı bir sarıcıya uyarlanması ile görüntü gömmeye izin veren OGM dosya biçimi geliştirildi. OGM, ilkin yalnızca kapalı-kaynak kodlu Windows araçları tarafından destekleniyordu, ancak kod tabanı zamanla açık hale getirildi. Daha sonra, görüntü (ve altyazı) desteği resmi olarak Ogg için sağlandı, ancak OGM ile uyumsuzdu. Bağımsız olarak Matroska kapsayıcı biçimi olgunluğa ulaştı, böylece Orbis ses ve ilişiksiz görüntü kodeklerini birleştirmeyi amaçlayan kişiler için alternatif oluşturdu. Bu sebeple, OGM artık desteklenmemekte, geliştirilmemekte ve resmi olarak Xiph.org tarafından resmi olarak sonlandırılmıştır. Bugün, Ogg biçimindeki görüntüler .ogv dosya uzantısı olarak bulunmaktadır.


### 2006.
Ogg, hareketli görüntü uzmanları birliği standartlarının kapsamına hiçbir zaman yaklaşamamış olsa da, 2006 itibarı ile özgür içerik kodlamasına yaygın bir biçimde (örneğin Özgür Müzik, kullanılmaktadır ve pek çok dijital ses dosya oynatıcısı tarafından desteklenmeye başlamıştır. Ogg biçimini destekleyen oyun motorları olarak Doom 3, Unreal Tournament 2004, , Jets n guns, , , StepMania, , Lineage 2, Vendetta Online, Battlefield 2 ve Grand Theft Auto motorları ile Java-tabanlı Minecraft ses dosyaları öne çıkmaktadır. Daha yaygın olan Vorbis kodek için pek çok yazılımda yerleşik destek mevcutken neredeyse diğer tüm yazılımlarda desteklenmesini sağlayan ek paketler vardır.


### 2007.
Free Software Foundation 16 Mayıs 2007'de, "tescilli MP3'ün karşısında etik, yasal ve teknik olarak daha üstün bir alternatif" olarak Vorbis kullanımının artırılmasını teşvik eden bir kampanya başlattı. İnsanların websitele veya bloglarında bir düğme ekleyerek kampanyaya destek verebileceği imkanlar sağlandı. FSF'nin tavsiye ettiği Ogg oynatıcısını (VLC Media Player) indirmek veya kullanmak istemeyenler için Windows ve Mac OS X üzerinde QuickTime-tabanlı uygulamalar için Xiph.org Vakfı resmi bir kodek geliştirdi; Windows kullanıcıları Windows Media Player için Ogg kodeği yükleyebilirken Mac OS kullancıları iTunes oynatıcısı veya iMovies uygulamaları için benzer eklentilere erişebilir.


### 2009.
2009 itibarı ile Ogg kapsayıcısı, Theora ve Vorbis kullanımı sayesinde, Firefox 3.5 ağ tarayıcısının HTML 5 <video> ve <audio> öğeleri uygulaması için tek kapsayıcı oldu.


### 2010.
3 Mart 2010'da FFmpeg geliştiricisinin teknik bir analizi, Ogg'un çoklu-ortam kapsayıcı biçimi olarak genel-amaçlı yetkinliklerini eleştirdi. Ogg'un oluşturucusu, daha sonra bu iddiaları cevaplandıran kendi makalesini yayınladı.


## Ogg Kodekleri.
Ogg, sadece bir kapsayıcı biçimidir. Kodek tarafından kodlanan gerçek ses veya görüntü, Ogg kapsayıcısı içine yerleştirilir. Ogg kapsayıcıları, farklı kodekler tarafından akışlar içerebilir; örneğin bir görüntü dosyası, hem ses kodeği tarafından hem de görüntü kodeği tarafından kodlanmış verilerden oluşur.
Kapsayıcı formatı olarak Ogg, ses ve görüntüyü farklı biçimlerde kodlayabilir (Dirac, MNG, CELT, MPEG-4, MP3 ve diğerleri gibi); ancak Ogg, şu Xiph.org özgür kodekleri ile kodlama yapmak için geliştirilmiş ve genel olarak bunlar kullanılmaktadır:
  - Ses
   - Yitimli
    - Speex: düşük bit oranındaki ses verilerini işler (~2.1-32 kbit/s/kanal)
    - Vorbis: Orta - üst-seviye değişken ikil orandaki genel ses verilerini işler (≈16-500 kbit/s/kanal)
    - Opus: ses, müzik ve genel ses verilerini düşük ve üst-seviyedeki bit oranlarında işler (≈6-510 kbit/s/kanal)
   - Kayıpsız
    - FLAC arşivsel ve yüksek doğruluktaki ses verilerini işler
    - OggPCM, sıkıştırılmamış Darbe kod modülasyonu ses verilerinin Ogg kapsayıcısı içerisinde yer almasına olanak tanır
  - Görüntü
   - Yitimli
    - Theora: On2 şirketinin VP3 formatını temel alan Theora MPEG-4, RealVideo veya Windows Media Video görüntü biçimi ile rekabet etmek (örneğin, DivX ya da Xvid ile kodlanan) için geliştirilmiştir.
    - Daala: geliştirilmekte olan görüntü kodlama biçimi.
    - Tarkin: 2000, 2001 ve 2002 yıllarında deneysel olarak oluşturulan ve artık kullanılmayan bir kodektir. Theora'nın görüntü kodeği olarak ana odak haline gelmesi (Ağustos 2002) ile sonlandırılmıştır.
    - Dirac: BBC tarafından geliştirilen özgür ve açık kaynak kodlu görüntü biçimi. Dalgacık kodlaması kullanmaktadır.
   - Kayıpsız
    - Dirac: Dirac'ın bir kısmı kayıpsız sıkıştırmayı amaçlar
    - Daala: geliştirilmekte olan bir görüntü kodlama formatı.
  - Metin
   - Devamlı Ortam İşaretleme Dili (CMML): zamanlı metaveri, altyazı ekleme ve biçimlendirme amaçlı metin/uygulama kodeği.
   - Annodex: CSIRO tarafından geliştirilen özgür ve açık kaynaklı, bağlantılı ortamların not edilmesini ve endekslenmesini amaçlayan standartlar dizini.
   - OggKate: Ogg biçiminde çoklanabilen karaoke ve metin için oluşturulmuş bindirmeli kodek türü.


### Ortam türleri.
Ogg ses ortamı, .oga, .ogg ve .spx uzantılarına sahip bir IANA ortam türü olarak tescillenmiştir. Ogg görüntü ortam türü olan .ogv dosya uzantısının alt kümesi kabul edilir. Diğer Ogg uygulamalarının kullandığı .ogx görüntü/ogg türünün üst kümesi addedilir.