@blockcast/mmt-container 0.5.0 → 1.0.0-main.3cb7359ea316

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 (136) hide show
  1. package/README.md +21 -16
  2. package/dist/browser-runtime.js +1024 -1078
  3. package/dist/browser-runtime.js.map +4 -4
  4. package/dist/carp-catalog.d.ts +33 -87
  5. package/dist/carp-catalog.d.ts.map +1 -1
  6. package/dist/carp-catalog.js +12 -434
  7. package/dist/carp-catalog.js.map +4 -4
  8. package/dist/catalog-fec-params.d.ts +48 -161
  9. package/dist/catalog-fec-params.d.ts.map +1 -1
  10. package/dist/catalog-fec-params.js +567 -592
  11. package/dist/catalog-fec-params.js.map +4 -4
  12. package/dist/catalog-network-source.js +6 -2
  13. package/dist/catalog-network-source.js.map +3 -3
  14. package/dist/delivery-catalog.js +12 -4
  15. package/dist/delivery-catalog.js.map +4 -4
  16. package/dist/delta-fallback-config.d.ts +21 -26
  17. package/dist/delta-fallback-config.d.ts.map +1 -1
  18. package/dist/delta-fallback-config.js +582 -24
  19. package/dist/delta-fallback-config.js.map +4 -4
  20. package/dist/fec-manager.js +6 -2
  21. package/dist/fec-manager.js.map +3 -3
  22. package/dist/fec-state.d.ts +5 -43
  23. package/dist/fec-state.d.ts.map +1 -1
  24. package/dist/fec-state.js +529 -34
  25. package/dist/fec-state.js.map +4 -4
  26. package/dist/fec-worker-setup.js +6 -2
  27. package/dist/fec-worker-setup.js.map +3 -3
  28. package/dist/held-layer-admission.js +6 -2
  29. package/dist/held-layer-admission.js.map +3 -3
  30. package/dist/index.d.ts +3 -3
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +5 -39
  33. package/dist/index.js.map +2 -2
  34. package/dist/iso-block-locator.js +6 -2
  35. package/dist/iso-block-locator.js.map +3 -3
  36. package/dist/mfu-reassembler.js +6 -2
  37. package/dist/mfu-reassembler.js.map +3 -3
  38. package/dist/mmtp-container-parser.js +6 -2
  39. package/dist/mmtp-container-parser.js.map +3 -3
  40. package/dist/mmtp-container-parser.no-modules.js +551 -452
  41. package/dist/mmtp-container-parser.no-modules.js.map +4 -4
  42. package/dist/mmtp-decode-pipeline.js +6 -2
  43. package/dist/mmtp-decode-pipeline.js.map +3 -3
  44. package/dist/mmtp-fec-session.d.ts +7 -6
  45. package/dist/mmtp-fec-session.d.ts.map +1 -1
  46. package/dist/mmtp-fec-session.js +13 -9
  47. package/dist/mmtp-fec-session.js.map +3 -3
  48. package/dist/mmtp-router.d.ts +7 -16
  49. package/dist/mmtp-router.d.ts.map +1 -1
  50. package/dist/mmtp-router.js +19 -29
  51. package/dist/mmtp-router.js.map +3 -3
  52. package/dist/multicast-auth-catalog.js +7 -3
  53. package/dist/multicast-auth-catalog.js.map +3 -3
  54. package/dist/multicast-input.js +7 -3
  55. package/dist/multicast-input.js.map +3 -3
  56. package/dist/multicast-manager.d.ts +29 -32
  57. package/dist/multicast-manager.d.ts.map +1 -1
  58. package/dist/multicast-manager.js +682 -253
  59. package/dist/multicast-manager.js.map +4 -4
  60. package/dist/multicast-transport.d.ts +23 -2
  61. package/dist/multicast-transport.d.ts.map +1 -1
  62. package/dist/multicast-transport.js +57 -16
  63. package/dist/multicast-transport.js.map +4 -4
  64. package/dist/multicast-unwrap.js +6 -2
  65. package/dist/multicast-unwrap.js.map +3 -3
  66. package/dist/no-modules.js +551 -452
  67. package/dist/no-modules.js.map +4 -4
  68. package/dist/phase14-catalog-override.d.ts +10 -5
  69. package/dist/phase14-catalog-override.d.ts.map +1 -1
  70. package/dist/phase14-catalog-override.js +35 -11
  71. package/dist/phase14-catalog-override.js.map +2 -2
  72. package/dist/repair-fetch.d.ts +3 -1
  73. package/dist/repair-fetch.d.ts.map +1 -1
  74. package/dist/repair-fetch.js +16 -3
  75. package/dist/repair-fetch.js.map +3 -3
  76. package/dist/repair-layers.d.ts +0 -123
  77. package/dist/repair-layers.d.ts.map +1 -1
  78. package/dist/repair-layers.js +1 -349
  79. package/dist/repair-layers.js.map +3 -3
  80. package/dist/signaling.js +6 -2
  81. package/dist/signaling.js.map +3 -3
  82. package/dist/timestamp-codec.js +6 -2
  83. package/dist/timestamp-codec.js.map +3 -3
  84. package/dist/wasm-mfu-reassembler.js +6 -2
  85. package/dist/wasm-mfu-reassembler.js.map +3 -3
  86. package/dist/wasm-mmtp-container-parser.js +6 -2
  87. package/dist/wasm-mmtp-container-parser.js.map +3 -3
  88. package/package.json +9 -5
  89. package/schemas/catalog.schema.json +53 -58
  90. package/src/carp-catalog.ts +39 -229
  91. package/src/catalog-fec-params.ts +130 -493
  92. package/src/delta-fallback-config.ts +63 -50
  93. package/src/fec-state.ts +7 -62
  94. package/src/index.ts +10 -30
  95. package/src/mmtp-fec-session.ts +11 -10
  96. package/src/mmtp-router.ts +14 -29
  97. package/src/multicast-manager.ts +89 -121
  98. package/src/multicast-transport.ts +65 -12
  99. package/src/phase14-catalog-override.ts +67 -16
  100. package/src/repair-fetch.ts +27 -3
  101. package/src/repair-layers.ts +7 -520
  102. package/test-vectors/catalog/README.md +39 -67
  103. package/test-vectors/catalog/fec-01-runtime/README.md +15 -0
  104. package/test-vectors/catalog/{negative/fec-block-profile-retired.json → fec-01-runtime/fec-iso-ssbg1.json} +1 -1
  105. package/test-vectors/catalog/fec-01-runtime/fec-layered-repair.json +106 -0
  106. package/test-vectors/catalog/{negative/fec-block-profile-unknown.json → fec-01-runtime/fec-multicast.json} +2 -1
  107. package/test-vectors/catalog/fec-01-runtime/multicast-native-ssm-no-network-source.json +44 -0
  108. package/test-vectors/catalog/negative/fec-block-profile-missing.json +24 -11
  109. package/test-vectors/catalog/negative/fec-iso-symbol-size-below-floor.json +13 -8
  110. package/test-vectors/catalog/negative/fec-reed-solomon-iso-symbol-size-13.json +13 -8
  111. package/test-vectors/catalog/negative/fec-repair-layer-geometry.json +20 -10
  112. package/test-vectors/catalog/negative/fec-repair-layer-missing-symbols.json +20 -10
  113. package/test-vectors/catalog/negative/fec-repair-overlay-source-symbols-zero.json +25 -17
  114. package/test-vectors/catalog/negative/fec-repair-symbols-zero.json +13 -8
  115. package/test-vectors/catalog/negative/fec-source-symbols-zero.json +13 -8
  116. package/test-vectors/catalog/negative/fec-symbol-size-zero.json +13 -8
  117. package/test-vectors/catalog/negative/raptorq-source-symbols-over-max.json +18 -9
  118. package/test-vectors/catalog/negative/raptorq-unaligned-symbol.json +13 -8
  119. package/test-vectors/catalog/positive/fec-algorithm-unimplemented.json +14 -9
  120. package/test-vectors/catalog/positive/fec-iso-ssbg1.json +25 -12
  121. package/test-vectors/catalog/positive/fec-layered-repair.json +79 -35
  122. package/test-vectors/catalog/positive/fec-multicast.json +26 -13
  123. package/test-vectors/catalog/positive/fec-reed-solomon-layered.json +29 -18
  124. package/test-vectors/catalog/positive/multicast-draft01-4-1-example.json +28 -20
  125. package/test-vectors/catalog/positive/multicast-draft01-7-2-6-example.json +14 -10
  126. package/test-vectors/catalog/positive/multicast-native-ssm-no-network-source.json +22 -12
  127. package/test-vectors/catalog/section-codes.json +13 -22
  128. package/test-vectors/catalog-timing.json +2 -2
  129. package/test-vectors/catalog-validation.json +30 -243
  130. package/test-vectors/catalog/negative/fec-enhancement-repair-removed.json +0 -28
  131. package/test-vectors/catalog/negative/fec-reed-solomon-k-plus-p-over-255.json +0 -39
  132. package/test-vectors/catalog/negative/fec-reed-solomon-overlay-over-255.json +0 -40
  133. package/test-vectors/catalog/negative/fec-repair-multiple-depends.json +0 -32
  134. package/test-vectors/catalog/negative/fec-repair-overlay-with-layer.json +0 -34
  135. package/test-vectors/catalog/negative/fec-repair-priority-out-of-band.json +0 -24
  136. package/test-vectors/catalog/negative/fec-repair-source-symbols-without-scope.json +0 -33
