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バイトの場合
   最後のパケットは次のページに続く

外部リンク

編集