@blockcast/mmt-transport 0.3.0 → 0.4.0-main.726ce14f2b17

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.
Files changed (82) hide show
  1. package/README.md +4 -0
  2. package/dist/index.d.ts +2 -1
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +2 -1
  5. package/dist/index.js.map +1 -1
  6. package/dist/mmt-transport.no-modules.js +88 -13
  7. package/dist/mmt-transport.no-modules.js.map +4 -4
  8. package/dist/multicast-catalog-policy.d.ts +2 -2
  9. package/dist/multicast-catalog-policy.d.ts.map +1 -1
  10. package/dist/multicast-catalog-policy.js +21 -12
  11. package/dist/multicast-catalog-policy.js.map +1 -1
  12. package/dist/multicast-orchestrator.d.ts +11 -0
  13. package/dist/multicast-orchestrator.d.ts.map +1 -1
  14. package/dist/multicast-orchestrator.js +26 -1
  15. package/dist/multicast-orchestrator.js.map +1 -1
  16. package/dist/multicast-tier-executor.d.ts +81 -0
  17. package/dist/multicast-tier-executor.d.ts.map +1 -0
  18. package/dist/multicast-tier-executor.js +167 -0
  19. package/dist/multicast-tier-executor.js.map +1 -0
  20. package/dist/multicast-tiers.d.ts +4 -0
  21. package/dist/multicast-tiers.d.ts.map +1 -0
  22. package/dist/multicast-tiers.js +6 -0
  23. package/dist/multicast-tiers.js.map +1 -0
  24. package/dist/transport-manager.d.ts +2 -0
  25. package/dist/transport-manager.d.ts.map +1 -1
  26. package/dist/transport-manager.js +4 -0
  27. package/dist/transport-manager.js.map +1 -1
  28. package/package.json +13 -6
  29. package/src/index.ts +10 -0
  30. package/src/multicast-catalog-policy.ts +22 -12
  31. package/src/multicast-orchestrator.ts +24 -1
  32. package/src/multicast-tier-executor.ts +226 -0
  33. package/src/multicast-tiers.ts +30 -0
  34. package/src/transport-manager.ts +5 -0
  35. package/vectors/multicast-tier-switch/README.md +18 -0
  36. package/vectors/multicast-tier-switch/cases.json +646 -0
  37. package/node_modules/@blockcast/mmt-alta-parse/README.md +0 -181
  38. package/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
  39. package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +0 -57
  40. package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +0 -1
  41. package/node_modules/@blockcast/mmt-alta-parse/dist/index.js +0 -115
  42. package/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +0 -1
  43. package/node_modules/@blockcast/mmt-alta-parse/package.json +0 -50
  44. package/node_modules/@blockcast/mmt-alta-parse/src/index.ts +0 -136
  45. package/node_modules/@blockcast/mmt-base/README.md +0 -134
  46. package/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
  47. package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts +0 -55
  48. package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.d.ts.map +0 -1
  49. package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js +0 -128
  50. package/node_modules/@blockcast/mmt-base/dist/fec-block-profile.js.map +0 -1
  51. package/node_modules/@blockcast/mmt-base/dist/index.d.ts +0 -7
  52. package/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +0 -1
  53. package/node_modules/@blockcast/mmt-base/dist/index.js +0 -7
  54. package/node_modules/@blockcast/mmt-base/dist/index.js.map +0 -1
  55. package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +0 -292
  56. package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +0 -1
  57. package/node_modules/@blockcast/mmt-base/dist/mmtp.js +0 -612
  58. package/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +0 -1
  59. package/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts +0 -18
  60. package/node_modules/@blockcast/mmt-base/dist/net-constants.d.ts.map +0 -1
  61. package/node_modules/@blockcast/mmt-base/dist/net-constants.js +0 -18
  62. package/node_modules/@blockcast/mmt-base/dist/net-constants.js.map +0 -1
  63. package/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts +0 -47
  64. package/node_modules/@blockcast/mmt-base/dist/ntp-short.d.ts.map +0 -1
  65. package/node_modules/@blockcast/mmt-base/dist/ntp-short.js +0 -54
  66. package/node_modules/@blockcast/mmt-base/dist/ntp-short.js.map +0 -1
  67. package/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts +0 -57
  68. package/node_modules/@blockcast/mmt-base/dist/serial-number.d.ts.map +0 -1
  69. package/node_modules/@blockcast/mmt-base/dist/serial-number.js +0 -98
  70. package/node_modules/@blockcast/mmt-base/dist/serial-number.js.map +0 -1
  71. package/node_modules/@blockcast/mmt-base/dist/signalling.d.ts +0 -312
  72. package/node_modules/@blockcast/mmt-base/dist/signalling.d.ts.map +0 -1
  73. package/node_modules/@blockcast/mmt-base/dist/signalling.js +0 -637
  74. package/node_modules/@blockcast/mmt-base/dist/signalling.js.map +0 -1
  75. package/node_modules/@blockcast/mmt-base/package.json +0 -49
  76. package/node_modules/@blockcast/mmt-base/src/fec-block-profile.ts +0 -145
  77. package/node_modules/@blockcast/mmt-base/src/index.ts +0 -6
  78. package/node_modules/@blockcast/mmt-base/src/mmtp.ts +0 -892
  79. package/node_modules/@blockcast/mmt-base/src/net-constants.ts +0 -17
  80. package/node_modules/@blockcast/mmt-base/src/ntp-short.ts +0 -67
  81. package/node_modules/@blockcast/mmt-base/src/serial-number.ts +0 -107
  82. package/node_modules/@blockcast/mmt-base/src/signalling.ts +0 -862