@@ -10,20 +10,24 @@
10
10
  "mmtpMode": "mfu",
11
11
  "timescale": 90000,
12
12
  "groupDurationMs": 1000,
13
- "fec": {
14
- "algorithm": "raptorq",
15
- "blockProfile": "iso-ssbg1-v1",
16
- "sourceSymbols": 768,
17
- "repairSymbols": 384,
18
- "symbolSize": 1312,
19
- "interleaveDepthMs": 1000,
20
- "repairTrack": "video-repair",
21
- "mode": "interleaved"
22
- }
13
+ "fec": [
14
+ {
15
+ "instanceId": 0,
16
+ "scheme": "raptorq",
17
+ "blockProfile": "iso-ssbg1-v1",
18
+ "sourceSymbols": 768,
19
+ "repairSymbols": 384,
20
+ "symbolSize": 1312,
21
+ "interleaveDepthMs": 1000,
22
+ "repairTrack": "video-repair"
23
+ }
24
+ ]
23
25
  },
24
26
  {
25
27
  "name": "video-repair",
26
28
  "packaging": "fec-repair",
29
+ "source": "video",
30
+ "instanceId": 0,
27
31
  "priority": 240
28
32
  }
29
33
  ],
@@ -35,8 +39,14 @@
35
39
  "groupAddress": "232.1.1.1",
