Skip to content

Specify the JPEG XS slice-mode to MoQ object mapping: PU to object, frame to group, deterministic GroupID #27

Description

@yakimoto

Pillar: silicon & ingress rhymes. Normative mapping document lands here; the implementation and its tests land in the MoQ relay repo.

WHY — RFC 9134 slice mode is a gift to MoQ and nobody has noticed. Slice-mode packetization units are sub-frame, explicitly out-of-order-tolerant, and map almost one-for-one onto MoQ objects within a group. That means a JPEG XS → MoQ bridge can preserve sub-frame latency instead of buffering a whole frame to re-frame it. It is a mapping only an implementer of both sides can write: JPEG XS vendors do not do MoQ, MoQ relay operators do not do JPEG XS, and NVIDIA's Holoscan for Media documents no MoQ anywhere in its surface.

GROUNDED — RFC 9134 slice mode permits out-of-order transmission; the payload header carries T/K/L/I and a 5-bit frame counter mod 32. WAVE's MoQ wire codec is real and spec-cited: wave-moq-edge/src/moq-wire.ts:23-24 sets MOQ_DRAFT_VERSION = 18 / MOQ_ALPN = 'moqt-18', header read from the tagged spec, 618 lines, unit-tested; the catalog is spec-shaped at catalog.ts:1-45 against draft-ietf-moq-catalogformat-01. Two grounded warnings that shape the mapping: (a) the catalog's per-track codec/resolution is a self-declared "CLEARLY-LABELLED minimal selectionParams FIXTURE" — real params are separate work; (b) the object-size ceiling is contradictory in that repo's README (1 MB in one snippet, 16 MiB in another) while wrangler.toml:59 deploys 16 MiB, and a 2160p60 JPEG XS 4 bpp frame is 4,147,200 B. Slice mode makes the ceiling question moot; codestream mode does not. That is the argument for slice, and it is arithmetic, not taste.

BOUNDARY — This maps an already-encoded codestream onto MoQ objects. It does not encode, does not transcode and does not touch reconstruction. It does not define the multi-viewport track model — that is the transport pillar's node and this one consumes it. Do not claim a working ST 2110 ↔ MoQ bridge until one exists: wave-bridge-edge/README.md:9 returns 501 BRIDGE_NOT_IMPLEMENTED and that must stay true until receipted.

TAXONOMY — Egress engineers building a MoQ publisher (this is what they link, or the sidecar they feed); WAVE transport engineers; the IETF MoQ WG (this mapping is publishable and nobody has filed one); viewport-selection and director agents downstream, because sub-frame objects are what make a sub-frame reaction possible.

GATE — Entry G1 (spec understood, zero code) → G3 BUILTG4 after the draft-19 / dual-ALPN work lands.

DONE-WHEN — A published mapping document here stating normatively: PU → object, frame → group, the GroupID derivation, and slice-order tolerance — plus a test in the relay repo that ingests a slice-mode video/jxsv capture, publishes it as MoQ objects through the live relay, and reconstructs a byte-identical codestream on subscribe, sha256-chained and dated. The test must deliberately exercise out-of-order object arrival, because that is the whole point of choosing slice mode.

DEPENDENCIES — Blocked by the video/jxsv depacketizer and by the GroupID derivation from the media-timeline mapping. Interop leg blocked by the draft-19 / dual-ALPN work.

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs-triageOn the board but missing Type/Area/Priority

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions