You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Remuxes progressive MP4 input into synthesized fragmented media objects
11
11
- Extracts track metadata and RFC 6381 codec identifiers from MP4 sample tables
12
-
- Builds a publish plan with initialization and media objects
12
+
- Builds a publish plan with catalog, SAP event timeline, and media objects
13
13
- Emits generated objects and catalog metadata to disk for inspection
14
14
- Supports a configurable track namespace, optional paced publication, and draft-aware MOQT control/object encoding
15
15
- Includes packaging, CLI, and MOQT session tests through CTest
@@ -21,7 +21,8 @@ It packages MP4 input into CMSF-style publishable objects, supports MOQT draft-s
21
21
For already fragmented input:
22
22
23
23
-`ftyp` + `moov` are reused as the initialization segment
24
-
- each `moof`/`mdat` pair is reused directly as a media object payload
24
+
- by default, each fragmented input is split into lower-latency MOQT media objects within the same group when per-sample boundaries can be derived
25
+
-`--coalesce-cmaf-chunks` keeps the older one-object-per-fragment behavior
25
26
- the pipeline preserves source-byte spans until optional file emission
26
27
27
28
### Progressive MP4 remux path
@@ -31,6 +32,7 @@ For non-fragmented input:
31
32
- the tool reads `stbl` tables such as `stsz`, `stsc`, `stco` or `co64`, `stts`, and optional `ctts` and `stss`
32
33
- it synthesizes a fragmented initialization segment by adding `mvex` and `trex`
33
34
- it builds synthetic `moof` + `mdat` payloads from the original sample data
35
+
- by default, progressive remux output is split into multiple MOQT objects per group for lower latency
34
36
35
37
This keeps the project aligned with CMAF-style publication while reusing the same publish-plan model for local inspection and transport-driven publication.
36
38
@@ -126,7 +128,8 @@ This covers:
126
128
Publish-plan numbering note:
127
129
128
130
-`group_id` is allocated per track, not across all tracks, so interleaved audio and video fragments can both use `0, 1, 2, ...`
129
-
-`object_id` is currently `0` for each emitted fragment because this publisher currently emits one object per group
131
+
- by default, `object_id` advances within a group when CMAF content is split into multiple MOQT objects for lower latency
132
+
-`--coalesce-cmaf-chunks` forces `object_id = 0` for the current one-object-per-group fallback
130
133
131
134
If you want the packaging and transport tests without the CLI target, use the secondary build tree:
132
135
@@ -169,6 +172,7 @@ Use `--emit-dir` to inspect the emitted catalog and media objects on disk:
169
172
The output directory should contain:
170
173
171
174
-`catalog.json`
175
+
- one `*_sap_g*_o*.json` file per emitted SAP event timeline object
172
176
- one `*_init.mp4` file per media track
173
177
- one `*_media.mp4` file per emitted media object
174
178
- one `*_probe.mp4` file per emitted media object for direct `ffprobe` use
@@ -179,6 +183,7 @@ The catalog format includes:
179
183
-`role` with values such as `video` and `audio`
180
184
- RFC 6381 `codec` strings such as `avc1.64000C` and `mp4a.40.2`
181
185
-`renderGroup` and `isLive`
186
+
- SAP event timeline tracks with `packaging: "eventtimeline"` and `eventType: "org.ietf.moq.cmsf.sap"`
-`--forward 0` waits for inbound `SUBSCRIBE` requests before sending matching media objects
217
222
- with `--forward 0`, subscribers are still expected to request tracks explicitly; by default that includes subscribing to `catalog` if they need track discovery
218
223
-`--publish-catalog` keeps `--forward 0` for media tracks but proactively publishes the `catalog` track through the normal `PUBLISH` / `PUBLISH_OK` path so downstream consumers can discover available tracks without first subscribing to `catalog`
224
+
- media packaging defaults to lower-latency split MOQT objects per group when chunk/sample boundaries are available
225
+
-`--coalesce-cmaf-chunks` disables that split and falls back to one media object per group
219
226
- when multiple tracks are subscribed, matching objects are served in publish-plan order so time-aligned audio/video stay interleaved instead of draining one track before the next
220
227
-`--forward 1` proactively publishes tracks and objects after namespace setup completes
221
228
-`--timeout <seconds>` controls how long the publisher waits for inbound `SUBSCRIBE` requests; the default is 3 seconds
@@ -267,6 +274,11 @@ Transport-oriented CLI flags are also present now:
267
274
--insecure
268
275
```
269
276
277
+
Chunk/object mapping:
278
+
279
+
- default behavior is lower-latency split publication, which emits multiple MOQT objects in the same group when CMAF chunk/sample boundaries are available
280
+
-`--coalesce-cmaf-chunks` restores one media object per group
281
+
270
282
ALPN selection:
271
283
272
284
- draft-14 defaults to `moq-00`
@@ -276,7 +288,8 @@ ALPN selection:
276
288
Catalog note:
277
289
278
290
-`catalog.json` uses the CMSF-style `role` field such as `video` and `audio`
279
-
-`publish-plan.txt` and `--dump-plan` still print an internal debug `kind=` label for object type (`catalog` vs `media`); that debug label is not part of the catalog spec
291
+
-`catalog.json` also advertises per-track SAP event timeline tracks using CMSF `eventtimeline` metadata
292
+
-`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
0 commit comments