For already fragmented input:
ftyp+moovare reused as the initialization segment- by default, each fragmented input is split into lower-latency MOQT media objects within the same group when per-sample boundaries can be derived
--coalesce-cmaf-chunkskeeps the older one-media-object-per-group behavior- the pipeline preserves source-byte spans until optional file emission
For non-fragmented input:
- the tool reads
stbltables such asstsz,stsc,stcoorco64,stts, and optionalcttsandstss - it synthesizes a fragmented initialization segment by adding
mvexandtrex - it builds synthetic
moof+mdatpayloads from the original sample data - by default, progressive remux output is split into multiple MOQT objects per group for lower latency
This keeps the project aligned with CMAF-style publication while reusing the same publish-plan model for local inspection and transport-driven publication.
The catalog format includes:
rolewith values such asvideoandaudio- RFC 6381
codecstrings such asavc1.64000C,mp4a.40.2, and HEVC values likehvc1.1.6.L90.B0 renderGroupandisLive- MSF media timeline tracks with
packaging: "mediatimeline"androle: "mediatimeline" - SAP event timeline tracks with
packaging: "eventtimeline"andeventType: "org.ietf.moq.cmsf.sap" widthandheightfor video trackssampleRateandchannelCountfor audio tracks- base64-encoded per-track CMAF initialization segment (
ftyp+moov) ininitData
With --msf-timeline, catalog.json also includes a timeline metadata track with:
packaging: "mediatimeline"mimeType: "application/json"dependspointing to all media tracks
The corresponding timeline_g0_o0.json payload is an explicit MSF media timeline array of [mediaTimeMs, [groupId, objectId], wallclockMs] records. VOD output uses 0 for wallclock time.
With --sap, catalog.json also includes:
- one
*_saptrack per media track packaging: "eventtimeline"eventType: "org.ietf.moq.cmsf.sap"dependspointing back to the corresponding media track
publish-plan.txt and --dump-plan still print an internal debug kind= label for object type (catalog, metadata, or media); that debug label is not part of the catalog spec.
- compact HEVC RFC 6381 codec strings are derived from the track
hvcCbox hev1tracks that do not carry in-band VPS, SPS, or PPS NAL units are normalized tohvc1- when in-band HEVC parameter sets are present, the publisher preserves
hev1 - emitted initialization segments are rewritten to match the normalized sample entry type, so catalog metadata and init segments stay aligned
draft-ietf-moq-transport-14is the primary targetdraft-ietf-moq-transport-16is represented as a secondary compatibility profiledraft-ietf-moq-transport-18support is implemented for version selection, setup/request framing codec paths, and request-stream response correlation; interop hardening is still in progress- draft-specific assumptions are documented in protocol-mapping.md
The repository includes a transport abstraction and a picoquic-backed client wrapper.
- if local picoquic and picotls source trees are available, CMake can compile the real picoquic transport path into this project
- if those dependencies are not available, the project still builds and tests normally, and the transport layer falls back cleanly
- the session layer uses a draft-aware control-message module instead of ad hoc string formatting
- the optional loopback smoke test is the intended local validation path for real QUIC transport changes