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 'packetizer stubs' or 'mux shims'.

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, substantially 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

The core philosophy of
building a layered container out of a basic streaming transport is
unchanged. 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.