36
40
  "port": 5000,
37
41
  "tracks": [
38
- { "name": "video", "packetId": 1 },
39
- { "name": "video-repair", "packetId": 2 }
42
+ {
43
+ "name": "video",
44
+ "packetId": 1
45
+ },
46
+ {
47
+ "name": "video-repair",
48
+ "packetId": 2
49
+ }
40
50
  ]
41
51
  }
42
52
  ]
@@ -1,29 +1,20 @@
1
1
  {
2
- "description": "What the MMTP/FEC/repair/timing catalog section rejects each negative fixture with. Read by packages/container/src/catalog-schema.test.ts (against validateCmsfMmtpCatalog) and mmt-fec/tests/catalog_section_vectors.rs (against mmt_fec::catalog::validate_tracks): both engines must report the same code at the same JSON path. Every negative fixture is listed exactly once; outOfSection names fields the section does not own, which the embedding catalog validates.",
2
+ "description": "What the MMTP/timing catalog section rejects each negative fixture with. Read by packages/container/src/catalog-schema.test.ts (against validateCmsfMmtpCatalog) and mmt-fec/tests/catalog_section_vectors.rs (against mmt_fec::catalog::validate_tracks): both engines must report the same code at the same JSON path. Every negative fixture is listed exactly once; outOfSection names fields the section does not own, which the embedding catalog validates. FEC instances, repair and symbol tracks are not in the section: their binding is draft-ramadan-moq-fec-catalog-00's, validated by validateFecCatalog / mmt_fec::fec_catalog against vectors/fec-catalog-00, and no -01 FEC shape is rejected here (BLO-50171).",
3
3
  "negative": {
4
4
  "archive-origin-with-path.json": { "outOfSection": "archive" },
5
5
  "archive-unknown-field.json": { "outOfSection": "archive" },
6
- "fec-block-profile-missing.json": { "code": "track_fec_block_profile", "path": "$.tracks[0].fec.blockProfile" },
7
- "fec-block-profile-retired.json": { "code": "track_fec_block_profile_unimplemented", "path": "$.tracks[0].fec.blockProfile" },
8
- "fec-block-profile-unknown.json": { "code": "track_fec_block_profile_unimplemented", "path": "$.tracks[0].fec.blockProfile" },
9
- "fec-enhancement-repair-removed.json": { "code": "track_fec", "path": "$.tracks[0].fec.enhancementRepair" },
10
- "fec-iso-symbol-size-below-floor.json": { "code": "track_fec", "path": "$.tracks[0].fec.symbolSize" },
11
- "fec-reed-solomon-iso-symbol-size-13.json": { "code": "track_fec", "path": "$.tracks[0].fec.symbolSize" },
12
- "fec-reed-solomon-k-plus-p-over-255.json": { "code": "track_fec_bounds", "path": "$.tracks[0].fec.sourceSymbols" },
13
- "fec-reed-solomon-overlay-over-255.json": { "code": "track_fec_bounds", "path": "$.tracks[2].repairSymbols" },
14
- "fec-repair-layer-geometry.json": { "code": "track_repair_geometry", "path": "$.tracks[2].timescale" },
15
- "fec-repair-layer-missing-symbols.json": { "code": "track_repair_layer", "path": "$.tracks[2].repairSymbols" },
16
- "fec-repair-multiple-depends.json": { "code": "track_repair_depends", "path": "$.tracks[2].depends" },
17
- "fec-repair-overlay-source-symbols-zero.json": { "code": "track_fec_bounds", "path": "$.tracks[2].sourceSymbols" },
18
- "fec-repair-overlay-with-layer.json": { "code": "track_repair_overlay", "path": "$.tracks[2].repairLayer" },
19
- "fec-repair-priority-out-of-band.json": { "code": "track_repair_priority", "path": "$.tracks[1].priority" },
20
- "fec-repair-source-symbols-without-scope.json": { "code": "track_repair_overlay", "path": "$.tracks[2].sourceSymbols" },
21
- "fec-repair-symbols-zero.json": { "code": "track_fec", "path": "$.tracks[0].fec.repairSymbols" },
22
- "fec-source-symbols-zero.json": { "code": "track_fec", "path": "$.tracks[0].fec.sourceSymbols" },
23
- "fec-symbol-size-zero.json": { "code": "track_fec", "path": "$.tracks[0].fec.symbolSize" },
6
+ "fec-block-profile-missing.json": { "outOfSection": "FEC binding (validateFecCatalog; receiver outcomes in vectors/fec-catalog-00)" },
7
+ "fec-iso-symbol-size-below-floor.json": { "outOfSection": "FEC binding (validateFecCatalog; receiver outcomes in vectors/fec-catalog-00)" },
8
+ "fec-reed-solomon-iso-symbol-size-13.json": { "outOfSection": "FEC binding (validateFecCatalog; receiver outcomes in vectors/fec-catalog-00)" },
9
+ "fec-repair-layer-geometry.json": { "outOfSection": "FEC binding (validateFecCatalog; receiver outcomes in vectors/fec-catalog-00)" },
10
+ "fec-repair-layer-missing-symbols.json": { "outOfSection": "FEC binding (validateFecCatalog; receiver outcomes in vectors/fec-catalog-00)" },
11
+ "fec-repair-overlay-source-symbols-zero.json": { "outOfSection": "FEC binding (validateFecCatalog; receiver outcomes in vectors/fec-catalog-00)" },
12
+ "fec-repair-symbols-zero.json": { "outOfSection": "FEC binding (validateFecCatalog; receiver outcomes in vectors/fec-catalog-00)" },
13
+ "fec-source-symbols-zero.json": { "outOfSection": "FEC binding (validateFecCatalog; receiver outcomes in vectors/fec-catalog-00)" },
14
+ "fec-symbol-size-zero.json": { "outOfSection": "FEC binding (validateFecCatalog; receiver outcomes in vectors/fec-catalog-00)" },
24
15
  "init-data-inline-without-data.json": { "outOfSection": "root initDataList" },
25
16
  "legacy-selection-params.json": { "outOfSection": "common track field selectionParams" },
26
- "media-track-repair-layer.json": { "code": "track_repair_layer", "path": "$.tracks[0].repairLayer" },
17
+ "media-track-repair-layer.json": { "outOfSection": "FEC binding (validateFecCatalog; receiver outcomes in vectors/fec-catalog-00)" },
27
18
  "missing-mmtp-fields.json": { "code": "track_mmtp_mode", "path": "$.tracks[0].mmtpMode" },
28
19
  "mmtp-mode-mpu.json": { "code": "track_mmtp_mode", "path": "$.tracks[0].mmtpMode" },
29
20
  "multicast-amt-dns-without-relay.json": { "outOfSection": "multicast" },
@@ -54,8 +45,8 @@
54
45
  "multicast-packet-id-signaling.json": { "outOfSection": "multicast" },
55
46
  "network-source-object.json": { "outOfSection": "multicast" },
56
47
  "presentation-anchor-unsafe.json": { "code": "track_presentation_anchor", "path": "$.tracks[0].presentationAnchorTicks" },
57
- "raptorq-source-symbols-over-max.json": { "code": "track_fec_bounds", "path": "$.tracks[0].fec.sourceSymbols" },
58
- "raptorq-unaligned-symbol.json": { "code": "track_fec", "path": "$.tracks[0].fec.symbolSize" },
48
+ "raptorq-source-symbols-over-max.json": { "outOfSection": "FEC binding (validateFecCatalog; receiver outcomes in vectors/fec-catalog-00)" },
49
+ "raptorq-unaligned-symbol.json": { "outOfSection": "FEC binding (validateFecCatalog; receiver outcomes in vectors/fec-catalog-00)" },
59
50
  "repair-track-legacy-shape.json": { "outOfSection": "the packaging value set (common track field)" },
60
51
  "track-role-empty.json": { "outOfSection": "common track field trackRole" },
61
52
  "track-role-non-string.json": { "outOfSection": "common track field trackRole" }
@@ -316,7 +316,7 @@
316
316
  },
317
317
  "expect": {
318
318
  "interleaveMs": 0,
319
- "unavailable": "track_fec"
319
+ "unavailable": "fec_member"
320
320
  }
321
321
  },
