@blockcast/mmt-container 0.1.0-main.cf0df54ddcf4 → 0.1.0-main.d0bb31684c09

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/README.md +49 -3
  2. package/dist/browser-runtime.js +3087 -439
  3. package/dist/browser-runtime.js.map +4 -4
  4. package/dist/carp-catalog.d.ts +66 -4
  5. package/dist/carp-catalog.d.ts.map +1 -1
  6. package/dist/carp-catalog.js +49 -24
  7. package/dist/carp-catalog.js.map +3 -3
  8. package/dist/catalog-fec-params.d.ts +9 -8
  9. package/dist/catalog-fec-params.d.ts.map +1 -1
  10. package/dist/catalog-fec-params.js +54 -18
  11. package/dist/catalog-fec-params.js.map +4 -4
  12. package/dist/catalog-network-source.d.ts +25 -2
  13. package/dist/catalog-network-source.d.ts.map +1 -1
  14. package/dist/catalog-network-source.js +21 -2
  15. package/dist/catalog-network-source.js.map +4 -4
  16. package/dist/cmaf-block-assembler.d.ts +35 -0
  17. package/dist/cmaf-block-assembler.d.ts.map +1 -1
  18. package/dist/cmaf-block-assembler.js +342 -44
  19. package/dist/cmaf-block-assembler.js.map +3 -3
  20. package/dist/cmaf-group-batcher.js.map +1 -1
  21. package/dist/codec-utils.d.ts +144 -8
  22. package/dist/codec-utils.d.ts.map +1 -1
  23. package/dist/codec-utils.js +316 -38
  24. package/dist/codec-utils.js.map +2 -2
  25. package/dist/conceal-timeline.d.ts +26 -3
  26. package/dist/conceal-timeline.d.ts.map +1 -1
  27. package/dist/conceal-timeline.js +19 -4
  28. package/dist/conceal-timeline.js.map +2 -2
  29. package/dist/delivery-gap.d.ts +75 -0
  30. package/dist/delivery-gap.d.ts.map +1 -0
  31. package/dist/delivery-gap.js +88 -0
  32. package/dist/delivery-gap.js.map +7 -0
  33. package/dist/fec-manager.d.ts +102 -2
  34. package/dist/fec-manager.d.ts.map +1 -1
  35. package/dist/fec-manager.js +845 -66
  36. package/dist/fec-manager.js.map +4 -4
  37. package/dist/fec-state.d.ts +99 -0
  38. package/dist/fec-state.d.ts.map +1 -0
  39. package/dist/fec-state.js +54 -0
  40. package/dist/fec-state.js.map +7 -0
  41. package/dist/fec-worker-setup.d.ts.map +1 -1
  42. package/dist/fec-worker-setup.js +15 -5
  43. package/dist/fec-worker-setup.js.map +2 -2
  44. package/dist/index.d.ts +13 -11
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +40 -2
  47. package/dist/index.js.map +2 -2
  48. package/dist/media-router.d.ts +12 -4
  49. package/dist/media-router.d.ts.map +1 -1
  50. package/dist/media-router.js +22 -4
  51. package/dist/media-router.js.map +2 -2
  52. package/dist/mfu-reassembler.js +5 -0
  53. package/dist/mfu-reassembler.js.map +3 -3
  54. package/dist/mmtp-container-parser.d.ts +12 -0
  55. package/dist/mmtp-container-parser.d.ts.map +1 -1
  56. package/dist/mmtp-container-parser.js +140 -6
  57. package/dist/mmtp-container-parser.js.map +3 -3
  58. package/dist/mmtp-container-parser.no-modules.js +248 -47
  59. package/dist/mmtp-container-parser.no-modules.js.map +3 -3
  60. package/dist/mmtp-decode-pipeline.js +140 -6
  61. package/dist/mmtp-decode-pipeline.js.map +3 -3
  62. package/dist/mmtp-router.d.ts +145 -4
  63. package/dist/mmtp-router.d.ts.map +1 -1
  64. package/dist/mmtp-router.js +908 -166
  65. package/dist/mmtp-router.js.map +4 -4
  66. package/dist/mmtp-to-cmaf.d.ts +18 -0
  67. package/dist/mmtp-to-cmaf.d.ts.map +1 -1
  68. package/dist/mmtp-to-cmaf.js +25 -15
  69. package/dist/mmtp-to-cmaf.js.map +2 -2
  70. package/dist/multicast-input.d.ts +64 -2
  71. package/dist/multicast-input.d.ts.map +1 -1
  72. package/dist/multicast-input.js +123 -14
  73. package/dist/multicast-input.js.map +3 -3
  74. package/dist/multicast-manager.d.ts +153 -10
  75. package/dist/multicast-manager.d.ts.map +1 -1
  76. package/dist/multicast-manager.js +4170 -1984
  77. package/dist/multicast-manager.js.map +4 -4
  78. package/dist/multicast-transport.d.ts +122 -1
  79. package/dist/multicast-transport.d.ts.map +1 -1
  80. package/dist/multicast-transport.js +413 -37
  81. package/dist/multicast-transport.js.map +4 -4
  82. package/dist/multicast-unwrap.js +5 -0
  83. package/dist/multicast-unwrap.js.map +3 -3
  84. package/dist/no-modules.d.ts +1 -0
  85. package/dist/no-modules.d.ts.map +1 -1
  86. package/dist/no-modules.js +242 -44
  87. package/dist/no-modules.js.map +3 -3
  88. package/dist/repair-fetch.d.ts +51 -2
  89. package/dist/repair-fetch.d.ts.map +1 -1
  90. package/dist/repair-fetch.js +76 -3
  91. package/dist/repair-fetch.js.map +2 -2
  92. package/dist/signaling.js +429 -95
  93. package/dist/signaling.js.map +3 -3
  94. package/dist/timestamp-codec.js +5 -0
  95. package/dist/timestamp-codec.js.map +3 -3
  96. package/dist/track-pipeline-setup.d.ts +11 -0
  97. package/dist/track-pipeline-setup.d.ts.map +1 -1
  98. package/dist/track-pipeline-setup.js +8 -3
  99. package/dist/track-pipeline-setup.js.map +2 -2
  100. package/dist/track-session.d.ts +16 -0
  101. package/dist/track-session.d.ts.map +1 -1
  102. package/dist/track-session.js +16 -0
  103. package/dist/track-session.js.map +2 -2
  104. package/dist/wasm-mfu-reassembler.js +5 -0
  105. package/dist/wasm-mfu-reassembler.js.map +3 -3
  106. package/dist/wasm-mmtp-container-parser.js +140 -6
  107. package/dist/wasm-mmtp-container-parser.js.map +3 -3
  108. package/node_modules/@blockcast/fec-worker/README.md +4 -0
  109. package/node_modules/@blockcast/fec-worker/dist/block-order.d.ts +22 -0
  110. package/node_modules/@blockcast/fec-worker/dist/block-order.d.ts.map +1 -0
  111. package/node_modules/@blockcast/fec-worker/dist/block-order.js +38 -0
  112. package/node_modules/@blockcast/fec-worker/dist/block-order.js.map +1 -0
  113. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts +43 -1
  114. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts.map +1 -1
  115. package/node_modules/@blockcast/fec-worker/dist/fec-worker.js +50 -12
  116. package/node_modules/@blockcast/fec-worker/dist/fec-worker.js.map +3 -3
  117. package/node_modules/@blockcast/fec-worker/src/block-order.ts +42 -0
  118. package/node_modules/@blockcast/fec-worker/src/fec-worker-types.ts +43 -1
  119. package/node_modules/@blockcast/fec-worker/src/fec-worker.ts +69 -15
  120. package/node_modules/@blockcast/mmt-base/README.md +15 -2
  121. package/node_modules/@blockcast/mmt-base/dist/index.d.ts +4 -0
  122. package/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +1 -1
  123. package/node_modules/@blockcast/mmt-base/dist/index.js +4 -0
  124. package/node_modules/@blockcast/mmt-base/dist/index.js.map +1 -1
  125. package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +0 -36
  126. package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +1 -1
  127. package/node_modules/@blockcast/mmt-base/dist/mmtp.js +2 -140
  128. package/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +1 -1
  129. package/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts +18 -0
  130. package/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts.map +1 -0
  131. package/node_modules/@blockcast/mmt-base/dist/net-constants.js +18 -0
  132. package/node_modules/@blockcast/mmt-base/dist/net-constants.js.map +1 -0
  133. package/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts +47 -0
  134. package/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts.map +1 -0
  135. package/node_modules/@blockcast/mmt-base/dist/ntp-short.js +54 -0
  136. package/node_modules/@blockcast/mmt-base/dist/ntp-short.js.map +1 -0
  137. package/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts +57 -0
  138. package/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts.map +1 -0
  139. package/node_modules/@blockcast/mmt-base/dist/serial-number.js +98 -0
  140. package/node_modules/@blockcast/mmt-base/dist/serial-number.js.map +1 -0
  141. package/node_modules/@blockcast/mmt-base/dist/signalling.d.ts +312 -0
  142. package/node_modules/@blockcast/mmt-base/dist/signalling.d.ts.map +1 -0
  143. package/node_modules/@blockcast/mmt-base/dist/signalling.js +637 -0
  144. package/node_modules/@blockcast/mmt-base/dist/signalling.js.map +1 -0
  145. package/node_modules/@blockcast/mmt-base/package.json +1 -1
  146. package/node_modules/@blockcast/mmt-base/src/index.ts +4 -0
  147. package/node_modules/@blockcast/mmt-base/src/mmtp.ts +2 -130
  148. package/node_modules/@blockcast/mmt-base/src/net-constants.ts +17 -0
  149. package/node_modules/@blockcast/mmt-base/src/ntp-short.ts +67 -0
  150. package/node_modules/@blockcast/mmt-base/src/serial-number.ts +107 -0
  151. package/node_modules/@blockcast/mmt-base/src/signalling.ts +862 -0
  152. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts.map +1 -1
  153. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js +6 -1
  154. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js.map +1 -1
  155. package/node_modules/@blockcast/mmt-fec/dist/index.d.ts +1 -1
  156. package/node_modules/@blockcast/mmt-fec/dist/index.d.ts.map +1 -1
  157. package/node_modules/@blockcast/mmt-fec/dist/index.js +1 -1
  158. package/node_modules/@blockcast/mmt-fec/dist/index.js.map +1 -1
  159. package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts +89 -3
  160. package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts.map +1 -1
  161. package/node_modules/@blockcast/mmt-fec/dist/oti.js +131 -3
  162. package/node_modules/@blockcast/mmt-fec/dist/oti.js.map +1 -1
  163. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/README.md +15 -2
  164. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts +4 -0
  165. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +1 -1
  166. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js +4 -0
  167. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js.map +1 -1
  168. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +0 -36
  169. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +1 -1
  170. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js +2 -140
  171. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +1 -1
  172. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts +18 -0
  173. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts.map +1 -0
  174. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.js +18 -0
  175. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/net-constants.js.map +1 -0
  176. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts +47 -0
  177. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts.map +1 -0
  178. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.js +54 -0
  179. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/ntp-short.js.map +1 -0
  180. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts +57 -0
  181. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts.map +1 -0
  182. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.js +98 -0
  183. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/serial-number.js.map +1 -0
  184. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.d.ts +312 -0
  185. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.d.ts.map +1 -0
  186. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.js +637 -0
  187. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/signalling.js.map +1 -0
  188. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/package.json +1 -1
  189. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/index.ts +4 -0
  190. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/mmtp.ts +2 -130
  191. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/net-constants.ts +17 -0
  192. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/ntp-short.ts +67 -0
  193. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/serial-number.ts +107 -0
  194. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/signalling.ts +862 -0
  195. package/node_modules/@blockcast/mmt-fec/src/fec-block-mapper.ts +7 -1
  196. package/node_modules/@blockcast/mmt-fec/src/index.ts +3 -0
  197. package/node_modules/@blockcast/mmt-fec/src/oti.ts +152 -6
  198. package/package.json +10 -6
  199. package/schemas/catalog.schema.json +2 -32
  200. package/src/carp-catalog.ts +104 -32
  201. package/src/catalog-fec-params.ts +39 -18
  202. package/src/catalog-network-source.ts +29 -4
  203. package/src/cmaf-block-assembler.ts +237 -25
  204. package/src/codec-utils.ts +426 -53
  205. package/src/conceal-timeline.ts +44 -6
  206. package/src/delivery-gap.ts +147 -0
  207. package/src/fec-manager.ts +907 -76
  208. package/src/fec-state.ts +173 -0
  209. package/src/fec-worker-setup.ts +63 -5
  210. package/src/index.ts +53 -0
  211. package/src/media-router.ts +36 -8
  212. package/src/mmtp-container-parser.ts +51 -3
  213. package/src/mmtp-router.ts +790 -168
  214. package/src/mmtp-to-cmaf.ts +70 -17
  215. package/src/multicast-input.ts +352 -18
  216. package/src/multicast-manager.ts +517 -8
  217. package/src/multicast-transport.ts +429 -18
  218. package/src/no-modules.ts +1 -0
  219. package/src/repair-fetch.ts +170 -8
  220. package/src/track-pipeline-setup.ts +18 -2
  221. package/src/track-session.ts +16 -0
  222. package/test-vectors/catalog/README.md +28 -2
  223. package/test-vectors/catalog/negative/multicast-network-source-empty.json +43 -0
  224. package/test-vectors/catalog/positive/multicast-native-ssm-no-network-source.json +42 -0
  225. package/test-vectors/catalog-validation.json +469 -25
  226. package/test-vectors/hevc-x265-repeat-headers-v1.json +40 -0