package/README.md CHANGED
@@ -53,9 +53,13 @@ The manager owns capability detection, transport selection, and the bandwidth/lo
53
53
  |------|---------|
54
54
  | `@blockcast/mmt-transport` | `TransportManager`, DRIAD, AMT, ABR, repair-track naming, types |
55
55
  | `@blockcast/mmt-transport/clock` | `SharedClock`, `SYNC_TOLERANCE_US`, `PTS_OFFSET_US` |
56
+ | `@blockcast/mmt-transport/multicast-catalog-policy` | Catalog → endpoint/packet-ID policy (`normalizeCatalogEndpoints`, `selectMulticastCandidateForTracks`, `endpointToMulticastConfig`, `selectEndpointPacketIdsForTracks`, …) |
57
+ | `@blockcast/mmt-transport/multicast-tiers` | Tier switching without `TransportManager` (`MulticastOrchestrator`, `MulticastTierExecutor`, `tierPacketFromRouted`, `endpointKey`, `selectMulticastTier`, …) |
56
58
 
57
59
  The root export also re-emits the clock surface. Use the clock subpath when you want a narrower dependency graph.
58
60
 
61
+ The root export constructs the AMT gateway singleton when it is loaded. A player that only needs the catalog policy imports the `multicast-catalog-policy` subpath, and one that drives tier joins with its own engine imports the `multicast-tiers` subpath. Neither has load-time side effects.
62
+
59
63
  ## Transport matrix
60
64
 
61
65
  | Mode | When it's used | Requirements | Latency profile | Fallback |
package/dist/index.d.ts CHANGED
@@ -27,8 +27,9 @@ export { repairTrackPath, MoqFecAlgorithm, } from "./types.js";
27
27
  export { TransportManager, transportManager } from "./transport-manager.js";
28
28
  export { DRIADDiscovery, driadDiscovery } from "./driad-discovery.js";
29
29
  export { AdaptiveBitrateController, validateQualityLadder, type AdaptiveBitrateControllerOptions, QUALITY_LEVELS, type FecStatsForAbr, } from "./abr-controller.js";
30
- export { endpointKey, selectMulticastTier, type MulticastTierEndpoint, } from "./multicast-tier.js";
30
+ export { carriesMedia, endpointKey, selectMulticastTier, type MulticastTierEndpoint, } from "./multicast-tier.js";
31
31
  export { MulticastOrchestrator, DEFAULT_DWELL_MS, DEFAULT_JOIN_DEADLINE_MS, goodputFromStats, type GoodputSample, type HeadroomSample, type MulticastTierPacket, type OrchestratorCommand, type OrchestratorOptions, type OrchestratorState, } from "./multicast-orchestrator.js";
