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]>
34 lines
2.3 KiB
Markdown
34 lines
2.3 KiB
Markdown
# live-conformance/loc — WAI envelopes on LOC objects
|
|
|
|
The corpus of [`extensions/loc-carriage.md`](../../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_MANIFEST` and,
|
|
where stated, `WAI_RECEIPT`), its payload, its LOC properties (`loc`) and its receipt
|
|
property's value (`receipt`, or `null`). 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 a `WAI1` envelope), 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 of `writer_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`](../../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
|