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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions