@blockcast/mmt-base 0.1.0-main.cde7600fad6a → 0.1.0-main.ce3c8aeb7f68

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/dist/mmtp.d.ts CHANGED
@@ -90,6 +90,16 @@ export declare const FEC_CODE_RAPTORQ = 2;
90
90
  * Parse MMTP header from buffer
91
91
  */
92
92
  export declare function parseMMTPHeader(buffer: Uint8Array): MMTPHeader;
93
+ /**
94
+ * The MMTP `packet_id` of `buffer`, or null exactly when parseMMTPHeader would
95
+ * throw for it (short buffer, V != 0, truncated packet_counter or header
96
+ * extension).
97
+ *
98
+ * This is the per-packet filter a receiver runs before any other work, so it
99
+ * builds no header object, DataView or BigInt timestamp (BLO-36599). Use
100
+ * parseMMTPHeader when any other header field is needed.
101
+ */
102
+ export declare function readMMTPPacketId(buffer: Uint8Array): number | null;
93
103
  /**
94
104
  * Unwrap MMTP packet to extract payload
95
105
  */
@@ -157,6 +167,16 @@ export declare function explainMFURejection(mmtpPacket: Uint8Array, options?: {
157
167
  export declare function extractMFUPayload(mmtpPacket: Uint8Array, options?: {
158
168
  skipFecId?: boolean;
159
169
  }): MFUExtraction | null;
170
+ /**
171
+ * extractMFUPayload for a caller that already holds this packet's parsed MMTP
172
+ * header, so the header is not parsed a second time (BLO-36599).
173
+ *
174
+ * `header` must be `parseMMTPHeader(mmtpPacket)` of this same packet; the
175
+ * result is then identical to `extractMFUPayload(mmtpPacket, options)`.
176
+ */
177
+ export declare function extractMFUPayloadWithHeader(mmtpPacket: Uint8Array, header: MMTPHeader, options?: {
178
+ skipFecId?: boolean;
179
+ }): MFUExtraction | null;
160
180
  /**
161
181
  * Extract timestamp from MMTP packet
162
182
  */
@@ -188,6 +208,18 @@ export declare function extractFecPayloadId(mmtpPacket: Uint8Array): {
188
208
  * payload contains a four-byte Source FEC Payload ID.
189
209
  */
190
210
  export declare function hasSourceFecPayloadId(mmtpPacket: Uint8Array): boolean;
211
+ /**
212
+ * The Source FEC Payload ID of a packet whose MMTP header the caller already
213
+ * parsed, or null when the packet carries none: present only when FEC_type=1
214
+ * and the exact suffix after the ISO-declared MPU payload holds the four-byte
215
+ * ID (ISO/IEC 23008-1 §C.5.2). Same answer as extractFecPayloadId, without a
216
+ * second header parse (BLO-36599).
217
+ *
218
+ * `header` must be `parseMMTPHeader(mmtpPacket)` of this same packet.
219
+ */
220
+ export declare function sourceFecPayloadIdOf(mmtpPacket: Uint8Array, header: MMTPHeader): {
221
+ ssId: number;
222
+ } | null;
191
223
  /**
192
224
  * MMTP header-extension ext_type assigned to the detached ALTA authenticator
193
225
  * trailer (Path 2 / 08-07). Carried in an `[ext_type][ext_length][auth]`
@@ -247,6 +279,16 @@ export interface MoqRepairFrame {
247
279
  * @returns Parsed frame or null if invalid
248
280
  */
249
281
  export declare function parseMoqRepairFrame(frame: Uint8Array): MoqRepairFrame | null;
282
+ /**
283
+ * parseMoqRepairFrame for a caller that already holds this frame's parsed MMTP
284
+ * header, so the header is not parsed a second time (BLO-36599). The router's
285
+ * multicast repair branch uses it: one repair packet in every K + P otherwise
286
+ * paid two header parses.
287
+ *
288
+ * `header` must be `parseMMTPHeader(frame)` of this same frame; the result is
289
+ * then identical to `parseMoqRepairFrame(frame)`.
290
+ */
291
+ export declare function parseMoqRepairFrameWithHeader(frame: Uint8Array, header: MMTPHeader): MoqRepairFrame | null;
250
292
  /**
251
293
  * AL-FEC signaling configuration parsed from ISO/IEC 23008-1:2023 Table C.3 message.
252
294
  */
@@ -1 +1 @@
1
- {"version":3,"file":"mmtp.d.ts","sourceRoot":"","sources":["../src/mmtp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mmtp.d.ts","sourceRoot":"","sources":["../src/mmtp.ts"],"names":[],"mappings":"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"}
package/dist/mmtp.js CHANGED
@@ -91,6 +91,36 @@ export function parseMMTPHeader(buffer) {
91
91
  rapFlag,
92
92
  };
93
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
+ }
94
124
  /**
95
125
  * Unwrap MMTP packet to extract payload
96
126
  */
@@ -237,7 +267,7 @@ export function extractNALUnit(mmtpPacket) {
237
267
  * reason reported to operators can never drift from the decision the parser
238
268
  * actually made.
239
269
  */
240
- function planMfuExtraction(mmtpPacket, options) {
270
+ function planMfuExtraction(mmtpPacket, options, parsedHeader) {
241
271
  if (mmtpPacket.length < MMTP_HEADER_SIZE + MPU_HEADER_SIZE) {
242
272
  return {
243
273
  rejection: {
@@ -247,16 +277,21 @@ function planMfuExtraction(mmtpPacket, options) {
247
277
  };
248
278
  }
249
279
  let header;
250
- try {
251
- header = parseMMTPHeader(mmtpPacket);
280
+ if (parsedHeader) {
281
+ header = parsedHeader;
252
282
  }
253
- catch (error) {
254
- return {
255
- rejection: {
256
- gate: 'mmtp-header-unparseable',
257
- detail: error instanceof Error ? error.message : String(error),
258
- },
259
- };
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
+ }
260
295
  }
261
296
  if (header.packetType !== PACKET_TYPE_MPU) {
262
297
  return {
@@ -330,7 +365,19 @@ export function explainMFURejection(mmtpPacket, options) {
330
365
  return 'rejection' in result ? result.rejection : null;
331
366
  }
332
367
  export function extractMFUPayload(mmtpPacket, options) {
333
- const result = planMfuExtraction(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) {
334
381
  if ('rejection' in result)
335
382
  return null;
336
383
  const { header, payload, mpu, fragmentType, layout, trailerLayout } = result.plan;
@@ -383,37 +430,59 @@ export function isFecRepairPacket(mmtpPacket) {
383
430
  * and ATSC A/331 §8.1.2.5 which defers to ISO 23008-1 Annex C.
384
431
  */
385
432
  export function extractFecPayloadId(mmtpPacket) {
386
- if (!hasSourceFecPayloadId(mmtpPacket))
387
- return null;
388
- // Flat 4-byte SS_ID: encoder writes block_id * K + symbol_id
389
- const off = mmtpPacket.length - SOURCE_FEC_PAYLOAD_ID_SIZE;
390
- const view = new DataView(mmtpPacket.buffer, mmtpPacket.byteOffset + off, SOURCE_FEC_PAYLOAD_ID_SIZE);
391
- return { ssId: view.getUint32(0, false) };
433
+ const header = parseHeaderForSourceFecId(mmtpPacket);
434
+ return header ? sourceFecPayloadIdOf(mmtpPacket, header) : null;
392
435
  }
393
436
  /**
394
437
  * Return true when FEC_type=1 and the exact suffix after the ISO-declared MPU
395
438
  * payload contains a four-byte Source FEC Payload ID.
396
439
  */
397
440
  export function hasSourceFecPayloadId(mmtpPacket) {
441
+ const header = parseHeaderForSourceFecId(mmtpPacket);
442
+ return header !== null && sourceFecPayloadIdOf(mmtpPacket, header) !== null;
443
+ }
444
+ function parseHeaderForSourceFecId(mmtpPacket) {
398
445
  if (mmtpPacket.length < MMTP_HEADER_SIZE + MPU_HEADER_SIZE)
399
- return false;
400
- let header;
446
+ return null;
401
447
  try {
402
- header = parseMMTPHeader(mmtpPacket);
448
+ return parseMMTPHeader(mmtpPacket);
403
449
  }
404
450
  catch {
405
- return false;
451
+ return null;
406
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;
407
466
  if (header.packetType !== PACKET_TYPE_MPU)
408
- return false;
467
+ return null;
409
468
  const payload = mmtpPacket.subarray(header.headerLength);
410
469
  if (payload.length < MPU_HEADER_SIZE)
411
- return false;
412
- const mpu = parseMPUHeader(payload);
413
- if (mpu.payloadLength < MPU_HEADER_REMAINDER_SIZE)
414
- return false;
415
- const declaredEnd = MPU_LENGTH_FIELD_SIZE + mpu.payloadLength;
416
- return resolveDeclaredTrailers(payload, declaredEnd, header.fecType)?.hasFecId ?? false;
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
+ };
417
486
  }
418
487
  /**
419
488
  * MMTP header-extension ext_type assigned to the detached ALTA authenticator
@@ -431,22 +500,34 @@ export const MMTP_EXT_TRAILER_HEADER_SIZE = _LEAF_MMTP_EXT_TRAILER_HEADER_SIZE;
431
500
  export const extractAltaTrailer = _leafExtractAltaTrailer;
432
501
  /** Size of Repair FEC Payload ID per ISO/IEC 23008-1 Section C.5.3 */
433
502
  export const REPAIR_FEC_PID_SIZE = 13;
434
- /** Parse the 13-byte Repair FEC Payload ID after the complete dynamic MMTP header. */
435
- function readRepairFecPayloadIdFields(mmtpPacket) {
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) {
436
509
  let header;
437
- try {
438
- header = parseMMTPHeader(mmtpPacket);
510
+ if (parsedHeader) {
511
+ header = parsedHeader;
439
512
  }
440
- catch {
441
- return null;
513
+ else {
514
+ try {
515
+ header = parseMMTPHeader(mmtpPacket);
516
+ }
517
+ catch {
518
+ return null;
519
+ }
442
520
  }
443
521
  if (header.packetType !== PACKET_TYPE_REPAIR || header.fecType !== 2)
444
522
  return null;
445
523
  const off = header.headerLength;
446
524
  if (mmtpPacket.length < off + REPAIR_FEC_PID_SIZE)
447
525
  return null;
448
- const view = new DataView(mmtpPacket.buffer, mmtpPacket.byteOffset + off, REPAIR_FEC_PID_SIZE);
449
- const ssStart = view.getUint32(0, false); // 32 bits
526
+ const ssStart = ((mmtpPacket[off] << 24) |
527
+ (mmtpPacket[off + 1] << 16) |
528
+ (mmtpPacket[off + 2] << 8) |
529
+ mmtpPacket[off + 3]) >>>
530
+ 0; // 32 bits
450
531
  const rsbLength = (mmtpPacket[off + 4] << 16) | (mmtpPacket[off + 5] << 8) | mmtpPacket[off + 6]; // 24 bits
451
532
  const rsId = (mmtpPacket[off + 7] << 16) | (mmtpPacket[off + 8] << 8) | mmtpPacket[off + 9]; // 24 bits
452
533
  const ssbLength = (mmtpPacket[off + 10] << 16) | (mmtpPacket[off + 11] << 8) | mmtpPacket[off + 12]; // 24 bits
@@ -494,7 +575,21 @@ export function extractRepairFecPayloadId(mmtpPacket) {
494
575
  * @returns Parsed frame or null if invalid
495
576
  */
496
577
  export function parseMoqRepairFrame(frame) {
497
- const repairId = readRepairFecPayloadIdFields(frame);
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) {
498
593
  if (!repairId)
499
594
  return null;
500
595
  const symbolData = frame.subarray(repairId.dataOffset);
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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blockcast/mmt-base",
3
- "version": "0.1.0-main.cde7600fad6a",
3
+ "version": "0.1.0-main.ce3c8aeb7f68",
4
4
  "description": "Shared MMTP packet parsing primitives (zero FEC dependency). Hosts MMTP_HEADER_SIZE, parseMMTPHeader, extractMFUPayload, and friends so both @blockcast/mmt-fec and @blockcast/mmt-container can import them without a circular dep.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -29,7 +29,7 @@
29
29
  "test:watch": "vitest"
30
30
  },
31
31
  "dependencies": {
32
- "@blockcast/mmt-alta-parse": "0.1.0-main.cde7600fad6a"
32
+ "@blockcast/mmt-alta-parse": "0.1.0-main.ce3c8aeb7f68"
33
33
  },
34
34
  "devDependencies": {
35
35
  "typescript": "^5.3.0",
package/src/mmtp.ts CHANGED
@@ -183,6 +183,32 @@ export function parseMMTPHeader(buffer: Uint8Array): MMTPHeader {
183
183
  }
184
184
  }
185
185
 
186
+ /**
187
+ * The MMTP `packet_id` of `buffer`, or null exactly when parseMMTPHeader would
188
+ * throw for it (short buffer, V != 0, truncated packet_counter or header
189
+ * extension).
190
+ *
191
+ * This is the per-packet filter a receiver runs before any other work, so it
192
+ * builds no header object, DataView or BigInt timestamp (BLO-36599). Use
193
+ * parseMMTPHeader when any other header field is needed.
194
+ */
195
+ export function readMMTPPacketId(buffer: Uint8Array): number | null {
196
+ if (buffer.length < MMTP_HEADER_SIZE) return null
197
+ const flags = buffer[0]!
198
+ if (((flags >> 6) & 0x03) !== 0) return null
199
+ let offset = MMTP_HEADER_SIZE
200
+ if ((flags & 0x20) !== 0) {
201
+ if (offset + 4 > buffer.length) return null
202
+ offset += 4
203
+ }
204
+ if ((flags & 0x02) !== 0) {
205
+ if (offset + 4 > buffer.length) return null
206
+ const length = (buffer[offset + 2]! << 8) | buffer[offset + 3]!
207
+ if (offset + 4 + length > buffer.length) return null
208
+ }
209
+ return (buffer[2]! << 8) | buffer[3]!
210
+ }
211
+
186
212
  /**
187
213
  * Unwrap MMTP packet to extract payload
188
214
  */
@@ -445,6 +471,7 @@ interface MfuPlan {
445
471
  function planMfuExtraction(
446
472
  mmtpPacket: Uint8Array,
447
473
  options?: { skipFecId?: boolean },
474
+ parsedHeader?: MMTPHeader,
448
475
  ): { plan: MfuPlan } | { rejection: MFURejection } {
449
476
  if (mmtpPacket.length < MMTP_HEADER_SIZE + MPU_HEADER_SIZE) {
450
477
  return {
@@ -456,14 +483,18 @@ function planMfuExtraction(
456
483
  }
457
484
 
458
485
  let header: MMTPHeader
459
- try {
460
- header = parseMMTPHeader(mmtpPacket)
461
- } catch (error) {
462
- return {
463
- rejection: {
464
- gate: 'mmtp-header-unparseable',
465
- detail: error instanceof Error ? error.message : String(error),
466
- },
486
+ if (parsedHeader) {
487
+ header = parsedHeader
488
+ } else {
489
+ try {
490
+ header = parseMMTPHeader(mmtpPacket)
491
+ } catch (error) {
492
+ return {
493
+ rejection: {
494
+ gate: 'mmtp-header-unparseable',
495
+ detail: error instanceof Error ? error.message : String(error),
496
+ },
497
+ }
467
498
  }
468
499
  }
469
500
  if (header.packetType !== PACKET_TYPE_MPU) {
@@ -558,7 +589,28 @@ export function extractMFUPayload(
558
589
  mmtpPacket: Uint8Array,
559
590
  options?: { skipFecId?: boolean },
560
591
  ): MFUExtraction | null {
561
- const result = planMfuExtraction(mmtpPacket, options)
592
+ return extractPlannedMfu(mmtpPacket, planMfuExtraction(mmtpPacket, options))
593
+ }
594
+
595
+ /**
596
+ * extractMFUPayload for a caller that already holds this packet's parsed MMTP
597
+ * header, so the header is not parsed a second time (BLO-36599).
598
+ *
599
+ * `header` must be `parseMMTPHeader(mmtpPacket)` of this same packet; the
600
+ * result is then identical to `extractMFUPayload(mmtpPacket, options)`.
601
+ */
602
+ export function extractMFUPayloadWithHeader(
603
+ mmtpPacket: Uint8Array,
604
+ header: MMTPHeader,
605
+ options?: { skipFecId?: boolean },
606
+ ): MFUExtraction | null {
607
+ return extractPlannedMfu(mmtpPacket, planMfuExtraction(mmtpPacket, options, header))
608
+ }
609
+
610
+ function extractPlannedMfu(
611
+ mmtpPacket: Uint8Array,
612
+ result: { plan: MfuPlan } | { rejection: MFURejection },
613
+ ): MFUExtraction | null {
562
614
  if ('rejection' in result) return null
563
615
  const { header, payload, mpu, fragmentType, layout, trailerLayout } = result.plan
564
616
 
@@ -623,15 +675,8 @@ export function isFecRepairPacket(mmtpPacket: Uint8Array): boolean {
623
675
  * and ATSC A/331 §8.1.2.5 which defers to ISO 23008-1 Annex C.
624
676
  */
625
677
  export function extractFecPayloadId(mmtpPacket: Uint8Array): { ssId: number } | null {
626
- if (!hasSourceFecPayloadId(mmtpPacket)) return null
627
- // Flat 4-byte SS_ID: encoder writes block_id * K + symbol_id
628
- const off = mmtpPacket.length - SOURCE_FEC_PAYLOAD_ID_SIZE
629
- const view = new DataView(
630
- mmtpPacket.buffer,
631
- mmtpPacket.byteOffset + off,
632
- SOURCE_FEC_PAYLOAD_ID_SIZE,
633
- )
634
- return { ssId: view.getUint32(0, false) }
678
+ const header = parseHeaderForSourceFecId(mmtpPacket)
679
+ return header ? sourceFecPayloadIdOf(mmtpPacket, header) : null
635
680
  }
636
681
 
637
682
  /**
@@ -639,22 +684,52 @@ export function extractFecPayloadId(mmtpPacket: Uint8Array): { ssId: number } |
639
684
  * payload contains a four-byte Source FEC Payload ID.
640
685
  */
641
686
  export function hasSourceFecPayloadId(mmtpPacket: Uint8Array): boolean {
642
- if (mmtpPacket.length < MMTP_HEADER_SIZE + MPU_HEADER_SIZE) return false
687
+ const header = parseHeaderForSourceFecId(mmtpPacket)
688
+ return header !== null && sourceFecPayloadIdOf(mmtpPacket, header) !== null
689
+ }
643
690
 
644
- let header: MMTPHeader
691
+ function parseHeaderForSourceFecId(mmtpPacket: Uint8Array): MMTPHeader | null {
692
+ if (mmtpPacket.length < MMTP_HEADER_SIZE + MPU_HEADER_SIZE) return null
645
693
  try {
646
- header = parseMMTPHeader(mmtpPacket)
694
+ return parseMMTPHeader(mmtpPacket)
647
695
  } catch {
648
- return false
696
+ return null
649
697
  }
650
- if (header.packetType !== PACKET_TYPE_MPU) return false
698
+ }
699
+
700
+ /**
701
+ * The Source FEC Payload ID of a packet whose MMTP header the caller already
702
+ * parsed, or null when the packet carries none: present only when FEC_type=1
703
+ * and the exact suffix after the ISO-declared MPU payload holds the four-byte
704
+ * ID (ISO/IEC 23008-1 §C.5.2). Same answer as extractFecPayloadId, without a
705
+ * second header parse (BLO-36599).
706
+ *
707
+ * `header` must be `parseMMTPHeader(mmtpPacket)` of this same packet.
708
+ */
709
+ export function sourceFecPayloadIdOf(
710
+ mmtpPacket: Uint8Array,
711
+ header: MMTPHeader,
712
+ ): { ssId: number } | null {
713
+ if (mmtpPacket.length < MMTP_HEADER_SIZE + MPU_HEADER_SIZE) return null
714
+ if (header.packetType !== PACKET_TYPE_MPU) return null
651
715
 
652
716
  const payload = mmtpPacket.subarray(header.headerLength)
653
- if (payload.length < MPU_HEADER_SIZE) return false
654
- const mpu = parseMPUHeader(payload)
655
- if (mpu.payloadLength < MPU_HEADER_REMAINDER_SIZE) return false
656
- const declaredEnd = MPU_LENGTH_FIELD_SIZE + mpu.payloadLength
657
- return resolveDeclaredTrailers(payload, declaredEnd, header.fecType)?.hasFecId ?? false
717
+ if (payload.length < MPU_HEADER_SIZE) return null
718
+ const payloadLength = (payload[0]! << 8) | payload[1]!
719
+ if (payloadLength < MPU_HEADER_REMAINDER_SIZE) return null
720
+ const declaredEnd = MPU_LENGTH_FIELD_SIZE + payloadLength
721
+ if (!resolveDeclaredTrailers(payload, declaredEnd, header.fecType)?.hasFecId) return null
722
+
723
+ // Flat 4-byte SS_ID: encoder writes block_id * K + symbol_id
724
+ const off = mmtpPacket.length - SOURCE_FEC_PAYLOAD_ID_SIZE
725
+ return {
726
+ ssId:
727
+ ((mmtpPacket[off]! << 24) |
728
+ (mmtpPacket[off + 1]! << 16) |
729
+ (mmtpPacket[off + 2]! << 8) |
730
+ mmtpPacket[off + 3]!) >>>
731
+ 0,
732
+ }
658
733
  }
659
734
 
660
735
  /**
@@ -676,22 +751,34 @@ export const extractAltaTrailer = _leafExtractAltaTrailer
676
751
  /** Size of Repair FEC Payload ID per ISO/IEC 23008-1 Section C.5.3 */
677
752
  export const REPAIR_FEC_PID_SIZE = 13
678
753
 
679
- /** Parse the 13-byte Repair FEC Payload ID after the complete dynamic MMTP header. */
680
- function readRepairFecPayloadIdFields(mmtpPacket: Uint8Array): {
754
+ /**
755
+ * Parse the 13-byte Repair FEC Payload ID after the complete dynamic MMTP header.
756
+ * `parsedHeader`, when given, must be `parseMMTPHeader(mmtpPacket)` of this
757
+ * same packet; it spares the second header parse (BLO-36599).
758
+ */
759
+ function readRepairFecPayloadIdFields(mmtpPacket: Uint8Array, parsedHeader?: MMTPHeader): {
681
760
  packetId: number; ssStart: number; rsbLength: number; rsId: number; ssbLength: number; dataOffset: number
682
761
  } | null {
683
762
  let header: MMTPHeader
684
- try {
685
- header = parseMMTPHeader(mmtpPacket)
686
- } catch {
687
- return null
763
+ if (parsedHeader) {
764
+ header = parsedHeader
765
+ } else {
766
+ try {
767
+ header = parseMMTPHeader(mmtpPacket)
768
+ } catch {
769
+ return null
770
+ }
688
771
  }
689
772
  if (header.packetType !== PACKET_TYPE_REPAIR || header.fecType !== 2) return null
690
773
 
691
774
  const off = header.headerLength
692
775
  if (mmtpPacket.length < off + REPAIR_FEC_PID_SIZE) return null
693
- const view = new DataView(mmtpPacket.buffer, mmtpPacket.byteOffset + off, REPAIR_FEC_PID_SIZE)
694
- const ssStart = view.getUint32(0, false) // 32 bits
776
+ const ssStart =
777
+ ((mmtpPacket[off]! << 24) |
778
+ (mmtpPacket[off + 1]! << 16) |
779
+ (mmtpPacket[off + 2]! << 8) |
780
+ mmtpPacket[off + 3]!) >>>
781
+ 0 // 32 bits
695
782
  const rsbLength = (mmtpPacket[off + 4]! << 16) | (mmtpPacket[off + 5]! << 8) | mmtpPacket[off + 6]! // 24 bits
696
783
  const rsId = (mmtpPacket[off + 7]! << 16) | (mmtpPacket[off + 8]! << 8) | mmtpPacket[off + 9]! // 24 bits
697
784
  const ssbLength = (mmtpPacket[off + 10]! << 16) | (mmtpPacket[off + 11]! << 8) | mmtpPacket[off + 12]! // 24 bits
@@ -758,7 +845,29 @@ export interface MoqRepairFrame {
758
845
  * @returns Parsed frame or null if invalid
759
846
  */
760
847
  export function parseMoqRepairFrame(frame: Uint8Array): MoqRepairFrame | null {
761
- const repairId = readRepairFecPayloadIdFields(frame)
848
+ return moqRepairFrameFrom(frame, readRepairFecPayloadIdFields(frame))
849
+ }
850
+
851
+ /**
852
+ * parseMoqRepairFrame for a caller that already holds this frame's parsed MMTP
853
+ * header, so the header is not parsed a second time (BLO-36599). The router's
854
+ * multicast repair branch uses it: one repair packet in every K + P otherwise
855
+ * paid two header parses.
856
+ *
857
+ * `header` must be `parseMMTPHeader(frame)` of this same frame; the result is
858
+ * then identical to `parseMoqRepairFrame(frame)`.
859
+ */
860
+ export function parseMoqRepairFrameWithHeader(
861
+ frame: Uint8Array,
862
+ header: MMTPHeader,
863
+ ): MoqRepairFrame | null {
864
+ return moqRepairFrameFrom(frame, readRepairFecPayloadIdFields(frame, header))
865
+ }
866
+
867
+ function moqRepairFrameFrom(
868
+ frame: Uint8Array,
869
+ repairId: ReturnType<typeof readRepairFecPayloadIdFields>,
870
+ ): MoqRepairFrame | null {
762
871
  if (!repairId) return null
763
872
 
764
873
  const symbolData = frame.subarray(repairId.dataOffset)