TransOgg
Due to limitations of wiki-syntax, it should be noted that this page cannot be correctly titled 'transOgg'. The 't' is lowercase.
What is transOgg?
TransOgg is an updated Ogg container (think of it as Ogg 2.0) that makes some changes to the Ogg transport layer and more directly tackles metadata. The core philosophy of building a layered container out of a basic streaming transport is unchanged. It's best to look at transOgg from the standpoint of what changes from the original Ogg as the basic design is the same.
Transport Changes
- Full stream metadata on every packet
Most containers replicate some codec data into the container layer for ease of implementation, balancing overhead/complexity with convenience. This pushes back (but does not eliminate) the need for a codec-specific 'stubs' or 'packetizers'.
The original Ogg design took a 'maximally minimalist' stance on stream metadata, not replicating any data into the container layer that could be provided by a codec stub. This was not a popular design decision to put it mildly, mainly because it pushed more of the implementation work out of the container lib and onto external framework implementors.
For that reason, transOgg goes the opposite direction. It stamps full container metadata on every packet, pushing back the need for packetizers even further, and hopefully saving more work.
- Generalized/formalized timing and interleave metadata
The timing, interleave, structure, and codec-specific fields must be fully generalized, specified and declared by the container.
- New lacing scheme
Packet size encoding is tweaked to use a new extension pivot; rather than extending the packet size encoding from an extension value of 255, the new pivot is 252. This allows the length of any packet segment in a page to be encoded in at most three bytes, preserves small-packet encoding efficiency and also allows signalling for runs of zero-packets in null-packet based VFR schemes.
Metadata
As in the original Ogg design, metadata is encapsulated within the low-level transport as a stream. Unlike the original Ogg, transOgg metadata is mandatory and necessary for stream operation. Metadata uses stream ID 0 in all links. All other stream IDs must be unique to the complete stream.
Structural metadata
This is the essential metadata required for operation of the transOgg's mux layer. As in the original Ogg, no metadata is required to capture, parse and recover packets from the page stream, however structural metadata is required to interpret many of the values contained in the page. This data exists in the form of a header/footer pair and is mandatory.
- Per-stream metadata, such as timing, sync/order flags, codec flags, etc.
- Mandatory stream-global information (enumeration of codecs)
- Per-stream codec setup information (codec headers)
- seeking index (optional)
- Chaining linkage
Semantic metadata
This is metadata used to properly present or semantically augment the data of the stream itself.
- Stream relationships (primary/secondary angles, languages, overlays, etc)
- Non-linear features such as chapters
- Fixed (header/footer) and streamable semantic metadata
- Streamed (rolling) headers for in-band capture