322
322
  {
@@ -326,7 +326,7 @@
326
326
  },
327
327
  "expect": {
328
328
  "interleaveMs": 0,
329
- "unavailable": "track_fec"
329
+ "unavailable": "fec_member"
330
330
  }
331
331
  },
332
332
  {
@@ -1,5 +1,5 @@
1
1
  {
2
- "$comment": "Canonical accept/reject and FEC block budget (span + reorderToleranceMs, fec-01 §9) vectors. Auth validation is intentionally out of scope.",
2
+ "$comment": "Canonical accept/reject and FEC block budget (interleaveDepthMs + reorderToleranceMs of instance 0) vectors. FEC binding rules (draft-ramadan-moq-fec-catalog-00 5) are validateFecCatalog's, pinned by vectors/fec-catalog-00. Auth validation is intentionally out of scope.",
3
3
  "version": 1,
4
4
  "cases": [
5
5
  {
@@ -18,20 +18,25 @@
18
18
  "timescale": 90000,
19
19
  "groupDurationMs": 4000,
20
20
  "groupDurationTicks": 360000,
21
- "fec": {
22
- "algorithm": "raptorq",
23
- "blockProfile": "iso-ssbg1-v1",
24
- "sourceSymbols": 32,
25
- "repairSymbols": 8,
26
- "symbolSize": 1320,
27
- "interleaveDepthMs": 133,
28
- "reorderToleranceMs": 40,
29
- "repairTrack": "video/repair"
30
- }
21
+ "fec": [
22
+ {
23
+ "instanceId": 0,
24
+ "scheme": "raptorq",
25
+ "blockProfile": "iso-ssbg1-v1",
26
+ "sourceSymbols": 32,
27
+ "repairSymbols": 8,
28
+ "symbolSize": 1320,
29
+ "interleaveDepthMs": 133,
30
+ "reorderToleranceMs": 40,
31
+ "repairTrack": "video/repair"
32
+ }
33
+ ]
31
34
  },
32
35
  {
33
36
  "name": "video/repair",
34
37
  "packaging": "fec-repair",
38
+ "source": "video",
39
+ "instanceId": 0,
35
40
  "isLive": true,
36
41
  "priority": 240
37
42
  }
@@ -165,155 +170,6 @@
165
170
  ]
166
171
  }
167
172
  },
