@blockcast/mmt-base 0.3.0 → 0.4.0-main.248efb07e294
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 +8 -18
- package/dist/catalog-fec-source.d.ts +88 -0
- package/dist/catalog-fec-source.d.ts.map +1 -0
- package/dist/catalog-fec-source.js +154 -0
- package/dist/catalog-fec-source.js.map +1 -0
- package/dist/fec-block-profile.d.ts +7 -7
- package/dist/fec-block-profile.d.ts.map +1 -1
- package/dist/fec-block-profile.js +22 -18
- package/dist/fec-block-profile.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/mmtp.d.ts +28 -24
- package/dist/mmtp.d.ts.map +1 -1
- package/dist/mmtp.js +63 -41
- package/dist/mmtp.js.map +1 -1
- package/dist/multicast-catalog.d.ts +75 -0
- package/dist/multicast-catalog.d.ts.map +1 -0
- package/dist/multicast-catalog.js +318 -0
- package/dist/multicast-catalog.js.map +1 -0
- package/dist/serial-number.d.ts +0 -29
- package/dist/serial-number.d.ts.map +1 -1
- package/dist/serial-number.js +0 -54
- package/dist/serial-number.js.map +1 -1
- package/dist/signalling.d.ts +49 -33
- package/dist/signalling.d.ts.map +1 -1
- package/dist/signalling.js +72 -58
- package/dist/signalling.js.map +1 -1
- package/package.json +2 -4
- package/src/catalog-fec-source.ts +183 -0
- package/src/fec-block-profile.ts +24 -24
- package/src/index.ts +2 -0
- package/src/mmtp.ts +78 -59
- package/src/multicast-catalog.ts +350 -0
- package/src/serial-number.ts +0 -58
- package/src/signalling.ts +87 -75
package/dist/signalling.js
CHANGED
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* receiver that refuses a reserved value cannot accept a conformant revision
|
|
21
21
|
* of the syntax that assigns it.
|
|
22
22
|
*/
|
|
23
|
-
import { ALFEC_MESSAGE_ID, FEC_CODE_RAPTORQ, PACKET_TYPE_SIGNALING, parseMMTPHeader, } from './mmtp.js';
|
|
23
|
+
import { ALFEC_MESSAGE_ID, FEC_CODE_RAPTORQ, FEC_CODE_REED_SOLOMON, MMTP_SIGNALING_PACKET_ID, PACKET_TYPE_SIGNALING, parseMMTPHeader, } from './mmtp.js';
|
|
24
24
|
// ---------------------------------------------------------------------------
|
|
25
25
|
// Wire reader
|
|
26
26
|
// ---------------------------------------------------------------------------
|
|
@@ -116,9 +116,6 @@ export function parseSignallingPayload(mmtpPacket) {
|
|
|
116
116
|
function splitSignallingPayload(payload) {
|
|
117
117
|
if (payload.length < 2)
|
|
118
118
|
fail('short signalling payload');
|
|
119
|
-
if (payload[0] === (ALFEC_MESSAGE_ID >> 8) && payload[1] === (ALFEC_MESSAGE_ID & 0xff)) {
|
|
120
|
-
return { form: 'legacy-bare-alfec', messages: [payload] };
|
|
121
|
-
}
|
|
122
119
|
const reader = new WireReader(payload);
|
|
123
120
|
const flags = reader.u8();
|
|
124
121
|
const fragmentation = flags >> 6;
|
|
@@ -320,9 +317,9 @@ export function parseAlFecMessageBody(message) {
|
|
|
320
317
|
});
|
|
321
318
|
}
|
|
322
319
|
/**
|
|
323
|
-
* Parse the AL-FEC message carried by a full MMTP signalling packet
|
|
324
|
-
*
|
|
325
|
-
*
|
|
320
|
+
* Parse the AL-FEC message carried by a full MMTP signalling packet (a
|
|
321
|
+
* 9.3.4.2 payload, see SignallingPayloadForm). Returns null when the packet
|
|
322
|
+
* carries no AL-FEC message, more than one, or a malformed one.
|
|
326
323
|
*/
|
|
327
324
|
export function parseAlFecMessage(mmtpPacket) {
|
|
328
325
|
const packet = parseSignallingPacket(mmtpPacket);
|
|
@@ -333,77 +330,97 @@ export function parseAlFecMessage(mmtpPacket) {
|
|
|
333
330
|
return null;
|
|
334
331
|
return { ...alFec[0].message, payloadForm: packet.payloadForm };
|
|
335
332
|
}
|
|
336
|
-
const RAPTORQ_PRIVATE_FIELD_LENGTH = 13;
|
|
337
333
|
const RAPTORQ_MAX_SOURCE_SYMBOLS = 56_403;
|
|
338
334
|
const REPAIR_SYMBOL_ID_MAX = 0x00ff_ffff;
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
const transferLength = (oti[0] * 0x1_0000_0000) +
|
|
343
|
-
(((oti[1] << 24) | (oti[2] << 16) | (oti[3] << 8) | oti[4]) >>> 0);
|
|
344
|
-
const symbolSize = (oti[6] << 8) | oti[7];
|
|
345
|
-
const sourceBlocks = oti[8];
|
|
346
|
-
const subBlocks = (oti[9] << 8) | oti[10];
|
|
347
|
-
const alignment = oti[11];
|
|
348
|
-
if (!Number.isSafeInteger(transferLength) || transferLength <= 0 ||
|
|
349
|
-
symbolSize !== repairSymbolSize || symbolSize === 0 || symbolSize % 8 !== 0 ||
|
|
350
|
-
sourceBlocks !== 1 || subBlocks !== 1 || alignment !== 8 ||
|
|
351
|
-
transferLength % symbolSize !== 0) {
|
|
352
|
-
return null;
|
|
353
|
-
}
|
|
354
|
-
const k = transferLength / symbolSize;
|
|
355
|
-
return Number.isInteger(k) && k >= 1 && k <= RAPTORQ_MAX_SOURCE_SYMBOLS ? k : null;
|
|
356
|
-
}
|
|
335
|
+
/** The 12-octet MMTP header plus the 2-octet length of the T - 2 construction (moq-fec-01 Section 7.3). */
|
|
336
|
+
const MIN_REPAIR_SYMBOL_SIZE = 14;
|
|
337
|
+
const REED_SOLOMON_MAX_BLOCK = 255;
|
|
357
338
|
/**
|
|
358
|
-
* Validate one parsed FEC flow against
|
|
359
|
-
*
|
|
360
|
-
*
|
|
361
|
-
*
|
|
339
|
+
* Validate one parsed FEC flow against draft-ramadan-moq-mmt-01 Sections 8.3
|
|
340
|
+
* and 12.2 and return its decoder geometry, or null when the entry is
|
|
341
|
+
* outside them. Fail closed on everything else:
|
|
342
|
+
*
|
|
343
|
+
* - coding byte other than 0x14 (one-stage, ssbg_mode1, ffsrpts_flag 0,
|
|
344
|
+
* fec_payload_id_mode 0). 0x15 is fec_payload_id_mode 1 under Amd 1:2025,
|
|
345
|
+
* which "iso-ssbg1-v1" does not describe (moq-fec-01 Section 7.3);
|
|
346
|
+
* - number_of_assets other than 1;
|
|
347
|
+
* - fec_code_id_for_repair_flow other than 3 or 1, the retired Blockcast
|
|
348
|
+
* code 2 included (ISO/IEC 23008-10 Table 1);
|
|
349
|
+
* - T < 14, K = 0, P = 0, K + P - 1 > 2^24 - 1;
|
|
350
|
+
* - RaptorQ: T not a multiple of 8, or K > 56403;
|
|
351
|
+
* - Reed-Solomon: K + P > 255;
|
|
352
|
+
* - repair_flow_id 0 (the signalling flow) or the flow's own packet_id.
|
|
362
353
|
*
|
|
363
|
-
*
|
|
364
|
-
*
|
|
365
|
-
* by its consumer, not here. ffsrpts_flag=1 is refused because the FFSRP_TS
|
|
366
|
-
* word changes the source/repair packet trailer layout that every Blockcast
|
|
367
|
-
* receiver assumes.
|
|
354
|
+
* Checks that span entries (another entry's packet_id, a duplicate
|
|
355
|
+
* repair_flow_id or Asset) are `alFecMessageFlowConfigs`'.
|
|
368
356
|
*/
|
|
369
357
|
export function alFecRaptorQFlowConfig(flow) {
|
|
370
358
|
if (flow.fecCodingStructure !== FEC_CODING_STRUCTURE_ONE_STAGE || flow.repairFlows.length !== 1)
|
|
371
359
|
return null;
|
|
372
|
-
if (flow.ssbgMode !==
|
|
360
|
+
if (flow.ssbgMode !== SSBG_MODE_1 || flow.ffsrptsFlag !== 0 || flow.fecPayloadIdMode !== 0)
|
|
373
361
|
return null;
|
|
374
|
-
if (flow.
|
|
362
|
+
if (flow.packetIds.length !== 1)
|
|
375
363
|
return null;
|
|
376
364
|
const repair = flow.repairFlows[0];
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
if (!privateField || privateField.privateFlag !== 1 ||
|
|
381
|
-
privateField.data.length !== RAPTORQ_PRIVATE_FIELD_LENGTH) {
|
|
365
|
+
const { fecCodeId, maximumK: k, maximumP: p } = repair;
|
|
366
|
+
const t = flow.repairSymbolSize;
|
|
367
|
+
if (t < MIN_REPAIR_SYMBOL_SIZE || k < 1 || p < 1 || k + p - 1 > REPAIR_SYMBOL_ID_MAX)
|
|
382
368
|
return null;
|
|
369
|
+
if (fecCodeId === FEC_CODE_RAPTORQ) {
|
|
370
|
+
if (t % 8 !== 0 || k > RAPTORQ_MAX_SOURCE_SYMBOLS)
|
|
371
|
+
return null;
|
|
383
372
|
}
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
if (repair.maximumK !== otiK || repair.maximumP === 0 ||
|
|
390
|
-
repair.maximumK + repair.maximumP - 1 > REPAIR_SYMBOL_ID_MAX) {
|
|
373
|
+
else if (fecCodeId === FEC_CODE_REED_SOLOMON) {
|
|
374
|
+
if (k + p > REED_SOLOMON_MAX_BLOCK)
|
|
375
|
+
return null;
|
|
376
|
+
}
|
|
377
|
+
else {
|
|
391
378
|
return null;
|
|
392
379
|
}
|
|
380
|
+
if (repair.repairFlowId === MMTP_SIGNALING_PACKET_ID || repair.repairFlowId === flow.packetIds[0])
|
|
381
|
+
return null;
|
|
393
382
|
return {
|
|
394
383
|
sourcePacketIds: [...flow.packetIds],
|
|
395
384
|
repairFlowId: repair.repairFlowId,
|
|
385
|
+
fecCodeId,
|
|
396
386
|
ssbgMode: flow.ssbgMode,
|
|
397
387
|
fecPayloadIdMode: flow.fecPayloadIdMode,
|
|
398
|
-
repairSymbolSize:
|
|
399
|
-
maximumK:
|
|
400
|
-
maximumP:
|
|
401
|
-
interleaveDepth,
|
|
402
|
-
oti,
|
|
388
|
+
repairSymbolSize: t,
|
|
389
|
+
maximumK: k,
|
|
390
|
+
maximumP: p,
|
|
403
391
|
protectionWindowTime: repair.protectionWindowTime,
|
|
404
392
|
protectionWindowSize: repair.protectionWindowSize,
|
|
405
393
|
};
|
|
406
394
|
}
|
|
395
|
+
/**
|
|
396
|
+
* `alFecRaptorQFlowConfig` for every entry of a message, index for index,
|
|
397
|
+
* plus the draft-ramadan-moq-mmt-01 Section 12.2 checks that span entries: an
|
|
398
|
+
* entry whose repair_flow_id is another entry's Asset packet_id, and every
|
|
399
|
+
* entry of two that name one repair_flow_id or list one Asset, is null.
|
|
400
|
+
*/
|
|
401
|
+
export function alFecMessageFlowConfigs(message) {
|
|
402
|
+
const assetCount = new Map();
|
|
403
|
+
const repairCount = new Map();
|
|
404
|
+
const bump = (map, key) => map.set(key, (map.get(key) ?? 0) + 1);
|
|
405
|
+
for (const flow of message.flows) {
|
|
406
|
+
for (const id of flow.packetIds)
|
|
407
|
+
bump(assetCount, id);
|
|
408
|
+
for (const repair of flow.repairFlows)
|
|
409
|
+
bump(repairCount, repair.repairFlowId);
|
|
410
|
+
}
|
|
411
|
+
return message.flows.map(flow => {
|
|
412
|
+
const config = alFecRaptorQFlowConfig(flow);
|
|
413
|
+
if (!config)
|
|
414
|
+
return null;
|
|
415
|
+
const [asset] = config.sourcePacketIds;
|
|
416
|
+
if (assetCount.get(asset) !== 1 || repairCount.get(config.repairFlowId) !== 1)
|
|
417
|
+
return null;
|
|
418
|
+
// Its own packet_id is already refused, so any count here is another entry's.
|
|
419
|
+
if (assetCount.has(config.repairFlowId))
|
|
420
|
+
return null;
|
|
421
|
+
return config;
|
|
422
|
+
});
|
|
423
|
+
}
|
|
407
424
|
/**
|
|
408
425
|
* MMT_general_location_info() for an Asset location. "Only the value of
|
|
409
426
|
* location_type between 0x00 and 0x06 shall be used for an Asset location"
|
|
@@ -620,10 +637,7 @@ function decodeSignallingMessage(bytes) {
|
|
|
620
637
|
* Parse every signalling message of a full MMTP signalling packet (the
|
|
621
638
|
* packet_id 0 flow). Returns null when the packet or any message in it is
|
|
622
639
|
* malformed: one unparseable message leaves the receiver unable to say what
|
|
623
|
-
* the packet signalled.
|
|
624
|
-
*
|
|
625
|
-
* The legacy bare form carries exactly one AL-FEC message; any other message
|
|
626
|
-
* is only accepted inside a 9.3.4.2 payload.
|
|
640
|
+
* the packet signalled. Only the 9.3.4.2 payload form is accepted.
|
|
627
641
|
*/
|
|
628
642
|
export function parseSignallingPacket(mmtpPacket) {
|
|
629
643
|
const payload = parseSignallingPayload(mmtpPacket);
|
package/dist/signalling.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signalling.js","sourceRoot":"","sources":["../src/signalling.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"signalling.js","sourceRoot":"","sources":["../src/signalling.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.
|
|
3
|
+
"version": "0.4.0-main.248efb07e294",
|
|
4
4
|
"description": "Shared MMTP parsing primitives and protocol constants (zero FEC dependency). Hosts MMTP_HEADER_SIZE, parseMMTPHeader, extractMFUPayload and friends, plus wire constants such as DEFAULT_AMT_RELAY_PORT, so @blockcast/mmt-fec, @blockcast/mmt-container and @blockcast/mmt-transport can share one definition without a circular dep.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -28,9 +28,7 @@
|
|
|
28
28
|
"test": "vitest run",
|
|
29
29
|
"test:watch": "vitest"
|
|
30
30
|
},
|
|
31
|
-
"dependencies": {
|
|
32
|
-
"@blockcast/mmt-alta-parse": "^0.3.0"
|
|
33
|
-
},
|
|
31
|
+
"dependencies": {},
|
|
34
32
|
"devDependencies": {
|
|
35
33
|
"typescript": "^5.3.0",
|
|
36
34
|
"vitest": "^1.0.0"
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Catalog FEC source rules shared by every catalog reader (BLO-40851).
|
|
3
|
+
*
|
|
4
|
+
* These are the dialect-level reads the container resolvers
|
|
5
|
+
* (`resolveRepairLayers`, `catalogFecUnavailable`), the transport endpoint
|
|
6
|
+
* selection (`selectEndpointPacketIds`) and a player's repair inventory all
|
|
7
|
+
* need to agree on. They live here, in the leaf package every one of those
|
|
8
|
+
* depends on, so there is one copy of each rule instead of copies pinned
|
|
9
|
+
* against each other by tests.
|
|
10
|
+
*
|
|
11
|
+
* - `locateCatalogFecSource`: which catalog entry declares a source's `fec`
|
|
12
|
+
* block. hang `video`/`audio` rendition blocks are authoritative over an MSF
|
|
13
|
+
* `tracks[]` entry of the same name.
|
|
14
|
+
* - `catalogFecAvailable`: draft-ramadan-moq-fec §5.1, whether a block's FEC
|
|
15
|
+
* is usable at all (implemented `blockProfile`, usable span).
|
|
16
|
+
* - `catalogFecDeclaresUnconfigurableInstance`: a declared FEC instance whose
|
|
17
|
+
* geometry a decoder cannot configure, which is a malformed catalog rather
|
|
18
|
+
* than "no FEC".
|
|
19
|
+
*
|
|
20
|
+
* Every function is total: it never throws, whatever the input.
|
|
21
|
+
*/
|
|
22
|
+
import { isFecBlockProfile } from './fec-block-profile.js'
|
|
23
|
+
|
|
24
|
+
/** The catalog media roles that carry hang renditions. */
|
|
25
|
+
export type CatalogFecRole = 'video' | 'audio'
|
|
26
|
+
|
|
27
|
+
/** One media source's `fec` block, as `locateCatalogFecSource` found it. */
|
|
28
|
+
export type CatalogFecSource =
|
|
29
|
+
| {
|
|
30
|
+
readonly dialect: 'hang'
|
|
31
|
+
readonly role: CatalogFecRole
|
|
32
|
+
/** The rendition object. */
|
|
33
|
+
readonly entry: Record<string, unknown>
|
|
34
|
+
/** The rendition's `fec` value, unvalidated (may be undefined). */
|
|
35
|
+
readonly fec: unknown
|
|
36
|
+
/** JSON path of that `fec` block. */
|
|
37
|
+
readonly fecPath: string
|
|
38
|
+
}
|
|
39
|
+
| {
|
|
40
|
+
readonly dialect: 'msf'
|
|
41
|
+
/** Index of the entry in `tracks[]`. */
|
|
42
|
+
readonly index: number
|
|
43
|
+
/** The `tracks[]` entry (an empty object when the entry is not an object). */
|
|
44
|
+
readonly entry: Record<string, unknown>
|
|
45
|
+
/** The entry's `fec` value, unvalidated (may be undefined). */
|
|
46
|
+
readonly fec: unknown
|
|
47
|
+
/** JSON path of that `fec` block. */
|
|
48
|
+
readonly fecPath: string
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const ALL_ROLES: readonly CatalogFecRole[] = Object.freeze(['video', 'audio'])
|
|
52
|
+
|
|
53
|
+
function recordOf(value: unknown): Record<string, unknown> | undefined {
|
|
54
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value)
|
|
55
|
+
? (value as Record<string, unknown>)
|
|
56
|
+
: undefined
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Locate the catalog entry that declares one media source's `fec` block, in
|
|
61
|
+
* either catalog dialect.
|
|
62
|
+
*
|
|
63
|
+
* A hang `video`/`audio` rendition named `source` wins, in `roles` order, over
|
|
64
|
+
* a `tracks[]` entry of the same name: when a catalog carries rendition blocks
|
|
65
|
+
* beside a `tracks[]` switching-set index (the unified ABR ladder catalog),
|
|
66
|
+
* the rendition blocks are authoritative, exactly as they are for hang's own
|
|
67
|
+
* catalog decode. The precedence is keyed on the rendition EXISTING as an
|
|
68
|
+
* object, not on it carrying `fec`: a rendition without `fec` locates with
|
|
69
|
+
* `fec: undefined` and never falls through to `tracks[]`.
|
|
70
|
+
*
|
|
71
|
+
* Otherwise the first `tracks[]` entry named `source` locates. Returns
|
|
72
|
+
* undefined when neither dialect names it, or when `catalog` is not an object.
|
|
73
|
+
*
|
|
74
|
+
* @param roles the hang roles to search, in order (both by default). A typed
|
|
75
|
+
* track reference passes its own role only.
|
|
76
|
+
*/
|
|
77
|
+
export function locateCatalogFecSource(
|
|
78
|
+
catalog: unknown,
|
|
79
|
+
source: string,
|
|
80
|
+
roles: readonly CatalogFecRole[] = ALL_ROLES,
|
|
81
|
+
): CatalogFecSource | undefined {
|
|
82
|
+
const root = recordOf(catalog)
|
|
83
|
+
if (root === undefined) return undefined
|
|
84
|
+
for (const role of roles) {
|
|
85
|
+
const renditions = recordOf(recordOf(root[role])?.['renditions'])
|
|
86
|
+
if (renditions === undefined || !Object.hasOwn(renditions, source)) continue
|
|
87
|
+
const entry = recordOf(renditions[source])
|
|
88
|
+
if (entry === undefined) continue
|
|
89
|
+
return Object.freeze({
|
|
90
|
+
dialect: 'hang' as const,
|
|
91
|
+
role,
|
|
92
|
+
entry,
|
|
93
|
+
fec: entry['fec'],
|
|
94
|
+
fecPath: `$.${role}.renditions[${JSON.stringify(source)}].fec`,
|
|
95
|
+
})
|
|
96
|
+
}
|
|
97
|
+
const tracks = root['tracks']
|
|
98
|
+
if (!Array.isArray(tracks)) return undefined
|
|
99
|
+
const index = tracks.findIndex((track) => recordOf(track)?.['name'] === source)
|
|
100
|
+
if (index < 0) return undefined
|
|
101
|
+
const entry = recordOf(tracks[index]) ?? {}
|
|
102
|
+
return Object.freeze({
|
|
103
|
+
dialect: 'msf' as const,
|
|
104
|
+
index,
|
|
105
|
+
entry,
|
|
106
|
+
fec: entry['fec'],
|
|
107
|
+
fecPath: `$.tracks[${index}].fec`,
|
|
108
|
+
})
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Whether an `iso-ssbg1-v1` block's optional `interleaveDepthMs` span is
|
|
113
|
+
* usable: absent, or a non-negative safe integer. Zero or absence supplies no
|
|
114
|
+
* elapsed deadline and still permits in-band FEC. True for every block that
|
|
115
|
+
* names another profile (the span is not read) and for a non-object.
|
|
116
|
+
*/
|
|
117
|
+
export function isoBlockSpanUsable(fec: unknown): boolean {
|
|
118
|
+
const block = recordOf(fec)
|
|
119
|
+
if (block === undefined || block['blockProfile'] !== 'iso-ssbg1-v1') return true
|
|
120
|
+
const ms = block['interleaveDepthMs']
|
|
121
|
+
return ms === undefined || (typeof ms === 'number' && Number.isSafeInteger(ms) && ms >= 0)
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Whether one catalog `fec` block leaves its FEC available
|
|
126
|
+
* (draft-ramadan-moq-fec §5.1): the decision the container's
|
|
127
|
+
* `catalogFecUnavailable` explains with a typed reason.
|
|
128
|
+
*
|
|
129
|
+
* False when the block's `algorithm` is a token this receiver does not
|
|
130
|
+
* implement (`fecAlgorithmUnimplemented`); when it declares an FEC instance
|
|
131
|
+
* (any `algorithm` but `"none"`) and names no implemented `blockProfile` (the retired `k-padded-v1`
|
|
132
|
+
* included), or carries an `iso-ssbg1-v1` span it cannot use; and when a block
|
|
133
|
+
* declaring no FEC instance carries a profile token that is not implemented.
|
|
134
|
+
* True for a non-object and for every other block. It reads only the profile
|
|
135
|
+
* and the span: malformed geometry (`sourceSymbols`, `symbolSize`) is
|
|
136
|
+
* `catalogFecDeclaresUnconfigurableInstance`'s.
|
|
137
|
+
*
|
|
138
|
+
* A receiver applies no FEC to a source whose block is unavailable and joins
|
|
139
|
+
* none of its repair tracks, without failing the session.
|
|
140
|
+
*/
|
|
141
|
+
export function catalogFecAvailable(fec: unknown): boolean {
|
|
142
|
+
const block = recordOf(fec)
|
|
143
|
+
if (block === undefined) return true
|
|
144
|
+
if (fecAlgorithmUnimplemented(block['algorithm'])) return false
|
|
145
|
+
const declaresFecInstance = block['algorithm'] !== 'none'
|
|
146
|
+
const profile = block['blockProfile']
|
|
147
|
+
const profileOk = isFecBlockProfile(profile) || (profile === undefined && !declaresFecInstance)
|
|
148
|
+
return profileOk && (!declaresFecInstance || isoBlockSpanUsable(block))
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Whether `algorithm` is a token this receiver does not implement
|
|
153
|
+
* (draft-ramadan-moq-fec-01 4): any string but `none`, `raptorq` and
|
|
154
|
+
* `reed-solomon`. Such a track is consumed without FEC and its repair tracks
|
|
155
|
+
* are not joined; the catalog is not in error. An absent algorithm is not a
|
|
156
|
+
* token (the hang dialect omits it) and stays implemented.
|
|
157
|
+
*/
|
|
158
|
+
export function fecAlgorithmUnimplemented(algorithm: unknown): boolean {
|
|
159
|
+
return typeof algorithm === 'string' && algorithm !== 'none' && algorithm !== 'raptorq' && algorithm !== 'reed-solomon'
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
function isPositiveSafeInteger(value: unknown): boolean {
|
|
163
|
+
return typeof value === 'number' && Number.isSafeInteger(value) && value > 0
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/** Smallest `symbolSize` under `iso-ssbg1-v1` (draft-ramadan-moq-fec-01 5.1, 6.3.4 rule 13). */
|
|
167
|
+
export const ISO_SSBG1_MIN_SYMBOL_SIZE = 14
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Whether a source's `fec` block declares an FEC instance (any `algorithm`
|
|
171
|
+
* but `"none"`) whose `sourceSymbols` or `symbolSize` is not a positive
|
|
172
|
+
* integer, or whose `iso-ssbg1-v1` `symbolSize` is below
|
|
173
|
+
* `ISO_SSBG1_MIN_SYMBOL_SIZE` (rule 13: such a symbol carries no protected
|
|
174
|
+
* MMTP packet). Geometry a decoder cannot configure is a malformed catalog, not
|
|
175
|
+
* "no FEC": the container's per-track resolver throws `track_fec` for exactly
|
|
176
|
+
* this block, whatever its profile or span.
|
|
177
|
+
*/
|
|
178
|
+
export function catalogFecDeclaresUnconfigurableInstance(fec: unknown): boolean {
|
|
179
|
+
const block = recordOf(fec)
|
|
180
|
+
if (block === undefined || block['algorithm'] === 'none' || fecAlgorithmUnimplemented(block['algorithm'])) return false
|
|
181
|
+
if (!(isPositiveSafeInteger(block['sourceSymbols']) && isPositiveSafeInteger(block['symbolSize']))) return true
|
|
182
|
+
return block['blockProfile'] === 'iso-ssbg1-v1' && (block['symbolSize'] as number) < ISO_SSBG1_MIN_SYMBOL_SIZE
|
|
183
|
+
}
|
package/src/fec-block-profile.ts
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* FEC block profile (BLO-35597, ISO/IEC 23008-1 Annex C).
|
|
3
3
|
*
|
|
4
|
-
* Every catalog `fec` object that declares an FEC instance names
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* Every catalog `fec` object that declares an FEC instance names its block
|
|
5
|
+
* profile in `fec.blockProfile`. A receiver applies all of a profile's rules
|
|
6
|
+
* or none of them, so the token is the one explicit per-stream discriminator:
|
|
7
|
+
* it is never defaulted and never inferred from the wire.
|
|
8
|
+
*
|
|
9
|
+
* draft-ramadan-moq-fec §5.1 defines exactly one value, and it is the only
|
|
10
|
+
* profile this library implements:
|
|
8
11
|
*
|
|
9
|
-
* - `k-padded-v1` (legacy, Blockcast-private): a source symbol is the
|
|
10
|
-
* protected MMTP packet zero-padded to T with no length field; every block
|
|
11
|
-
* is a K-symbol RaptorQ block whose ESIs `SSB_length..K-1` are implicit
|
|
12
|
-
* zero padding; `SS_ID = SBN*K + ESI`, so `SS_Start = SBN*K`; repair
|
|
13
|
-
* ESI = K + RS_ID; the MoQ repair group id is the SBN.
|
|
14
12
|
* - `iso-ssbg1-v1`: ssbg_mode1 (C.3.3): a source symbol is
|
|
15
13
|
* `u16 length || protected packet || zero padding` to T; a block is a
|
|
16
14
|
* K' = SSB_length RaptorQ block (C.5.3) and repair ESI = SSB_length + RS_ID;
|
|
@@ -19,40 +17,42 @@
|
|
|
19
17
|
* under RFC 1982 serial arithmetic; the MoQ repair group id is the 62-bit
|
|
20
18
|
* wrap-epoch-extended SS_Start. The AL-FEC coding byte for this profile is
|
|
21
19
|
* 0x14 (one-stage, ssbg_mode1, fec_payload_id_mode 0, Amd 1:2025 Table C.3).
|
|
20
|
+
*
|
|
21
|
+
* A track whose `blockProfile` is absent or names any other token (the
|
|
22
|
+
* retired Blockcast-private `k-padded-v1` included) has no FEC: a receiver
|
|
23
|
+
* consumes its source without FEC and joins none of its repair tracks
|
|
24
|
+
* (draft-ramadan-moq-fec §5.1). `parseFecBlockProfile` throws for such a
|
|
25
|
+
* token; the per-track catalog resolver turns the same rule into a typed
|
|
26
|
+
* per-track "FEC unavailable" outcome instead of failing the session.
|
|
22
27
|
*/
|
|
23
28
|
import { serial32Add, serial32Distance, serial32Precedes } from './serial-number.js'
|
|
24
29
|
|
|
25
|
-
/** The
|
|
26
|
-
export type FecBlockProfile = '
|
|
30
|
+
/** The block profile a catalog `fec.blockProfile` may name: the one this library implements. */
|
|
31
|
+
export type FecBlockProfile = 'iso-ssbg1-v1'
|
|
27
32
|
|
|
28
|
-
/** Every accepted `fec.blockProfile` token
|
|
33
|
+
/** Every accepted `fec.blockProfile` token. */
|
|
29
34
|
export const FEC_BLOCK_PROFILES: readonly FecBlockProfile[] = Object.freeze([
|
|
30
|
-
'k-padded-v1',
|
|
31
35
|
'iso-ssbg1-v1',
|
|
32
36
|
])
|
|
33
37
|
|
|
34
|
-
/** True for a
|
|
38
|
+
/** True for a block-profile token this library implements. */
|
|
35
39
|
export function isFecBlockProfile(value: unknown): value is FecBlockProfile {
|
|
36
|
-
return value === '
|
|
40
|
+
return value === 'iso-ssbg1-v1'
|
|
37
41
|
}
|
|
38
42
|
|
|
39
43
|
/**
|
|
40
|
-
* Read a required `fec.blockProfile`. Throws on an absent
|
|
41
|
-
* there is no default and nothing is
|
|
42
|
-
*
|
|
44
|
+
* Read a required `fec.blockProfile`. Throws on an absent token and on any
|
|
45
|
+
* token other than `iso-ssbg1-v1`: there is no default and nothing is
|
|
46
|
+
* inferred from the wire (draft-ramadan-moq-fec §5.1).
|
|
43
47
|
*
|
|
44
48
|
* @param where the catalog path of the field, for the error message.
|
|
45
49
|
*/
|
|
46
50
|
export function parseFecBlockProfile(value: unknown, where: string): FecBlockProfile {
|
|
47
51
|
if (isFecBlockProfile(value)) return value
|
|
48
52
|
if (value === undefined) {
|
|
49
|
-
throw new Error(
|
|
50
|
-
`${where} is required: name the FEC block profile ("k-padded-v1" or "iso-ssbg1-v1")`,
|
|
51
|
-
)
|
|
53
|
+
throw new Error(`${where} is required: name the FEC block profile ("iso-ssbg1-v1")`)
|
|
52
54
|
}
|
|
53
|
-
throw new Error(
|
|
54
|
-
`${where} must be "k-padded-v1" or "iso-ssbg1-v1" (got ${JSON.stringify(value)})`,
|
|
55
|
-
)
|
|
55
|
+
throw new Error(`${where} must be "iso-ssbg1-v1" (got ${JSON.stringify(value)})`)
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
/** ISO/IEC 23008-1 C.3.3 ssbg_mode1: the two-octet packet length field. */
|