32
+ export { MulticastTierExecutor, tierPacketFromRouted, type MulticastTierDriver, type MulticastTierHost, type MulticastTierPacketReport, type MulticastTierSession, } from "./multicast-tier-executor.js";
32
33
  export { createMulticastSignalingReconciler, normalizeCatalogEndpoints, type MulticastSignalingEndpoint, } from "./multicast-signaling-reconciler.js";
33
34
  export { catalogTierEndpoints, endpointCarriesMedia, endpointToMulticastConfig, hasMulticastCatalogBaseline, hasUnicastMediaRenditions, isMulticastOnlyCatalog, isRecoverableMulticastSignalReadError, mergeUrlMulticastPolicy, normalizeMulticastConfig, readPlayerMulticastConfig, requiresMulticastCapability, sameMulticastConfig, selectEndpointPacketIds, selectEndpointPacketIdsForTracks, selectMulticastCandidate, selectMulticastCandidateForTracks, urlOverrideBlocksMulticastCandidate, withMulticastEndpoints, catalogQualityLadder, type PlayerMulticastConfig, type MulticastTrackSelection, } from "./multicast-catalog-policy.js";
34
35
  export { isMulticastExplicitlyDisabled, isMulticastTrackPacketId, isUsableMulticastEndpoint, isValidMulticastGroupAddress, multicastEndpointKey, normalizeMulticastEndpoint, readUrlMulticastConfig, toWindowMulticastSubscribeConfig, type MulticastEndpointConfig, type MulticastTransportPreference, type WindowMulticastEndpointInput, } from "./endpoint-config.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -29,8 +29,9 @@ export { TransportManager, transportManager } from "./transport-manager.js";
29
29
  export { DRIADDiscovery, driadDiscovery } from "./driad-discovery.js";
30
30
  // Adaptive Bitrate Controller
31
31
  export { AdaptiveBitrateController, validateQualityLadder, QUALITY_LEVELS, } from "./abr-controller.js";
32
- export { endpointKey, selectMulticastTier, } from "./multicast-tier.js";
32
+ export { carriesMedia, endpointKey, selectMulticastTier, } from "./multicast-tier.js";
33
33
  export { MulticastOrchestrator, DEFAULT_DWELL_MS, DEFAULT_JOIN_DEADLINE_MS, goodputFromStats, } from "./multicast-orchestrator.js";
34
+ export { MulticastTierExecutor, tierPacketFromRouted, } from "./multicast-tier-executor.js";
34
35
  export { createMulticastSignalingReconciler, normalizeCatalogEndpoints, } from "./multicast-signaling-reconciler.js";
35
36
  export { catalogTierEndpoints, endpointCarriesMedia, endpointToMulticastConfig, hasMulticastCatalogBaseline, hasUnicastMediaRenditions, isMulticastOnlyCatalog, isRecoverableMulticastSignalReadError, mergeUrlMulticastPolicy, normalizeMulticastConfig, readPlayerMulticastConfig, requiresMulticastCapability, sameMulticastConfig, selectEndpointPacketIds, selectEndpointPacketIdsForTracks, selectMulticastCandidate, selectMulticastCandidateForTracks, urlOverrideBlocksMulticastCandidate, withMulticastEndpoints, catalogQualityLadder, } from "./multicast-catalog-policy.js";
