@blockcast/mmt-base 0.1.0 → 0.3.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 +16 -2
- package/dist/fec-block-profile.d.ts +55 -0
- package/dist/fec-block-profile.d.ts.map +1 -0
- package/dist/fec-block-profile.js +128 -0
- package/dist/fec-block-profile.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/mmtp.d.ts +77 -56
- package/dist/mmtp.d.ts.map +1 -1
- package/dist/mmtp.js +260 -216
- package/dist/mmtp.js.map +1 -1
- package/dist/net-constants.d.ts +18 -0
- package/dist/net-constants.d.ts.map +1 -0
- package/dist/net-constants.js +18 -0
- package/dist/net-constants.js.map +1 -0
- package/dist/ntp-short.d.ts +47 -0
- package/dist/ntp-short.d.ts.map +1 -0
- package/dist/ntp-short.js +54 -0
- package/dist/ntp-short.js.map +1 -0
- package/dist/serial-number.d.ts +57 -0
- package/dist/serial-number.d.ts.map +1 -0
- package/dist/serial-number.js +98 -0
- package/dist/serial-number.js.map +1 -0
- package/dist/signalling.d.ts +312 -0
- package/dist/signalling.d.ts.map +1 -0
- package/dist/signalling.js +637 -0
- package/dist/signalling.js.map +1 -0
- package/package.json +9 -4
- package/src/fec-block-profile.ts +145 -0
- package/src/index.ts +5 -0
- package/src/mmtp.ts +334 -188
- package/src/net-constants.ts +17 -0
- package/src/ntp-short.ts +67 -0
- package/src/serial-number.ts +107 -0
- package/src/signalling.ts +862 -0
- package/src/alfec.test.ts +0 -176
- package/src/mmtp.test.ts +0 -769
package/dist/mmtp.js
CHANGED
|
@@ -12,6 +12,16 @@ export const PACKET_TYPE_SIGNALING = 0x02;
|
|
|
12
12
|
export const PACKET_TYPE_REPAIR = 0x03;
|
|
13
13
|
// AL-FEC Signaling Message ID (ISO/IEC 23008-1:2023 Amendment 1:2025)
|
|
14
14
|
export const ALFEC_MESSAGE_ID = 0x0203;
|
|
15
|
+
/**
|
|
16
|
+
* MMTP `packet_id` of the signaling flow, which carries PACKET_TYPE_SIGNALING
|
|
17
|
+
* packets such as the AL-FEC message (ALFEC_MESSAGE_ID). The FFmpeg `moq_mmt`
|
|
18
|
+
* muxer sends that message on this packet_id into the same multicast group as
|
|
19
|
+
* the media, and moqcast-draft (PR #44) makes advertising it for a track a
|
|
20
|
+
* MUST NOT. A track's packet_id is therefore 1..MMTP_PACKET_ID_MAX.
|
|
21
|
+
*/
|
|
22
|
+
export const MMTP_SIGNALING_PACKET_ID = 0;
|
|
23
|
+
/** Largest value of the 16-bit MMTP `packet_id` header field. */
|
|
24
|
+
export const MMTP_PACKET_ID_MAX = 0xffff;
|
|
15
25
|
// FEC Code IDs
|
|
16
26
|
export const FEC_CODE_XOR = 1;
|
|
17
27
|
export const FEC_CODE_RAPTORQ = 2;
|
|
@@ -81,6 +91,36 @@ export function parseMMTPHeader(buffer) {
|
|
|
81
91
|
rapFlag,
|
|
82
92
|
};
|
|
83
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* The MMTP `packet_id` of `buffer`, or null exactly when parseMMTPHeader would
|
|
96
|
+
* throw for it (short buffer, V != 0, truncated packet_counter or header
|
|
97
|
+
* extension).
|
|
98
|
+
*
|
|
99
|
+
* This is the per-packet filter a receiver runs before any other work, so it
|
|
100
|
+
* builds no header object, DataView or BigInt timestamp (BLO-36599). Use
|
|
101
|
+
* parseMMTPHeader when any other header field is needed.
|
|
102
|
+
*/
|
|
103
|
+
export function readMMTPPacketId(buffer) {
|
|
104
|
+
if (buffer.length < MMTP_HEADER_SIZE)
|
|
105
|
+
return null;
|
|
106
|
+
const flags = buffer[0];
|
|
107
|
+
if (((flags >> 6) & 0x03) !== 0)
|
|
108
|
+
return null;
|
|
109
|
+
let offset = MMTP_HEADER_SIZE;
|
|
110
|
+
if ((flags & 0x20) !== 0) {
|
|
111
|
+
if (offset + 4 > buffer.length)
|
|
112
|
+
return null;
|
|
113
|
+
offset += 4;
|
|
114
|
+
}
|
|
115
|
+
if ((flags & 0x02) !== 0) {
|
|
116
|
+
if (offset + 4 > buffer.length)
|
|
117
|
+
return null;
|
|
118
|
+
const length = (buffer[offset + 2] << 8) | buffer[offset + 3];
|
|
119
|
+
if (offset + 4 + length > buffer.length)
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
return (buffer[2] << 8) | buffer[3];
|
|
123
|
+
}
|
|
84
124
|
/**
|
|
85
125
|
* Unwrap MMTP packet to extract payload
|
|
86
126
|
*/
|
|
@@ -138,22 +178,43 @@ export function parseTimedMfuDuHeader(payload, offset) {
|
|
|
138
178
|
};
|
|
139
179
|
}
|
|
140
180
|
function resolveMfuPayloadLayout(mpu, fragmentType, payload) {
|
|
141
|
-
if (mpu.payloadLength < MPU_HEADER_REMAINDER_SIZE)
|
|
142
|
-
return
|
|
181
|
+
if (mpu.payloadLength < MPU_HEADER_REMAINDER_SIZE) {
|
|
182
|
+
return {
|
|
183
|
+
rejection: {
|
|
184
|
+
gate: 'mpu-payload-length-below-header-remainder',
|
|
185
|
+
detail: `payload_length=${mpu.payloadLength} < ${MPU_HEADER_REMAINDER_SIZE}`,
|
|
186
|
+
},
|
|
187
|
+
};
|
|
188
|
+
}
|
|
143
189
|
// ISO/IEC 23008-1 defines payload_length from immediately after its own
|
|
144
190
|
// two-byte field. It therefore includes the remaining six MPU-header bytes.
|
|
145
191
|
const declaredEnd = MPU_LENGTH_FIELD_SIZE + mpu.payloadLength;
|
|
146
|
-
if (declaredEnd > payload.length)
|
|
147
|
-
return
|
|
192
|
+
if (declaredEnd > payload.length) {
|
|
193
|
+
return {
|
|
194
|
+
rejection: {
|
|
195
|
+
gate: 'mpu-declared-end-exceeds-payload',
|
|
196
|
+
detail: `payload_length=${mpu.payloadLength} implies end=${declaredEnd}, ` +
|
|
197
|
+
`payload is ${payload.length} bytes`,
|
|
198
|
+
},
|
|
199
|
+
};
|
|
200
|
+
}
|
|
148
201
|
const hasHeader = fragmentType === 2 && mpu.fragmentationIndicator <= 1;
|
|
149
202
|
const mfuHeaderSize = mpu.timedFlag ? MFU_DU_HEADER_SIZE_TIMED : MFU_DU_HEADER_SIZE_NONTIMED;
|
|
150
203
|
const mfuOffset = MPU_HEADER_SIZE + (hasHeader ? mfuHeaderSize : 0);
|
|
151
|
-
if (mfuOffset >= declaredEnd)
|
|
152
|
-
return
|
|
204
|
+
if (mfuOffset >= declaredEnd) {
|
|
205
|
+
return {
|
|
206
|
+
rejection: {
|
|
207
|
+
gate: 'mfu-offset-at-or-past-declared-end',
|
|
208
|
+
detail: `mfuOffset=${mfuOffset} >= declaredEnd=${declaredEnd}`,
|
|
209
|
+
},
|
|
210
|
+
};
|
|
211
|
+
}
|
|
153
212
|
return {
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
213
|
+
layout: {
|
|
214
|
+
hasMfuDuHeader: hasHeader,
|
|
215
|
+
mfuOffset,
|
|
216
|
+
dataEnd: declaredEnd,
|
|
217
|
+
},
|
|
157
218
|
};
|
|
158
219
|
}
|
|
159
220
|
function isEmptyOrExactAltaTrailer(payload, start, end) {
|
|
@@ -200,57 +261,129 @@ export function extractNALUnit(mmtpPacket) {
|
|
|
200
261
|
return extraction.data;
|
|
201
262
|
}
|
|
202
263
|
/**
|
|
203
|
-
*
|
|
264
|
+
* Single source of truth for whether a packet yields an MFU payload.
|
|
204
265
|
*
|
|
205
|
-
*
|
|
206
|
-
*
|
|
207
|
-
*
|
|
208
|
-
* - MFU DU header (14 bytes timed / 4 bytes non-timed, only for FI ≤ 1)
|
|
209
|
-
* - Source FEC Payload ID (4 bytes at end, only when `FEC_type == 1`)
|
|
210
|
-
*
|
|
211
|
-
* `payloadLength` is the ISO length-after-field value: six remaining MPU-header
|
|
212
|
-
* bytes, then the MFU DU header when present, then media. ALTA and Source FEC
|
|
213
|
-
* trailers are outside that declared span and must consume the exact suffix.
|
|
214
|
-
*
|
|
215
|
-
* @param mmtpPacket Raw MMTP packet (from multicast or MoQ)
|
|
216
|
-
* @param options.skipFecId When true, do NOT subtract the 4-byte Source FEC Payload ID
|
|
217
|
-
* from the payload boundary, even if fecType >= 1 in the MMTP header. Use this for
|
|
218
|
-
* FEC-recovered symbols where the FEC PID was already stripped before WASM decoding
|
|
219
|
-
* but the fecType bits in byte 0 still reflect the original packet (FEC Type=1 per
|
|
220
|
-
* draft-ramadan-moq-mmt-00 §3.1).
|
|
221
|
-
* @returns Extracted MFU data + metadata, or null if packet is too small
|
|
266
|
+
* `extractMFUPayload` and `explainMFURejection` both delegate here, so the
|
|
267
|
+
* reason reported to operators can never drift from the decision the parser
|
|
268
|
+
* actually made.
|
|
222
269
|
*/
|
|
223
|
-
|
|
224
|
-
if (mmtpPacket.length < MMTP_HEADER_SIZE + MPU_HEADER_SIZE)
|
|
225
|
-
return
|
|
270
|
+
function planMfuExtraction(mmtpPacket, options, parsedHeader) {
|
|
271
|
+
if (mmtpPacket.length < MMTP_HEADER_SIZE + MPU_HEADER_SIZE) {
|
|
272
|
+
return {
|
|
273
|
+
rejection: {
|
|
274
|
+
gate: 'packet-shorter-than-mmtp-plus-mpu-header',
|
|
275
|
+
detail: `${mmtpPacket.length} bytes < ${MMTP_HEADER_SIZE + MPU_HEADER_SIZE}`,
|
|
276
|
+
},
|
|
277
|
+
};
|
|
278
|
+
}
|
|
226
279
|
let header;
|
|
227
|
-
|
|
228
|
-
header =
|
|
280
|
+
if (parsedHeader) {
|
|
281
|
+
header = parsedHeader;
|
|
229
282
|
}
|
|
230
|
-
|
|
231
|
-
|
|
283
|
+
else {
|
|
284
|
+
try {
|
|
285
|
+
header = parseMMTPHeader(mmtpPacket);
|
|
286
|
+
}
|
|
287
|
+
catch (error) {
|
|
288
|
+
return {
|
|
289
|
+
rejection: {
|
|
290
|
+
gate: 'mmtp-header-unparseable',
|
|
291
|
+
detail: error instanceof Error ? error.message : String(error),
|
|
292
|
+
},
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
if (header.packetType !== PACKET_TYPE_MPU) {
|
|
297
|
+
return {
|
|
298
|
+
rejection: {
|
|
299
|
+
gate: 'not-an-mpu-packet',
|
|
300
|
+
detail: `packetType=0x${header.packetType.toString(16).padStart(2, '0')}`,
|
|
301
|
+
},
|
|
302
|
+
};
|
|
232
303
|
}
|
|
233
|
-
if (header.packetType !== PACKET_TYPE_MPU)
|
|
234
|
-
return null;
|
|
235
304
|
const payload = mmtpPacket.subarray(header.headerLength);
|
|
236
|
-
if (payload.length < MPU_HEADER_SIZE)
|
|
237
|
-
return
|
|
305
|
+
if (payload.length < MPU_HEADER_SIZE) {
|
|
306
|
+
return {
|
|
307
|
+
rejection: {
|
|
308
|
+
gate: 'payload-shorter-than-mpu-header',
|
|
309
|
+
detail: `${payload.length} bytes < ${MPU_HEADER_SIZE}`,
|
|
310
|
+
},
|
|
311
|
+
};
|
|
312
|
+
}
|
|
238
313
|
const mpu = parseMPUHeader(payload);
|
|
239
|
-
if (mpu.aggregationFlag)
|
|
240
|
-
return
|
|
314
|
+
if (mpu.aggregationFlag) {
|
|
315
|
+
return {
|
|
316
|
+
rejection: { gate: 'aggregation-flag-set', detail: 'strict profile requires A=0' },
|
|
317
|
+
};
|
|
318
|
+
}
|
|
241
319
|
// Fragment type from byte 2 upper nibble (not returned by parseMPUHeader)
|
|
242
320
|
const fragmentType = (payload[2] >> 4) & 0x0f;
|
|
243
|
-
const
|
|
244
|
-
if (
|
|
245
|
-
return
|
|
321
|
+
const layoutResult = resolveMfuPayloadLayout(mpu, fragmentType, payload);
|
|
322
|
+
if ('rejection' in layoutResult)
|
|
323
|
+
return layoutResult;
|
|
324
|
+
const { layout } = layoutResult;
|
|
246
325
|
const trailerLayout = resolveDeclaredTrailers(payload, layout.dataEnd, header.fecType, options);
|
|
247
|
-
if (!trailerLayout)
|
|
326
|
+
if (!trailerLayout) {
|
|
327
|
+
// The most common cause is a producer whose Source FEC Payload ID width
|
|
328
|
+
// disagrees with ISO/IEC 23008-1 §C.5.2. Name that explicitly rather than
|
|
329
|
+
// leaving operators to infer it from a generic trailer error.
|
|
330
|
+
if (!options?.skipFecId && header.fecType === 1) {
|
|
331
|
+
const observed = payload.length - layout.dataEnd;
|
|
332
|
+
if (observed !== SOURCE_FEC_PAYLOAD_ID_SIZE) {
|
|
333
|
+
return {
|
|
334
|
+
rejection: {
|
|
335
|
+
gate: 'source-fec-payload-id-width-mismatch',
|
|
336
|
+
detail: `producer wrote a ${observed}-byte Source FEC Payload ID, ` +
|
|
337
|
+
`ISO/IEC 23008-1 §C.5.2 requires ${SOURCE_FEC_PAYLOAD_ID_SIZE} ` +
|
|
338
|
+
`(payload=${payload.length}, declaredEnd=${layout.dataEnd})`,
|
|
339
|
+
},
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
return {
|
|
344
|
+
rejection: {
|
|
345
|
+
gate: 'declared-trailers-unresolved',
|
|
346
|
+
detail: `trailer bytes [${layout.dataEnd}, ${payload.length}) are neither empty ` +
|
|
347
|
+
`nor an exact ALTA trailer (fecType=${header.fecType})`,
|
|
348
|
+
},
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
return { plan: { header, payload, mpu, fragmentType, layout, trailerLayout } };
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Report why `extractMFUPayload` would refuse this packet, or null if it would
|
|
355
|
+
* accept it.
|
|
356
|
+
*
|
|
357
|
+
* `extractMFUPayload` returns bare `null` on ten distinct conditions, which
|
|
358
|
+
* makes a producer/consumer framing disagreement indistinguishable from a
|
|
359
|
+
* publisher that never started — both render as silence. Use this wherever
|
|
360
|
+
* that distinction matters: diagnostics, contract tests, and operator-facing
|
|
361
|
+
* logs.
|
|
362
|
+
*/
|
|
363
|
+
export function explainMFURejection(mmtpPacket, options) {
|
|
364
|
+
const result = planMfuExtraction(mmtpPacket, options);
|
|
365
|
+
return 'rejection' in result ? result.rejection : null;
|
|
366
|
+
}
|
|
367
|
+
export function extractMFUPayload(mmtpPacket, options) {
|
|
368
|
+
return extractPlannedMfu(mmtpPacket, planMfuExtraction(mmtpPacket, options));
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* extractMFUPayload for a caller that already holds this packet's parsed MMTP
|
|
372
|
+
* header, so the header is not parsed a second time (BLO-36599).
|
|
373
|
+
*
|
|
374
|
+
* `header` must be `parseMMTPHeader(mmtpPacket)` of this same packet; the
|
|
375
|
+
* result is then identical to `extractMFUPayload(mmtpPacket, options)`.
|
|
376
|
+
*/
|
|
377
|
+
export function extractMFUPayloadWithHeader(mmtpPacket, header, options) {
|
|
378
|
+
return extractPlannedMfu(mmtpPacket, planMfuExtraction(mmtpPacket, options, header));
|
|
379
|
+
}
|
|
380
|
+
function extractPlannedMfu(mmtpPacket, result) {
|
|
381
|
+
if ('rejection' in result)
|
|
248
382
|
return null;
|
|
383
|
+
const { header, payload, mpu, fragmentType, layout, trailerLayout } = result.plan;
|
|
249
384
|
const mfuDuHeaderPresent = layout.hasMfuDuHeader;
|
|
250
385
|
const mfuOffset = layout.mfuOffset;
|
|
251
386
|
const dataEnd = layout.dataEnd;
|
|
252
|
-
if (mfuOffset >= dataEnd)
|
|
253
|
-
return null;
|
|
254
387
|
const mfuDuHeader = mfuDuHeaderPresent && mpu.timedFlag === 1
|
|
255
388
|
? parseTimedMfuDuHeader(payload, MPU_HEADER_SIZE)
|
|
256
389
|
: null;
|
|
@@ -287,46 +420,69 @@ export function isFecRepairPacket(mmtpPacket) {
|
|
|
287
420
|
* source packet per ISO/IEC 23008-1:2023 Section C.5.2 Figure C.10.
|
|
288
421
|
*
|
|
289
422
|
* SS_ID is a flat 32-bit monotonic counter (incremented by 1 per packet
|
|
290
|
-
* for ssbg_mode0 and ssbg_mode1).
|
|
291
|
-
*
|
|
292
|
-
*
|
|
423
|
+
* for ssbg_mode0 and ssbg_mode1). Block membership and ESI use the
|
|
424
|
+
* configured K; repair SS_Start identifies the first SS_ID of the block and
|
|
425
|
+
* SSB_length records the authored source-symbol count:
|
|
426
|
+
* SBN = floor(SS_ID / K), ESI = SS_ID % K
|
|
293
427
|
* SS_Start = SBN * K (first SS_ID of the block)
|
|
294
428
|
*
|
|
295
429
|
* This matches FFmpeg moqenc_mmt.c, the drafts (draft-ramadan-moq-fec §6.2),
|
|
296
430
|
* and ATSC A/331 §8.1.2.5 which defers to ISO 23008-1 Annex C.
|
|
297
431
|
*/
|
|
298
432
|
export function extractFecPayloadId(mmtpPacket) {
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
// Flat 4-byte SS_ID: encoder writes block_id * K + symbol_id
|
|
302
|
-
const off = mmtpPacket.length - SOURCE_FEC_PAYLOAD_ID_SIZE;
|
|
303
|
-
const view = new DataView(mmtpPacket.buffer, mmtpPacket.byteOffset + off, SOURCE_FEC_PAYLOAD_ID_SIZE);
|
|
304
|
-
return { ssId: view.getUint32(0, false) };
|
|
433
|
+
const header = parseHeaderForSourceFecId(mmtpPacket);
|
|
434
|
+
return header ? sourceFecPayloadIdOf(mmtpPacket, header) : null;
|
|
305
435
|
}
|
|
306
436
|
/**
|
|
307
437
|
* Return true when FEC_type=1 and the exact suffix after the ISO-declared MPU
|
|
308
438
|
* payload contains a four-byte Source FEC Payload ID.
|
|
309
439
|
*/
|
|
310
440
|
export function hasSourceFecPayloadId(mmtpPacket) {
|
|
441
|
+
const header = parseHeaderForSourceFecId(mmtpPacket);
|
|
442
|
+
return header !== null && sourceFecPayloadIdOf(mmtpPacket, header) !== null;
|
|
443
|
+
}
|
|
444
|
+
function parseHeaderForSourceFecId(mmtpPacket) {
|
|
311
445
|
if (mmtpPacket.length < MMTP_HEADER_SIZE + MPU_HEADER_SIZE)
|
|
312
|
-
return
|
|
313
|
-
let header;
|
|
446
|
+
return null;
|
|
314
447
|
try {
|
|
315
|
-
|
|
448
|
+
return parseMMTPHeader(mmtpPacket);
|
|
316
449
|
}
|
|
317
450
|
catch {
|
|
318
|
-
return
|
|
451
|
+
return null;
|
|
319
452
|
}
|
|
453
|
+
}
|
|
454
|
+
/**
|
|
455
|
+
* The Source FEC Payload ID of a packet whose MMTP header the caller already
|
|
456
|
+
* parsed, or null when the packet carries none: present only when FEC_type=1
|
|
457
|
+
* and the exact suffix after the ISO-declared MPU payload holds the four-byte
|
|
458
|
+
* ID (ISO/IEC 23008-1 §C.5.2). Same answer as extractFecPayloadId, without a
|
|
459
|
+
* second header parse (BLO-36599).
|
|
460
|
+
*
|
|
461
|
+
* `header` must be `parseMMTPHeader(mmtpPacket)` of this same packet.
|
|
462
|
+
*/
|
|
463
|
+
export function sourceFecPayloadIdOf(mmtpPacket, header) {
|
|
464
|
+
if (mmtpPacket.length < MMTP_HEADER_SIZE + MPU_HEADER_SIZE)
|
|
465
|
+
return null;
|
|
320
466
|
if (header.packetType !== PACKET_TYPE_MPU)
|
|
321
|
-
return
|
|
467
|
+
return null;
|
|
322
468
|
const payload = mmtpPacket.subarray(header.headerLength);
|
|
323
469
|
if (payload.length < MPU_HEADER_SIZE)
|
|
324
|
-
return
|
|
325
|
-
const
|
|
326
|
-
if (
|
|
327
|
-
return
|
|
328
|
-
const declaredEnd = MPU_LENGTH_FIELD_SIZE +
|
|
329
|
-
|
|
470
|
+
return null;
|
|
471
|
+
const payloadLength = (payload[0] << 8) | payload[1];
|
|
472
|
+
if (payloadLength < MPU_HEADER_REMAINDER_SIZE)
|
|
473
|
+
return null;
|
|
474
|
+
const declaredEnd = MPU_LENGTH_FIELD_SIZE + payloadLength;
|
|
475
|
+
if (!resolveDeclaredTrailers(payload, declaredEnd, header.fecType)?.hasFecId)
|
|
476
|
+
return null;
|
|
477
|
+
// Flat 4-byte SS_ID: encoder writes block_id * K + symbol_id
|
|
478
|
+
const off = mmtpPacket.length - SOURCE_FEC_PAYLOAD_ID_SIZE;
|
|
479
|
+
return {
|
|
480
|
+
ssId: ((mmtpPacket[off] << 24) |
|
|
481
|
+
(mmtpPacket[off + 1] << 16) |
|
|
482
|
+
(mmtpPacket[off + 2] << 8) |
|
|
483
|
+
mmtpPacket[off + 3]) >>>
|
|
484
|
+
0,
|
|
485
|
+
};
|
|
330
486
|
}
|
|
331
487
|
/**
|
|
332
488
|
* MMTP header-extension ext_type assigned to the detached ALTA authenticator
|
|
@@ -344,22 +500,34 @@ export const MMTP_EXT_TRAILER_HEADER_SIZE = _LEAF_MMTP_EXT_TRAILER_HEADER_SIZE;
|
|
|
344
500
|
export const extractAltaTrailer = _leafExtractAltaTrailer;
|
|
345
501
|
/** Size of Repair FEC Payload ID per ISO/IEC 23008-1 Section C.5.3 */
|
|
346
502
|
export const REPAIR_FEC_PID_SIZE = 13;
|
|
347
|
-
/**
|
|
348
|
-
|
|
503
|
+
/**
|
|
504
|
+
* Parse the 13-byte Repair FEC Payload ID after the complete dynamic MMTP header.
|
|
505
|
+
* `parsedHeader`, when given, must be `parseMMTPHeader(mmtpPacket)` of this
|
|
506
|
+
* same packet; it spares the second header parse (BLO-36599).
|
|
507
|
+
*/
|
|
508
|
+
function readRepairFecPayloadIdFields(mmtpPacket, parsedHeader) {
|
|
349
509
|
let header;
|
|
350
|
-
|
|
351
|
-
header =
|
|
510
|
+
if (parsedHeader) {
|
|
511
|
+
header = parsedHeader;
|
|
352
512
|
}
|
|
353
|
-
|
|
354
|
-
|
|
513
|
+
else {
|
|
514
|
+
try {
|
|
515
|
+
header = parseMMTPHeader(mmtpPacket);
|
|
516
|
+
}
|
|
517
|
+
catch {
|
|
518
|
+
return null;
|
|
519
|
+
}
|
|
355
520
|
}
|
|
356
521
|
if (header.packetType !== PACKET_TYPE_REPAIR || header.fecType !== 2)
|
|
357
522
|
return null;
|
|
358
523
|
const off = header.headerLength;
|
|
359
524
|
if (mmtpPacket.length < off + REPAIR_FEC_PID_SIZE)
|
|
360
525
|
return null;
|
|
361
|
-
const
|
|
362
|
-
|
|
526
|
+
const ssStart = ((mmtpPacket[off] << 24) |
|
|
527
|
+
(mmtpPacket[off + 1] << 16) |
|
|
528
|
+
(mmtpPacket[off + 2] << 8) |
|
|
529
|
+
mmtpPacket[off + 3]) >>>
|
|
530
|
+
0; // 32 bits
|
|
363
531
|
const rsbLength = (mmtpPacket[off + 4] << 16) | (mmtpPacket[off + 5] << 8) | mmtpPacket[off + 6]; // 24 bits
|
|
364
532
|
const rsId = (mmtpPacket[off + 7] << 16) | (mmtpPacket[off + 8] << 8) | mmtpPacket[off + 9]; // 24 bits
|
|
365
533
|
const ssbLength = (mmtpPacket[off + 10] << 16) | (mmtpPacket[off + 11] << 8) | mmtpPacket[off + 12]; // 24 bits
|
|
@@ -400,14 +568,28 @@ export function extractRepairFecPayloadId(mmtpPacket) {
|
|
|
400
568
|
* then SS_Start (4 bytes) → block identifier
|
|
401
569
|
* then RSB_length (3 bytes) → P
|
|
402
570
|
* then RS_ID (3 bytes) → ESI = K + RS_ID
|
|
403
|
-
* then SSB_length (3 bytes) → K
|
|
571
|
+
* then SSB_length (3 bytes) → authored source-symbol count (1..=K)
|
|
404
572
|
* then Repair Symbol Data (T bytes)
|
|
405
573
|
*
|
|
406
574
|
* @param frame - Raw MoQ repair frame bytes
|
|
407
575
|
* @returns Parsed frame or null if invalid
|
|
408
576
|
*/
|
|
409
577
|
export function parseMoqRepairFrame(frame) {
|
|
410
|
-
|
|
578
|
+
return moqRepairFrameFrom(frame, readRepairFecPayloadIdFields(frame));
|
|
579
|
+
}
|
|
580
|
+
/**
|
|
581
|
+
* parseMoqRepairFrame for a caller that already holds this frame's parsed MMTP
|
|
582
|
+
* header, so the header is not parsed a second time (BLO-36599). The router's
|
|
583
|
+
* multicast repair branch uses it: one repair packet in every K + P otherwise
|
|
584
|
+
* paid two header parses.
|
|
585
|
+
*
|
|
586
|
+
* `header` must be `parseMMTPHeader(frame)` of this same frame; the result is
|
|
587
|
+
* then identical to `parseMoqRepairFrame(frame)`.
|
|
588
|
+
*/
|
|
589
|
+
export function parseMoqRepairFrameWithHeader(frame, header) {
|
|
590
|
+
return moqRepairFrameFrom(frame, readRepairFecPayloadIdFields(frame, header));
|
|
591
|
+
}
|
|
592
|
+
function moqRepairFrameFrom(frame, repairId) {
|
|
411
593
|
if (!repairId)
|
|
412
594
|
return null;
|
|
413
595
|
const symbolData = frame.subarray(repairId.dataOffset);
|
|
@@ -425,144 +607,6 @@ export function parseMoqRepairFrame(frame) {
|
|
|
425
607
|
symbolData,
|
|
426
608
|
};
|
|
427
609
|
}
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
return null;
|
|
431
|
-
const transferLength = (oti[0] * 0x1_0000_0000) +
|
|
432
|
-
(((oti[1] << 24) | (oti[2] << 16) | (oti[3] << 8) | oti[4]) >>> 0);
|
|
433
|
-
const symbolSize = (oti[6] << 8) | oti[7];
|
|
434
|
-
const sourceBlocks = oti[8];
|
|
435
|
-
const subBlocks = (oti[9] << 8) | oti[10];
|
|
436
|
-
const alignment = oti[11];
|
|
437
|
-
if (!Number.isSafeInteger(transferLength) || transferLength <= 0 ||
|
|
438
|
-
symbolSize !== repairSymbolSize || symbolSize === 0 || symbolSize % 8 !== 0 ||
|
|
439
|
-
sourceBlocks !== 1 || subBlocks !== 1 || alignment !== 8 ||
|
|
440
|
-
transferLength % symbolSize !== 0) {
|
|
441
|
-
return null;
|
|
442
|
-
}
|
|
443
|
-
const k = transferLength / symbolSize;
|
|
444
|
-
return Number.isInteger(k) && k >= 1 && k <= 56_403 ? k : null;
|
|
445
|
-
}
|
|
446
|
-
/**
|
|
447
|
-
* Parse AL-FEC signaling message from a full MMTP signaling packet.
|
|
448
|
-
*
|
|
449
|
-
* Wire format (ISO/IEC 23008-1:2023 Table C.3, Amendment 1:2025):
|
|
450
|
-
* [12-byte MMTP header (packet_type=0x02)]
|
|
451
|
-
* message_id(2) = 0x0203
|
|
452
|
-
* version(1)
|
|
453
|
-
* message_length(2) = length of remaining payload
|
|
454
|
-
* flags(1) = fec_flag(1) | private_fec_flag(1) | reserved(6)
|
|
455
|
-
* fec_flow_descriptor:
|
|
456
|
-
* length(2)
|
|
457
|
-
* num_flows(1)
|
|
458
|
-
* per flow:
|
|
459
|
-
* fec_flow_id(1), source_flow_id(1), num_assets(1), packet_ids(2*N),
|
|
460
|
-
* coding_params(1), repair_symbol_size(2),
|
|
461
|
-
* [one-stage]: repair_flow_id(2), fec_code_id(1),
|
|
462
|
-
* [private_fec_flag]: private_header(1){flag(1)|len(7)},
|
|
463
|
-
* current RaptorQ profile OTI(12) + interleave_depth(1)
|
|
464
|
-
* max_k(3), max_p(3), protection_window_time(4), protection_window_size(4)
|
|
465
|
-
*
|
|
466
|
-
* @param mmtpPacket Full MMTP packet including 12-byte header
|
|
467
|
-
* @returns Parsed config or null if not an AL-FEC signaling message
|
|
468
|
-
*/
|
|
469
|
-
export function parseAlFecMessage(mmtpPacket) {
|
|
470
|
-
if (mmtpPacket.length < MMTP_HEADER_SIZE + 9)
|
|
471
|
-
return null;
|
|
472
|
-
let header;
|
|
473
|
-
try {
|
|
474
|
-
header = parseMMTPHeader(mmtpPacket);
|
|
475
|
-
}
|
|
476
|
-
catch {
|
|
477
|
-
return null;
|
|
478
|
-
}
|
|
479
|
-
if (header.packetType !== PACKET_TYPE_SIGNALING || header.fecType !== 0)
|
|
480
|
-
return null;
|
|
481
|
-
const payload = mmtpPacket.subarray(header.headerLength);
|
|
482
|
-
if (payload.length < 9)
|
|
483
|
-
return null;
|
|
484
|
-
const view = new DataView(payload.buffer, payload.byteOffset, payload.byteLength);
|
|
485
|
-
let off = 0;
|
|
486
|
-
const messageId = view.getUint16(off, false);
|
|
487
|
-
off += 2;
|
|
488
|
-
if (messageId !== ALFEC_MESSAGE_ID)
|
|
489
|
-
return null;
|
|
490
|
-
const version = payload[off];
|
|
491
|
-
off += 1;
|
|
492
|
-
const messageLength = view.getUint16(off, false);
|
|
493
|
-
off += 2;
|
|
494
|
-
if (version !== 1 || messageLength === 0 || messageLength !== payload.length - off)
|
|
495
|
-
return null;
|
|
496
|
-
const flags = payload[off];
|
|
497
|
-
off += 1;
|
|
498
|
-
const fecFlag = (flags >> 7) & 1;
|
|
499
|
-
const privateFecFlag = (flags >> 6) & 1;
|
|
500
|
-
if (fecFlag !== 1 || privateFecFlag !== 1 || (flags & 0x3f) !== 0x3f)
|
|
501
|
-
return null;
|
|
502
|
-
if (off + 2 > payload.length)
|
|
503
|
-
return null;
|
|
504
|
-
const descriptorLength = view.getUint16(off, false);
|
|
505
|
-
off += 2;
|
|
506
|
-
const descriptorEnd = off + descriptorLength;
|
|
507
|
-
if (descriptorLength === 0 || descriptorEnd !== payload.length)
|
|
508
|
-
return null;
|
|
509
|
-
const numFlows = payload[off];
|
|
510
|
-
off += 1;
|
|
511
|
-
if (numFlows !== 1 || off + 3 > descriptorEnd)
|
|
512
|
-
return null;
|
|
513
|
-
off += 2; // fec_flow_id, source_flow_id
|
|
514
|
-
const numAssets = payload[off];
|
|
515
|
-
off += 1;
|
|
516
|
-
if (numAssets === 0 || off + (numAssets * 2) > descriptorEnd)
|
|
517
|
-
return null;
|
|
518
|
-
off += numAssets * 2;
|
|
519
|
-
if (off + 3 > descriptorEnd)
|
|
520
|
-
return null;
|
|
521
|
-
const codingParams = payload[off];
|
|
522
|
-
off += 1;
|
|
523
|
-
const fecCodingStructure = (codingParams >> 4) & 0x0f;
|
|
524
|
-
const ssbgMode = (codingParams >> 2) & 0x03;
|
|
525
|
-
const ffsrptsFlag = (codingParams >> 1) & 0x01;
|
|
526
|
-
const fecPayloadIdMode = codingParams & 0x01;
|
|
527
|
-
if (fecCodingStructure !== 1 || ssbgMode !== 0 || ffsrptsFlag !== 0 || fecPayloadIdMode !== 0) {
|
|
528
|
-
return null;
|
|
529
|
-
}
|
|
530
|
-
const repairSymbolSize = view.getUint16(off, false);
|
|
531
|
-
off += 2;
|
|
532
|
-
if (repairSymbolSize === 0 || repairSymbolSize % 8 !== 0)
|
|
533
|
-
return null;
|
|
534
|
-
if (off + 4 > descriptorEnd)
|
|
535
|
-
return null;
|
|
536
|
-
off += 2; // Amendment 1:2025 replaces Table C.3 with a 16-bit repair_flow_id
|
|
537
|
-
const fecCodeId = payload[off];
|
|
538
|
-
off += 1;
|
|
539
|
-
if (fecCodeId !== FEC_CODE_RAPTORQ)
|
|
540
|
-
return null;
|
|
541
|
-
const privateHeader = payload[off];
|
|
542
|
-
off += 1;
|
|
543
|
-
const privateFlag = privateHeader >> 7;
|
|
544
|
-
const privateFieldLength = privateHeader & 0x7f;
|
|
545
|
-
if (privateFlag !== 1 || privateFieldLength !== 13 || off + 13 > descriptorEnd)
|
|
546
|
-
return null;
|
|
547
|
-
const oti = payload.slice(off, off + 12);
|
|
548
|
-
off += 12;
|
|
549
|
-
const interleaveDepth = payload[off];
|
|
550
|
-
off += 1;
|
|
551
|
-
const otiK = canonicalRaptorQOtiK(oti, repairSymbolSize);
|
|
552
|
-
if (otiK === null || interleaveDepth === 0)
|
|
553
|
-
return null;
|
|
554
|
-
if (off + 14 !== descriptorEnd)
|
|
555
|
-
return null;
|
|
556
|
-
const maximumK = (payload[off] << 16) | (payload[off + 1] << 8) | payload[off + 2];
|
|
557
|
-
off += 3;
|
|
558
|
-
const maximumP = (payload[off] << 16) | (payload[off + 1] << 8) | payload[off + 2];
|
|
559
|
-
off += 3;
|
|
560
|
-
if (maximumK !== otiK || maximumP === 0 || maximumK + maximumP - 1 > 0x00ff_ffff) {
|
|
561
|
-
return null;
|
|
562
|
-
}
|
|
563
|
-
off += 8; // protection_window_time, protection_window_size
|
|
564
|
-
if (off !== descriptorEnd)
|
|
565
|
-
return null;
|
|
566
|
-
return { fecCodeId, fecPayloadIdMode, repairSymbolSize, maximumK, maximumP, interleaveDepth, oti };
|
|
567
|
-
}
|
|
610
|
+
// The signalling-message parsers (9.3.4.2 payload header, AL-FEC message,
|
|
611
|
+
// PA/MPT) live in ./signalling.ts.
|
|
568
612
|
//# sourceMappingURL=mmtp.js.map
|
package/dist/mmtp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mmtp.js","sourceRoot":"","sources":["../src/mmtp.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mmtp.js","sourceRoot":"","sources":["../src/mmtp.ts"],"names":[],"mappings":"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"}
|