extensions/loc-carriage.md maps an envelope whose payload is one WebCodecs chunk (an Opus packet, an AVC or HEVC access unit in Annex B, an ADTS frame) onto one object of a track of packaging loc (draft-ietf-moq-loc-04): the payload as the LOC Payload, the manifest as the Immutable Property WAI_MANIFEST (0x3A61), the receipt commitment as WAI_RECEIPT. A reader rebuilds the envelope byte for byte and checks the receipt against it, refusing with the extension's codes. joule-moq's loc module writes and reads; its example writes the corpus and tests/loc_vectors.rs checks it; loc_verify.py is the second implementation. WAI_MANIFEST is registered as a wire identifier; moq-streaming-format §6 points to the carriage. Co-Authored-By: Claude Opus 5.5 <[email protected]>
2.3 KiB
live-conformance/loc — WAI envelopes on LOC objects
The corpus of extensions/loc-carriage.md §8, in
vectors.json:
objects: one LOC object per case, of every mapped capability (§3.1): the envelope it carries (envelope, hexadecimal), its MOQ Object Properties as MOQT -22 encodes them (properties: one Immutable Properties pair holding the LOC properties,WAI_MANIFESTand, where stated,WAI_RECEIPT), its payload, its LOC properties (loc) and its receipt property's value (receipt, ornull). A conforming reader reads the object back to exactly that envelope, those properties and that receipt, and a conforming writer writes exactly those bytes from them.writer_refused: envelopes a writer refuses (an unmapped capability, two pictures in one payload, an encrypted manifest, bytes that are not aWAI1envelope), each with its code.refused: objects a reader refuses, each a change to one written object, with its code; every code of §6 is given by one of these or ofwriter_refused.property_types: the type of each property, as §2.2 and §4.1 give them.
Provenance. Written by cargo run -p joule-moq --example loc_vectors -- gen (from
joule-code/joule-code-rs), from fixed values. The HEVC objects carry the first two access
units of ../../format-probe-conformance/ext/hevc/base_64x64.265,
a real encoder's output of a synthetic picture (its provenance is that corpus's). The Opus
object carries one 20 ms packet of silence (TOC 0xF8). The AVC and AAC objects carry fixed
bytes in the form §3.2 checks, which are not decodable pictures or sounds. Group receipts are
named by the BLAKE3 hash of a fixed label; no signature is in the corpus.
Checks. joule-moq's tests/loc_vectors.rs regenerates the file byte for byte, requires
every outcome, and requires §6's table to list exactly the codes the reader and writer give.
../loc_verify.py, written from the extension's text and sharing no code with joule-moq,
does the same with its own MOQT -22 decoder and BLAKE3, writes every object again, and requires
every mutated copy of the corpus, and the corpus under a copy of itself without one of its
checks, to fail:
python3 -I live-conformance/loc_verify.py live-conformance/loc