Oggページ

Oggページは Ogg ビットストリームに含まれるデータのサイズ可変なユニットである。
概要.
複数のコーデックを単一のファイルまたはストリームにまとめる(mux)のがマルチメディアコンテナフォーマットの目的の一つである。
Oggフォーマットを作った Christopher Montgomery が持つ視点は、「muxed codec dataはコーデックによって使用されるデータのユニットから分離された抽象的なレイヤーであるべきで、それはデコードの際に必要となるバッファの量を制限するためだ」というものである。彼の意見はXiph.org Foundationで働く他の開発者にも支持されており、このことは AVI,QuickTime,MPEGのような他のフォーマットと比べて技術的な長所であるとのこと。
各 Oggページはデータのタイムオフセットを持っていて、 これによりストリーミング時の効果的なシークが可能になり時間的な正確性が得られる。その他のフォーマットでは対照的に、シーク情報を得るためにストリームのバイト位置をシークするか、もしくはTOCを信頼する方法を使う。
構造.
すべての Oggページは4バイトのmagic「OggS（4F 67 67 53）」で始まる。同期を見失った場合、デコーダはデコード再開のため、次に出現するOggSを探すことができる。この文字列の次にはOgg version 0を示すnull byteが続く。 2004年の時点ではOggの公式バージョンはこれのみであり、より新しいバージョンの計画はない。
次のバイトではtype flagsを指定する。
 1
 データは最後のページから続けられる 
 2
 ストリームの最初のページである 
 4
 ストリームの最後のページである 
これらの値は addition または OR によって結合される。
次の 8バイト（または 64ビット）は absolute granule position と呼ばれ、そのページからデコードされるデータの時間オフセットを指定している。この数が意味するものはビデオコーデックにより異なるが、しばしば動画データのサンプルやフレームを参照する。Theoraのように、このフィールドをキーフレームと中間フレーム(interframes)に分離して使っているコーデックもある。
次の4バイトはこのページが属するstream serial numberであり、その次の4バイトはストリーム内のpage sequence numberである。
次の（23バイト目から始まる）4バイトはページのCRCチェックサムである。このフィールドの値は変化するため、このフィールドをゼロとしてチェックの結果が算出される。
27バイト目は0～255の値を取り、含まれているセグメント数を指定する。これは次に続くセグメントテーブルのサイズでもあり、単位はバイトである。セグメントテーブルの各バイトはセグメントの長さを示す。各セグメントは長さにおいて 255バイトまでの長さを取り得、ページによって結束される。
 segment ＜ 255 の場合
 パケットの終りを示し、次のセグメントは新しいパケットを始める。
 パケットが255の倍数で終わった場合
 0バイトの長さのセグメント内で終わるだろう 
 そのページの最後のセグメントが 255バイトの場合
 最後のパケットは次のページに続く