36
37
  export { isMulticastExplicitlyDisabled, isMulticastTrackPacketId, isUsableMulticastEndpoint, isValidMulticastGroupAddress, multicastEndpointKey, normalizeMulticastEndpoint, readUrlMulticastConfig, toWindowMulticastSubscribeConfig, } from "./endpoint-config.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAuCH,2DAA2D;AAC3D,OAAO,EACN,eAAe,EACf,eAAe,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE5E,kBAAkB;AAClB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtE,8BAA8B;AAC9B,OAAO,EACN,yBAAyB,EACzB,qBAAqB,EAErB,cAAc,GAEd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACN,WAAW,EACX,mBAAmB,GAEnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACN,qBAAqB,EACrB,gBAAgB,EAChB,wBAAwB,EACxB,gBAAgB,GAOhB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACN,kCAAkC,EAClC,yBAAyB,GAEzB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EACN,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,EACzB,2BAA2B,EAC3B,yBAAyB,EACzB,sBAAsB,EACtB,qCAAqC,EACrC,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,2BAA2B,EAC3B,mBAAmB,EACnB,uBAAuB,EACvB,gCAAgC,EAChC,wBAAwB,EACxB,iCAAiC,EACjC,mCAAmC,EACnC,sBAAsB,EACtB,oBAAoB,GAGpB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACN,6BAA6B,EAC7B,wBAAwB,EACxB,yBAAyB,EACzB,4BAA4B,EAC5B,oBAAoB,EACpB,0BAA0B,EAC1B,sBAAsB,EACtB,gCAAgC,GAIhC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,iCAAiC,EAAE,MAAM,mBAAmB,CAAC;AAEtE,OAAO,EACN,yBAAyB,EACzB,yBAAyB,GAGzB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACN,aAAa,EACb,sBAAsB,GAKtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACN,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,GAMtB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACN,kBAAkB,GAUlB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACN,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EAErB,sBAAsB,GAEtB,MAAM,oBAAoB,CAAC;AAE5B,cAAc;AACd,OAAO,EACN,iBAAiB,EACjB,UAAU,EACV,iBAAiB,GAGjB,MAAM,kBAAkB,CAAC;AAE1B,iBAAiB;AACjB,OAAO,EACN,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,GACb,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAuCH,2DAA2D;AAC3D,OAAO,EACN,eAAe,EACf,eAAe,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE5E,kBAAkB;AAClB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtE,8BAA8B;AAC9B,OAAO,EACN,yBAAyB,EACzB,qBAAqB,EAErB,cAAc,GAEd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACN,YAAY,EACZ,WAAW,EACX,mBAAmB,GAEnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACN,qBAAqB,EACrB,gBAAgB,EAChB,wBAAwB,EACxB,gBAAgB,GAOhB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACN,qBAAqB,EACrB,oBAAoB,GAKpB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACN,kCAAkC,EAClC,yBAAyB,GAEzB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EACN,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,EACzB,2BAA2B,EAC3B,yBAAyB,EACzB,sBAAsB,EACtB,qCAAqC,EACrC,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,2BAA2B,EAC3B,mBAAmB,EACnB,uBAAuB,EACvB,gCAAgC,EAChC,wBAAwB,EACxB,iCAAiC,EACjC,mCAAmC,EACnC,sBAAsB,EACtB,oBAAoB,GAGpB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACN,6BAA6B,EAC7B,wBAAwB,EACxB,yBAAyB,EACzB,4BAA4B,EAC5B,oBAAoB,EACpB,0BAA0B,EAC1B,sBAAsB,EACtB,gCAAgC,GAIhC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,iCAAiC,EAAE,MAAM,mBAAmB,CAAC;AAEtE,OAAO,EACN,yBAAyB,EACzB,yBAAyB,GAGzB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACN,aAAa,EACb,sBAAsB,GAKtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACN,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,GAMtB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACN,kBAAkB,GAUlB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACN,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EAErB,sBAAsB,GAEtB,MAAM,oBAAoB,CAAC;AAE5B,cAAc;AACd,OAAO,EACN,iBAAiB,EACjB,UAAU,EACV,iBAAiB,GAGjB,MAAM,kBAAkB,CAAC;AAE1B,iBAAiB;AACjB,OAAO,EACN,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,GACb,MAAM,YAAY,CAAC"}
@@ -201,15 +201,10 @@
201
201
  }
202
202
  };
203
203
 
