Home | History | Annotate | Download | only in doc
      1 
      2 
      3 
      4 
      5 
      6 
      7 Network Working Group                                        S. Pfeiffer
      8 Request for Comments: 3533                                         CSIRO
      9 Category: Informational                                         May 2003
     10 
     11 
     12                  The Ogg Encapsulation Format Version 0
     13 
     14 Status of this Memo
     15 
     16    This memo provides information for the Internet community.  It does
     17    not specify an Internet standard of any kind.  Distribution of this
     18    memo is unlimited.
     19 
     20 Copyright Notice
     21 
     22    Copyright (C) The Internet Society (2003).  All Rights Reserved.
     23 
     24 Abstract
     25 
     26    This document describes the Ogg bitstream format version 0, which is
     27    a general, freely-available encapsulation format for media streams.
     28    It is able to encapsulate any kind and number of video and audio
     29    encoding formats as well as other data streams in a single bitstream.
     30 
     31 Terminology
     32 
     33    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
     34    "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
     35    document are to be interpreted as described in BCP 14, RFC 2119 [2].
     36 
     37 Table of Contents
     38 
     39    1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . .   2
     40    2. Definitions  . . . . . . . . . . . . . . . . . . . . . . . . .   2
     41    3. Requirements for a generic encapsulation format  . . . . . . .   3
     42    4. The Ogg bitstream format . . . . . . . . . . . . . . . . . . .   3
     43    5. The encapsulation process  . . . . . . . . . . . . . . . . . .   6
     44    6. The Ogg page format  . . . . . . . . . . . . . . . . . . . . .   9
     45    7. Security Considerations  . . . . . . . . . . . . . . . . . . .  11
     46    8. References . . . . . . . . . . . . . . . . . . . . . . . . . .  12
     47    A. Glossary of terms and abbreviations  . . . . . . . . . . . . .  13
     48    B. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . .  14
     49       Author's Address . . . . . . . . . . . . . . . . . . . . . . .  14
     50       Full Copyright Statement . . . . . . . . . . . . . . . . . . .  15
     51 
     52 
     53 
     54 
     55 
     56 
     57 
     58 Pfeiffer                     Informational                      [Page 1]
     59 
     61 RFC 3533                          OGG                           May 2003
     62 
     63 
     64 1. Introduction
     65 
     66    The Ogg bitstream format has been developed as a part of a larger
     67    project aimed at creating a set of components for the coding and
     68    decoding of multimedia content (codecs) which are to be freely
     69    available and freely re-implementable, both in software and in
     70    hardware for the computing community at large, including the Internet
     71    community.  It is the intention of the Ogg developers represented by
     72    Xiph.Org that it be usable without intellectual property concerns.
     73 
     74    This document describes the Ogg bitstream format and how to use it to
     75    encapsulate one or several media bitstreams created by one or several
     76    encoders.  The Ogg transport bitstream is designed to provide
     77    framing, error protection and seeking structure for higher-level
     78    codec streams that consist of raw, unencapsulated data packets, such
     79    as the Vorbis audio codec or the upcoming Tarkin and Theora video
     80    codecs.  It is capable of interleaving different binary media and
     81    other time-continuous data streams that are prepared by an encoder as
     82    a sequence of data packets.  Ogg provides enough information to
     83    properly separate data back into such encoder created data packets at
     84    the original packet boundaries without relying on decoding to find
     85    packet boundaries.
     86 
     87    Please note that the MIME type application/ogg has been registered
     88    with the IANA [1].
     89 
     90 2. Definitions
     91 
     92    For describing the Ogg encapsulation process, a set of terms will be
     93    used whose meaning needs to be well understood.  Therefore, some of
     94    the most fundamental terms are defined now before we start with the
     95    description of the requirements for a generic media stream
     96    encapsulation format, the process of encapsulation, and the concrete
     97    format of the Ogg bitstream.  See the Appendix for a more complete
     98    glossary.
     99 
    100    The result of an Ogg encapsulation is called the "Physical (Ogg)
    101    Bitstream".  It encapsulates one or several encoder-created
    102    bitstreams, which are called "Logical Bitstreams".  A logical
    103    bitstream, provided to the Ogg encapsulation process, has a
    104    structure, i.e., it is split up into a sequence of so-called
    105    "Packets".  The packets are created by the encoder of that logical
    106    bitstream and represent meaningful entities for that encoder only
    107    (e.g., an uncompressed stream may use video frames as packets).  They
    108    do not contain boundary information - strung together they appear to
    109    be streams of random bytes with no landmarks.
    110 
    111 
    112 
    113 
    114 
    115 Pfeiffer                     Informational                      [Page 2]
    116 
    118 RFC 3533                          OGG                           May 2003
    119 
    120 
    121    Please note that the term "packet" is not used in this document to
    122    signify entities for transport over a network.
    123 
    124 3. Requirements for a generic encapsulation format
    125 
    126    The design idea behind Ogg was to provide a generic, linear media
    127    transport format to enable both file-based storage and stream-based
    128    transmission of one or several interleaved media streams independent
    129    of the encoding format of the media data.  Such an encapsulation
    130    format needs to provide:
    131 
    132    o  framing for logical bitstreams.
    133 
    134    o  interleaving of different logical bitstreams.
    135 
    136    o  detection of corruption.
    137 
    138    o  recapture after a parsing error.
    139 
    140    o  position landmarks for direct random access of arbitrary positions
    141       in the bitstream.
    142 
    143    o  streaming capability (i.e., no seeking is needed to build a 100%
    144       complete bitstream).
    145 
    146    o  small overhead (i.e., use no more than approximately 1-2% of
    147       bitstream bandwidth for packet boundary marking, high-level
    148       framing, sync and seeking).
    149 
    150    o  simplicity to enable fast parsing.
    151 
    152    o  simple concatenation mechanism of several physical bitstreams.
    153 
    154    All of these design considerations have been taken into consideration
    155    for Ogg.  Ogg supports framing and interleaving of logical
    156    bitstreams, seeking landmarks, detection of corruption, and stream
    157    resynchronisation after a parsing error with no more than
    158    approximately 1-2% overhead.  It is a generic framework to perform
    159    encapsulation of time-continuous bitstreams.  It does not know any
    160    specifics about the codec data that it encapsulates and is thus
    161    independent of any media codec.
    162 
    163 4. The Ogg bitstream format
    164 
    165    A physical Ogg bitstream consists of multiple logical bitstreams
    166    interleaved in so-called "Pages".  Whole pages are taken in order
    167    from multiple logical bitstreams multiplexed at the page level.  The
    168    logical bitstreams are identified by a unique serial number in the
    169 
    170 
    171 
    172 Pfeiffer                     Informational                      [Page 3]
    173 
    175 RFC 3533                          OGG                           May 2003
    176 
    177 
    178    header of each page of the physical bitstream.  This unique serial
    179    number is created randomly and does not have any connection to the
    180    content or encoder of the logical bitstream it represents.  Pages of
    181    all logical bitstreams are concurrently interleaved, but they need
    182    not be in a regular order - they are only required to be consecutive
    183    within the logical bitstream.  Ogg demultiplexing reconstructs the
    184    original logical bitstreams from the physical bitstream by taking the
    185    pages in order from the physical bitstream and redirecting them into
    186    the appropriate logical decoding entity.
    187 
    188    Each Ogg page contains only one type of data as it belongs to one
    189    logical bitstream only.  Pages are of variable size and have a page
    190    header containing encapsulation and error recovery information.  Each
    191    logical bitstream in a physical Ogg bitstream starts with a special
    192    start page (bos=beginning of stream) and ends with a special page
    193    (eos=end of stream).
    194 
    195    The bos page contains information to uniquely identify the codec type
    196    and MAY contain information to set up the decoding process.  The bos
    197    page SHOULD also contain information about the encoded media - for
    198    example, for audio, it should contain the sample rate and number of
    199    channels.  By convention, the first bytes of the bos page contain
    200    magic data that uniquely identifies the required codec.  It is the
    201    responsibility of anyone fielding a new codec to make sure it is
    202    possible to reliably distinguish his/her codec from all other codecs
    203    in use.  There is no fixed way to detect the end of the codec-
    204    identifying marker.  The format of the bos page is dependent on the
    205    codec and therefore MUST be given in the encapsulation specification
    206    of that logical bitstream type.  Ogg also allows but does not require
    207    secondary header packets after the bos page for logical bitstreams
    208    and these must also precede any data packets in any logical
    209    bitstream.  These subsequent header packets are framed into an
    210    integral number of pages, which will not contain any data packets.
    211    So, a physical bitstream begins with the bos pages of all logical
    212    bitstreams containing one initial header packet per page, followed by
    213    the subsidiary header packets of all streams, followed by pages
    214    containing data packets.
    215 
    216    The encapsulation specification for one or more logical bitstreams is
    217    called a "media mapping".  An example for a media mapping is "Ogg
    218    Vorbis", which uses the Ogg framework to encapsulate Vorbis-encoded
    219    audio data for stream-based storage (such as files) and transport
    220    (such as TCP streams or pipes).  Ogg Vorbis provides the name and
    221    revision of the Vorbis codec, the audio rate and the audio quality on
    222    the Ogg Vorbis bos page.  It also uses two additional header pages
    223    per logical bitstream.  The Ogg Vorbis bos page starts with the byte
    224    0x01, followed by "vorbis" (a total of 7 bytes of identifier).
    225 
    226 
    227 
    228 
    229 Pfeiffer                     Informational                      [Page 4]
    230 
    232 RFC 3533                          OGG                           May 2003
    233 
    234 
    235    Ogg knows two types of multiplexing: concurrent multiplexing (so-
    236    called "Grouping") and sequential multiplexing (so-called
    237    "Chaining").  Grouping defines how to interleave several logical
    238    bitstreams page-wise in the same physical bitstream.  Grouping is for
    239    example needed for interleaving a video stream with several
    240    synchronised audio tracks using different codecs in different logical
    241    bitstreams.  Chaining on the other hand, is defined to provide a
    242    simple mechanism to concatenate physical Ogg bitstreams, as is often
    243    needed for streaming applications.
    244 
    245    In grouping, all bos pages of all logical bitstreams MUST appear
    246    together at the beginning of the Ogg bitstream.  The media mapping
    247    specifies the order of the initial pages.  For example, the grouping
    248    of a specific Ogg video and Ogg audio bitstream may specify that the
    249    physical bitstream MUST begin with the bos page of the logical video
    250    bitstream, followed by the bos page of the audio bitstream.  Unlike
    251    bos pages, eos pages for the logical bitstreams need not all occur
    252    contiguously.  Eos pages may be 'nil' pages, that is, pages
    253    containing no content but simply a page header with position
    254    information and the eos flag set in the page header.  Each grouped
    255    logical bitstream MUST have a unique serial number within the scope
    256    of the physical bitstream.
    257 
    258    In chaining, complete logical bitstreams are concatenated.  The
    259    bitstreams do not overlap, i.e., the eos page of a given logical
    260    bitstream is immediately followed by the bos page of the next.  Each
    261    chained logical bitstream MUST have a unique serial number within the
    262    scope of the physical bitstream.
    263 
    264    It is possible to consecutively chain groups of concurrently
    265    multiplexed bitstreams.  The groups, when unchained, MUST stand on
    266    their own as a valid concurrently multiplexed bitstream.  The
    267    following diagram shows a schematic example of such a physical
    268    bitstream that obeys all the rules of both grouped and chained
    269    multiplexed bitstreams.
    270 
    271                physical bitstream with pages of
    272           different logical bitstreams grouped and chained
    273       -------------------------------------------------------------
    274       |*A*|*B*|*C*|A|A|C|B|A|B|#A#|C|...|B|C|#B#|#C#|*D*|D|...|#D#|
    275       -------------------------------------------------------------
    276        bos bos bos             eos           eos eos bos       eos
    277 
    278    In this example, there are two chained physical bitstreams, the first
    279    of which is a grouped stream of three logical bitstreams A, B, and C.
    280    The second physical bitstream is chained after the end of the grouped
    281    bitstream, which ends after the last eos page of all its grouped
    282    logical bitstreams.  As can be seen, grouped bitstreams begin
    283 
    284 
    285 
    286 Pfeiffer                     Informational                      [Page 5]
    287 
    289 RFC 3533                          OGG                           May 2003
    290 
    291 
    292    together - all of the bos pages MUST appear before any data pages.
    293    It can also be seen that pages of concurrently multiplexed bitstreams
    294    need not conform to a regular order.  And it can be seen that a
    295    grouped bitstream can end long before the other bitstreams in the
    296    group end.
    297 
    298    Ogg does not know any specifics about the codec data except that each
    299    logical bitstream belongs to a different codec, the data from the
    300    codec comes in order and has position markers (so-called "Granule
    301    positions").  Ogg does not have a concept of 'time': it only knows
    302    about sequentially increasing, unitless position markers.  An
    303    application can only get temporal information through higher layers
    304    which have access to the codec APIs to assign and convert granule
    305    positions or time.
    306 
    307    A specific definition of a media mapping using Ogg may put further
    308    constraints on its specific use of the Ogg bitstream format.  For
    309    example, a specific media mapping may require that all the eos pages
    310    for all grouped bitstreams need to appear in direct sequence.  An
    311    example for a media mapping is the specification of "Ogg Vorbis".
    312    Another example is the upcoming "Ogg Theora" specification which
    313    encapsulates Theora-encoded video data and usually comes multiplexed
    314    with a Vorbis stream for an Ogg containing synchronised audio and
    315    video.  As Ogg does not specify temporal relationships between the
    316    encapsulated concurrently multiplexed bitstreams, the temporal
    317    synchronisation between the audio and video stream will be specified
    318    in this media mapping.  To enable streaming, pages from various
    319    logical bitstreams will typically be interleaved in chronological
    320    order.
    321 
    322 5. The encapsulation process
    323 
    324    The process of multiplexing different logical bitstreams happens at
    325    the level of pages as described above.  The bitstreams provided by
    326    encoders are however handed over to Ogg as so-called "Packets" with
    327    packet boundaries dependent on the encoding format.  The process of
    328    encapsulating packets into pages will be described now.
    329 
    330    From Ogg's perspective, packets can be of any arbitrary size.  A
    331    specific media mapping will define how to group or break up packets
    332    from a specific media encoder.  As Ogg pages have a maximum size of
    333    about 64 kBytes, sometimes a packet has to be distributed over
    334    several pages.  To simplify that process, Ogg divides each packet
    335    into 255 byte long chunks plus a final shorter chunk.  These chunks
    336    are called "Ogg Segments".  They are only a logical construct and do
    337    not have a header for themselves.
    338 
    339 
    340 
    341 
    342 
    343 Pfeiffer                     Informational                      [Page 6]
    344 
    346 RFC 3533                          OGG                           May 2003
    347 
    348 
    349    A group of contiguous segments is wrapped into a variable length page
    350    preceded by a header.  A segment table in the page header tells about
    351    the "Lacing values" (sizes) of the segments included in the page.  A
    352    flag in the page header tells whether a page contains a packet
    353    continued from a previous page.  Note that a lacing value of 255
    354    implies that a second lacing value follows in the packet, and a value
    355    of less than 255 marks the end of the packet after that many
    356    additional bytes.  A packet of 255 bytes (or a multiple of 255 bytes)
    357    is terminated by a lacing value of 0.  Note also that a 'nil' (zero
    358    length) packet is not an error; it consists of nothing more than a
    359    lacing value of zero in the header.
    360 
    361    The encoding is optimized for speed and the expected case of the
    362    majority of packets being between 50 and 200 bytes large.  This is a
    363    design justification rather than a recommendation.  This encoding
    364    both avoids imposing a maximum packet size as well as imposing
    365    minimum overhead on small packets.  In contrast, e.g., simply using
    366    two bytes at the head of every packet and having a max packet size of
    367    32 kBytes would always penalize small packets (< 255 bytes, the
    368    typical case) with twice the segmentation overhead.  Using the lacing
    369    values as suggested, small packets see the minimum possible byte-
    370    aligned overhead (1 byte) and large packets (>512 bytes) see a fairly
    371    constant ~0.5% overhead on encoding space.
    372 
    373 
    374 
    375 
    376 
    377 
    378 
    379 
    380 
    381 
    382 
    383 
    384 
    385 
    386 
    387 
    388 
    389 
    390 
    391 
    392 
    393 
    394 
    395 
    396 
    397 
    398 
    399 
    400 Pfeiffer                     Informational                      [Page 7]
    401 
    403 RFC 3533                          OGG                           May 2003
    404 
    405 
    406    The following diagram shows a schematic example of a media mapping
    407    using Ogg and grouped logical bitstreams:
    408 
    409           logical bitstream with packet boundaries
    410  -----------------------------------------------------------------
    411  > |       packet_1             | packet_2         | packet_3 |  <
    412  -----------------------------------------------------------------
    413 
    414                      |segmentation (logically only)
    415                      v
    416 
    417       packet_1 (5 segments)          packet_2 (4 segs)    p_3 (2 segs)
    418      ------------------------------ -------------------- ------------
    419  ..  |seg_1|seg_2|seg_3|seg_4|s_5 | |seg_1|seg_2|seg_3|| |seg_1|s_2 | ..
    420      ------------------------------ -------------------- ------------
    421 
    422                      | page encapsulation
    423                      v
    424 
    425  page_1 (packet_1 data)   page_2 (pket_1 data)   page_3 (packet_2 data)
    426 ------------------------  ----------------  ------------------------
    427 |H|------------------- |  |H|----------- |  |H|------------------- |
    428 |D||seg_1|seg_2|seg_3| |  |D|seg_4|s_5 | |  |D||seg_1|seg_2|seg_3| | ...
    429 |R|------------------- |  |R|----------- |  |R|------------------- |
    430 ------------------------  ----------------  ------------------------
    431 
    432                     |
    433 pages of            |
    434 other    --------|  |
    435 logical         -------
    436 bitstreams      | MUX |
    437                 -------
    438                    |
    439                    v
    440 
    441               page_1  page_2          page_3
    442       ------  ------  -------  -----  -------
    443  ...  ||   |  ||   |  ||    |  ||  |  ||    |  ...
    444       ------  ------  -------  -----  -------
    445               physical Ogg bitstream
    446 
    447    In this example we take a snapshot of the encapsulation process of
    448    one logical bitstream.  We can see part of that bitstream's
    449    subdivision into packets as provided by the codec.  The Ogg
    450    encapsulation process chops up the packets into segments.  The
    451    packets in this example are rather large such that packet_1 is split
    452    into 5 segments - 4 segments with 255 bytes and a final smaller one.
    453    Packet_2 is split into 4 segments - 3 segments with 255 bytes and a
    454 
    455 
    456 
    457 Pfeiffer                     Informational                      [Page 8]
    458 
    460 RFC 3533                          OGG                           May 2003
    461 
    462 
    463    final very small one - and packet_3 is split into two segments.  The
    464    encapsulation process then creates pages, which are quite small in
    465    this example.  Page_1 consists of the first three segments of
    466    packet_1, page_2 contains the remaining 2 segments from packet_1, and
    467    page_3 contains the first three pages of packet_2.  Finally, this
    468    logical bitstream is multiplexed into a physical Ogg bitstream with
    469    pages of other logical bitstreams.
    470 
    471 6. The Ogg page format
    472 
    473    A physical Ogg bitstream consists of a sequence of concatenated
    474    pages.  Pages are of variable size, usually 4-8 kB, maximum 65307
    475    bytes.  A page header contains all the information needed to
    476    demultiplex the logical bitstreams out of the physical bitstream and
    477    to perform basic error recovery and landmarks for seeking.  Each page
    478    is a self-contained entity such that the page decode mechanism can
    479    recognize, verify, and handle single pages at a time without
    480    requiring the overall bitstream.
    481 
    482    The Ogg page header has the following format:
    483 
    484  0                   1                   2                   3
    485  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
    486 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    487 | capture_pattern: Magic number for page start "OggS"           | 0-3
    488 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    489 | version       | header_type   | granule_position              | 4-7
    490 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    491 |                                                               | 8-11
    492 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    493 |                               | bitstream_serial_number       | 12-15
    494 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    495 |                               | page_sequence_number          | 16-19
    496 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    497 |                               | CRC_checksum                  | 20-23
    498 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    499 |                               |page_segments  | segment_table | 24-27
    500 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    501 | ...                                                           | 28-
    502 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    503 
    504    The LSb (least significant bit) comes first in the Bytes.  Fields
    505    with more than one byte length are encoded LSB (least significant
    506    byte) first.
    507 
    508 
    509 
    510 
    511 
    512 
    513 
    514 Pfeiffer                     Informational                      [Page 9]
    515 
    517 RFC 3533                          OGG                           May 2003
    518 
    519 
    520    The fields in the page header have the following meaning:
    521 
    522    1. capture_pattern: a 4 Byte field that signifies the beginning of a
    523       page.  It contains the magic numbers:
    524 
    525             0x4f 'O'
    526 
    527             0x67 'g'
    528 
    529             0x67 'g'
    530 
    531             0x53 'S'
    532 
    533       It helps a decoder to find the page boundaries and regain
    534       synchronisation after parsing a corrupted stream.  Once the
    535       capture pattern is found, the decoder verifies page sync and
    536       integrity by computing and comparing the checksum.
    537 
    538    2. stream_structure_version: 1 Byte signifying the version number of
    539       the Ogg file format used in this stream (this document specifies
    540       version 0).
    541 
    542    3. header_type_flag: the bits in this 1 Byte field identify the
    543       specific type of this page.
    544 
    545       *  bit 0x01
    546 
    547          set: page contains data of a packet continued from the previous
    548             page
    549 
    550          unset: page contains a fresh packet
    551 
    552       *  bit 0x02
    553 
    554          set: this is the first page of a logical bitstream (bos)
    555 
    556          unset: this page is not a first page
    557 
    558       *  bit 0x04
    559 
    560          set: this is the last page of a logical bitstream (eos)
    561 
    562          unset: this page is not a last page
    563 
    564    4. granule_position: an 8 Byte field containing position information.
    565       For example, for an audio stream, it MAY contain the total number
    566       of PCM samples encoded after including all frames finished on this
    567       page.  For a video stream it MAY contain the total number of video
    568 
    569 
    570 
    571 Pfeiffer                     Informational                     [Page 10]
    572 
    574 RFC 3533                          OGG                           May 2003
    575 
    576 
    577       frames encoded after this page.  This is a hint for the decoder
    578       and gives it some timing and position information.  Its meaning is
    579       dependent on the codec for that logical bitstream and specified in
    580       a specific media mapping.  A special value of -1 (in two's
    581       complement) indicates that no packets finish on this page.
    582 
    583    5. bitstream_serial_number: a 4 Byte field containing the unique
    584       serial number by which the logical bitstream is identified.
    585 
    586    6. page_sequence_number: a 4 Byte field containing the sequence
    587       number of the page so the decoder can identify page loss.  This
    588       sequence number is increasing on each logical bitstream
    589       separately.
    590 
    591    7. CRC_checksum: a 4 Byte field containing a 32 bit CRC checksum of
    592       the page (including header with zero CRC field and page content).
    593       The generator polynomial is 0x04c11db7.
    594 
    595    8. number_page_segments: 1 Byte giving the number of segment entries
    596       encoded in the segment table.
    597 
    598    9. segment_table: number_page_segments Bytes containing the lacing
    599       values of all segments in this page.  Each Byte contains one
    600       lacing value.
    601 
    602    The total header size in bytes is given by:
    603    header_size = number_page_segments + 27 [Byte]
    604 
    605    The total page size in Bytes is given by:
    606    page_size = header_size + sum(lacing_values: 1..number_page_segments)
    607    [Byte]
    608 
    609 7. Security Considerations
    610 
    611    The Ogg encapsulation format is a container format and only
    612    encapsulates content (such as Vorbis-encoded audio).  It does not
    613    provide for any generic encryption or signing of itself or its
    614    contained content bitstreams.  However, it encapsulates any kind of
    615    content bitstream as long as there is a codec for it, and is thus
    616    able to contain encrypted and signed content data.  It is also
    617    possible to add an external security mechanism that encrypts or signs
    618    an Ogg physical bitstream and thus provides content confidentiality
    619    and authenticity.
    620 
    621    As Ogg encapsulates binary data, it is possible to include executable
    622    content in an Ogg bitstream.  This can be an issue with applications
    623    that are implemented using the Ogg format, especially when Ogg is
    624    used for streaming or file transfer in a networking scenario.  As
    625 
    626 
    627 
    628 Pfeiffer                     Informational                     [Page 11]
    629 
    631 RFC 3533                          OGG                           May 2003
    632 
    633 
    634    such, Ogg does not pose a threat there.  However, an application
    635    decoding Ogg and its encapsulated content bitstreams has to ensure
    636    correct handling of manipulated bitstreams, of buffer overflows and
    637    the like.
    638 
    639 8. References
    640 
    641    [1] Walleij, L., "The application/ogg Media Type", RFC 3534, May
    642        2003.
    643 
    644    [2] Bradner, S., "Key words for use in RFCs to Indicate Requirement
    645        Levels", BCP 14, RFC 2119, March 1997.
    646 
    647 
    648 
    649 
    650 
    651 
    652 
    653 
    654 
    655 
    656 
    657 
    658 
    659 
    660 
    661 
    662 
    663 
    664 
    665 
    666 
    667 
    668 
    669 
    670 
    671 
    672 
    673 
    674 
    675 
    676 
    677 
    678 
    679 
    680 
    681 
    682 
    683 
    684 
    685 Pfeiffer                     Informational                     [Page 12]
    686 
    688 RFC 3533                          OGG                           May 2003
    689 
    690 
    691 Appendix A. Glossary of terms and abbreviations
    692 
    693    bos page: The initial page (beginning of stream) of a logical
    694       bitstream which contains information to identify the codec type
    695       and other decoding-relevant information.
    696 
    697    chaining (or sequential multiplexing): Concatenation of two or more
    698       complete physical Ogg bitstreams.
    699 
    700    eos page: The final page (end of stream) of a logical bitstream.
    701 
    702    granule position: An increasing position number for a specific
    703       logical bitstream stored in the page header.  Its meaning is
    704       dependent on the codec for that logical bitstream and specified in
    705       a specific media mapping.
    706 
    707    grouping (or concurrent multiplexing): Interleaving of pages of
    708       several logical bitstreams into one complete physical Ogg
    709       bitstream under the restriction that all bos pages of all grouped
    710       logical bitstreams MUST appear before any data pages.
    711 
    712    lacing value: An entry in the segment table of a page header
    713       representing the size of the related segment.
    714 
    715    logical bitstream: A sequence of bits being the result of an encoded
    716       media stream.
    717 
    718    media mapping: A specific use of the Ogg encapsulation format
    719       together with a specific (set of) codec(s).
    720 
    721    (Ogg) packet: A subpart of a logical bitstream that is created by the
    722       encoder for that bitstream and represents a meaningful entity for
    723       the encoder, but only a sequence of bits to the Ogg encapsulation.
    724 
    725    (Ogg) page: A physical bitstream consists of a sequence of Ogg pages
    726       containing data of one logical bitstream only.  It usually
    727       contains a group of contiguous segments of one packet only, but
    728       sometimes packets are too large and need to be split over several
    729       pages.
    730 
    731    physical (Ogg) bitstream: The sequence of bits resulting from an Ogg
    732       encapsulation of one or several logical bitstreams.  It consists
    733       of a sequence of pages from the logical bitstreams with the
    734       restriction that the pages of one logical bitstream MUST come in
    735       their correct temporal order.
    736 
    737 
    738 
    739 
    740 
    741 
    742 Pfeiffer                     Informational                     [Page 13]
    743 
    745 RFC 3533                          OGG                           May 2003
    746 
    747 
    748    (Ogg) segment: The Ogg encapsulation process splits each packet into
    749       chunks of 255 bytes plus a last fractional chunk of less than 255
    750       bytes.  These chunks are called segments.
    751 
    752 Appendix B. Acknowledgements
    753 
    754    The author gratefully acknowledges the work that Christopher
    755    Montgomery  and the Xiph.Org foundation have done in defining the Ogg
    756    multimedia project and as part of it the open file format described
    757    in this document.  The author hopes that providing this document to
    758    the Internet community will help in promoting the Ogg multimedia
    759    project at http://www.xiph.org/.  Many thanks also for the many
    760    technical and typo corrections that C. Montgomery and the Ogg
    761    community provided as feedback to this RFC.
    762 
    763 Author's Address
    764 
    765    Silvia Pfeiffer
    766    CSIRO, Australia
    767    Locked Bag 17
    768    North Ryde, NSW  2113
    769    Australia
    770 
    771    Phone: +61 2 9325 3141
    772    EMail: Silvia.Pfeiffer (a] csiro.au
    773    URI:   http://www.cmis.csiro.au/Silvia.Pfeiffer/
    774 
    775 
    776 
    777 
    778 
    779 
    780 
    781 
    782 
    783 
    784 
    785 
    786 
    787 
    788 
    789 
    790 
    791 
    792 
    793 
    794 
    795 
    796 
    797 
    798 
    799 Pfeiffer                     Informational                     [Page 14]
    800 
    802 RFC 3533                          OGG                           May 2003
    803 
    804 
    805 Full Copyright Statement
    806 
    807    Copyright (C) The Internet Society (2003).  All Rights Reserved.
    808 
    809    This document and translations of it may be copied and furnished to
    810    others, and derivative works that comment on or otherwise explain it
    811    or assist in its implementation may be prepared, copied, published
    812    and distributed, in whole or in part, without restriction of any
    813    kind, provided that the above copyright notice and this paragraph are
    814    included on all such copies and derivative works.  However, this
    815    document itself may not be modified in any way, such as by removing
    816    the copyright notice or references to the Internet Society or other
    817    Internet organizations, except as needed for the purpose of
    818    developing Internet standards in which case the procedures for
    819    copyrights defined in the Internet Standards process must be
    820    followed, or as required to translate it into languages other than
    821    English.
    822 
    823    The limited permissions granted above are perpetual and will not be
    824    revoked by the Internet Society or its successors or assigns.
    825 
    826    This document and the information contained herein is provided on an
    827    "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
    828    TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
    829    BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
    830    HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
    831    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
    832 
    833 Acknowledgement
    834 
    835    Funding for the RFC Editor function is currently provided by the
    836    Internet Society.
    837 
    838 
    839 
    840 
    841 
    842 
    843 
    844 
    845 
    846 
    847 
    848 
    849 
    850 
    851 
    852 
    853 
    854 
    855 
    856 Pfeiffer                     Informational                     [Page 15]
    857 
    859