168
- {
169
- "name": "incomplete active FEC",
170
- "valid": false,
171
- "error_code": "track_fec",
172
- "catalog": {
173
- "version": 1,
174
- "tracks": [
175
- {
176
- "name": "video",
177
- "packaging": "mmtp",
178
- "isLive": true,
179
- "codec": "avc1.640028",
180
- "mmtpMode": "mfu",
181
- "timescale": 90000,
182
- "groupDurationMs": 4000,
183
- "fec": {
184
- "algorithm": "raptorq",
185
- "blockProfile": "iso-ssbg1-v1",
186
- "sourceSymbols": 32
187
- }
188
- }
189
- ]
190
- }
191
- },
192
- {
193
- "name": "disabled FEC needs no repair geometry",
194
- "valid": true,
195
- "catalog": {
196
- "version": 1,
197
- "tracks": [
198
- {
199
- "name": "video",
200
- "packaging": "mmtp",
201
- "isLive": true,
202
- "codec": "avc1.640028",
203
- "mmtpMode": "mfu",
204
- "timescale": 90000,
205
- "groupDurationMs": 4000,
206
- "fec": {
207
- "algorithm": "none"
208
- }
209
- }
210
- ]
211
- }
212
- },
213
- {
214
- "name": "FEC instance without a block profile",
215
- "valid": false,
216
- "error_code": "track_fec_block_profile",
217
- "catalog": {
218
- "version": 1,
219
- "tracks": [
220
- {
221
- "name": "video",
222
- "packaging": "mmtp",
223
- "isLive": true,
224
- "codec": "avc1.640028",
225
- "mmtpMode": "mfu",
226
- "timescale": 90000,
227
- "groupDurationMs": 4000,
228
- "groupDurationTicks": 360000,
229
- "fec": {
230
- "algorithm": "raptorq",
231
- "sourceSymbols": 32,
232
- "repairSymbols": 8,
233
- "symbolSize": 1320,
234
- "interleaveDepthMs": 133,
235
- "repairTrack": "video/repair"
236
- }
237
- },
238
- {
239
- "name": "video/repair",
240
- "packaging": "fec-repair",
241
- "isLive": true,
242
- "priority": 240
243
- }
244
- ]
245
- }
246
- },
247
- {
248
- "name": "unknown FEC block profile",
249
- "valid": false,
250
- "error_code": "track_fec_block_profile_unimplemented",
251
- "catalog": {
252
- "version": 1,
253
- "tracks": [
254
- {
255
- "name": "video",
256
- "packaging": "mmtp",
257
- "isLive": true,
258
- "codec": "avc1.640028",
259
- "mmtpMode": "mfu",
260
- "timescale": 90000,
261
- "groupDurationMs": 4000,
262
- "groupDurationTicks": 360000,
263
- "fec": {
264
- "algorithm": "raptorq",
265
- "blockProfile": "iso-ssbg1",
266
- "sourceSymbols": 32,
267
- "repairSymbols": 8,
268
- "symbolSize": 1320,
269
- "interleaveDepthMs": 133,
270
- "repairTrack": "video/repair"
271
- }
272
- },
273
- {
274
- "name": "video/repair",
275
- "packaging": "fec-repair",
276
- "isLive": true,
277
- "priority": 240
278
- }
279
- ]
280
- }
281
- },
282
- {
283
- "name": "retired k-padded-v1 block profile",
284
- "valid": false,
285
- "error_code": "track_fec_block_profile_unimplemented",
286
- "catalog": {
287
- "version": 1,
288
- "tracks": [
289
- {
290
- "name": "video",
291
- "packaging": "mmtp",
292
- "isLive": true,
293
- "codec": "avc1.640028",
294
- "mmtpMode": "mfu",
295
- "timescale": 90000,
296
- "groupDurationMs": 4000,
297
- "groupDurationTicks": 360000,
298
- "fec": {
299
- "algorithm": "raptorq",
300
- "blockProfile": "k-padded-v1",
301
- "sourceSymbols": 32,
302
- "repairSymbols": 8,
303
- "symbolSize": 1320,
304
- "interleaveDepthMs": 133,
305
- "repairTrack": "video/repair"
306
- }
307
- },
308
- {
309
- "name": "video/repair",
310
- "packaging": "fec-repair",
311
- "isLive": true,
312
- "priority": 240
313
- }
314
- ]
315
- }
316
- },
317
173
  {
318
174
  "name": "ISO ssbg_mode1 block profile",
319
175
  "valid": true,
@@ -329,71 +185,30 @@
329
185
  "timescale": 90000,
330
186
  "groupDurationMs": 4000,
331
187
  "groupDurationTicks": 360000,
332
- "fec": {
333
- "algorithm": "raptorq",
334
- "blockProfile": "iso-ssbg1-v1",
335
- "sourceSymbols": 32,
336
- "repairSymbols": 8,
337
- "symbolSize": 1320,
338
- "interleaveDepthMs": 133,
339
- "repairTrack": "video/repair"
340
- }
188
+ "fec": [
189
+ {
190
+ "instanceId": 0,
191
+ "scheme": "raptorq",
192
+ "blockProfile": "iso-ssbg1-v1",
193
+ "sourceSymbols": 32,
194
+ "repairSymbols": 8,
195
+ "symbolSize": 1320,
196
+ "interleaveDepthMs": 133,
197
+ "repairTrack": "video/repair"
198
+ }
199
+ ]
341
200
  },
