@blockcast/mmt-fec 0.3.0 → 0.4.0
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 +4 -4
- package/dist/block-processor.d.ts +19 -20
- package/dist/block-processor.d.ts.map +1 -1
- package/dist/block-processor.js +27 -93
- package/dist/block-processor.js.map +1 -1
- package/dist/fec-block-mapper.d.ts +16 -72
- package/dist/fec-block-mapper.d.ts.map +1 -1
- package/dist/fec-block-mapper.js +17 -96
- package/dist/fec-block-mapper.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/oti.d.ts +17 -8
- package/dist/oti.d.ts.map +1 -1
- package/dist/oti.js +9 -1
- package/dist/oti.js.map +1 -1
- package/dist/repair-group.d.ts +86 -0
- package/dist/repair-group.d.ts.map +1 -1
- package/dist/repair-group.js +135 -0
- package/dist/repair-group.js.map +1 -1
- package/package.json +5 -6
- package/src/block-processor.ts +31 -110
- package/src/fec-block-mapper.ts +23 -108
- package/src/index.ts +6 -1
- package/src/oti.ts +20 -9
- package/src/repair-group.ts +176 -0
- package/test-vectors/repair-epoch.json +119 -0
- package/node_modules/@blockcast/mmt-alta-parse/README.md +0 -181
- package/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +0 -57
- package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-alta-parse/dist/index.js +0 -115
- package/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +0 -1
- package/node_modules/@blockcast/mmt-alta-parse/package.json +0 -50
- package/node_modules/@blockcast/mmt-alta-parse/src/index.ts +0 -136
- package/node_modules/@blockcast/mmt-base/README.md +0 -134
- package/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
- package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts +0 -55
- package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js +0 -128
- package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js.map +0 -1
- package/node_modules/@blockcast/mmt-base/dist/index.d.ts +0 -7
- package/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-base/dist/index.js +0 -7
- package/node_modules/@blockcast/mmt-base/dist/index.js.map +0 -1
- package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +0 -292
- package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-base/dist/mmtp.js +0 -612
- package/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +0 -1
- package/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts +0 -18
- package/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-base/dist/net-constants.js +0 -18
- package/node_modules/@blockcast/mmt-base/dist/net-constants.js.map +0 -1
- package/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts +0 -47
- package/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-base/dist/ntp-short.js +0 -54
- package/node_modules/@blockcast/mmt-base/dist/ntp-short.js.map +0 -1
- package/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts +0 -57
- package/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-base/dist/serial-number.js +0 -98
- package/node_modules/@blockcast/mmt-base/dist/serial-number.js.map +0 -1
- package/node_modules/@blockcast/mmt-base/dist/signalling.d.ts +0 -312
- package/node_modules/@blockcast/mmt-base/dist/signalling.d.ts.map +0 -1
- package/node_modules/@blockcast/mmt-base/dist/signalling.js +0 -637
- package/node_modules/@blockcast/mmt-base/dist/signalling.js.map +0 -1
- package/node_modules/@blockcast/mmt-base/package.json +0 -49
- package/node_modules/@blockcast/mmt-base/src/fec-block-profile.ts +0 -145
- package/node_modules/@blockcast/mmt-base/src/index.ts +0 -6
- package/node_modules/@blockcast/mmt-base/src/mmtp.ts +0 -892
- package/node_modules/@blockcast/mmt-base/src/net-constants.ts +0 -17
- package/node_modules/@blockcast/mmt-base/src/ntp-short.ts +0 -67
- package/node_modules/@blockcast/mmt-base/src/serial-number.ts +0 -107
- package/node_modules/@blockcast/mmt-base/src/signalling.ts +0 -862
package/dist/fec-block-mapper.js
CHANGED
|
@@ -8,17 +8,10 @@
|
|
|
8
8
|
* It deliberately does NOT map MoQ media groups to FEC blocks. A recovered
|
|
9
9
|
* packet's media group is read from its own MMTP/MPU header
|
|
10
10
|
* ({@link recoveredPacketMediaGroup}), never from SBN arithmetic, and a source
|
|
11
|
-
* symbol's block comes from the wire:
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* - `iso-ssbg1-v1`: a block is the SS_ID range `[SS_Start, SS_Start +
|
|
16
|
-
* SSB_length)` its Repair FEC Payload ID states (ISO/IEC 23008-1 C.5.3), so
|
|
17
|
-
* SS_ID alone locates nothing and `fromSsId` throws.
|
|
18
|
-
*
|
|
19
|
-
* Object FEC (draft-ramadan-moq-fec §9.1) is the one exception: there each MoQ
|
|
20
|
-
* group IS its own FEC block, so {@link ObjectBlockMapper} keeps its identity
|
|
21
|
-
* `derive`.
|
|
11
|
+
* symbol's block comes from the wire: under `iso-ssbg1-v1` a block is the SS_ID
|
|
12
|
+
* range `[SS_Start, SS_Start + SSB_length)` its Repair FEC Payload ID states
|
|
13
|
+
* (ISO/IEC 23008-1 C.5.3), so SS_ID alone locates nothing and `fromSsId`
|
|
14
|
+
* throws for every stream with an FEC instance.
|
|
22
15
|
*/
|
|
23
16
|
import { PACKET_TYPE_MPU, parseFecBlockProfile, parseMMTPHeader, parseMPUHeader, } from "@blockcast/mmt-base";
|
|
24
17
|
import { deriveFecInterleaveDepth } from "./oti.js";
|
|
@@ -50,7 +43,7 @@ const NO_FEC_INSTANCE = Symbol("no FEC instance");
|
|
|
50
43
|
export class FecBlockMapper {
|
|
51
44
|
/** Media units (GOPs/frames) per FEC block, recovered with positive round-half-up semantics. */
|
|
52
45
|
d;
|
|
53
|
-
/** K:
|
|
46
|
+
/** K: the maximum SSB_length of a block (catalog `fec.sourceSymbols`). */
|
|
54
47
|
k;
|
|
55
48
|
/** Block time span (ms) — used as pacing threshold */
|
|
56
49
|
interleaveDepthMs;
|
|
@@ -78,22 +71,15 @@ export class FecBlockMapper {
|
|
|
78
71
|
this.d = deriveFecInterleaveDepth(config.interleaveDepthMs, config.gopDurationMs);
|
|
79
72
|
}
|
|
80
73
|
/**
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
74
|
+
* SS_ID → (SBN, ESI). Only {@link NullBlockMapper} answers: a stream with an
|
|
75
|
+
* FEC instance is `iso-ssbg1-v1`, whose blocks are located by
|
|
76
|
+
* `(SS_Start, SSB_length)` range membership and never from SS_ID alone.
|
|
84
77
|
*
|
|
85
|
-
* @throws
|
|
86
|
-
* `(SS_Start, SSB_length)` range membership and never from SS_ID alone
|
|
78
|
+
* @throws for every stream with an FEC instance
|
|
87
79
|
*/
|
|
88
|
-
fromSsId(
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
'(SS_Start, SSB_length) range membership, never from SS_ID alone');
|
|
92
|
-
}
|
|
93
|
-
return {
|
|
94
|
-
sbn: Math.floor(ssId / this.k),
|
|
95
|
-
esi: ssId % this.k,
|
|
96
|
-
};
|
|
80
|
+
fromSsId(_ssId) {
|
|
81
|
+
throw new Error(`fromSsId: a ${this.blockProfile ?? 'non-FEC'} stream locates a block by ` +
|
|
82
|
+
'(SS_Start, SSB_length) range membership, never from SS_ID alone');
|
|
97
83
|
}
|
|
98
84
|
/**
|
|
99
85
|
* Pacing threshold: one full block duration = interleaveDepthMs.
|
|
@@ -143,72 +129,6 @@ export class NullBlockMapper extends FecBlockMapper {
|
|
|
143
129
|
return 0;
|
|
144
130
|
}
|
|
145
131
|
}
|
|
146
|
-
/**
|
|
147
|
-
* Object-level FEC (§9.1): each MoQ group (frame) is its own FEC block.
|
|
148
|
-
* K_actual = ceil(frame_bytes / symbolSize) — varies per block.
|
|
149
|
-
*
|
|
150
|
-
* SBN = group_id, ESI = object_id.
|
|
151
|
-
* SS_ID = Group_ID * sourceSymbols + Object_ID (§9.1.2).
|
|
152
|
-
*
|
|
153
|
-
* That SS_ID is the K-stride numbering of `k-padded-v1`; `iso-ssbg1-v1`
|
|
154
|
-
* numbers SS_IDs consecutively per source packet (ISO/IEC 23008-1 C.5.2), so
|
|
155
|
-
* §9.1 object FEC is defined only under `k-padded-v1` and the constructor
|
|
156
|
-
* refuses any other profile.
|
|
157
|
-
*
|
|
158
|
-
* The stride of that numbering is the catalog `sourceSymbols`, never a
|
|
159
|
-
* block's own K: a short block (K_actual < sourceSymbols) still starts at
|
|
160
|
-
* `Group_ID * sourceSymbols` (its repair's SS_Start) and leaves the rest of
|
|
161
|
-
* its stride unused, which is exactly `k-padded-v1` with `SSB_length =
|
|
162
|
-
* K_actual`. So the SS_ID locator is the inherited
|
|
163
|
-
* {@link FecBlockMapper.fromSsId} over `k = sourceSymbols`, the exact inverse
|
|
164
|
-
* of {@link ObjectBlockMapper.derive}; it needs no per-block K and infers
|
|
165
|
-
* nothing.
|
|
166
|
-
*
|
|
167
|
-
* This mapper does NOT carry per-block K. Each block discovers its own K from:
|
|
168
|
-
* 1. Clean reception: counting source objects per group
|
|
169
|
-
* 2. Repair packets: SSB_length in the Repair FEC Payload ID (ISO 23008-1 C.5.3)
|
|
170
|
-
*
|
|
171
|
-
* Callers MUST pass per-block K to FecBlockManager.addSourcePacket/addRepairPacket.
|
|
172
|
-
* Created once per stream, GC'd on stream close (Effect cleanup).
|
|
173
|
-
*/
|
|
174
|
-
export class ObjectBlockMapper extends FecBlockMapper {
|
|
175
|
-
/** Catalog sourceSymbols (max K) — used ONLY for SS_ID encoding (§9.1.2).
|
|
176
|
-
* Actual per-block K varies: K_actual = ceil(frame_bytes / symbolSize). */
|
|
177
|
-
sourceSymbolsMax;
|
|
178
|
-
/**
|
|
179
|
-
* @param gopDurationMs - GOP/frame duration (ms)
|
|
180
|
-
* @param sourceSymbolsMax - Catalog `fec.sourceSymbols`
|
|
181
|
-
* @param blockProfile - Catalog `fec.blockProfile`; must be `k-padded-v1`
|
|
182
|
-
*/
|
|
183
|
-
constructor(gopDurationMs, sourceSymbolsMax, blockProfile) {
|
|
184
|
-
if (sourceSymbolsMax <= 0)
|
|
185
|
-
throw new Error('ObjectBlockMapper: sourceSymbolsMax must be > 0 (from catalog)');
|
|
186
|
-
const profile = parseFecBlockProfile(blockProfile, 'ObjectBlockMapper fec.blockProfile');
|
|
187
|
-
if (profile !== 'k-padded-v1') {
|
|
188
|
-
throw new Error(`ObjectBlockMapper: §9.1 object FEC numbers SS_ID = Group_ID * K + Object_ID, the k-padded-v1 stride; ` +
|
|
189
|
-
`it is not defined under ${profile}`);
|
|
190
|
-
}
|
|
191
|
-
// D=1, K=sourceSymbolsMax for SS_ID math only — actual block K varies
|
|
192
|
-
super({ interleaveDepthMs: gopDurationMs, gopDurationMs, k: sourceSymbolsMax, blockProfile: profile });
|
|
193
|
-
this.sourceSymbolsMax = sourceSymbolsMax;
|
|
194
|
-
}
|
|
195
|
-
/**
|
|
196
|
-
* SBN = group_id, ESI = object_id. SS_ID per §9.1.2. Its inverse is the
|
|
197
|
-
* inherited `fromSsId` (SBN = floor(SS_ID / sourceSymbols), ESI = SS_ID mod
|
|
198
|
-
* sourceSymbols).
|
|
199
|
-
*/
|
|
200
|
-
derive(groupId, objectId) {
|
|
201
|
-
return {
|
|
202
|
-
sbn: groupId,
|
|
203
|
-
esi: objectId,
|
|
204
|
-
ssId: groupId * this.sourceSymbolsMax + objectId,
|
|
205
|
-
};
|
|
206
|
-
}
|
|
207
|
-
/** One frame of latency: each frame is its own block. */
|
|
208
|
-
get pacingThresholdMs() {
|
|
209
|
-
return this.gopDurationMs; // one frame latency
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
132
|
/**
|
|
213
133
|
* Create a FecBlockMapper from catalog FEC config + measured GOP duration.
|
|
214
134
|
*
|
|
@@ -216,17 +136,18 @@ export class ObjectBlockMapper extends FecBlockMapper {
|
|
|
216
136
|
* {@link NullBlockMapper}; `fec.blockProfile` is not read, since a stream
|
|
217
137
|
* without FEC names none.
|
|
218
138
|
* - Otherwise `fec.blockProfile` is required (validated with
|
|
219
|
-
* `parseFecBlockProfile`, throwing
|
|
220
|
-
*
|
|
139
|
+
* `parseFecBlockProfile`, throwing unless it is `iso-ssbg1-v1`) and the
|
|
140
|
+
* result is a {@link FecBlockMapper}. `mode: 'object'` (per-group object
|
|
141
|
+
* FEC, SS_ID = Group_ID * K + Object_ID) throws: that numbering is the
|
|
142
|
+
* retired `k-padded-v1` stride, which `iso-ssbg1-v1` does not define.
|
|
221
143
|
*/
|
|
222
144
|
export function createMapper(fecConfig, gopDurationMs) {
|
|
223
145
|
if (!fecConfig || !fecConfig.sourceSymbols) {
|
|
224
146
|
return new NullBlockMapper(gopDurationMs);
|
|
225
147
|
}
|
|
226
148
|
const blockProfile = parseFecBlockProfile(fecConfig.blockProfile, 'fec.blockProfile');
|
|
227
|
-
// extensions feature — see moqcast-draft docs/fec-extensions-material.md, not in public -00
|
|
228
149
|
if (fecConfig.mode === 'object') {
|
|
229
|
-
|
|
150
|
+
throw new Error(`createMapper: object FEC numbers SS_ID = Group_ID * K + Object_ID, which ${blockProfile} does not define`);
|
|
230
151
|
}
|
|
231
152
|
return new FecBlockMapper({
|
|
232
153
|
interleaveDepthMs: fecConfig.interleaveDepthMs && fecConfig.interleaveDepthMs > 0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fec-block-mapper.js","sourceRoot":"","sources":["../src/fec-block-mapper.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"fec-block-mapper.js","sourceRoot":"","sources":["../src/fec-block-mapper.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -17,12 +17,12 @@ export { ReorderBuffer, type ReorderBufferConfig, } from "./reorder-buffer.js";
|
|
|
17
17
|
export { splitToSymbols, recoverFromSymbols, computeK, } from "./cmaf-symbols.js";
|
|
18
18
|
export { splitFrameToSymbol, recoverFrameFromSymbol, } from "./loc-symbols.js";
|
|
19
19
|
export { CmafFecRecovery, type CmafFecRecoveryConfig, type FecDecoder, } from "./cmaf-recovery.js";
|
|
20
|
-
export { buildOTI, buildOTIFromCatalog, parseOTI, computeFecTimeout, deriveFecInterleaveDepth, catalogFecInterleaveMs, type FecInterleaveCatalog, parseRepairPacket, type OTIParams, fecBlockDeadlineMs, fecBlockBudgetMs, deriveFecRetentionBlocks, tryDeriveFecRetentionBlocks, MAX_FEC_RETENTION_BLOCKS, playbackLatencyMs, } from "./oti.js";
|
|
21
|
-
export { FecBlockMapper, NullBlockMapper,
|
|
20
|
+
export { buildOTI, buildOTIFromCatalog, parseOTI, computeFecTimeout, deriveFecInterleaveDepth, catalogFecInterleaveMs, type FecInterleaveCatalog, parseRepairPacket, type OTIParams, fecBlockDeadlineMs, fecBlockBudgetMs, deriveFecRetentionBlocks, tryDeriveFecRetentionBlocks, MAX_FEC_RETENTION_BLOCKS, LOCAL_FEC_RETENTION_BLOCKS, LOCAL_FEC_TIMEOUT_MS, playbackLatencyMs, } from "./oti.js";
|
|
21
|
+
export { FecBlockMapper, NullBlockMapper, createMapper, recoveredPacketMediaGroup, type FecBlockConfig, type FecCoordinates, } from "./fec-block-mapper.js";
|
|
22
22
|
/**
|
|
23
23
|
* MoQ repair group ids for `iso-ssbg1-v1` blocks: the 62-bit
|
|
24
24
|
* wrap-epoch-extended SS_Start, the repair FETCH range for a lost SS_ID, and
|
|
25
25
|
* the check a received repair object's Group ID must pass.
|
|
26
26
|
*/
|
|
27
|
-
export { extSsStart, extendSsId, repairFetchRange, repairGroupIdMatches, type RepairFetchAnchor, type RepairFetchRange, } from "./repair-group.js";
|
|
27
|
+
export { extSsStart, extendSsId, repairFetchRange, repairGroupIdMatches, RepairEpochReferences, type RepairEpochStats, type RepairFetchAnchor, type RepairFetchRange, type RepairGroupPlan, type RepairLargestOutcome, } from "./repair-group.js";
|
|
28
28
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACN,eAAe,EACf,SAAS,EACT,KAAK,QAAQ,EACb,KAAK,sBAAsB,EAC3B,KAAK,aAAa,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACN,eAAe,EACf,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,GAC5B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACN,aAAa,EACb,KAAK,mBAAmB,GACxB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACN,cAAc,EACd,kBAAkB,EAClB,QAAQ,GACR,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACN,kBAAkB,EAClB,sBAAsB,GACtB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACN,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,UAAU,GACf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACN,QAAQ,EACR,mBAAmB,EACnB,QAAQ,EACR,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,EACtB,KAAK,oBAAoB,EACzB,iBAAiB,EACjB,KAAK,SAAS,EACd,kBAAkB,EAClB,gBAAgB,EAChB,wBAAwB,EACxB,2BAA2B,EAC3B,wBAAwB,EACxB,iBAAiB,GACjB,MAAM,UAAU,CAAC;AAElB,OAAO,EACN,cAAc,EACd,eAAe,EACf,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACN,eAAe,EACf,SAAS,EACT,KAAK,QAAQ,EACb,KAAK,sBAAsB,EAC3B,KAAK,aAAa,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACN,eAAe,EACf,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,GAC5B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACN,aAAa,EACb,KAAK,mBAAmB,GACxB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACN,cAAc,EACd,kBAAkB,EAClB,QAAQ,GACR,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACN,kBAAkB,EAClB,sBAAsB,GACtB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACN,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,UAAU,GACf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACN,QAAQ,EACR,mBAAmB,EACnB,QAAQ,EACR,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,EACtB,KAAK,oBAAoB,EACzB,iBAAiB,EACjB,KAAK,SAAS,EACd,kBAAkB,EAClB,gBAAgB,EAChB,wBAAwB,EACxB,2BAA2B,EAC3B,wBAAwB,EACxB,0BAA0B,EAC1B,oBAAoB,EACpB,iBAAiB,GACjB,MAAM,UAAU,CAAC;AAElB,OAAO,EACN,cAAc,EACd,eAAe,EACf,YAAY,EACZ,yBAAyB,EACzB,KAAK,cAAc,EACnB,KAAK,cAAc,GACnB,MAAM,uBAAuB,CAAC;AAE/B;;;;GAIG;AACH,OAAO,EACN,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,oBAAoB,GACzB,MAAM,mBAAmB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -17,12 +17,12 @@ export { ReorderBuffer, } from "./reorder-buffer.js";
|
|
|
17
17
|
export { splitToSymbols, recoverFromSymbols, computeK, } from "./cmaf-symbols.js";
|
|
18
18
|
export { splitFrameToSymbol, recoverFrameFromSymbol, } from "./loc-symbols.js";
|
|
19
19
|
export { CmafFecRecovery, } from "./cmaf-recovery.js";
|
|
20
|
-
export { buildOTI, buildOTIFromCatalog, parseOTI, computeFecTimeout, deriveFecInterleaveDepth, catalogFecInterleaveMs, parseRepairPacket, fecBlockDeadlineMs, fecBlockBudgetMs, deriveFecRetentionBlocks, tryDeriveFecRetentionBlocks, MAX_FEC_RETENTION_BLOCKS, playbackLatencyMs, } from "./oti.js";
|
|
21
|
-
export { FecBlockMapper, NullBlockMapper,
|
|
20
|
+
export { buildOTI, buildOTIFromCatalog, parseOTI, computeFecTimeout, deriveFecInterleaveDepth, catalogFecInterleaveMs, parseRepairPacket, fecBlockDeadlineMs, fecBlockBudgetMs, deriveFecRetentionBlocks, tryDeriveFecRetentionBlocks, MAX_FEC_RETENTION_BLOCKS, LOCAL_FEC_RETENTION_BLOCKS, LOCAL_FEC_TIMEOUT_MS, playbackLatencyMs, } from "./oti.js";
|
|
21
|
+
export { FecBlockMapper, NullBlockMapper, createMapper, recoveredPacketMediaGroup, } from "./fec-block-mapper.js";
|
|
22
22
|
/**
|
|
23
23
|
* MoQ repair group ids for `iso-ssbg1-v1` blocks: the 62-bit
|
|
24
24
|
* wrap-epoch-extended SS_Start, the repair FETCH range for a lost SS_ID, and
|
|
25
25
|
* the check a received repair object's Group ID must pass.
|
|
26
26
|
*/
|
|
27
|
-
export { extSsStart, extendSsId, repairFetchRange, repairGroupIdMatches, } from "./repair-group.js";
|
|
27
|
+
export { extSsStart, extendSsId, repairFetchRange, repairGroupIdMatches, RepairEpochReferences, } from "./repair-group.js";
|
|
28
28
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACN,eAAe,EACf,SAAS,GAIT,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACN,eAAe,EACf,gBAAgB,GAKhB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACN,aAAa,GAEb,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACN,cAAc,EACd,kBAAkB,EAClB,QAAQ,GACR,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACN,kBAAkB,EAClB,sBAAsB,GACtB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACN,eAAe,GAGf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACN,QAAQ,EACR,mBAAmB,EACnB,QAAQ,EACR,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,EAEtB,iBAAiB,EAEjB,kBAAkB,EAClB,gBAAgB,EAChB,wBAAwB,EACxB,2BAA2B,EAC3B,wBAAwB,EACxB,iBAAiB,GACjB,MAAM,UAAU,CAAC;AAElB,OAAO,EACN,cAAc,EACd,eAAe,EACf,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACN,eAAe,EACf,SAAS,GAIT,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACN,eAAe,EACf,gBAAgB,GAKhB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACN,aAAa,GAEb,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACN,cAAc,EACd,kBAAkB,EAClB,QAAQ,GACR,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACN,kBAAkB,EAClB,sBAAsB,GACtB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACN,eAAe,GAGf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACN,QAAQ,EACR,mBAAmB,EACnB,QAAQ,EACR,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,EAEtB,iBAAiB,EAEjB,kBAAkB,EAClB,gBAAgB,EAChB,wBAAwB,EACxB,2BAA2B,EAC3B,wBAAwB,EACxB,0BAA0B,EAC1B,oBAAoB,EACpB,iBAAiB,GACjB,MAAM,UAAU,CAAC;AAElB,OAAO,EACN,cAAc,EACd,eAAe,EACf,YAAY,EACZ,yBAAyB,GAGzB,MAAM,uBAAuB,CAAC;AAE/B;;;;GAIG;AACH,OAAO,EACN,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,GAMrB,MAAM,mBAAmB,CAAC"}
|
package/dist/oti.d.ts
CHANGED
|
@@ -44,15 +44,16 @@ export declare function parseOTI(oti: Uint8Array): OTIParams & {
|
|
|
44
44
|
* Resolve a catalog FEC block's span in milliseconds.
|
|
45
45
|
*
|
|
46
46
|
* The catalog carries exactly ONE interleave field: `interleaveDepthMs`, the
|
|
47
|
-
* full FEC block span in MILLISECONDS (draft-ramadan-moq-fec §5.1).
|
|
48
|
-
*
|
|
49
|
-
*
|
|
47
|
+
* full FEC block send span in MILLISECONDS (draft-ramadan-moq-fec §5.1).
|
|
48
|
+
* Block boundaries still come from the wire's SS_Start and SSB_length; this
|
|
49
|
+
* field never supplies a group count or replaces those coordinates.
|
|
50
50
|
*
|
|
51
|
-
* Absent
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
51
|
+
* Absent → undefined. An explicit zero is returned as zero: it is the
|
|
52
|
+
* catalog's no-elapsed-deadline sentinel, not an invitation to infer a span.
|
|
53
|
+
* Positive values must be safe integer milliseconds. Finiteness is checked
|
|
54
|
+
* separately from the range because `Infinity` satisfies `> 0`: a JSON catalog
|
|
55
|
+
* cannot spell `Infinity`, but any overflowing literal (`1e999`) parses to it,
|
|
56
|
+
* and it would then reach `fecBlockBudgetMs` as an unbounded span. The legacy
|
|
56
57
|
* `interleaveDepth` frame-count key and
|
|
57
58
|
* the `interleaveMs` alias were removed in the BLO-14526 clean cut — producers
|
|
58
59
|
* emit milliseconds only, and there is deliberately NO fallback read.
|
|
@@ -209,6 +210,14 @@ export declare function deriveFecRetentionBlocks(deliveryWindowMs: number, inter
|
|
|
209
210
|
* anywhere else.
|
|
210
211
|
*/
|
|
211
212
|
export declare const MAX_FEC_RETENTION_BLOCKS = 255;
|
|
213
|
+
/**
|
|
214
|
+
* Receiver-local block retention used when the catalog carries no elapsed-time
|
|
215
|
+
* FEC window. This is a memory/cleanup bound only; it is never derived from
|
|
216
|
+
* media rate and never treated as a catalog deadline.
|
|
217
|
+
*/
|
|
218
|
+
export declare const LOCAL_FEC_RETENTION_BLOCKS = 2;
|
|
219
|
+
/** Receiver-local cleanup budget used when the catalog has no elapsed span. */
|
|
220
|
+
export declare const LOCAL_FEC_TIMEOUT_MS = 500;
|
|
212
221
|
/**
|
|
213
222
|
* `deriveFecRetentionBlocks` without the throw: the block count, or `undefined`
|
|
214
223
|
* when the geometry cannot define one.
|
package/dist/oti.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oti.d.ts","sourceRoot":"","sources":["../src/oti.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,SAAS;IACzB,2DAA2D;IAC3D,cAAc,EAAE,MAAM,CAAC;IACvB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,UAAU,CAwBtD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,CAWpE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,UAAU,GAAG,SAAS,GAAG;IAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAYnE;AAwBD
|
|
1
|
+
{"version":3,"file":"oti.d.ts","sourceRoot":"","sources":["../src/oti.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,SAAS;IACzB,2DAA2D;IAC3D,cAAc,EAAE,MAAM,CAAC;IACvB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,UAAU,CAwBtD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,CAWpE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,UAAU,GAAG,SAAS,GAAG;IAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAYnE;AAwBD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,oBAAoB,GAAG;IAClC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,wBAAgB,sBAAsB,CACrC,GAAG,EAAE,oBAAoB,GAAG,SAAS,GACnC,MAAM,GAAG,SAAS,CAGpB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CACvC,iBAAiB,EAAE,MAAM,EACzB,mBAAmB,EAAE,MAAM,GACzB,MAAM,CAQR;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,iBAAiB,CAChC,iBAAiB,EAAE,MAAM,EACzB,YAAY,GAAE,MAAY,GACxB,MAAM,CAkBR;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE;IAC1C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;CAC3B,GAAG,MAAM,CAMT;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,iBAAiB,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,MAAM,CAkB9F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AACH,wBAAgB,wBAAwB,CACvC,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,MAAM,GACvB,MAAM,CAmCR;AAED;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,MAAO,CAAC;AAE7C;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAE5C,+EAA+E;AAC/E,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CAC1C,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,MAAM,GACvB,MAAM,GAAG,SAAS,CAKpB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAYtG;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG;IACtD,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,UAAU,CAAC;CACzE,GAAG,IAAI,CASP"}
|
package/dist/oti.js
CHANGED
|
@@ -93,7 +93,7 @@ function validateOTIFields(F, T, Z, N, Al) {
|
|
|
93
93
|
}
|
|
94
94
|
export function catalogFecInterleaveMs(fec) {
|
|
95
95
|
const ms = fec?.interleaveDepthMs;
|
|
96
|
-
return typeof ms === "number" &&
|
|
96
|
+
return typeof ms === "number" && Number.isSafeInteger(ms) && ms >= 0 ? ms : undefined;
|
|
97
97
|
}
|
|
98
98
|
/**
|
|
99
99
|
* Derive the integer FEC interleave depth D from a catalog block span and the
|
|
@@ -314,6 +314,14 @@ export function deriveFecRetentionBlocks(deliveryWindowMs, interleaveDepthMs) {
|
|
|
314
314
|
* anywhere else.
|
|
315
315
|
*/
|
|
316
316
|
export const MAX_FEC_RETENTION_BLOCKS = 0xff;
|
|
317
|
+
/**
|
|
318
|
+
* Receiver-local block retention used when the catalog carries no elapsed-time
|
|
319
|
+
* FEC window. This is a memory/cleanup bound only; it is never derived from
|
|
320
|
+
* media rate and never treated as a catalog deadline.
|
|
321
|
+
*/
|
|
322
|
+
export const LOCAL_FEC_RETENTION_BLOCKS = 2;
|
|
323
|
+
/** Receiver-local cleanup budget used when the catalog has no elapsed span. */
|
|
324
|
+
export const LOCAL_FEC_TIMEOUT_MS = 500;
|
|
317
325
|
/**
|
|
318
326
|
* `deriveFecRetentionBlocks` without the throw: the block count, or `undefined`
|
|
319
327
|
* when the geometry cannot define one.
|
package/dist/oti.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oti.js","sourceRoot":"","sources":["../src/oti.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"oti.js","sourceRoot":"","sources":["../src/oti.ts"],"names":[],"mappings":"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"}
|
package/dist/repair-group.d.ts
CHANGED
|
@@ -79,4 +79,90 @@ export declare function repairFetchRange(lostSsId: number, kMax: number, anchor:
|
|
|
79
79
|
* a 62-bit group id
|
|
80
80
|
*/
|
|
81
81
|
export declare function repairGroupIdMatches(groupId: bigint, ssStart: number, reference?: bigint): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* What a repair FETCH for one block names, or why none is sent: an
|
|
84
|
+
* `iso-ssbg1-v1` block's repair group is the one Group `ext(SS_Start)`
|
|
85
|
+
* (draft-ramadan-moq-fec §7.5).
|
|
86
|
+
*
|
|
87
|
+
* - `no-epoch`: no reference is established for the repair track on this
|
|
88
|
+
* session, so there is no range to request until one is (§7.5).
|
|
89
|
+
* - `epoch-unbounded`: SS_Start is exactly 2^31 from the reference, or
|
|
90
|
+
* extends outside [0, 2^62). The reference is dropped so the next one
|
|
91
|
+
* re-establishes it.
|
|
92
|
+
* - `stale-session`: the request names a session other than the bound one.
|
|
93
|
+
*/
|
|
94
|
+
export type RepairGroupPlan = {
|
|
95
|
+
readonly group: bigint;
|
|
96
|
+
} | {
|
|
97
|
+
readonly reason: "no-epoch" | "epoch-unbounded" | "stale-session";
|
|
98
|
+
};
|
|
99
|
+
/** Outcome of reporting a repair track's Largest Location (§7.5 way 2). */
|
|
100
|
+
export type RepairLargestOutcome = "established" | "advanced" | "redundant" | "absent" | "stale-session";
|
|
101
|
+
/**
|
|
102
|
+
* Counted outcomes of {@link RepairEpochReferences}. A successful
|
|
103
|
+
* {@link RepairEpochReferences.repairGroup} and a same-session `bind` are not
|
|
104
|
+
* counted.
|
|
105
|
+
*/
|
|
106
|
+
export interface RepairEpochStats {
|
|
107
|
+
establishedFromLargest: number;
|
|
108
|
+
advancedFromLargest: number;
|
|
109
|
+
largestAbsent: number;
|
|
110
|
+
largestRedundant: number;
|
|
111
|
+
establishedFromGroupId: number;
|
|
112
|
+
admitted: number;
|
|
113
|
+
discarded: number;
|
|
114
|
+
declinedNoEpoch: number;
|
|
115
|
+
epochUnbounded: number;
|
|
116
|
+
staleSession: number;
|
|
117
|
+
sessionResets: number;
|
|
118
|
+
streamResets: number;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* The wrap-epoch reference `r` of each repair track, for one MoQ session
|
|
122
|
+
* (draft-ramadan-moq-fec §7.5). Shared by every native receiver adapter; the
|
|
123
|
+
* adapter owns its MoQ verbs and passes its session as an opaque object.
|
|
124
|
+
*
|
|
125
|
+
* - The adapter calls {@link bind} with the session it holds live, at the
|
|
126
|
+
* synchronous point it reads it. A different session drops every reference:
|
|
127
|
+
* the SS_IDs between a reconnection and the last reference cannot be bounded
|
|
128
|
+
* below 2^31. {@link clear} does the same for a stream or track reset.
|
|
129
|
+
* - Every other call names the session it acts for, and one naming a session
|
|
130
|
+
* other than the bound one changes nothing (`stale-session`). An async
|
|
131
|
+
* continuation that outlived its session therefore cannot install that
|
|
132
|
+
* session's reference, nor wipe the live session's.
|
|
133
|
+
* - `r` is established from a non-discarded repair object's Group ID (way 1,
|
|
134
|
+
* {@link admit}) or a Largest Location (way 2), and only ever advances to a
|
|
135
|
+
* newer Group, so it stays near the live edge for the life of the session.
|
|
136
|
+
* Epoch 0 (way 3) needs proof of observing the instance's first block, which
|
|
137
|
+
* nothing on the wire carries (SS_IDs start anywhere, C.5.2); it is not used.
|
|
138
|
+
*/
|
|
139
|
+
export declare class RepairEpochReferences {
|
|
140
|
+
#private;
|
|
141
|
+
readonly stats: RepairEpochStats;
|
|
142
|
+
/** Make `session` the live one; a different session drops every reference. */
|
|
143
|
+
bind(session: object): void;
|
|
144
|
+
/** Drop every reference: the stream or track was reset. */
|
|
145
|
+
clear(): void;
|
|
146
|
+
/** `r` of `repairTrack` on `session`; undefined when none, or the session is not the bound one. */
|
|
147
|
+
reference(session: object, repairTrack: string): bigint | undefined;
|
|
148
|
+
/**
|
|
149
|
+
* §7.5 way 2: the Largest Location reported for `repairTrack`, whose Group
|
|
150
|
+
* is ext(SS_Start) of the newest repair block. Undefined means an empty
|
|
151
|
+
* track and establishes nothing.
|
|
152
|
+
*
|
|
153
|
+
* @throws RangeError when the Group is not a 62-bit MoQ group id
|
|
154
|
+
*/
|
|
155
|
+
establishFromLargestLocation(session: object, repairTrack: string, largestGroup: bigint | undefined): RepairLargestOutcome;
|
|
156
|
+
/**
|
|
157
|
+
* Screen one repair object received over MoQ (§7.5): false means discard
|
|
158
|
+
* it, leaving every block's state unchanged. An admitted object's Group ID
|
|
159
|
+
* establishes `r` when none is held (way 1) and advances it when newer.
|
|
160
|
+
*/
|
|
161
|
+
admit(session: object, repairTrack: string, groupId: bigint, ssStart: number): boolean;
|
|
162
|
+
/**
|
|
163
|
+
* The repair group of the `iso-ssbg1-v1` block starting at `ssStart`, the
|
|
164
|
+
* scheduler's `RepairFetchRequest.sbn`: the one Group ext(SS_Start).
|
|
165
|
+
*/
|
|
166
|
+
repairGroup(session: object, repairTrack: string, ssStart: number): RepairGroupPlan;
|
|
167
|
+
}
|
|
82
168
|
//# sourceMappingURL=repair-group.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repair-group.d.ts","sourceRoot":"","sources":["../src/repair-group.ts"],"names":[],"mappings":"AAwDA;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAMrE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAmBlE;AAED,iEAAiE;AACjE,MAAM,WAAW,gBAAgB;IAChC,gCAAgC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,wDAAwD;IACxD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC1B;AAED,uEAAuE;AACvE,MAAM,MAAM,iBAAiB;AAC5B;;;iEAGiE;AAC/D;IAAE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE;AACzC;0DAC0D;GACxD;IAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAElC;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,gBAAgB,CAqB5G;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAWlG"}
|
|
1
|
+
{"version":3,"file":"repair-group.d.ts","sourceRoot":"","sources":["../src/repair-group.ts"],"names":[],"mappings":"AAwDA;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAMrE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAmBlE;AAED,iEAAiE;AACjE,MAAM,WAAW,gBAAgB;IAChC,gCAAgC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,wDAAwD;IACxD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC1B;AAED,uEAAuE;AACvE,MAAM,MAAM,iBAAiB;AAC5B;;;iEAGiE;AAC/D;IAAE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE;AACzC;0DAC0D;GACxD;IAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAElC;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,gBAAgB,CAqB5G;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAWlG;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,eAAe,GACxB;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1B;IAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,iBAAiB,GAAG,eAAe,CAAA;CAAE,CAAC;AAEzE,2EAA2E;AAC3E,MAAM,MAAM,oBAAoB,GAAG,aAAa,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,eAAe,CAAC;AAEzG;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAChC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,qBAAqB;;IACjC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAa9B;IAIF,8EAA8E;IAC9E,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAS3B,2DAA2D;IAC3D,KAAK,IAAI,IAAI;IAKb,mGAAmG;IACnG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAUnE;;;;;;OAMG;IACH,4BAA4B,CAC3B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GAAG,SAAS,GAC9B,oBAAoB;IAqBvB;;;;OAIG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAatF;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe;CAiBnF"}
|
package/dist/repair-group.js
CHANGED
|
@@ -167,4 +167,139 @@ export function repairGroupIdMatches(groupId, ssStart, reference) {
|
|
|
167
167
|
return false;
|
|
168
168
|
}
|
|
169
169
|
}
|
|
170
|
+
/**
|
|
171
|
+
* The wrap-epoch reference `r` of each repair track, for one MoQ session
|
|
172
|
+
* (draft-ramadan-moq-fec §7.5). Shared by every native receiver adapter; the
|
|
173
|
+
* adapter owns its MoQ verbs and passes its session as an opaque object.
|
|
174
|
+
*
|
|
175
|
+
* - The adapter calls {@link bind} with the session it holds live, at the
|
|
176
|
+
* synchronous point it reads it. A different session drops every reference:
|
|
177
|
+
* the SS_IDs between a reconnection and the last reference cannot be bounded
|
|
178
|
+
* below 2^31. {@link clear} does the same for a stream or track reset.
|
|
179
|
+
* - Every other call names the session it acts for, and one naming a session
|
|
180
|
+
* other than the bound one changes nothing (`stale-session`). An async
|
|
181
|
+
* continuation that outlived its session therefore cannot install that
|
|
182
|
+
* session's reference, nor wipe the live session's.
|
|
183
|
+
* - `r` is established from a non-discarded repair object's Group ID (way 1,
|
|
184
|
+
* {@link admit}) or a Largest Location (way 2), and only ever advances to a
|
|
185
|
+
* newer Group, so it stays near the live edge for the life of the session.
|
|
186
|
+
* Epoch 0 (way 3) needs proof of observing the instance's first block, which
|
|
187
|
+
* nothing on the wire carries (SS_IDs start anywhere, C.5.2); it is not used.
|
|
188
|
+
*/
|
|
189
|
+
export class RepairEpochReferences {
|
|
190
|
+
stats = {
|
|
191
|
+
establishedFromLargest: 0,
|
|
192
|
+
advancedFromLargest: 0,
|
|
193
|
+
largestAbsent: 0,
|
|
194
|
+
largestRedundant: 0,
|
|
195
|
+
establishedFromGroupId: 0,
|
|
196
|
+
admitted: 0,
|
|
197
|
+
discarded: 0,
|
|
198
|
+
declinedNoEpoch: 0,
|
|
199
|
+
epochUnbounded: 0,
|
|
200
|
+
staleSession: 0,
|
|
201
|
+
sessionResets: 0,
|
|
202
|
+
streamResets: 0,
|
|
203
|
+
};
|
|
204
|
+
#session;
|
|
205
|
+
#references = new Map();
|
|
206
|
+
/** Make `session` the live one; a different session drops every reference. */
|
|
207
|
+
bind(session) {
|
|
208
|
+
if (this.#session === session)
|
|
209
|
+
return;
|
|
210
|
+
if (this.#session !== undefined) {
|
|
211
|
+
this.#references.clear();
|
|
212
|
+
this.stats.sessionResets++;
|
|
213
|
+
}
|
|
214
|
+
this.#session = session;
|
|
215
|
+
}
|
|
216
|
+
/** Drop every reference: the stream or track was reset. */
|
|
217
|
+
clear() {
|
|
218
|
+
this.#references.clear();
|
|
219
|
+
this.stats.streamResets++;
|
|
220
|
+
}
|
|
221
|
+
/** `r` of `repairTrack` on `session`; undefined when none, or the session is not the bound one. */
|
|
222
|
+
reference(session, repairTrack) {
|
|
223
|
+
return session === this.#session ? this.#references.get(repairTrack) : undefined;
|
|
224
|
+
}
|
|
225
|
+
#live(session) {
|
|
226
|
+
if (session === this.#session)
|
|
227
|
+
return true;
|
|
228
|
+
this.stats.staleSession++;
|
|
229
|
+
return false;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* §7.5 way 2: the Largest Location reported for `repairTrack`, whose Group
|
|
233
|
+
* is ext(SS_Start) of the newest repair block. Undefined means an empty
|
|
234
|
+
* track and establishes nothing.
|
|
235
|
+
*
|
|
236
|
+
* @throws RangeError when the Group is not a 62-bit MoQ group id
|
|
237
|
+
*/
|
|
238
|
+
establishFromLargestLocation(session, repairTrack, largestGroup) {
|
|
239
|
+
if (largestGroup !== undefined)
|
|
240
|
+
assertGroupId(largestGroup, "Largest Location Group");
|
|
241
|
+
if (!this.#live(session))
|
|
242
|
+
return "stale-session";
|
|
243
|
+
if (largestGroup === undefined) {
|
|
244
|
+
this.stats.largestAbsent++;
|
|
245
|
+
return "absent";
|
|
246
|
+
}
|
|
247
|
+
const held = this.#references.get(repairTrack);
|
|
248
|
+
if (held !== undefined && largestGroup <= held) {
|
|
249
|
+
this.stats.largestRedundant++;
|
|
250
|
+
return "redundant";
|
|
251
|
+
}
|
|
252
|
+
this.#references.set(repairTrack, largestGroup);
|
|
253
|
+
if (held === undefined) {
|
|
254
|
+
this.stats.establishedFromLargest++;
|
|
255
|
+
return "established";
|
|
256
|
+
}
|
|
257
|
+
this.stats.advancedFromLargest++;
|
|
258
|
+
return "advanced";
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Screen one repair object received over MoQ (§7.5): false means discard
|
|
262
|
+
* it, leaving every block's state unchanged. An admitted object's Group ID
|
|
263
|
+
* establishes `r` when none is held (way 1) and advances it when newer.
|
|
264
|
+
*/
|
|
265
|
+
admit(session, repairTrack, groupId, ssStart) {
|
|
266
|
+
if (!this.#live(session))
|
|
267
|
+
return false;
|
|
268
|
+
const held = this.#references.get(repairTrack);
|
|
269
|
+
if (!repairGroupIdMatches(groupId, ssStart, held)) {
|
|
270
|
+
this.stats.discarded++;
|
|
271
|
+
return false;
|
|
272
|
+
}
|
|
273
|
+
this.stats.admitted++;
|
|
274
|
+
if (held === undefined)
|
|
275
|
+
this.stats.establishedFromGroupId++;
|
|
276
|
+
if (held === undefined || groupId > held)
|
|
277
|
+
this.#references.set(repairTrack, groupId);
|
|
278
|
+
return true;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* The repair group of the `iso-ssbg1-v1` block starting at `ssStart`, the
|
|
282
|
+
* scheduler's `RepairFetchRequest.sbn`: the one Group ext(SS_Start).
|
|
283
|
+
*/
|
|
284
|
+
repairGroup(session, repairTrack, ssStart) {
|
|
285
|
+
assertSsId(ssStart, "ssStart");
|
|
286
|
+
if (!this.#live(session))
|
|
287
|
+
return { reason: "stale-session" };
|
|
288
|
+
const reference = this.#references.get(repairTrack);
|
|
289
|
+
if (reference === undefined) {
|
|
290
|
+
this.stats.declinedNoEpoch++;
|
|
291
|
+
return { reason: "no-epoch" };
|
|
292
|
+
}
|
|
293
|
+
try {
|
|
294
|
+
return { group: extendSsId(reference, ssStart) };
|
|
295
|
+
}
|
|
296
|
+
catch (error) {
|
|
297
|
+
if (!(error instanceof RangeError))
|
|
298
|
+
throw error;
|
|
299
|
+
this.#references.delete(repairTrack);
|
|
300
|
+
this.stats.epochUnbounded++;
|
|
301
|
+
return { reason: "epoch-unbounded" };
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
170
305
|
//# sourceMappingURL=repair-group.js.map
|
package/dist/repair-group.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repair-group.js","sourceRoot":"","sources":["../src/repair-group.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"repair-group.js","sourceRoot":"","sources":["../src/repair-group.ts"],"names":[],"mappings":"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"}
|