@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.
- package/README.md +21 -16
- package/dist/browser-runtime.js +1024 -1078
- package/dist/browser-runtime.js.map +4 -4
- package/dist/carp-catalog.d.ts +33 -87
- package/dist/carp-catalog.d.ts.map +1 -1
- package/dist/carp-catalog.js +12 -434
- package/dist/carp-catalog.js.map +4 -4
- package/dist/catalog-fec-params.d.ts +48 -161
- package/dist/catalog-fec-params.d.ts.map +1 -1
- package/dist/catalog-fec-params.js +567 -592
- package/dist/catalog-fec-params.js.map +4 -4
- package/dist/catalog-network-source.js +6 -2
- package/dist/catalog-network-source.js.map +3 -3
- package/dist/delivery-catalog.js +12 -4
- package/dist/delivery-catalog.js.map +4 -4
- package/dist/delta-fallback-config.d.ts +21 -26
- package/dist/delta-fallback-config.d.ts.map +1 -1
- package/dist/delta-fallback-config.js +582 -24
- package/dist/delta-fallback-config.js.map +4 -4
- package/dist/fec-manager.js +6 -2
- package/dist/fec-manager.js.map +3 -3
- package/dist/fec-state.d.ts +5 -43
- package/dist/fec-state.d.ts.map +1 -1
- package/dist/fec-state.js +529 -34
- package/dist/fec-state.js.map +4 -4
- package/dist/fec-worker-setup.js +6 -2
- package/dist/fec-worker-setup.js.map +3 -3
- package/dist/held-layer-admission.js +6 -2
- package/dist/held-layer-admission.js.map +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -39
- package/dist/index.js.map +2 -2
- package/dist/iso-block-locator.js +6 -2
- package/dist/iso-block-locator.js.map +3 -3
- package/dist/mfu-reassembler.js +6 -2
- package/dist/mfu-reassembler.js.map +3 -3
- package/dist/mmtp-container-parser.js +6 -2
- package/dist/mmtp-container-parser.js.map +3 -3
- package/dist/mmtp-container-parser.no-modules.js +551 -452
- package/dist/mmtp-container-parser.no-modules.js.map +4 -4
- package/dist/mmtp-decode-pipeline.js +6 -2
- package/dist/mmtp-decode-pipeline.js.map +3 -3
- package/dist/mmtp-fec-session.d.ts +7 -6
- package/dist/mmtp-fec-session.d.ts.map +1 -1
- package/dist/mmtp-fec-session.js +13 -9
- package/dist/mmtp-fec-session.js.map +3 -3
- package/dist/mmtp-router.d.ts +7 -16
- package/dist/mmtp-router.d.ts.map +1 -1
- package/dist/mmtp-router.js +19 -29
- package/dist/mmtp-router.js.map +3 -3
- package/dist/multicast-auth-catalog.js +7 -3
- package/dist/multicast-auth-catalog.js.map +3 -3
- package/dist/multicast-input.js +7 -3
- package/dist/multicast-input.js.map +3 -3
- package/dist/multicast-manager.d.ts +29 -32
- package/dist/multicast-manager.d.ts.map +1 -1
- package/dist/multicast-manager.js +682 -253
- package/dist/multicast-manager.js.map +4 -4
- package/dist/multicast-transport.d.ts +23 -2
- package/dist/multicast-transport.d.ts.map +1 -1
- package/dist/multicast-transport.js +57 -16
- package/dist/multicast-transport.js.map +4 -4
- package/dist/multicast-unwrap.js +6 -2
- package/dist/multicast-unwrap.js.map +3 -3
- package/dist/no-modules.js +551 -452
- package/dist/no-modules.js.map +4 -4
- package/dist/phase14-catalog-override.d.ts +10 -5
- package/dist/phase14-catalog-override.d.ts.map +1 -1
- package/dist/phase14-catalog-override.js +35 -11
- package/dist/phase14-catalog-override.js.map +2 -2
- package/dist/repair-fetch.d.ts +3 -1
- package/dist/repair-fetch.d.ts.map +1 -1
- package/dist/repair-fetch.js +16 -3
- package/dist/repair-fetch.js.map +3 -3
- package/dist/repair-layers.d.ts +0 -123
- package/dist/repair-layers.d.ts.map +1 -1
- package/dist/repair-layers.js +1 -349
- package/dist/repair-layers.js.map +3 -3
- package/dist/signaling.js +6 -2
- package/dist/signaling.js.map +3 -3
- package/dist/timestamp-codec.js +6 -2
- package/dist/timestamp-codec.js.map +3 -3
- package/dist/wasm-mfu-reassembler.js +6 -2
- package/dist/wasm-mfu-reassembler.js.map +3 -3
- package/dist/wasm-mmtp-container-parser.js +6 -2
- package/dist/wasm-mmtp-container-parser.js.map +3 -3
- package/package.json +9 -5
- package/schemas/catalog.schema.json +53 -58
- package/src/carp-catalog.ts +39 -229
- package/src/catalog-fec-params.ts +130 -493
- package/src/delta-fallback-config.ts +63 -50
- package/src/fec-state.ts +7 -62
- package/src/index.ts +10 -30
- package/src/mmtp-fec-session.ts +11 -10
- package/src/mmtp-router.ts +14 -29
- package/src/multicast-manager.ts +89 -121
- package/src/multicast-transport.ts +65 -12
- package/src/phase14-catalog-override.ts +67 -16
- package/src/repair-fetch.ts +27 -3
- package/src/repair-layers.ts +7 -520
- package/test-vectors/catalog/README.md +39 -67
- package/test-vectors/catalog/fec-01-runtime/README.md +15 -0
- package/test-vectors/catalog/{negative/fec-block-profile-retired.json → fec-01-runtime/fec-iso-ssbg1.json} +1 -1
- package/test-vectors/catalog/fec-01-runtime/fec-layered-repair.json +106 -0
- package/test-vectors/catalog/{negative/fec-block-profile-unknown.json → fec-01-runtime/fec-multicast.json} +2 -1
- package/test-vectors/catalog/fec-01-runtime/multicast-native-ssm-no-network-source.json +44 -0
- package/test-vectors/catalog/negative/fec-block-profile-missing.json +24 -11
- package/test-vectors/catalog/negative/fec-iso-symbol-size-below-floor.json +13 -8
- package/test-vectors/catalog/negative/fec-reed-solomon-iso-symbol-size-13.json +13 -8
- package/test-vectors/catalog/negative/fec-repair-layer-geometry.json +20 -10
- package/test-vectors/catalog/negative/fec-repair-layer-missing-symbols.json +20 -10
- package/test-vectors/catalog/negative/fec-repair-overlay-source-symbols-zero.json +25 -17
- package/test-vectors/catalog/negative/fec-repair-symbols-zero.json +13 -8
- package/test-vectors/catalog/negative/fec-source-symbols-zero.json +13 -8
- package/test-vectors/catalog/negative/fec-symbol-size-zero.json +13 -8
- package/test-vectors/catalog/negative/raptorq-source-symbols-over-max.json +18 -9
- package/test-vectors/catalog/negative/raptorq-unaligned-symbol.json +13 -8
- package/test-vectors/catalog/positive/fec-algorithm-unimplemented.json +14 -9
- package/test-vectors/catalog/positive/fec-iso-ssbg1.json +25 -12
- package/test-vectors/catalog/positive/fec-layered-repair.json +79 -35
- package/test-vectors/catalog/positive/fec-multicast.json +26 -13
- package/test-vectors/catalog/positive/fec-reed-solomon-layered.json +29 -18
- package/test-vectors/catalog/positive/multicast-draft01-4-1-example.json +28 -20
- package/test-vectors/catalog/positive/multicast-draft01-7-2-6-example.json +14 -10
- package/test-vectors/catalog/positive/multicast-native-ssm-no-network-source.json +22 -12
- package/test-vectors/catalog/section-codes.json +13 -22
- package/test-vectors/catalog-timing.json +2 -2
- package/test-vectors/catalog-validation.json +30 -243
- package/test-vectors/catalog/negative/fec-enhancement-repair-removed.json +0 -28
- package/test-vectors/catalog/negative/fec-reed-solomon-k-plus-p-over-255.json +0 -39
- package/test-vectors/catalog/negative/fec-reed-solomon-overlay-over-255.json +0 -40
- package/test-vectors/catalog/negative/fec-repair-multiple-depends.json +0 -32
- package/test-vectors/catalog/negative/fec-repair-overlay-with-layer.json +0 -34
- package/test-vectors/catalog/negative/fec-repair-priority-out-of-band.json +0 -24
- package/test-vectors/catalog/negative/fec-repair-source-symbols-without-scope.json +0 -33
|
@@ -12,7 +12,16 @@ Negative fixtures are the migration worklist and MUST fail.
|
|
|
12
12
|
`section-codes.json` lists every negative once: the code and path the
|
|
13
13
|
TypeScript runtime validator and the Rust catalog section (`mmt_fec::catalog`)
|
|
14
14
|
both reject it with, or `outOfSection` when the section does not own the field.
|
|
15
|
-
The Rust section owns only the track MMTP
|
|
15
|
+
The Rust section owns only the track MMTP and timing fields.
|
|
16
|
+
|
|
17
|
+
FEC is the draft-ramadan-moq-fec-catalog-00 `fec` **array** of instance
|
|
18
|
+
objects; repair (`fec-repair`) and symbol (`fec-source`) tracks name their
|
|
19
|
+
instance by `source` + `instanceId` (BLO-50171). The schema states what a
|
|
20
|
+
publisher emits. A receiver binds FEC through `validateFecCatalog`, which fails
|
|
21
|
+
closed per instance against `vectors/fec-catalog-00/`;
|
|
22
|
+
`validateCmsfMmtpCatalog` never throws on `fec` or on a repair or symbol track,
|
|
23
|
+
so a fec-01 single object costs only that track's FEC. The fec-01 catalogs the
|
|
24
|
+
runtime resolver still reads live in `fec-01-runtime/`.
|
|
16
25
|
|
|
17
26
|
The negatives:
|
|
18
27
|
|
|
@@ -41,36 +50,21 @@ The negatives:
|
|
|
41
50
|
- `multicast-network-source-empty.json`: `networkSource` is optional, but an
|
|
42
51
|
empty array is not a way to say "absent" — omit the key instead.
|
|
43
52
|
- `repair-track-legacy-shape.json`: repair tracks use `packaging: "fec-repair"`.
|
|
44
|
-
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
`
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
`fec-
|
|
55
|
-
|
|
56
|
-
no
|
|
57
|
-
|
|
58
|
-
`fec-repair
|
|
59
|
-
`fec-repair-overlay-source-symbols-zero.json` (`track_fec_bounds` at the
|
|
60
|
-
overlay's `sourceSymbols`): the rule 13 / 5.1.1 lower bounds of 1.
|
|
61
|
-
- `fec-reed-solomon-k-plus-p-over-255.json` (base K + totalP = 256 across
|
|
62
|
-
layers 0 and 1) and `fec-reed-solomon-overlay-over-255.json` (overlay
|
|
63
|
-
K + P = 256): under `reed-solomon` every FEC instance holds at most 255
|
|
64
|
-
symbols (`track_fec_bounds`, draft-ramadan-moq-fec-01 6.3.4 rule 12, 4.5).
|
|
65
|
-
The schema cannot state a sum and accepts both.
|
|
66
|
-
- `fec-block-profile-missing.json`: an FEC instance must name its block
|
|
67
|
-
profile; there is no default (`track_fec_block_profile`).
|
|
68
|
-
- `fec-block-profile-unknown.json`: `fec.blockProfile` is `"iso-ssbg1-v1"`; a
|
|
69
|
-
near-miss such as `"iso-ssbg1"` is rejected, not normalized
|
|
70
|
-
(`track_fec_block_profile_unimplemented`).
|
|
71
|
-
- `fec-block-profile-retired.json`: the retired Blockcast-private
|
|
72
|
-
`"k-padded-v1"` is not a block profile
|
|
73
|
-
(`track_fec_block_profile_unimplemented`).
|
|
53
|
+
- The FEC negatives are schema-only (`outOfSection` in `section-codes.json`):
|
|
54
|
+
the publisher schema refuses them, while a receiver fails the one instance
|
|
55
|
+
closed (`vectors/fec-catalog-00/`, where `recut-*` carry the fec-01 rule-13
|
|
56
|
+
set's outcomes). `fec-symbol-size-zero.json`, `fec-source-symbols-zero.json`,
|
|
57
|
+
`fec-repair-symbols-zero.json` and `fec-repair-overlay-source-symbols-zero.json`
|
|
58
|
+
(the overlay instance's `sourceSymbols`): lower bounds of 1.
|
|
59
|
+
`fec-iso-symbol-size-below-floor.json` (RaptorQ T=8, aligned) and
|
|
60
|
+
`fec-reed-solomon-iso-symbol-size-13.json`: under `iso-ssbg1-v1` `symbolSize`
|
|
61
|
+
is at least 14 (draft-ramadan-moq-mmt-02 7.1). `raptorq-unaligned-symbol.json`
|
|
62
|
+
and `raptorq-source-symbols-over-max.json`: RaptorQ T is a multiple of 8 and
|
|
63
|
+
K at most 56403. `fec-block-profile-missing.json`: an instance names its block
|
|
64
|
+
profile; there is no default. `fec-repair-layer-geometry.json`: a repair track
|
|
65
|
+
carries no block geometry. `fec-repair-layer-missing-symbols.json`: a layer
|
|
66
|
+
1..n declares `repairSymbols`. `media-track-repair-layer.json`: `repairLayer`
|
|
67
|
+
is a `fec-repair` track field only.
|
|
74
68
|
- `archive-origin-with-path.json`: `archive.origin` is scheme and authority
|
|
75
69
|
only. A path would make the derived object URL ambiguous above a codec that
|
|
76
70
|
refuses percent-encoding precisely so each identity has one URL path.
|
|
@@ -88,43 +82,20 @@ on the other, so both arms of the `/v1/{ns}/{track}/{group}` derivation stay
|
|
|
88
82
|
exercised: `{ns}` is the track's own `namespace`, or the MoQ subscription's
|
|
89
83
|
Track Namespace tuple when the track declares none.
|
|
90
84
|
|
|
91
|
-
Every
|
|
92
|
-
|
|
93
|
-
draft-ramadan-moq-fec
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
`track_fec_block_profile_unimplemented`; an absent token on an FEC instance
|
|
98
|
-
fails with `track_fec_block_profile`. A receiver consumes such a track without
|
|
99
|
-
FEC and joins none of its repair tracks, without failing the session or any
|
|
100
|
-
other track's FEC.
|
|
101
|
-
|
|
102
|
-
`"iso-ssbg1-v1"` bounds a block's location by its span, so a receiver applies
|
|
103
|
-
FEC only when `fec.interleaveDepthMs` is at least 33 ms; without it the track
|
|
104
|
-
resolves to no FEC (`track_fec_block_span` on `interleaveDepthMs`; a declared
|
|
105
|
-
span below the floor is `track_fec`). The schema and the
|
|
106
|
-
CMSF validator do not require the field. Every fixture that carried
|
|
107
|
-
`"k-padded-v1"` now names `"iso-ssbg1-v1"`. The FEC-carrying positives that
|
|
108
|
-
omitted the span (`fec-multicast.json`,
|
|
109
|
-
`multicast-native-ssm-no-network-source.json`) now declare the one-group span
|
|
110
|
-
their omitted field used to mean (`interleaveDepthMs` equal to
|
|
111
|
-
`groupDurationMs`, 1000). `fec-iso-ssbg1.json` is `fec-multicast.json` without
|
|
112
|
-
that span: a valid catalog whose FEC a receiver cannot apply.
|
|
113
|
-
|
|
114
|
-
On `algorithm: "none"` the field is optional, but a present token must still be
|
|
115
|
-
implemented. Repair tracks carry no `fec`, so they carry no profile; a repair
|
|
116
|
-
layer or overlay inherits its source's. Every negative fixture with an FEC
|
|
117
|
-
source names `"iso-ssbg1-v1"` unless the profile is what it tests, so each still
|
|
118
|
-
fails for exactly the reason listed above.
|
|
85
|
+
Every FEC instance names its `scheme` and `blockProfile`; neither is defaulted
|
|
86
|
+
or inferred from the wire. A scheme or profile the receiver does not implement
|
|
87
|
+
leaves that instance unavailable, never the catalog (draft-ramadan-moq-fec-core-00
|
|
88
|
+
10.3 rule 1); `"none"` is reserved and an absent or empty array is how a track
|
|
89
|
+
declares no FEC. `fec-iso-ssbg1.json` is `fec-multicast.json` without the
|
|
90
|
+
instance's `interleaveDepthMs`.
|
|
119
91
|
|
|
120
|
-
`fec-layered-repair.json` carries
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
92
|
+
`fec-layered-repair.json` carries, for one source, instance 0 with base layers
|
|
93
|
+
0..2 (layer 0 is the instance's `repairTrack`; layers 1..2 name `source` and
|
|
94
|
+
`instanceId` and declare `repairSymbols`) and instance 1, a keyframe overlay
|
|
95
|
+
(`scope: "keyframe"`) with its own repair track; the second endpoint carries
|
|
96
|
+
only repair tracks. Priority is on the MoQT scale (lower first); `audio-repair`
|
|
97
|
+
declares none.
|
|
125
98
|
|
|
126
|
-
An omitted `fec.interleaveDepthMs` is valid catalog shape, but under
|
|
127
|
-
`"iso-ssbg1-v1"` it leaves the track without FEC at a receiver (see above).
|
|
128
99
|
When present, `groupDurationTicks` overrides the integer millisecond field.
|
|
129
100
|
Switching sets compare `ticks / timescale`, so equal wall-clock durations at
|
|
130
101
|
different timescales are valid. One exception: an intra-only member (group
|
|
@@ -173,7 +144,8 @@ digest, and compares the extracted catalog bytes to the committed fixture. The
|
|
|
173
144
|
fixture is retained byte-identical as the record of what v1 shipped and is now
|
|
174
145
|
expected to **fail** validation: its two repair tracks declare the retired
|
|
175
146
|
`packaging: "condensed"`, which is not a catalog packaging value, and its two
|
|
176
|
-
FEC sources
|
|
147
|
+
FEC sources carry the fec-01 single `fec` object, which the array-only schema
|
|
148
|
+
refuses by type. The condensed
|
|
177
149
|
FEC repair format itself is unaffected — a catalog declares it as
|
|
178
150
|
`packaging: "fec-repair"` plus `fec.repairContainer`.
|
|
179
151
|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# fec-01 single-object catalogs (compatibility inputs)
|
|
2
|
+
|
|
3
|
+
These are the draft-ramadan-moq-fec-01 `fec` object shape, kept byte-identical
|
|
4
|
+
to the `positive/` fixtures they were before the array-only re-cut (BLO-50171).
|
|
5
|
+
They are **not** catalog-contract fixtures: the contract is the
|
|
6
|
+
draft-ramadan-moq-fec-catalog-00 array (`positive/`, `vectors/fec-catalog-00/`).
|
|
7
|
+
|
|
8
|
+
They exist for one rule: a fec-01 publisher costs only the FEC of the track
|
|
9
|
+
carrying the object. `validateCmsfMmtpCatalog` must not throw on one,
|
|
10
|
+
`validateFecCatalog` gives that track no instance, and the runtime resolver
|
|
11
|
+
(`resolveRepairLayers`, `catalogTrackFecUnavailable`) gives it no FEC with
|
|
12
|
+
`fec_member` at its `fec` (`catalog-schema.test.ts`). That last test is also
|
|
13
|
+
the mutation guard: restoring a fec-01 read in the resolver turns it red.
|
|
14
|
+
|
|
15
|
+
Delete this directory once no publisher emits the fec-01 object (BLO-50172).
|
|
@@ -0,0 +1,106 @@
|
|
|
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
|
+
"interleaveDepthMs": 1000,
|
|
20
|
+
"reorderToleranceMs": 40,
|
|
21
|
+
"repairTrack": "video/repair"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"name": "video/repair",
|
|
26
|
+
"packaging": "fec-repair",
|
|
27
|
+
"depends": ["video"],
|
|
28
|
+
"repairLayer": 0,
|
|
29
|
+
"priority": 240
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"name": "video/repair/1",
|
|
33
|
+
"packaging": "fec-repair",
|
|
34
|
+
"depends": ["video"],
|
|
35
|
+
"repairLayer": 1,
|
|
36
|
+
"repairSymbols": 16,
|
|
37
|
+
"priority": 244
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"name": "video/repair/2",
|
|
41
|
+
"packaging": "fec-repair",
|
|
42
|
+
"depends": ["video"],
|
|
43
|
+
"repairLayer": 2,
|
|
44
|
+
"repairSymbols": 32,
|
|
45
|
+
"priority": 248
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"name": "video/keyframe-repair",
|
|
49
|
+
"packaging": "fec-repair",
|
|
50
|
+
"depends": ["video"],
|
|
51
|
+
"scope": "keyframe",
|
|
52
|
+
"sourceSymbols": 256,
|
|
53
|
+
"repairSymbols": 32,
|
|
54
|
+
"priority": 242
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"name": "audio",
|
|
58
|
+
"packaging": "mmtp",
|
|
59
|
+
"codec": "mp4a.40.2",
|
|
60
|
+
"mmtpMode": "mfu",
|
|
61
|
+
"timescale": 48000,
|
|
62
|
+
"groupDurationMs": 1000,
|
|
63
|
+
"fec": {
|
|
64
|
+
"algorithm": "raptorq",
|
|
65
|
+
"blockProfile": "iso-ssbg1-v1",
|
|
66
|
+
"sourceSymbols": 47,
|
|
67
|
+
"repairSymbols": 4,
|
|
68
|
+
"symbolSize": 1312,
|
|
69
|
+
"interleaveDepthMs": 1000,
|
|
70
|
+
"repairTrack": "audio-repair"
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"name": "audio-repair",
|
|
75
|
+
"packaging": "fec-repair"
|
|
76
|
+
}
|
|
77
|
+
],
|
|
78
|
+
"multicast": {
|
|
79
|
+
"endpoints": [
|
|
80
|
+
{
|
|
81
|
+
"sourceAddress": "192.0.2.10",
|
|
82
|
+
"groupAddress": "232.1.1.1",
|
|
83
|
+
"port": 5000,
|
|
84
|
+
"tracks": [
|
|
85
|
+
{ "name": "video", "packetId": 1 },
|
|
86
|
+
{ "name": "audio", "packetId": 2 },
|
|
87
|
+
{ "name": "video/repair", "packetId": 3 },
|
|
88
|
+
{ "name": "audio-repair", "packetId": 4 }
|
|
89
|
+
]
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"sourceAddress": "192.0.2.10",
|
|
93
|
+
"groupAddress": "232.1.1.2",
|
|
94
|
+
"port": 5000,
|
|
95
|
+
"tracks": [
|
|
96
|
+
{ "name": "video/repair/1", "packetId": 5 },
|
|
97
|
+
{ "name": "video/repair/2", "packetId": 6 },
|
|
98
|
+
{ "name": "video/keyframe-repair", "packetId": 7 }
|
|
99
|
+
]
|
|
100
|
+
}
|
|
101
|
+
],
|
|
102
|
+
"networkSource": [
|
|
103
|
+
{ "type": "amt", "discovery": "driad" }
|
|
104
|
+
]
|
|
105
|
+
}
|
|
106
|
+
}
|
|
@@ -12,10 +12,11 @@
|
|
|
12
12
|
"groupDurationMs": 1000,
|
|
13
13
|
"fec": {
|
|
14
14
|
"algorithm": "raptorq",
|
|
15
|
-
"blockProfile": "iso-ssbg1",
|
|
15
|
+
"blockProfile": "iso-ssbg1-v1",
|
|
16
16
|
"sourceSymbols": 768,
|
|
17
17
|
"repairSymbols": 384,
|
|
18
18
|
"symbolSize": 1312,
|
|
19
|
+
"interleaveDepthMs": 1000,
|
|
19
20
|
"repairTrack": "video-repair",
|
|
20
21
|
"mode": "interleaved"
|
|
21
22
|
}
|
|
@@ -0,0 +1,44 @@
|
|
|
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": 768,
|
|
17
|
+
"repairSymbols": 384,
|
|
18
|
+
"symbolSize": 1312,
|
|
19
|
+
"interleaveDepthMs": 1000,
|
|
20
|
+
"repairTrack": "video-repair",
|
|
21
|
+
"mode": "interleaved"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"name": "video-repair",
|
|
26
|
+
"packaging": "fec-repair",
|
|
27
|
+
"priority": 240
|
|
28
|
+
}
|
|
29
|
+
],
|
|
30
|
+
"multicast": {
|
|
31
|
+
"endpoints": [
|
|
32
|
+
{
|
|
33
|
+
"protocol": "ssm",
|
|
34
|
+
"sourceAddress": "192.0.2.10",
|
|
35
|
+
"groupAddress": "232.1.1.1",
|
|
36
|
+
"port": 5000,
|
|
37
|
+
"tracks": [
|
|
38
|
+
{ "name": "video", "packetId": 1 },
|
|
39
|
+
{ "name": "video-repair", "packetId": 2 }
|
|
40
|
+
]
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -10,18 +10,22 @@
|
|
|
10
10
|
"mmtpMode": "mfu",
|
|
11
11
|
"timescale": 90000,
|
|
12
12
|
"groupDurationMs": 1000,
|
|
13
|
-
"fec":
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
13
|
+
"fec": [
|
|
14
|
+
{
|
|
15
|
+
"instanceId": 0,
|
|
16
|
+
"scheme": "raptorq",
|
|
17
|
+
"sourceSymbols": 768,
|
|
18
|
+
"repairSymbols": 384,
|
|
19
|
+
"symbolSize": 1312,
|
|
20
|
+
"repairTrack": "video-repair"
|
|
21
|
+
}
|
|
22
|
+
]
|
|
21
23
|
},
|
|
22
24
|
{
|
|
23
25
|
"name": "video-repair",
|
|
24
26
|
"packaging": "fec-repair",
|
|
27
|
+
"source": "video",
|
|
28
|
+
"instanceId": 0,
|
|
25
29
|
"priority": 240
|
|
26
30
|
}
|
|
27
31
|
],
|
|
@@ -32,13 +36,22 @@
|
|
|
32
36
|
"groupAddress": "232.1.1.1",
|
|
33
37
|
"port": 5000,
|
|
34
38
|
"tracks": [
|
|
35
|
-
{
|
|
36
|
-
|
|
39
|
+
{
|
|
40
|
+
"name": "video",
|
|
41
|
+
"packetId": 1
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"name": "video-repair",
|
|
45
|
+
"packetId": 2
|
|
46
|
+
}
|
|
37
47
|
]
|
|
38
48
|
}
|
|
39
49
|
],
|
|
40
50
|
"networkSource": [
|
|
41
|
-
{
|
|
51
|
+
{
|
|
52
|
+
"type": "amt",
|
|
53
|
+
"discovery": "driad"
|
|
54
|
+
},
|
|
42
55
|
{
|
|
43
56
|
"type": "atsc3",
|
|
44
57
|
"frequency": 587000,
|
|
@@ -10,18 +10,23 @@
|
|
|
10
10
|
"mmtpMode": "mfu",
|
|
11
11
|
"timescale": 90000,
|
|
12
12
|
"groupDurationMs": 1000,
|
|
13
|
-
"fec":
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
13
|
+
"fec": [
|
|
14
|
+
{
|
|
15
|
+
"instanceId": 0,
|
|
16
|
+
"scheme": "raptorq",
|
|
17
|
+
"blockProfile": "iso-ssbg1-v1",
|
|
18
|
+
"sourceSymbols": 32,
|
|
19
|
+
"repairSymbols": 8,
|
|
20
|
+
"symbolSize": 8,
|
|
21
|
+
"repairTrack": "video-repair"
|
|
22
|
+
}
|
|
23
|
+
]
|
|
21
24
|
},
|
|
22
25
|
{
|
|
23
26
|
"name": "video-repair",
|
|
24
27
|
"packaging": "fec-repair",
|
|
28
|
+
"source": "video",
|
|
29
|
+
"instanceId": 0,
|
|
25
30
|
"priority": 240
|
|
26
31
|
}
|
|
27
32
|
]
|
|
@@ -10,18 +10,23 @@
|
|
|
10
10
|
"mmtpMode": "mfu",
|
|
11
11
|
"timescale": 90000,
|
|
12
12
|
"groupDurationMs": 1000,
|
|
13
|
-
"fec":
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
13
|
+
"fec": [
|
|
14
|
+
{
|
|
15
|
+
"instanceId": 0,
|
|
16
|
+
"scheme": "reed-solomon",
|
|
17
|
+
"blockProfile": "iso-ssbg1-v1",
|
|
18
|
+
"sourceSymbols": 32,
|
|
19
|
+
"repairSymbols": 8,
|
|
20
|
+
"symbolSize": 13,
|
|
21
|
+
"repairTrack": "video-repair"
|
|
22
|
+
}
|
|
23
|
+
]
|
|
21
24
|
},
|
|
22
25
|
{
|
|
23
26
|
"name": "video-repair",
|
|
24
27
|
"packaging": "fec-repair",
|
|
28
|
+
"source": "video",
|
|
29
|
+
"instanceId": 0,
|
|
25
30
|
"priority": 240
|
|
26
31
|
}
|
|
27
32
|
]
|
|
@@ -10,20 +10,30 @@
|
|
|
10
10
|
"mmtpMode": "mfu",
|
|
11
11
|
"timescale": 90000,
|
|
12
12
|
"groupDurationMs": 1000,
|
|
13
|
-
"fec":
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
13
|
+
"fec": [
|
|
14
|
+
{
|
|
15
|
+
"instanceId": 0,
|
|
16
|
+
"scheme": "raptorq",
|
|
17
|
+
"blockProfile": "iso-ssbg1-v1",
|
|
18
|
+
"sourceSymbols": 64,
|
|
19
|
+
"repairSymbols": 8,
|
|
20
|
+
"symbolSize": 1312,
|
|
21
|
+
"repairTrack": "video/repair"
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"name": "video/repair",
|
|
27
|
+
"packaging": "fec-repair",
|
|
28
|
+
"source": "video",
|
|
29
|
+
"instanceId": 0,
|
|
30
|
+
"priority": 240
|
|
21
31
|
},
|
|
22
|
-
{ "name": "video/repair", "packaging": "fec-repair", "priority": 240 },
|
|
23
32
|
{
|
|
24
33
|
"name": "video/repair/1",
|
|
25
34
|
"packaging": "fec-repair",
|
|
26
|
-
"
|
|
35
|
+
"source": "video",
|
|
36
|
+
"instanceId": 0,
|
|
27
37
|
"repairLayer": 1,
|
|
28
38
|
"repairSymbols": 16,
|
|
29
39
|
"priority": 244,
|
|
@@ -10,20 +10,30 @@
|
|
|
10
10
|
"mmtpMode": "mfu",
|
|
11
11
|
"timescale": 90000,
|
|
12
12
|
"groupDurationMs": 1000,
|
|
13
|
-
"fec":
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
13
|
+
"fec": [
|
|
14
|
+
{
|
|
15
|
+
"instanceId": 0,
|
|
16
|
+
"scheme": "raptorq",
|
|
17
|
+
"blockProfile": "iso-ssbg1-v1",
|
|
18
|
+
"sourceSymbols": 64,
|
|
19
|
+
"repairSymbols": 8,
|
|
20
|
+
"symbolSize": 1312,
|
|
21
|
+
"repairTrack": "video/repair"
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"name": "video/repair",
|
|
27
|
+
"packaging": "fec-repair",
|
|
28
|
+
"source": "video",
|
|
29
|
+
"instanceId": 0,
|
|
30
|
+
"priority": 240
|
|
21
31
|
},
|
|
22
|
-
{ "name": "video/repair", "packaging": "fec-repair", "priority": 240 },
|
|
23
32
|
{
|
|
24
33
|
"name": "video/repair/1",
|
|
25
34
|
"packaging": "fec-repair",
|
|
26
|
-
"
|
|
35
|
+
"source": "video",
|
|
36
|
+
"instanceId": 0,
|
|
27
37
|
"repairLayer": 1,
|
|
28
38
|
"priority": 244
|
|
29
39
|
}
|
|
@@ -10,33 +10,41 @@
|
|
|
10
10
|
"mmtpMode": "mfu",
|
|
11
11
|
"timescale": 90000,
|
|
12
12
|
"groupDurationMs": 1000,
|
|
13
|
-
"fec":
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
13
|
+
"fec": [
|
|
14
|
+
{
|
|
15
|
+
"instanceId": 0,
|
|
16
|
+
"scheme": "raptorq",
|
|
17
|
+
"blockProfile": "iso-ssbg1-v1",
|
|
18
|
+
"sourceSymbols": 32,
|
|
19
|
+
"repairSymbols": 8,
|
|
20
|
+
"symbolSize": 1312,
|
|
21
|
+
"repairTrack": "video-repair"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"instanceId": 1,
|
|
25
|
+
"scope": "keyframe",
|
|
26
|
+
"scheme": "raptorq",
|
|
27
|
+
"blockProfile": "iso-ssbg1-v1",
|
|
28
|
+
"sourceSymbols": 0,
|
|
29
|
+
"repairSymbols": 32,
|
|
30
|
+
"symbolSize": 1312,
|
|
31
|
+
"repairTrack": "video/keyframe-repair"
|
|
32
|
+
}
|
|
33
|
+
]
|
|
21
34
|
},
|
|
22
35
|
{
|
|
23
36
|
"name": "video-repair",
|
|
24
37
|
"packaging": "fec-repair",
|
|
38
|
+
"source": "video",
|
|
39
|
+
"instanceId": 0,
|
|
25
40
|
"priority": 240,
|
|
26
|
-
"depends": [
|
|
27
|
-
"video"
|
|
28
|
-
],
|
|
29
41
|
"repairLayer": 0
|
|
30
42
|
},
|
|
31
43
|
{
|
|
32
44
|
"name": "video/keyframe-repair",
|
|
33
45
|
"packaging": "fec-repair",
|
|
34
|
-
"
|
|
35
|
-
|
|
36
|
-
],
|
|
37
|
-
"scope": "keyframe",
|
|
38
|
-
"sourceSymbols": 0,
|
|
39
|
-
"repairSymbols": 32,
|
|
46
|
+
"source": "video",
|
|
47
|
+
"instanceId": 1,
|
|
40
48
|
"priority": 242
|
|
41
49
|
}
|
|
42
50
|
]
|
|
@@ -10,18 +10,23 @@
|
|
|
10
10
|
"mmtpMode": "mfu",
|
|
11
11
|
"timescale": 90000,
|
|
12
12
|
"groupDurationMs": 1000,
|
|
13
|
-
"fec":
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
13
|
+
"fec": [
|
|
14
|
+
{
|
|
15
|
+
"instanceId": 0,
|
|
16
|
+
"scheme": "raptorq",
|
|
17
|
+
"blockProfile": "iso-ssbg1-v1",
|
|
18
|
+
"sourceSymbols": 32,
|
|
19
|
+
"repairSymbols": 0,
|
|
20
|
+
"symbolSize": 1312,
|
|
21
|
+
"repairTrack": "video-repair"
|
|
22
|
+
}
|
|
23
|
+
]
|
|
21
24
|
},
|
|
22
25
|
{
|
|
23
26
|
"name": "video-repair",
|
|
24
27
|
"packaging": "fec-repair",
|
|
28
|
+
"source": "video",
|
|
29
|
+
"instanceId": 0,
|
|
25
30
|
"priority": 240
|
|
26
31
|
}
|
|
27
32
|
]
|