342
201
  {
343
202
  "name": "video/repair",
344
203
  "packaging": "fec-repair",
204
+ "source": "video",
205
+ "instanceId": 0,
345
206
  "isLive": true,
346
207
  "priority": 240
347
208
  }
348
209
  ]
349
210
  }
350
211
  },
351
- {
352
- "name": "disabled FEC with an unknown block profile",
353
- "valid": false,
354
- "error_code": "track_fec_block_profile_unimplemented",
355
- "catalog": {
356
- "version": 1,
357
- "tracks": [
358
- {
359
- "name": "video",
360
- "packaging": "mmtp",
361
- "isLive": true,
362
- "codec": "avc1.640028",
363
- "mmtpMode": "mfu",
364
- "timescale": 90000,
365
- "groupDurationMs": 4000,
366
- "fec": {
367
- "algorithm": "none",
368
- "blockProfile": "k-padded"
369
- }
370
- }
371
- ]
372
- }
373
- },
374
- {
375
- "name": "legacy interleave alias",
376
- "valid": false,
377
- "error_code": "track_fec",
378
- "catalog": {
379
- "version": 1,
380
- "tracks": [
381
- {
382
- "name": "video",
383
- "packaging": "mmtp",
384
- "isLive": true,
385
- "codec": "avc1.640028",
386
- "mmtpMode": "mfu",
387
- "timescale": 90000,
388
- "groupDurationMs": 4000,
389
- "fec": {
390
- "algorithm": "none",
391
- "interleaveDepth": 4
392
- }
393
- }
394
- ]
395
- }
396
- },
397
212
  {
398
213
  "name": "rejects retired commonTrackFields inheritance",
399
214
  "valid": false,
@@ -453,34 +268,6 @@
453
268
  ]