204
- // node_modules/@blockcast/mmt-alta-parse/dist/index.js
204
+ // node_modules/@blockcast/mmt-base/dist/mmtp.js
205
205
  var MPU_HEADER_SIZE = 8;
206
206
  var MPU_LENGTH_FIELD_SIZE = 2;
207
207
  var MPU_HEADER_REMAINDER_SIZE = MPU_HEADER_SIZE - MPU_LENGTH_FIELD_SIZE;
208
-
209
- // node_modules/@blockcast/mmt-base/dist/mmtp.js
210
- var MPU_HEADER_SIZE2 = 8;
211
- var MPU_LENGTH_FIELD_SIZE2 = 2;
212
- var MPU_HEADER_REMAINDER_SIZE2 = MPU_HEADER_SIZE2 - MPU_LENGTH_FIELD_SIZE2;
213
208
  var MMTP_SIGNALING_PACKET_ID = 0;
214
209
  var MMTP_PACKET_ID_MAX = 65535;
215
210
 
@@ -239,9 +234,67 @@
239
234
 
240
235
  // node_modules/@blockcast/mmt-base/dist/fec-block-profile.js
241
236
  var FEC_BLOCK_PROFILES = Object.freeze([
242
- "k-padded-v1",
243
237
  "iso-ssbg1-v1"
244
238
  ]);
239
+ function isFecBlockProfile(value) {
240
+ return value === "iso-ssbg1-v1";
241
+ }
242
+
243
+ // node_modules/@blockcast/mmt-base/dist/catalog-fec-source.js
244
+ var ALL_ROLES = Object.freeze(["video", "audio"]);
245
+ function recordOf(value) {
246
+ return value !== null && typeof value === "object" && !Array.isArray(value) ? value : void 0;
247
+ }
248
+ function locateCatalogFecSource(catalog, source, roles = ALL_ROLES) {
249
+ const root = recordOf(catalog);
250
+ if (root === void 0)
251
+ return void 0;
252
+ for (const role of roles) {
253
+ const renditions = recordOf(recordOf(root[role])?.["renditions"]);
254
+ if (renditions === void 0 || !Object.hasOwn(renditions, source))
255
+ continue;
256
+ const entry2 = recordOf(renditions[source]);
257
+ if (entry2 === void 0)
258
+ continue;
259
+ return Object.freeze({
260
+ dialect: "hang",
261
+ role,
262
+ entry: entry2,
263
+ fec: entry2["fec"],
264
+ fecPath: `$.${role}.renditions[${JSON.stringify(source)}].fec`
265
+ });
266
+ }
267
+ const tracks = root["tracks"];
268
+ if (!Array.isArray(tracks))
269
+ return void 0;
270
+ const index = tracks.findIndex((track) => recordOf(track)?.["name"] === source);
271
+ if (index < 0)
272
+ return void 0;
273
+ const entry = recordOf(tracks[index]) ?? {};
274
+ return Object.freeze({
275
+ dialect: "msf",
276
+ index,
277
+ entry,
278
+ fec: entry["fec"],
279
+ fecPath: `$.tracks[${index}].fec`
280
+ });
281
+ }
282
+ function isoBlockSpanUsable(fec) {
283
+ const block = recordOf(fec);
284
+ if (block === void 0 || block["blockProfile"] !== "iso-ssbg1-v1")
285
+ return true;
286
+ const ms = block["interleaveDepthMs"];
287
+ return ms === void 0 || typeof ms === "number" && Number.isSafeInteger(ms) && ms >= 0;
288
+ }
289
+ function catalogFecAvailable(fec) {
290
+ const block = recordOf(fec);
291
+ if (block === void 0)
292
+ return true;
293
+ const declaresFecInstance = block["algorithm"] !== "none";
294
+ const profile = block["blockProfile"];
295
+ const profileOk = isFecBlockProfile(profile) || profile === void 0 && !declaresFecInstance;
296
+ return profileOk && (!declaresFecInstance || isoBlockSpanUsable(block));
297
+ }
245
298
 
246
299
  // src/endpoint-config.ts
247
300
  function toWindowMulticastSubscribeConfig(input) {
@@ -437,8 +490,9 @@
437
490
  }