package/README.md CHANGED
@@ -117,7 +117,7 @@ function parseMPUHeader(buf: Uint8Array, offset: number): MPUHeader
117
117
  function extractMFUPayload(packet: Uint8Array): MFUExtraction | null
118
118
  function extractFecPayloadId(packet: Uint8Array): { ssId: number } | null
119
119
  function extractRepairFecPayloadId(packet: Uint8Array): RepairFecId | null
120
- function parseAlFecMessage(buf: Uint8Array): AlFecConfig
120
+ function parseAlFecMessage(buf: Uint8Array): AlFecMessage | null // every FEC flow (Table C.3, Amd 1:2025)
121
121
  function parseMoqRepairFrame(buf: Uint8Array): MoqRepairFrame
122
122
  ```
123
123
 
@@ -192,14 +192,21 @@ interface FecCatalogConfig {
192
192
  }
193
193
 
194
194
  interface MulticastEndpoint {
195
- protocol: "ssm" | "asm" | "amt"
195
+ protocol: "ssm" | "asm" | "amt" | "atsc3"
196
196
  sourceAddress?: string // REQUIRED for SSM
197
197
  groupAddress: string
198
198
  port: number
199
199
  tracks: string[]
200
- relayAddress?: string // REQUIRED for AMT
200
+ // relayAddress?: string — deprecated, read-only (see Breaking, below)
201
201
  }
202
202
 
203
+ // Relay/tuning discovery is catalog-level, not per-endpoint:
204
+ // multicast.networkSource: [{ type: "amt", discovery: "driad" | "manual",
205
+ // relay?: string, port?: number }]
206
+ // `relay` is REQUIRED for discovery: "manual"; "driad" resolves it at runtime.
207
+ // An endpoint-level `relayAddress` is retired — the schema and moq-rs both
208
+ // reject it.
209
+
203
210
  interface TrackTimingConfig {
204
211
  groupDurationMs: number // REQUIRED, positive integer
205
212
  groupDurationTicks?: number // override when ms × timescale isn't integer
@@ -211,6 +218,45 @@ function resolveGroupDurationTicks(timing: TrackTimingConfig, timescale: number)
211
218
  function validateSwitchingSetTiming(...): { ok: true } | { ok: false; ... }
212
219
  ```