454
269
  }
455
270
  },
456
- {
457
- "name": "dangling FEC repair track",
458
- "valid": false,
459
- "error_code": "track_repair_track",
460
- "catalog": {
461
- "version": 1,
462
- "tracks": [
463
- {
464
- "name": "video",
465
- "packaging": "mmtp",
466
- "isLive": true,
467
- "codec": "avc1.640028",
468
- "mmtpMode": "mfu",
469
- "timescale": 90000,
470
- "groupDurationMs": 1000,
471
- "fec": {
472
- "algorithm": "raptorq",
473
- "blockProfile": "iso-ssbg1-v1",
474
- "sourceSymbols": 32,
475
- "repairSymbols": 8,
476
- "symbolSize": 1320,
477
- "interleaveDepthMs": 133,
478
- "repairTrack": "video/repair"
479
- }
480
- }
481
- ]
482
- }
483
- },
484
271
  {
485
272
  "name": "misaligned switching set",
486
273
  "valid": false,
@@ -1,28 +0,0 @@
1
- {
2
- "version": 1,
3
- "streamingFormat": "mmtp",
4
- "streamingFormatVersion": "draft-ramadan-moq-mmt-00",
5
- "tracks": [
6
- {
7
- "name": "video",
8
- "packaging": "mmtp",
9
- "codec": "avc1.640028",
10
- "mmtpMode": "mfu",
11
- "timescale": 90000,
12
- "groupDurationMs": 1000,
13
- "fec": {
14
- "algorithm": "raptorq",
15
- "blockProfile": "iso-ssbg1-v1",
16
- "sourceSymbols": 64,
17
- "repairSymbols": 8,
18
- "symbolSize": 1312,
19
- "repairTrack": "video/repair",
20
- "enhancementRepair": [
21
- { "repairTrack": "video/repair/1", "repairSymbols": 16 }
22
- ]
23
- }
24
- },
25
- { "name": "video/repair", "packaging": "fec-repair", "priority": 240 },
26
- { "name": "video/repair/1", "packaging": "fec-repair", "priority": 240 }
27
- ]
28
- }
@@ -1,39 +0,0 @@
1
- {
2
- "version": 1,
3
- "streamingFormat": "mmtp",
4
- "streamingFormatVersion": "draft-ramadan-moq-mmt-00",
5
- "tracks": [
6
- {
7
- "name": "video",
8
- "packaging": "mmtp",
9
- "codec": "avc1.640028",
10
- "mmtpMode": "mfu",
11
- "timescale": 90000,
12
- "groupDurationMs": 1000,
13
- "fec": {
14
- "blockProfile": "iso-ssbg1-v1",
15
- "symbolSize": 1316,
16
- "interleaveDepthMs": 1000,
17
- "repairTrack": "video/repair",
18
- "algorithm": "reed-solomon",
19
- "sourceSymbols": 200,
20
- "repairSymbols": 15
21
- }
22
- },
23
- {
24
- "name": "video/repair",
25
- "packaging": "fec-repair",
26
- "priority": 240
27
- },
28
- {
29
- "name": "video/repair/1",
30
- "packaging": "fec-repair",
31
- "depends": [
32
- "video"
33
- ],
34
- "repairLayer": 1,
35
- "repairSymbols": 41,
36
- "priority": 244
37
- }
38
- ]
39
- }
@@ -1,40 +0,0 @@
1
- {
2
- "version": 1,
3
- "streamingFormat": "mmtp",
4
- "streamingFormatVersion": "draft-ramadan-moq-mmt-00",
5
- "tracks": [
6
- {
7
- "name": "video",
8
- "packaging": "mmtp",
9
- "codec": "avc1.640028",
10
- "mmtpMode": "mfu",
11
- "timescale": 90000,
12
- "groupDurationMs": 1000,
13
- "fec": {
14
- "blockProfile": "iso-ssbg1-v1",
15
- "symbolSize": 1316,
16
- "interleaveDepthMs": 1000,
17
- "repairTrack": "video/repair",
18
- "algorithm": "reed-solomon",
19
- "sourceSymbols": 32,
20
- "repairSymbols": 8
21
- }
22
- },
23
- {
24
- "name": "video/repair",
25
- "packaging": "fec-repair",
26
- "priority": 240
27
- },
28
- {
29
- "name": "video/keyframe-repair",
30
- "packaging": "fec-repair",
31
- "depends": [
32
- "video"
33
- ],
34
- "scope": "keyframe",
35
- "sourceSymbols": 224,
36
- "repairSymbols": 32,
37
- "priority": 242
38
- }
39
- ]
40
- }
@@ -1,32 +0,0 @@
1
- {
2
- "version": 1,
3
- "streamingFormat": "mmtp",
4
- "streamingFormatVersion": "draft-ramadan-moq-mmt-00",
5
- "tracks": [
6
- {
7
- "name": "video",
8
- "packaging": "mmtp",
9
- "codec": "avc1.640028",
10
- "mmtpMode": "mfu",
11
- "timescale": 90000,
12
- "groupDurationMs": 1000,
13
- "fec": {
14
- "algorithm": "raptorq",
15
- "blockProfile": "iso-ssbg1-v1",
16
- "sourceSymbols": 64,
17
- "repairSymbols": 8,
18
- "symbolSize": 1312,
19
- "repairTrack": "video/repair"
20
- }
21
- },
22
- { "name": "video/repair", "packaging": "fec-repair", "priority": 240 },
23
- {
24
- "name": "video/repair/1",
25
- "packaging": "fec-repair",
26
- "depends": ["video", "audio"],
27
- "repairLayer": 1,
28
- "repairSymbols": 16,
29
- "priority": 244
30
- }
31
- ]
32
- }
@@ -1,34 +0,0 @@
1
- {
2
- "version": 1,
3
- "streamingFormat": "mmtp",
4
- "streamingFormatVersion": "draft-ramadan-moq-mmt-00",
5
- "tracks": [
6
- {
7
- "name": "video",
8
- "packaging": "mmtp",
9
- "codec": "avc1.640028",
10
- "mmtpMode": "mfu",
11
- "timescale": 90000,
12
- "groupDurationMs": 1000,
13
- "fec": {
14
- "algorithm": "raptorq",
15
- "blockProfile": "iso-ssbg1-v1",
16
- "sourceSymbols": 64,
17
- "repairSymbols": 8,
18
- "symbolSize": 1312,
19
- "repairTrack": "video/repair"
20
- }
21
- },
22
- { "name": "video/repair", "packaging": "fec-repair", "priority": 240 },
23
- {
24
- "name": "video/keyframe-repair",
25
- "packaging": "fec-repair",
26
- "depends": ["video"],
27
- "scope": "keyframe",
28
- "repairLayer": 1,
29
- "sourceSymbols": 256,
30
- "repairSymbols": 32,
31
- "priority": 242
32
- }
33
- ]
34
- }
@@ -1,24 +0,0 @@
1
- {
2
- "version": 1,
3
- "streamingFormat": "mmtp",
4
- "streamingFormatVersion": "draft-ramadan-moq-mmt-00",
5
- "tracks": [
6
- {
7
- "name": "video",
8
- "packaging": "mmtp",
9
- "codec": "avc1.640028",
10
- "mmtpMode": "mfu",
11
- "timescale": 90000,
12
- "groupDurationMs": 1000,
13
- "fec": {
14
- "algorithm": "raptorq",
15
- "blockProfile": "iso-ssbg1-v1",
16
- "sourceSymbols": 64,
17
- "repairSymbols": 8,
18
- "symbolSize": 1312,
19
- "repairTrack": "video/repair"
20
- }
21
- },
22
- { "name": "video/repair", "packaging": "fec-repair", "priority": 100 }
23
- ]
24
- }