438
491
  onGoodput(sample) {
439
492
  const bitrate = sample.bitrate;
440
- if (!this.#current || this.options.adaptive === false) return void 0;
493
+ if (!this.#current) return void 0;
441
494
  if (this.#state === "joining") return this.poll();
495
+ if (this.options.adaptive === false) return void 0;
442
496
  if (bitrate === void 0 || !Number.isFinite(bitrate)) return void 0;
443
497
  this.#estimate = bitrate;
444
498
  const desired = selectMulticastTier(this.options.endpoints, bitrate);
@@ -497,6 +551,25 @@
497
551
  this.#favored = void 0;
498
552
  return { kind: "join-target", current: this.#current, target: desired };
499
553
  }
554
+ /**
555
+ * Join `target` because the viewer selected it, not because goodput or
556
+ * headroom ranked it. It runs whether or not the orchestrator adapts, and
557
+ * takes the path an adaptive join takes: commit on the target's RAP at or
558
+ * beyond the high-water mark, abandon at the join deadline. While it is
559
+ * pending nothing re-ranks the ladder; goodput only advances the deadline.
560
+ *
561
+ * Returns undefined, changing nothing, while another join is pending (cancel
562
+ * it first), when `target` is the current tier, or when it carries no media.
563
+ */
564
+ select(target) {
565
+ if (!this.#current || this.#state === "joining" || !carriesMedia(target)) return void 0;
566
+ if (endpointKey(target) === endpointKey(this.#current)) return void 0;
567
+ this.#state = "joining";
568
+ this.#target = target;
569
+ this.#joinStartedAt = this.#now();
570
+ this.#favored = void 0;
571
+ return { kind: "join-target", current: this.#current, target };
572
+ }
500
573
  /**
501
574
  * Feed a packet from the active tier (to advance the high-water mark) or
502
575
  * from the in-flight target (to find a committable RAP).
@@ -754,7 +827,7 @@
754
827
  source: endpoint.sourceAddress || "",
755
828
  port: Number(endpoint.port)
756
829
  };
757
- const networkSource = endpoint.networkSource ?? catalog?.multicast?.networkSource;
830
+ const networkSource = catalog?.multicast?.networkSource;
758
831
  const amt = findAmtRelay(networkSource);
759
832
  if (amt) {
760
833
  config.mode = "tunnel";
@@ -954,10 +1027,8 @@
954
1027
  function catalogRepairTracks(catalog, name) {
955
1028
  assertNoRetiredTrackFields(catalog);
956
1029
  const tracks = Array.isArray(catalog?.tracks) ? catalog.tracks : [];
957
- const track = tracks.find((candidate) => candidate?.name === name);
958
- const rendition = catalog?.video?.renditions?.[name] ?? catalog?.audio?.renditions?.[name];
959
- const fec = track?.fec ?? rendition?.fec;
960
- if (!fec || fec.algorithm === "none") return [];
1030
+ const fec = locateCatalogFecSource(catalog, name)?.fec;
1031
+ if (!fec || typeof fec !== "object" || fec.algorithm === "none" || !catalogFecAvailable(fec)) return [];
961
1032
  const names = /* @__PURE__ */ new Set();
962
1033
  if (typeof fec.repairTrack === "string" && fec.repairTrack.length > 0) names.add(fec.repairTrack);
963
1034
  const dependsOn = (entry) => Array.isArray(entry?.depends) && entry.depends.length === 1 && entry.depends[0] === name;
@@ -1832,6 +1903,10 @@
1832
1903
  pollMulticastTierSwitch() {
1833
1904
  return this.dispatchOrchestratorCommand(this.multicastOrchestrator?.poll());
1834
1905
  }
1906
+ /** Abandon the in-flight tier join, e.g. because the host could not join the target. */
1907
+ cancelMulticastTierJoin() {
1908
+ return this.dispatchOrchestratorCommand(this.multicastOrchestrator?.cancel());
1909
+ }
1835
1910
  /**
1836
1911
  * Set packet callback
1837
1912
  */