@blockcast/mmt-container 2.2.0-main.73af0eedcbc8 → 2.2.0-main.75b39a2cdddf
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 +29 -17
- package/dist/browser-runtime.js +1001 -215
- package/dist/browser-runtime.js.map +4 -4
- package/dist/carp-catalog.js.map +1 -1
- package/dist/catalog-fec-params.d.ts +17 -1
- package/dist/catalog-fec-params.d.ts.map +1 -1
- package/dist/catalog-fec-params.js +15 -0
- package/dist/catalog-fec-params.js.map +2 -2
- package/dist/catalog-network-source.js.map +1 -1
- package/dist/cmcd-producer.d.ts +60 -47
- package/dist/cmcd-producer.d.ts.map +1 -1
- package/dist/cmcd-producer.js +138 -109
- package/dist/cmcd-producer.js.map +2 -2
- package/dist/delivery-catalog.js +26 -16
- package/dist/delivery-catalog.js.map +2 -2
- package/dist/delta-fallback-config.js.map +1 -1
- package/dist/fec-manager.d.ts +33 -1
- package/dist/fec-manager.d.ts.map +1 -1
- package/dist/fec-manager.js +222 -6
- package/dist/fec-manager.js.map +2 -2
- package/dist/fec-state.js.map +1 -1
- package/dist/fec-worker-setup.d.ts +1 -1
- package/dist/fec-worker-setup.js +1 -1
- package/dist/fec-worker-setup.js.map +1 -1
- package/dist/held-layer-admission.js.map +1 -1
- package/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +2 -2
- package/dist/iso-block-locator.d.ts +9 -0
- package/dist/iso-block-locator.d.ts.map +1 -1
- package/dist/iso-block-locator.js +17 -0
- package/dist/iso-block-locator.js.map +2 -2
- package/dist/iso-bmff-timing.d.ts +10 -1
- package/dist/iso-bmff-timing.d.ts.map +1 -1
- package/dist/iso-bmff-timing.js +36 -2
- package/dist/iso-bmff-timing.js.map +2 -2
- package/dist/media-router.js.map +1 -1
- package/dist/mfu-reassembler.js +12 -19
- package/dist/mfu-reassembler.js.map +2 -2
- package/dist/mmtp-container-parser.d.ts +58 -10
- package/dist/mmtp-container-parser.d.ts.map +1 -1
- package/dist/mmtp-container-parser.js +105 -34
- package/dist/mmtp-container-parser.js.map +2 -2
- package/dist/mmtp-container-parser.no-modules.js +229 -51
- package/dist/mmtp-container-parser.no-modules.js.map +3 -3
- package/dist/mmtp-decode-pipeline.js +104 -34
- package/dist/mmtp-decode-pipeline.js.map +2 -2
- package/dist/mmtp-fec-session.d.ts +41 -3
- package/dist/mmtp-fec-session.d.ts.map +1 -1
- package/dist/mmtp-fec-session.js +118 -13
- package/dist/mmtp-fec-session.js.map +3 -3
- package/dist/mmtp-router.d.ts +18 -1
- package/dist/mmtp-router.d.ts.map +1 -1
- package/dist/mmtp-router.js +323 -64
- package/dist/mmtp-router.js.map +2 -2
- package/dist/multicast-auth-catalog.js.map +1 -1
- package/dist/multicast-input.js.map +1 -1
- package/dist/multicast-manager.js +547 -72
- package/dist/multicast-manager.js.map +2 -2
- package/dist/multicast-transport.js +28 -18
- package/dist/multicast-transport.js.map +2 -2
- package/dist/multicast-unwrap.js +12 -19
- package/dist/multicast-unwrap.js.map +2 -2
- package/dist/no-modules.js +222 -48
- package/dist/no-modules.js.map +3 -3
- package/dist/repair-fetch.js.map +1 -1
- package/dist/repair-layer-subscriptions.d.ts +82 -0
- package/dist/repair-layer-subscriptions.d.ts.map +1 -0
- package/dist/repair-layer-subscriptions.js +192 -0
- package/dist/repair-layer-subscriptions.js.map +7 -0
- package/dist/signaling.js.map +1 -1
- package/dist/timestamp-codec.js +12 -19
- package/dist/timestamp-codec.js.map +2 -2
- package/dist/track-session.d.ts +1 -1
- package/dist/track-session.js.map +1 -1
- package/dist/wasm-mfu-reassembler.js.map +1 -1
- package/dist/wasm-mmtp-container-parser.js +104 -34
- package/dist/wasm-mmtp-container-parser.js.map +2 -2
- package/package.json +8 -5
- package/schemas/catalog.schema.json +4 -0
- package/src/catalog-fec-params.ts +36 -1
- package/src/cmcd-producer.ts +189 -179
- package/src/fec-manager.ts +277 -6
- package/src/fec-worker-setup.ts +2 -2
- package/src/index.ts +18 -2
- package/src/iso-block-locator.ts +19 -0
- package/src/iso-bmff-timing.ts +40 -1
- package/src/mmtp-container-parser.ts +125 -19
- package/src/mmtp-fec-session.ts +115 -15
- package/src/mmtp-router.ts +350 -13
- package/src/repair-layer-subscriptions.ts +261 -0
- package/src/track-session.ts +1 -1
|
@@ -198,7 +198,10 @@ export interface FecReleaseGate {
|
|
|
198
198
|
export interface MmtpTimingBudgetStats {
|
|
199
199
|
/** Slots currently charged to declared-but-undelivered samples. */
|
|
200
200
|
pending: number;
|
|
201
|
-
/**
|
|
201
|
+
/**
|
|
202
|
+
* Slots each stream's window holds (`maxBufferedMfus`). A stream at
|
|
203
|
+
* capacity displaces its own oldest timing; `pending` sums every stream.
|
|
204
|
+
*/
|
|
202
205
|
capacity: number;
|
|
203
206
|
/** Slots returned by samples the combiner abandoned (evicted or timed out). */
|
|
204
207
|
reclaimed: number;
|
|
@@ -209,7 +212,13 @@ export interface MmtpTimingBudgetStats {
|
|
|
209
212
|
* up, `evicted` is loss that was never observable at all.
|
|
210
213
|
*/
|
|
211
214
|
evicted: number;
|
|
212
|
-
/**
|
|
215
|
+
/**
|
|
216
|
+
* Movie fragments refused because the budget had no room for their samples.
|
|
217
|
+
* Stays 0 with a window per stream (BLO-52085): a stream at capacity
|
|
218
|
+
* displaces its own oldest timing to make room, and a moof declaring more
|
|
219
|
+
* samples than a whole window holds is refused as invalid before any budget
|
|
220
|
+
* is consulted. Kept as a guard, and because it is public.
|
|
221
|
+
*/
|
|
213
222
|
rejectedMovieFragments: number;
|
|
214
223
|
}
|
|
215
224
|
export interface MmtpReorderStats {
|
|
@@ -299,9 +308,23 @@ export type MmtpFeedDropReason =
|
|
|
299
308
|
/** MPU present but not a timed MFU, so no media payload to reassemble. */
|
|
300
309
|
| 'untimed-mpu' | 'init-unexpected-fragmentation' | 'init-normalize-failed'
|
|
301
310
|
/** No timing resolver, or it refused the initialization segment. */
|
|
302
|
-
| 'init-timing-refused' | 'fragment-unexpected-fragmentation'
|
|
303
|
-
/**
|
|
304
|
-
| 'fragment-
|
|
311
|
+
| 'init-timing-refused' | 'fragment-unexpected-fragmentation'
|
|
312
|
+
/** FT=1 before an FT=0 has bound the stream's timing track. */
|
|
313
|
+
| 'fragment-no-resolver'
|
|
314
|
+
/** addMovieFragment refused: the moof does not parse against the stream's
|
|
315
|
+
* track, conflicts with a pending copy of itself, or repeats a pending
|
|
316
|
+
* copy whose samples are partly consumed. Never the timing budget: a full
|
|
317
|
+
* window displaces the stream's own oldest timing. */
|
|
318
|
+
| 'fragment-timing-refused' | 'unknown-fragment-type'
|
|
319
|
+
/** Stable code, no longer produced: an FT=2 with no timing (before the
|
|
320
|
+
* stream's first FT=0, or after setTrack dropped it) now waits for its
|
|
321
|
+
* timing like one whose FT=1 has not arrived. A head counts as
|
|
322
|
+
* `drop:mfu-sample-timing-missing` (parked) and a FI=2/FI=3 continuation
|
|
323
|
+
* as the `pending` record. A continuation that completes a head the
|
|
324
|
+
* reassembler buffered before the timing was dropped counts as
|
|
325
|
+
* `drop:assembled-timing-missing`. A panel keyed on this code reads zero:
|
|
326
|
+
* a re-attribution, not lost coverage. Re-key on both drop codes. */
|
|
327
|
+
| 'mfu-no-resolver' | 'mfu-empty-payload' | 'mfu-du-header-missing' | 'mfu-sample-timing-missing' | 'mfu-offset-out-of-range' | 'mfu-size-mismatch' | 'assembled-identity-missing' | 'assembled-timing-missing' | 'assembled-mpu-mismatch'
|
|
305
328
|
/**
|
|
306
329
|
* Refusals inside the combined-sample delivery step, which runs after the
|
|
307
330
|
* combiner has already produced a whole sample. These are distinct from
|
|
@@ -395,6 +418,26 @@ export interface ParseHeaderOptions {
|
|
|
395
418
|
/** FEC source block this packet belongs to (FEC-protected packets only). */
|
|
396
419
|
fecSbn?: number;
|
|
397
420
|
}
|
|
421
|
+
/** Authored decode-time adjacency: the next frame starts where this one ends. */
|
|
422
|
+
export declare function authoredAdjacent(before: Pick<FrameMeta, 'authoredTiming'>, after: Pick<FrameMeta, 'authoredTiming'>): boolean;
|
|
423
|
+
/** FEC-recovered heads that went through the awaiting-timing queue. Every
|
|
424
|
+
* count but `pending` is cumulative. A held head is pending or has left the
|
|
425
|
+
* queue exactly once, so `held - expired - discarded - superseded - pending`
|
|
426
|
+
* is the number fed again once their FT=1 landed. That feed can still refuse
|
|
427
|
+
* one (size, offset, dispose from a frame callback); the refusal is counted in
|
|
428
|
+
* `feedStats.deferredOutcomes`, not here. */
|
|
429
|
+
export interface MmtpRecoveredHeadTimingStats {
|
|
430
|
+
/** Held because their sample's FT=1 had not arrived yet. */
|
|
431
|
+
held: number;
|
|
432
|
+
/** Left without timing: the reassembler-timeout deadline, or pushed out by the queue's capacity. */
|
|
433
|
+
expired: number;
|
|
434
|
+
/** Dropped with their stream (track reconfigure, reset or retire) or by dispose(). */
|
|
435
|
+
discarded: number;
|
|
436
|
+
/** Gave way to their arriving source copy, which takes their place in the queue. */
|
|
437
|
+
superseded: number;
|
|
438
|
+
/** In the queue now; current occupancy, not cumulative. */
|
|
439
|
+
pending: number;
|
|
440
|
+
}
|
|
398
441
|
export declare class MmtpContainerParser {
|
|
399
442
|
#private;
|
|
400
443
|
constructor(config?: MmtpParserConfig);
|
|
@@ -417,13 +460,16 @@ export declare class MmtpContainerParser {
|
|
|
417
460
|
/**
|
|
418
461
|
* Typed view of the ISO-BMFF timing-sample budget.
|
|
419
462
|
*
|
|
420
|
-
*
|
|
421
|
-
*
|
|
422
|
-
*
|
|
423
|
-
*
|
|
424
|
-
*
|
|
463
|
+
* Each stream admits timing against its own window of `capacity` slots
|
|
464
|
+
* (BLO-52085). A stream at capacity displaces its own oldest timing to
|
|
465
|
+
* admit the moof in hand, and `evicted` counts the slots so displaced:
|
|
466
|
+
* timing a stream declared and never delivered shows up there. `pending`
|
|
467
|
+
* sums every stream, so it can exceed `capacity`. Per repo policy this is
|
|
468
|
+
* a producer-owned counter -- never infer budget state by parsing logs.
|
|
425
469
|
*/
|
|
426
470
|
get timingBudgetStats(): Readonly<MmtpTimingBudgetStats>;
|
|
471
|
+
/** Recovered heads parked for FT=1 timing (BLO-53369). Survives dispose(). */
|
|
472
|
+
get recoveredHeadsAwaitingTiming(): Readonly<MmtpRecoveredHeadTimingStats>;
|
|
427
473
|
get reorderStats(): Readonly<MmtpReorderStats>;
|
|
428
474
|
/**
|
|
429
475
|
* Install (or remove) the in-order release policy for FEC-protected
|
|
@@ -561,6 +607,8 @@ export declare class MmtpContainerParser {
|
|
|
561
607
|
* used by source packets. FEC recovery uses this to merge recovered frames
|
|
562
608
|
* with direct source frames before the decoder sees them. */
|
|
563
609
|
routeFrame(data: Uint8Array, meta: FrameMeta): void;
|
|
610
|
+
/** Whether FT=1 metadata already names this sample, without claiming it. */
|
|
611
|
+
hasAuthoredTimingFor(packetId: number, mpuSequenceNumber: number, movieFragmentSequenceNumber: number, sampleNumber: number, catalogTrackName?: string): boolean;
|
|
564
612
|
/**
|
|
565
613
|
* Claim and return the authored timing for a recovered sample. Recovery does
|
|
566
614
|
* not pass through the ordinary `feed()` completion path, so it must retire
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mmtp-container-parser.d.ts","sourceRoot":"","sources":["../src/mmtp-container-parser.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mmtp-container-parser.d.ts","sourceRoot":"","sources":["../src/mmtp-container-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -148,30 +148,26 @@ function isEmptyOrExactLegacyTrailer(payload, start, end) {
|
|
|
148
148
|
const authLength = view2.getUint16(2, false);
|
|
149
149
|
return start + LEGACY_TRAILER_HEADER_SIZE + authLength === end;
|
|
150
150
|
}
|
|
151
|
-
function resolveDeclaredTrailers(payload, declaredEnd, fecType, options
|
|
151
|
+
function resolveDeclaredTrailers(payload, declaredEnd, fecType, options) {
|
|
152
152
|
if (declaredEnd > payload.length)
|
|
153
153
|
return null;
|
|
154
154
|
if (options?.skipFecId) {
|
|
155
|
-
return isEmptyOrExactLegacyTrailer(payload, declaredEnd, payload.length) ? { hasFecId: false
|
|
155
|
+
return isEmptyOrExactLegacyTrailer(payload, declaredEnd, payload.length) ? { hasFecId: false } : null;
|
|
156
156
|
}
|
|
157
|
-
const overlay = options?.overlayDeclared === true && rapFlag;
|
|
158
157
|
if (fecType === 1) {
|
|
159
|
-
const fecStart = payload.length -
|
|
158
|
+
const fecStart = payload.length - SOURCE_FEC_PAYLOAD_ID_SIZE;
|
|
160
159
|
if (fecStart < declaredEnd || !isEmptyOrExactLegacyTrailer(payload, declaredEnd, fecStart)) {
|
|
161
160
|
return null;
|
|
162
161
|
}
|
|
163
|
-
return { hasFecId: true
|
|
162
|
+
return { hasFecId: true };
|
|
164
163
|
}
|
|
165
|
-
if (fecType !== 0
|
|
164
|
+
if (fecType !== 0)
|
|
166
165
|
return null;
|
|
167
166
|
if (isEmptyOrExactLegacyTrailer(payload, declaredEnd, payload.length)) {
|
|
168
|
-
return { hasFecId: false
|
|
167
|
+
return { hasFecId: false };
|
|
169
168
|
}
|
|
170
169
|
return null;
|
|
171
170
|
}
|
|
172
|
-
function sourceFecTrailerSize(overlay) {
|
|
173
|
-
return overlay ? 2 * SOURCE_FEC_PAYLOAD_ID_SIZE : SOURCE_FEC_PAYLOAD_ID_SIZE;
|
|
174
|
-
}
|
|
175
171
|
function planMfuExtraction(mmtpPacket, options, parsedHeader) {
|
|
176
172
|
if (mmtpPacket.length < MMTP_HEADER_SIZE + MPU_HEADER_SIZE) {
|
|
177
173
|
return {
|
|
@@ -224,11 +220,11 @@ function planMfuExtraction(mmtpPacket, options, parsedHeader) {
|
|
|
224
220
|
if ("rejection" in layoutResult)
|
|
225
221
|
return layoutResult;
|
|
226
222
|
const { layout } = layoutResult;
|
|
227
|
-
const trailerLayout = resolveDeclaredTrailers(payload, layout.dataEnd, header.fecType, options
|
|
223
|
+
const trailerLayout = resolveDeclaredTrailers(payload, layout.dataEnd, header.fecType, options);
|
|
228
224
|
if (!trailerLayout) {
|
|
229
225
|
if (!options?.skipFecId && header.fecType === 1) {
|
|
230
226
|
const observed = payload.length - layout.dataEnd;
|
|
231
|
-
const expected =
|
|
227
|
+
const expected = SOURCE_FEC_PAYLOAD_ID_SIZE;
|
|
232
228
|
if (observed !== expected) {
|
|
233
229
|
return {
|
|
234
230
|
rejection: {
|
|
@@ -260,13 +256,10 @@ function extractPlannedMfu(mmtpPacket, result) {
|
|
|
260
256
|
const mfuDuHeader = mfuDuHeaderPresent && mpu.timedFlag === 1 ? parseTimedMfuDuHeader(payload, MPU_HEADER_SIZE) : null;
|
|
261
257
|
const itemId = mfuDuHeaderPresent && mpu.timedFlag === 0 ? new DataView(payload.buffer, payload.byteOffset + MPU_HEADER_SIZE, 4).getUint32(0, false) : null;
|
|
262
258
|
const data = payload.subarray(mfuOffset, dataEnd);
|
|
263
|
-
const
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
}
|
|
267
|
-
const fecPayloadId = trailerLayout.hasFecId ? ssIdAt(trailerStart) : null;
|
|
268
|
-
const overlayFecPayloadId = trailerLayout.hasOverlayFecId ? ssIdAt(trailerStart + SOURCE_FEC_PAYLOAD_ID_SIZE) : null;
|
|
269
|
-
return { header, mpu, fragmentType, data, mfuDuHeader, itemId, fecPayloadId, overlayFecPayloadId };
|
|
259
|
+
const fecPayloadId = trailerLayout.hasFecId ? {
|
|
260
|
+
ssId: new DataView(mmtpPacket.buffer, mmtpPacket.byteOffset + mmtpPacket.length - SOURCE_FEC_PAYLOAD_ID_SIZE, 4).getUint32(0, false)
|
|
261
|
+
} : null;
|
|
262
|
+
return { header, mpu, fragmentType, data, mfuDuHeader, itemId, fecPayloadId };
|
|
270
263
|
}
|
|
271
264
|
function sourceFecPayloadIdOf(mmtpPacket, header) {
|
|
272
265
|
if (mmtpPacket.length < MMTP_HEADER_SIZE + MPU_HEADER_SIZE)
|
|
@@ -4858,9 +4851,21 @@ var IsoBmffTimingResolver = class {
|
|
|
4858
4851
|
}
|
|
4859
4852
|
#track = null;
|
|
4860
4853
|
#fragments = /* @__PURE__ */ new Map();
|
|
4854
|
+
/** First sample of each pending fragment, kept in `#delivered` with its sample count. */
|
|
4855
|
+
#firstSamples = /* @__PURE__ */ new Map();
|
|
4856
|
+
/**
|
|
4857
|
+
* First sample and sample count of the newest fragments whose every slot was
|
|
4858
|
+
* cleared. Abandonment counts: `releaseSample` clears a slot too, which
|
|
4859
|
+
* matches the combiner, since it retires an abandoned sample as well.
|
|
4860
|
+
*/
|
|
4861
|
+
#delivered = /* @__PURE__ */ new Map();
|
|
4861
4862
|
#pendingSamples = 0;
|
|
4862
4863
|
#evictedSamples = 0;
|
|
4863
4864
|
#lastMovieFragmentRejection = null;
|
|
4865
|
+
/** True once an FT=0 has bound the track that FT=1 timing is read against. */
|
|
4866
|
+
get initialized() {
|
|
4867
|
+
return this.#track !== null;
|
|
4868
|
+
}
|
|
4864
4869
|
get pendingSampleCount() {
|
|
4865
4870
|
return this.#pendingSamples;
|
|
4866
4871
|
}
|
|
@@ -4884,7 +4889,14 @@ var IsoBmffTimingResolver = class {
|
|
|
4884
4889
|
this.#track = timing;
|
|
4885
4890
|
return true;
|
|
4886
4891
|
}
|
|
4887
|
-
|
|
4892
|
+
/**
|
|
4893
|
+
* `recovered` marks an FEC-recovered copy. A recovered block hands back
|
|
4894
|
+
* every FT=1 it holds, the received ones included, so a recovered copy of a
|
|
4895
|
+
* fragment whose samples are all done is a duplicate: admitting it again
|
|
4896
|
+
* would charge stale timing and could displace the live MPU's. A source
|
|
4897
|
+
* copy is still admitted again (a rendition switch re-arms timing that way).
|
|
4898
|
+
*/
|
|
4899
|
+
addMovieFragment(mpuSequenceNumber, data, additionalSampleLimit = this.maxPendingSamples, recovered = false) {
|
|
4888
4900
|
this.#lastMovieFragmentRejection = null;
|
|
4889
4901
|
if (!Number.isInteger(additionalSampleLimit) || additionalSampleLimit < 0) {
|
|
4890
4902
|
this.#lastMovieFragmentRejection = "invalid";
|
|
@@ -4910,6 +4922,8 @@ var IsoBmffTimingResolver = class {
|
|
|
4910
4922
|
(sample, index) => sample !== null && sameSample(sample, parsed.samples[index])
|
|
4911
4923
|
);
|
|
4912
4924
|
}
|
|
4925
|
+
const delivered = recovered ? this.#delivered.get(key) : void 0;
|
|
4926
|
+
if (delivered && delivered.sampleCount === parsed.samples.length && sameSample(delivered.first, parsed.samples[0])) return true;
|
|
4913
4927
|
let freed = 0;
|
|
4914
4928
|
while (this.#fragments.size > 0 && (this.#pendingSamples + parsed.samples.length > this.maxPendingSamples || parsed.samples.length - freed > additionalSampleLimit)) {
|
|
4915
4929
|
freed += this.#evictOldestFragment();
|
|
@@ -4923,6 +4937,7 @@ var IsoBmffTimingResolver = class {
|
|
|
4923
4937
|
return false;
|
|
4924
4938
|
}
|
|
4925
4939
|
this.#fragments.set(key, [...parsed.samples]);
|
|
4940
|
+
this.#firstSamples.set(key, parsed.samples[0]);
|
|
4926
4941
|
this.#pendingSamples += parsed.samples.length;
|
|
4927
4942
|
return true;
|
|
4928
4943
|
}
|
|
@@ -4980,6 +4995,7 @@ var IsoBmffTimingResolver = class {
|
|
|
4980
4995
|
let live = 0;
|
|
4981
4996
|
for (const sample of samples) if (sample !== null) live++;
|
|
4982
4997
|
this.#fragments.delete(oldest);
|
|
4998
|
+
this.#firstSamples.delete(oldest);
|
|
4983
4999
|
this.#pendingSamples -= live;
|
|
4984
5000
|
this.#evictedSamples += live;
|
|
4985
5001
|
return live;
|
|
@@ -4995,12 +5011,23 @@ var IsoBmffTimingResolver = class {
|
|
|
4995
5011
|
if (!samples || !samples[index]) return false;
|
|
4996
5012
|
samples[index] = null;
|
|
4997
5013
|
this.#pendingSamples--;
|
|
4998
|
-
if (samples.every((value) => value === null))
|
|
5014
|
+
if (samples.every((value) => value === null)) {
|
|
5015
|
+
this.#fragments.delete(key);
|
|
5016
|
+
const first = this.#firstSamples.get(key);
|
|
5017
|
+
this.#firstSamples.delete(key);
|
|
5018
|
+
this.#delivered.delete(key);
|
|
5019
|
+
this.#delivered.set(key, { first, sampleCount: samples.length });
|
|
5020
|
+
if (this.#delivered.size > this.maxPendingSamples) {
|
|
5021
|
+
this.#delivered.delete(this.#delivered.keys().next().value);
|
|
5022
|
+
}
|
|
5023
|
+
}
|
|
4999
5024
|
return true;
|
|
5000
5025
|
}
|
|
5001
5026
|
reset() {
|
|
5002
5027
|
this.#track = null;
|
|
5003
5028
|
this.#fragments.clear();
|
|
5029
|
+
this.#firstSamples.clear();
|
|
5030
|
+
this.#delivered.clear();
|
|
5004
5031
|
this.#pendingSamples = 0;
|
|
5005
5032
|
}
|
|
5006
5033
|
};
|
|
@@ -5482,6 +5509,12 @@ var MmtpContainerParser = class _MmtpContainerParser {
|
|
|
5482
5509
|
this.#reclaimedTimingSamples = 0;
|
|
5483
5510
|
this.#evictedTimingSamples = 0;
|
|
5484
5511
|
this.#rejectedMovieFragments = 0;
|
|
5512
|
+
this.#recoveredHeadsAwaitingTiming = {
|
|
5513
|
+
held: 0,
|
|
5514
|
+
expired: 0,
|
|
5515
|
+
discarded: 0,
|
|
5516
|
+
superseded: 0
|
|
5517
|
+
};
|
|
5485
5518
|
this.#sequencers = /* @__PURE__ */ new Map();
|
|
5486
5519
|
this.#fecGate = null;
|
|
5487
5520
|
this.#fecSequencer = null;
|
|
@@ -5590,6 +5623,7 @@ var MmtpContainerParser = class _MmtpContainerParser {
|
|
|
5590
5623
|
#reclaimedTimingSamples;
|
|
5591
5624
|
#evictedTimingSamples;
|
|
5592
5625
|
#rejectedMovieFragments;
|
|
5626
|
+
#recoveredHeadsAwaitingTiming;
|
|
5593
5627
|
#sequencers;
|
|
5594
5628
|
#fecGate;
|
|
5595
5629
|
#fecSequencer;
|
|
@@ -5695,11 +5729,12 @@ var MmtpContainerParser = class _MmtpContainerParser {
|
|
|
5695
5729
|
/**
|
|
5696
5730
|
* Typed view of the ISO-BMFF timing-sample budget.
|
|
5697
5731
|
*
|
|
5698
|
-
*
|
|
5699
|
-
*
|
|
5700
|
-
*
|
|
5701
|
-
*
|
|
5702
|
-
*
|
|
5732
|
+
* Each stream admits timing against its own window of `capacity` slots
|
|
5733
|
+
* (BLO-52085). A stream at capacity displaces its own oldest timing to
|
|
5734
|
+
* admit the moof in hand, and `evicted` counts the slots so displaced:
|
|
5735
|
+
* timing a stream declared and never delivered shows up there. `pending`
|
|
5736
|
+
* sums every stream, so it can exceed `capacity`. Per repo policy this is
|
|
5737
|
+
* a producer-owned counter -- never infer budget state by parsing logs.
|
|
5703
5738
|
*/
|
|
5704
5739
|
get timingBudgetStats() {
|
|
5705
5740
|
return {
|
|
@@ -5710,6 +5745,14 @@ var MmtpContainerParser = class _MmtpContainerParser {
|
|
|
5710
5745
|
rejectedMovieFragments: this.#rejectedMovieFragments
|
|
5711
5746
|
};
|
|
5712
5747
|
}
|
|
5748
|
+
/** Recovered heads parked for FT=1 timing (BLO-53369). Survives dispose(). */
|
|
5749
|
+
get recoveredHeadsAwaitingTiming() {
|
|
5750
|
+
let pending = 0;
|
|
5751
|
+
for (const { awaitingTiming } of this.#timingStreams.values()) {
|
|
5752
|
+
for (const head of awaitingTiming) if (head.options?.recovered) pending++;
|
|
5753
|
+
}
|
|
5754
|
+
return { ...this.#recoveredHeadsAwaitingTiming, pending };
|
|
5755
|
+
}
|
|
5713
5756
|
get reorderStats() {
|
|
5714
5757
|
let bufferedFrames = this.#fecSequencer?.buffered ?? 0;
|
|
5715
5758
|
for (const { sequencer } of this.#sequencers.values()) bufferedFrames += sequencer.buffered;
|
|
@@ -5883,7 +5926,7 @@ var MmtpContainerParser = class _MmtpContainerParser {
|
|
|
5883
5926
|
const now = Date.now();
|
|
5884
5927
|
for (const { awaitingTiming } of this.#timingStreams.values()) {
|
|
5885
5928
|
while (awaitingTiming.length > 0 && now - awaitingTiming[0].arrivedAt > timeoutMs) {
|
|
5886
|
-
awaitingTiming.shift();
|
|
5929
|
+
this.#leaveAwaitingTiming(awaitingTiming.shift(), "expired");
|
|
5887
5930
|
}
|
|
5888
5931
|
}
|
|
5889
5932
|
}
|
|
@@ -6001,11 +6044,16 @@ var MmtpContainerParser = class _MmtpContainerParser {
|
|
|
6001
6044
|
if (mpu.fragmentationIndicator !== 0 || mpu.fragmentCounter !== 0)
|
|
6002
6045
|
return this.#drop("fragment-unexpected-fragmentation");
|
|
6003
6046
|
const resolver2 = this.#timingResolver(streamKey, info.packetId, false);
|
|
6004
|
-
if (!resolver2) return this.#drop("fragment-no-resolver");
|
|
6047
|
+
if (!resolver2?.initialized) return this.#drop("fragment-no-resolver");
|
|
6005
6048
|
const pendingBefore = resolver2.pendingSampleCount;
|
|
6006
6049
|
const evictedBefore = resolver2.evictedSampleCount;
|
|
6007
|
-
const remaining = this.#maxPendingTimingSamples -
|
|
6008
|
-
const admitted = resolver2.addMovieFragment(
|
|
6050
|
+
const remaining = this.#maxPendingTimingSamples - resolver2.pendingSampleCount;
|
|
6051
|
+
const admitted = resolver2.addMovieFragment(
|
|
6052
|
+
mpu.mpuSequenceNumber,
|
|
6053
|
+
data,
|
|
6054
|
+
remaining,
|
|
6055
|
+
options?.recovered === true
|
|
6056
|
+
);
|
|
6009
6057
|
this.#pendingTimingSamples += resolver2.pendingSampleCount - pendingBefore;
|
|
6010
6058
|
this.#evictedTimingSamples += resolver2.evictedSampleCount - evictedBefore;
|
|
6011
6059
|
if (!admitted) {
|
|
@@ -6025,7 +6073,7 @@ var MmtpContainerParser = class _MmtpContainerParser {
|
|
|
6025
6073
|
};
|
|
6026
6074
|
}
|
|
6027
6075
|
if (fragmentType !== 2) return this.#drop("unknown-fragment-type");
|
|
6028
|
-
const resolver = this.#timingResolver(streamKey, info.packetId,
|
|
6076
|
+
const resolver = this.#timingResolver(streamKey, info.packetId, true);
|
|
6029
6077
|
if (!resolver) return this.#drop("mfu-no-resolver");
|
|
6030
6078
|
if (!Number.isSafeInteger(data.byteLength) || data.byteLength <= 0)
|
|
6031
6079
|
return this.#drop("mfu-empty-payload");
|
|
@@ -6046,6 +6094,7 @@ var MmtpContainerParser = class _MmtpContainerParser {
|
|
|
6046
6094
|
mpuSequenceNumber: mpu.mpuSequenceNumber,
|
|
6047
6095
|
movieFragmentSequenceNumber: mfuDuHeader.movieFragmentSequenceNumber,
|
|
6048
6096
|
sampleNumber: mfuDuHeader.sampleNumber,
|
|
6097
|
+
sequenceNumber: info.sequenceNumber,
|
|
6049
6098
|
arrivedAt: Date.now()
|
|
6050
6099
|
});
|
|
6051
6100
|
return this.#drop("mfu-sample-timing-missing");
|
|
@@ -6369,6 +6418,10 @@ var MmtpContainerParser = class _MmtpContainerParser {
|
|
|
6369
6418
|
}
|
|
6370
6419
|
this.#emitFrame(data, meta);
|
|
6371
6420
|
}
|
|
6421
|
+
/** Whether FT=1 metadata already names this sample, without claiming it. */
|
|
6422
|
+
hasAuthoredTimingFor(packetId, mpuSequenceNumber, movieFragmentSequenceNumber, sampleNumber, catalogTrackName) {
|
|
6423
|
+
return this.#timingResolver(this.#streamKey(packetId, catalogTrackName), packetId, false)?.sampleTiming(mpuSequenceNumber, movieFragmentSequenceNumber, sampleNumber) != null;
|
|
6424
|
+
}
|
|
6372
6425
|
/**
|
|
6373
6426
|
* Claim and return the authored timing for a recovered sample. Recovery does
|
|
6374
6427
|
* not pass through the ordinary `feed()` completion path, so it must retire
|
|
@@ -6430,6 +6483,9 @@ var MmtpContainerParser = class _MmtpContainerParser {
|
|
|
6430
6483
|
for (const { sequencer } of this.#sequencers.values()) sequencer.discard();
|
|
6431
6484
|
this.#sequencers.clear();
|
|
6432
6485
|
this.#fecSequencer?.discard();
|
|
6486
|
+
for (const { awaitingTiming } of this.#timingStreams.values()) {
|
|
6487
|
+
for (const head of awaitingTiming) this.#leaveAwaitingTiming(head, "discarded");
|
|
6488
|
+
}
|
|
6433
6489
|
this.#timingStreams.clear();
|
|
6434
6490
|
this.#pendingTimingSamples = 0;
|
|
6435
6491
|
this.#reliableMoqStartupGate.clear();
|
|
@@ -6448,10 +6504,23 @@ var MmtpContainerParser = class _MmtpContainerParser {
|
|
|
6448
6504
|
return resolver;
|
|
6449
6505
|
}
|
|
6450
6506
|
#awaitTiming(streamKey, head) {
|
|
6451
|
-
const
|
|
6452
|
-
if (!
|
|
6507
|
+
const state = this.#timingStreams.get(streamKey);
|
|
6508
|
+
if (!state) return;
|
|
6509
|
+
if (!head.options?.recovered) {
|
|
6510
|
+
const kept = state.awaitingTiming.filter((queued) => !queued.options?.recovered || queued.sequenceNumber !== head.sequenceNumber);
|
|
6511
|
+
this.#recoveredHeadsAwaitingTiming.superseded += state.awaitingTiming.length - kept.length;
|
|
6512
|
+
state.awaitingTiming = kept;
|
|
6513
|
+
}
|
|
6514
|
+
const awaitingTiming = state.awaitingTiming;
|
|
6453
6515
|
awaitingTiming.push(head);
|
|
6454
|
-
if (
|
|
6516
|
+
if (head.options?.recovered) this.#recoveredHeadsAwaitingTiming.held++;
|
|
6517
|
+
if (awaitingTiming.length > MAX_AWAITING_TIMING_HEADS) {
|
|
6518
|
+
this.#leaveAwaitingTiming(awaitingTiming.shift(), "expired");
|
|
6519
|
+
}
|
|
6520
|
+
}
|
|
6521
|
+
/** Count a recovered head leaving the queue other than by replay or its source copy. */
|
|
6522
|
+
#leaveAwaitingTiming(head, outcome) {
|
|
6523
|
+
if (head.options?.recovered) this.#recoveredHeadsAwaitingTiming[outcome]++;
|
|
6455
6524
|
}
|
|
6456
6525
|
/**
|
|
6457
6526
|
* Feed again the heads whose timing the FT=1 just admitted declares. That
|
|
@@ -6479,6 +6548,7 @@ var MmtpContainerParser = class _MmtpContainerParser {
|
|
|
6479
6548
|
const state = this.#timingStreams.get(streamKey);
|
|
6480
6549
|
if (!state) return;
|
|
6481
6550
|
this.#timingStreams.delete(streamKey);
|
|
6551
|
+
for (const head of state.awaitingTiming) this.#leaveAwaitingTiming(head, "discarded");
|
|
6482
6552
|
this.#pendingTimingSamples -= state.resolver.pendingSampleCount;
|
|
6483
6553
|
if (this.#pendingTimingSamples < 0) {
|
|
6484
6554
|
throw new Error("[MmtpContainerParser] pending timing sample accounting underflow");
|
|
@@ -6710,6 +6780,7 @@ function findAnnexBStart(data, offset) {
|
|
|
6710
6780
|
}
|
|
6711
6781
|
export {
|
|
6712
6782
|
MmtpContainerParser,
|
|
6783
|
+
authoredAdjacent,
|
|
6713
6784
|
isMfuKeyframeMetadata
|
|
6714
6785
|
};
|
|
6715
6786
|
//# sourceMappingURL=mmtp-container-parser.js.map
|