213
220
 
221
+ #### Breaking: multicast emitter output (BLO-37834)
222
+
223
+ `multicastFromConfig` / `multicastFromEnv` no longer emit
224
+ `endpoints[].relayAddress` or `amtFallback`. Both are lifted into catalog-level
225
+ `multicast.networkSource` (`{type: "amt", discovery, relay?}`), and a native
226
+ multicast catalog omits `networkSource` entirely (BLO-37926). A reader that
227
+ still looks for `relayAddress` or `amtFallback` reads `undefined`: read
228
+ `networkSource` instead (`catalogAmtNetworkSource` in `./catalog-network-source`
229
+ resolves a dialable AMT relay from it, skipping `discovery: "driad"` entries
230
+ whose `relay` is a DNS name for a runtime lookup rather than an address), and
231
+ keep accepting `relayAddress` from catalogs published before this change until
232
+ every emitter is on it.
233
+
234
+ Inputs are unchanged: `relayAddress` and `amtFallback` are still accepted and
235
+ lifted. An input relay that would not survive into the emitted `networkSource`
236
+ (two endpoints with different relays, one overridden by
237
+ `amtFallback.relayDns` or an explicit `networkSource`, or one matched only by a
238
+ `discovery: "driad"` entry, whose relay is a runtime discovery hint) now throws
239
+ `conflicting_amt_relay` instead of being dropped. For that last case — wanting
240
+ DRIAD *and* a named relay — emit both entries, `[{type: "amt", discovery:
241
+ "manual", relay}, {type: "amt", discovery: "driad"}]`: readers join the first
242
+ non-DRIAD AMT entry, so the manual one carries the relay while the DRIAD one
243
+ keeps the discovery request. An `atsc3` endpoint now
244
+ requires a `{type: "atsc3", …}` entry and throws `atsc3_requires_tuning`
245
+ without one: that entry carries the frequency, PLP, service id and SLS URI,
246
+ which is the only tuning information an ATSC3 receiver has, and the schema
247
+ cannot enforce it because `networkSource` is optional there (a native join has
248
+ none). `version`, `validUntil` and `enabled` are still emitted and still
249
+ outside `$defs/multicast` (the BLO-3323 freshness model, tracked separately).
250
+
251
+ `MulticastInputErrorKind` gains two members, `atsc3_requires_tuning` and
252
+ `invalid_endpoints`. The union is exported, so a consumer that `switch`es on it
253
+ exhaustively needs the two new arms to keep compiling.
254
+
255
+ The package version stays `0.1.0`: consumers pin a libmmt commit (`file:` or the
256
+ per-commit `0.1.0-main.<sha>` prerelease from `stamp-prerelease.mjs`), and a
257
+ `0.2.0` would fall outside the `^0.1.0` range that siblings such as
258
+ `mmt-render` declare.
259
+
214
260
  #### Track-role convention (Phase 14)
215
261
 
216
262
  This is **project-specific**, not in any IETF draft yet. The container's switching-set parser derives its internal role from the last `/`-segment of a track name. MMTP catalogs may also carry the publisher-owned `trackRole` dispatch tag; the canonical schema validates it as a non-empty string. `parseTrackRole` remains the name-based helper for base/delta/repair switching sets (`carp-catalog.ts:41-79`):