@blockcast/mmt-transport 0.2.0 → 0.2.2

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 (98) hide show
  1. package/README.md +264 -0
  2. package/dist/.build-stamp +0 -0
  3. package/dist/abr-controller.d.ts +3 -0
  4. package/dist/abr-controller.d.ts.map +1 -1
  5. package/dist/abr-controller.js +5 -0
  6. package/dist/abr-controller.js.map +1 -1
  7. package/dist/amt-gateway.d.ts.map +1 -1
  8. package/dist/amt-gateway.js +2 -1
  9. package/dist/amt-gateway.js.map +1 -1
  10. package/dist/endpoint-config.d.ts +20 -0
  11. package/dist/endpoint-config.d.ts.map +1 -0
  12. package/dist/endpoint-config.js +103 -0
  13. package/dist/endpoint-config.js.map +1 -0
  14. package/dist/endpoint-config.test.d.ts +2 -0
  15. package/dist/endpoint-config.test.d.ts.map +1 -0
  16. package/dist/endpoint-config.test.js +39 -0
  17. package/dist/endpoint-config.test.js.map +1 -0
  18. package/dist/fec-client.d.ts +2 -2
  19. package/dist/fec-client.d.ts.map +1 -1
  20. package/dist/fec-client.js +10 -5
  21. package/dist/fec-client.js.map +1 -1
  22. package/dist/index.d.ts +8 -1
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +7 -0
  25. package/dist/index.js.map +1 -1
  26. package/dist/mmt-transport.no-modules.js +1154 -0
  27. package/dist/mmt-transport.no-modules.js.map +7 -0
  28. package/dist/multicast-orchestrator.d.ts +56 -0
  29. package/dist/multicast-orchestrator.d.ts.map +1 -0
  30. package/dist/multicast-orchestrator.js +123 -0
  31. package/dist/multicast-orchestrator.js.map +1 -0
  32. package/dist/multicast-subscription-pool.d.ts +18 -0
  33. package/dist/multicast-subscription-pool.d.ts.map +1 -0
  34. package/dist/multicast-subscription-pool.js +130 -0
  35. package/dist/multicast-subscription-pool.js.map +1 -0
  36. package/dist/multicast-subscription-pool.test.d.ts +2 -0
  37. package/dist/multicast-subscription-pool.test.d.ts.map +1 -0
  38. package/dist/multicast-subscription-pool.test.js +108 -0
  39. package/dist/multicast-subscription-pool.test.js.map +1 -0
  40. package/dist/multicast-tier.d.ts +14 -0
  41. package/dist/multicast-tier.d.ts.map +1 -0
  42. package/dist/multicast-tier.js +22 -0
  43. package/dist/multicast-tier.js.map +1 -0
  44. package/dist/multicast-tier.test.d.ts +2 -0
  45. package/dist/multicast-tier.test.d.ts.map +1 -0
  46. package/dist/multicast-tier.test.js +75 -0
  47. package/dist/multicast-tier.test.js.map +1 -0
  48. package/dist/no-modules.d.ts +29 -0
  49. package/dist/no-modules.d.ts.map +1 -0
  50. package/dist/no-modules.js +35 -0
  51. package/dist/no-modules.js.map +1 -0
  52. package/dist/stall-detector.d.ts +22 -0
  53. package/dist/stall-detector.d.ts.map +1 -0
  54. package/dist/stall-detector.js +46 -0
  55. package/dist/stall-detector.js.map +1 -0
  56. package/dist/stall-detector.test.d.ts +2 -0
  57. package/dist/stall-detector.test.d.ts.map +1 -0
  58. package/dist/stall-detector.test.js +33 -0
  59. package/dist/stall-detector.test.js.map +1 -0
  60. package/dist/takeover.d.ts +49 -0
  61. package/dist/takeover.d.ts.map +1 -0
  62. package/dist/takeover.js +43 -0
  63. package/dist/takeover.js.map +1 -0
  64. package/dist/transport-manager.d.ts +28 -18
  65. package/dist/transport-manager.d.ts.map +1 -1
  66. package/dist/transport-manager.js +192 -138
  67. package/dist/transport-manager.js.map +1 -1
  68. package/dist/transport-manager.test.d.ts +2 -0
  69. package/dist/transport-manager.test.d.ts.map +1 -0
  70. package/dist/transport-manager.test.js +155 -0
  71. package/dist/transport-manager.test.js.map +1 -0
  72. package/dist/types.d.ts +36 -36
  73. package/dist/types.d.ts.map +1 -1
  74. package/dist/types.js.map +1 -1
  75. package/dist/unicast-fallback.d.ts +36 -0
  76. package/dist/unicast-fallback.d.ts.map +1 -0
  77. package/dist/unicast-fallback.js +53 -0
  78. package/dist/unicast-fallback.js.map +1 -0
  79. package/package.json +6 -6
  80. package/src/abr-controller.ts +9 -0
  81. package/src/amt-gateway.ts +2 -1
  82. package/src/endpoint-config.test.ts +54 -0
  83. package/src/endpoint-config.ts +121 -0
  84. package/src/fec-client.ts +11 -5
  85. package/src/index.ts +72 -2
  86. package/src/multicast-orchestrator.ts +150 -0
  87. package/src/multicast-subscription-pool.test.ts +115 -0
  88. package/src/multicast-subscription-pool.ts +164 -0
  89. package/src/multicast-tier.test.ts +80 -0
  90. package/src/multicast-tier.ts +32 -0
  91. package/src/no-modules.ts +44 -0
  92. package/src/stall-detector.test.ts +34 -0
  93. package/src/stall-detector.ts +63 -0
  94. package/src/takeover.ts +71 -0
  95. package/src/transport-manager.test.ts +192 -0
  96. package/src/transport-manager.ts +203 -153
  97. package/src/types.ts +50 -31
  98. package/src/unicast-fallback.ts +57 -0
@@ -2,15 +2,15 @@
2
2
  * @blockcast/transport - Transport Manager
3
3
  *
4
4
  * Unified transport abstraction for MoQ players supporting:
5
- * - Native multicast (ASM/SSM via IGMPv3/MLD + PIM-SSM)
6
- * - AMT tunneling (RFC 7450) with optional DRIAD relay discovery
5
+ * - window.multicast gateway subscriptions
6
+ * - AMT proxy tunneling (RFC 7450) with optional DRIAD relay discovery
7
7
  * - WebTransport/QUIC (MoQ-lite protocol)
8
8
  * - WebSocket fallback
9
9
  *
10
10
  * Transport promotion hierarchy (WebTransport-first for fast startup):
11
11
  * 1. WebTransport - immediate connection for fast channel select
12
- * 2. Background discovery - check if multicast available
13
- * 3. Promote to multicast (Native SSM > IGMP > AMT) if available
12
+ * 2. Background discovery - check if window.multicast is available
13
+ * 3. Promote to gateway multicast if available
14
14
  * 4. WebSocket fallback if WebTransport unavailable
15
15
  *
16
16
  * Features:
@@ -20,11 +20,13 @@
20
20
  * - Unified FEC/ABR pipeline across all transport modes
21
21
  */
22
22
  import type { TransportConfig, TransportCapabilities, TransportState, QualityLevel } from "./types.js";
23
+ import { type MulticastTierPacket, type OrchestratorCommand, type OrchestratorOptions } from "./multicast-orchestrator.js";
24
+ import type { MulticastTierEndpoint } from "./multicast-tier.js";
23
25
  /**
24
26
  * Transport Manager
25
27
  *
26
28
  * Manages transport connections with automatic mode selection:
27
- * WebTransport -> Native SSM -> IGMP -> AMT -> WebSocket
29
+ * WebTransport -> window.multicast -> AMT proxy -> WebSocket
28
30
  *
29
31
  * Renamed from SSMTransportManager - the old name is preserved
30
32
  * as a deprecated alias for backwards compatibility.
@@ -35,10 +37,17 @@ export declare class TransportManager {
35
37
  private subscription;
36
38
  private driad;
37
39
  private abr;
40
+ private multicastOrchestrator;
41
+ private onOrchestratorCommand?;
42
+ private connectionGeneration;
38
43
  private onPacket?;
39
44
  private onError?;
40
45
  private onStateChange?;
41
46
  constructor();
47
+ private getWindow;
48
+ private getWindowMulticastGateway;
49
+ private getGatewayCapabilities;
50
+ private gatewaySupportsBytes;
42
51
  /**
43
52
  * Detect available transport capabilities
44
53
  */
@@ -47,28 +56,23 @@ export declare class TransportManager {
47
56
  * Connect using best available transport
48
57
  *
49
58
  * Promotion hierarchy:
50
- * 1. Native SSM (IWA with Direct Sockets)
51
- * 2. Native IGMP (IWA fallback)
52
- * 3. AMT Gateway (specified or discovered via DRIAD)
53
- * 4. MOQ WebTransport (final fallback)
59
+ * 1. window.multicast gateway bytes
60
+ * 2. AMT proxy (specified or discovered via DRIAD)
61
+ * 3. MOQ WebTransport (final fallback)
54
62
  */
55
63
  connect(config: TransportConfig): Promise<boolean>;
56
64
  /**
57
- * Connect via native SSM (Source-Specific Multicast)
65
+ * Connect via the lowercase window.multicast bytes gateway.
58
66
  */
59
- private connectNativeSSM;
67
+ private connectWindowMulticast;
60
68
  /**
61
- * Connect via native IGMP (Any-Source Multicast)
69
+ * Connect via AMT proxy (with optional DRIAD discovery)
62
70
  */
63
- private connectNativeIGMP;
64
- /**
65
- * Connect via AMT Gateway (with optional DRIAD discovery)
66
- */
67
- private connectAMT;
71
+ private connectAmt;
68
72
  /**
69
73
  * Connect via WebSocket-based AMT proxy (browser fallback)
70
74
  */
71
- private connectAMTProxy;
75
+ private connectAmtProxy;
72
76
  /**
73
77
  * Handle received packet
74
78
  */
@@ -85,6 +89,11 @@ export declare class TransportManager {
85
89
  * Force quality level
86
90
  */
87
91
  setQuality(name: string): void;
92
+ /** Configures multicast-only ABR while leaving the caller's MoQ ABR untouched. */
93
+ configureMulticastTiers(options: OrchestratorOptions, onCommand?: (command: OrchestratorCommand) => void): MulticastTierEndpoint | undefined;
94
+ recordMulticastGoodput(bitrate: number | undefined): OrchestratorCommand | undefined;
95
+ recordMulticastTierPacket(packet: MulticastTierPacket): OrchestratorCommand | undefined;
96
+ pollMulticastTierSwitch(): OrchestratorCommand | undefined;
88
97
  /**
89
98
  * Set packet callback
90
99
  */
@@ -101,6 +110,7 @@ export declare class TransportManager {
101
110
  * Disconnect
102
111
  */
103
112
  disconnect(): void;
113
+ private dispatchOrchestratorCommand;
104
114
  }
105
115
  export declare const transportManager: TransportManager;
106
116
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"transport-manager.d.ts","sourceRoot":"","sources":["../src/transport-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EACX,eAAe,EAEf,qBAAqB,EACrB,cAAc,EACd,YAAY,EACZ,MAAM,YAAY,CAAC;AAIpB;;;;;;;;GAQG;AACH,qBAAa,gBAAgB;IAC5B,OAAO,CAAC,KAAK,CAMX;IAEF,OAAO,CAAC,YAAY,CAAsC;IAC1D,OAAO,CAAC,YAAY,CAAsC;IAC1D,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,GAAG,CAA4B;IAEvC,OAAO,CAAC,QAAQ,CAAC,CAA8B;IAC/C,OAAO,CAAC,OAAO,CAAC,CAAyB;IACzC,OAAO,CAAC,aAAa,CAAC,CAAkC;;IAMxD;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAmB1D;;;;;;;;OAQG;IACG,OAAO,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAoDxD;;OAEG;YACW,gBAAgB;IAgD9B;;OAEG;YACW,iBAAiB;IAyC/B;;OAEG;YACW,UAAU;IAoExB;;OAEG;YACW,eAAe;IA2D7B;;OAEG;IACH,OAAO,CAAC,YAAY;IAYpB;;OAEG;IACH,QAAQ,IAAI,cAAc;IAI1B;;OAEG;IACH,UAAU,IAAI,YAAY;IAI1B;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM;IAIvB;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI;IAIvD;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI;IAIjD;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI;IAI1D;;OAEG;IACH,UAAU;CAYV;AAGD,eAAO,MAAM,gBAAgB,kBAAyB,CAAC;AAEvD;;GAEG;AACH,eAAO,MAAM,mBAAmB,yBAAmB,CAAC;AAEpD;;GAEG;AACH,eAAO,MAAM,YAAY,kBAAmB,CAAC"}
1
+ {"version":3,"file":"transport-manager.d.ts","sourceRoot":"","sources":["../src/transport-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EACX,eAAe,EAEf,qBAAqB,EACrB,cAAc,EACd,YAAY,EAIZ,MAAM,YAAY,CAAC;AAGpB,OAAO,EAEN,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAIjE;;;;;;;;GAQG;AACH,qBAAa,gBAAgB;IAC5B,OAAO,CAAC,KAAK,CAMX;IAEF,OAAO,CAAC,YAAY,CAAsC;IAC1D,OAAO,CAAC,YAAY,CAAsC;IAC1D,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,GAAG,CAA4B;IACvC,OAAO,CAAC,qBAAqB,CAAsC;IACnE,OAAO,CAAC,qBAAqB,CAAC,CAAyC;IACvE,OAAO,CAAC,oBAAoB,CAAK;IAEjC,OAAO,CAAC,QAAQ,CAAC,CAA8B;IAC/C,OAAO,CAAC,OAAO,CAAC,CAAyB;IACzC,OAAO,CAAC,aAAa,CAAC,CAAkC;;IAMxD,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,yBAAyB;YAInB,sBAAsB;YActB,oBAAoB;IAUlC;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAoB1D;;;;;;;OAOG;IACG,OAAO,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IA6ExD;;OAEG;YACW,sBAAsB;IAmDpC;;OAEG;YACW,UAAU;IAgCxB;;OAEG;YACW,eAAe;IAkF7B;;OAEG;IACH,OAAO,CAAC,YAAY;IAYpB;;OAEG;IACH,QAAQ,IAAI,cAAc;IAI1B;;OAEG;IACH,UAAU,IAAI,YAAY;IAI1B;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM;IAIvB,kFAAkF;IAClF,uBAAuB,CACtB,OAAO,EAAE,mBAAmB,EAC5B,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,GAChD,qBAAqB,GAAG,SAAS;IAOpC,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,mBAAmB,GAAG,SAAS;IAIpF,yBAAyB,CAAC,MAAM,EAAE,mBAAmB,GAAG,mBAAmB,GAAG,SAAS;IAIvF,uBAAuB,IAAI,mBAAmB,GAAG,SAAS;IAI1D;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI;IAIvD;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI;IAIjD;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI;IAI1D;;OAEG;IACH,UAAU;IAiBV,OAAO,CAAC,2BAA2B;CAInC;AAGD,eAAO,MAAM,gBAAgB,kBAAyB,CAAC;AAEvD;;GAEG;AACH,eAAO,MAAM,mBAAmB,yBAAmB,CAAC;AAEpD;;GAEG;AACH,eAAO,MAAM,YAAY,kBAAmB,CAAC"}
@@ -2,15 +2,15 @@
2
2
  * @blockcast/transport - Transport Manager
3
3
  *
4
4
  * Unified transport abstraction for MoQ players supporting:
5
- * - Native multicast (ASM/SSM via IGMPv3/MLD + PIM-SSM)
6
- * - AMT tunneling (RFC 7450) with optional DRIAD relay discovery
5
+ * - window.multicast gateway subscriptions
6
+ * - AMT proxy tunneling (RFC 7450) with optional DRIAD relay discovery
7
7
  * - WebTransport/QUIC (MoQ-lite protocol)
8
8
  * - WebSocket fallback
9
9
  *
10
10
  * Transport promotion hierarchy (WebTransport-first for fast startup):
11
11
  * 1. WebTransport - immediate connection for fast channel select
12
- * 2. Background discovery - check if multicast available
13
- * 3. Promote to multicast (Native SSM > IGMP > AMT) if available
12
+ * 2. Background discovery - check if window.multicast is available
13
+ * 3. Promote to gateway multicast if available
14
14
  * 4. WebSocket fallback if WebTransport unavailable
15
15
  *
16
16
  * Features:
@@ -21,11 +21,14 @@
21
21
  */
22
22
  import { DRIADDiscovery } from "./driad-discovery.js";
23
23
  import { AdaptiveBitrateController } from "./abr-controller.js";
24
+ import { MulticastOrchestrator, } from "./multicast-orchestrator.js";
25
+ import { multicastSubscriptionPool } from "./multicast-subscription-pool.js";
26
+ import { normalizeMulticastEndpoint } from "./endpoint-config.js";
24
27
  /**
25
28
  * Transport Manager
26
29
  *
27
30
  * Manages transport connections with automatic mode selection:
28
- * WebTransport -> Native SSM -> IGMP -> AMT -> WebSocket
31
+ * WebTransport -> window.multicast -> AMT proxy -> WebSocket
29
32
  *
30
33
  * Renamed from SSMTransportManager - the old name is preserved
31
34
  * as a deprecated alias for backwards compatibility.
@@ -42,27 +45,61 @@ export class TransportManager {
42
45
  subscription = null;
43
46
  driad = new DRIADDiscovery();
44
47
  abr;
48
+ multicastOrchestrator = null;
49
+ onOrchestratorCommand;
50
+ connectionGeneration = 0;
45
51
  onPacket;
46
52
  onError;
47
53
  onStateChange;
48
54
  constructor() {
49
55
  this.abr = new AdaptiveBitrateController();
50
56
  }
57
+ getWindow() {
58
+ return typeof window === "undefined" ? undefined : window;
59
+ }
60
+ getWindowMulticastGateway() {
61
+ return this.getWindow()?.multicast;
62
+ }
63
+ async getGatewayCapabilities(gateway) {
64
+ if (!gateway?.capabilities)
65
+ return undefined;
66
+ try {
67
+ return typeof gateway.capabilities === "function" ?
68
+ await gateway.capabilities() :
69
+ gateway.capabilities;
70
+ }
71
+ catch (error) {
72
+ console.warn("[Transport] window.multicast capabilities failed:", error);
73
+ return undefined;
74
+ }
75
+ }
76
+ async gatewaySupportsBytes(gateway) {
77
+ if (typeof gateway?.subscribe !== "function")
78
+ return false;
79
+ if (!gateway.capabilities)
80
+ return true;
81
+ const capabilities = await this.getGatewayCapabilities(gateway);
82
+ if (!capabilities)
83
+ return false;
84
+ const consumeModes = capabilities.consumeModes;
85
+ return !consumeModes || consumeModes.includes("bytes");
86
+ }
51
87
  /**
52
88
  * Detect available transport capabilities
53
89
  */
54
90
  async detectCapabilities() {
55
91
  if (this.capabilities)
56
92
  return this.capabilities;
57
- const hasMulticast = typeof window !== "undefined" && window.Multicast !== undefined;
58
- const multicastApi = hasMulticast ? window.Multicast : null;
93
+ const gateway = this.getWindowMulticastGateway();
94
+ const hasGatewayBytes = await this.gatewaySupportsBytes(gateway);
95
+ const win = this.getWindow();
59
96
  this.capabilities = {
60
- nativeSSM: !!multicastApi?.subscribeSSM,
61
- nativeIGMP: !!multicastApi?.subscribe,
62
- directSockets: typeof window !== "undefined" && typeof window.UDPSocket !== "undefined",
63
- amt: !!multicastApi?.connectAMT,
97
+ nativeSSM: hasGatewayBytes,
98
+ nativeIGMP: hasGatewayBytes,
99
+ directSockets: typeof win?.UDPSocket !== "undefined",
100
+ amt: false,
64
101
  driad: true, // DRIAD uses HTTP proxy, always available
65
- fecDecode: !!multicastApi?.fecDecode,
102
+ fecDecode: false,
66
103
  };
67
104
  console.log("[Transport] Capabilities:", this.capabilities);
68
105
  return this.capabilities;
@@ -71,13 +108,46 @@ export class TransportManager {
71
108
  * Connect using best available transport
72
109
  *
73
110
  * Promotion hierarchy:
74
- * 1. Native SSM (IWA with Direct Sockets)
75
- * 2. Native IGMP (IWA fallback)
76
- * 3. AMT Gateway (specified or discovered via DRIAD)
77
- * 4. MOQ WebTransport (final fallback)
111
+ * 1. window.multicast gateway bytes
112
+ * 2. AMT proxy (specified or discovered via DRIAD)
113
+ * 3. MOQ WebTransport (final fallback)
78
114
  */
79
115
  async connect(config) {
116
+ const generation = ++this.connectionGeneration;
117
+ this.subscription?.close();
118
+ this.subscription = null;
119
+ this.state = {
120
+ mode: "disconnected",
121
+ connected: false,
122
+ packetsReceived: 0,
123
+ bytesReceived: 0,
124
+ lastPacketTime: 0,
125
+ };
126
+ this.onStateChange?.(this.state);
127
+ const endpoint = normalizeMulticastEndpoint({
128
+ groupAddress: config.group,
129
+ sourceAddress: config.source,
130
+ port: config.port,
131
+ mode: config.mode,
132
+ amtRelay: config.amtRelay,
133
+ amtRelayPort: config.amtRelayPort,
134
+ });
135
+ if (!endpoint) {
136
+ const error = new Error("Invalid multicast endpoint configuration");
137
+ this.onError?.(error);
138
+ return false;
139
+ }
140
+ config = {
141
+ ...config,
142
+ group: endpoint.groupAddress,
143
+ source: endpoint.sourceAddress ?? "",
144
+ mode: endpoint.mode,
145
+ amtRelay: endpoint.amtRelay,
146
+ amtRelayPort: endpoint.amtRelayPort,
147
+ };
80
148
  const caps = await this.detectCapabilities();
149
+ if (generation !== this.connectionGeneration)
150
+ return false;
81
151
  // Initialize ABR with requested quality
82
152
  if (config.initialQuality) {
83
153
  this.abr = new AdaptiveBitrateController(config.initialQuality);
@@ -89,127 +159,90 @@ export class TransportManager {
89
159
  });
90
160
  // Try transport hierarchy
91
161
  let connected = false;
92
- // 1. Try native SSM (best option)
93
- if (caps.nativeSSM && config.source) {
94
- console.log("[Transport] Attempting native SSM...");
95
- connected = await this.connectNativeSSM(config);
162
+ // 1. Try the canonical browser multicast gateway.
163
+ if (caps.nativeSSM || caps.nativeIGMP) {
164
+ console.log("[Transport] Attempting window.multicast...");
165
+ connected = await this.connectWindowMulticast(config, generation);
96
166
  if (connected) {
97
- this.state.mode = "ssm";
167
+ if (generation !== this.connectionGeneration)
168
+ return false;
169
+ this.state.mode = "multicast";
98
170
  return true;
99
171
  }
100
172
  }
101
- // 2. Try native IGMP (if SSM not available)
102
- if (caps.nativeIGMP && !connected) {
103
- console.log("[Transport] Attempting native IGMP...");
104
- connected = await this.connectNativeIGMP(config);
105
- if (connected) {
106
- this.state.mode = "igmp";
107
- return true;
108
- }
109
- }
110
- // 3. Try AMT (with optional DRIAD discovery)
173
+ // 2. Try AMT proxy (with optional DRIAD discovery)
111
174
  if (!connected) {
112
175
  console.log("[Transport] Attempting AMT tunnel...");
113
- connected = await this.connectAMT(config);
176
+ connected = await this.connectAmt(config, generation);
114
177
  if (connected) {
115
- this.state.mode = config.driadEnabled ? "driad" : "amt";
178
+ if (generation !== this.connectionGeneration)
179
+ return false;
180
+ this.state.mode = "amt";
116
181
  return true;
117
182
  }
118
183
  }
119
- // 4. Fallback to MOQ
184
+ // 3. Fallback to MOQ
120
185
  console.log("[Transport] All multicast transports failed, falling back to MOQ");
121
186
  return false;
122
187
  }
123
188
  /**
124
- * Connect via native SSM (Source-Specific Multicast)
189
+ * Connect via the lowercase window.multicast bytes gateway.
125
190
  */
126
- async connectNativeSSM(config) {
191
+ async connectWindowMulticast(config, generation) {
127
192
  try {
128
- const multicastApi = window.Multicast;
129
- if (!multicastApi?.subscribeSSM)
193
+ const gateway = this.getWindowMulticastGateway();
194
+ if (typeof gateway?.subscribe !== "function")
130
195
  return false;
131
- const subscription = await multicastApi.subscribeSSM({
132
- group: config.group,
133
- source: config.source,
134
- port: config.port,
135
- protocol: "mmtp",
136
- fec: true,
196
+ const lease = await multicastSubscriptionPool.acquire(gateway, config, {
197
+ onBytes: (data) => {
198
+ if (generation === this.connectionGeneration)
199
+ this.handlePacket(data);
200
+ },
201
+ onState: (state) => {
202
+ if (generation !== this.connectionGeneration)
203
+ return;
204
+ this.state.connected = state !== "closed";
205
+ this.onStateChange?.(this.state);
206
+ },
207
+ onError: (error) => {
208
+ if (generation !== this.connectionGeneration)
209
+ return;
210
+ console.error("[Transport] window.multicast error:", error);
211
+ this.onError?.(error);
212
+ },
137
213
  });
138
- subscription.onpacket = (event) => {
139
- this.handlePacket(event.data);
140
- };
141
- subscription.onerror = (error) => {
142
- console.error("[Transport] Native SSM error:", error);
143
- this.onError?.(error);
144
- };
145
- this.subscription = {
146
- id: `ssm-${Date.now()}`,
147
- config,
148
- close: () => subscription.unsubscribe(),
149
- };
150
- this.state = {
151
- mode: "ssm",
152
- connected: true,
153
- group: config.group,
154
- source: config.source,
155
- quality: this.abr.getCurrentQuality(),
156
- packetsReceived: 0,
157
- bytesReceived: 0,
158
- lastPacketTime: 0,
159
- };
160
- console.log(`[Transport] Connected via native SSM: (${config.source}, ${config.group})`);
161
- this.onStateChange?.(this.state);
162
- return true;
163
- }
164
- catch (error) {
165
- console.warn("[Transport] Native SSM failed:", error);
166
- return false;
167
- }
168
- }
169
- /**
170
- * Connect via native IGMP (Any-Source Multicast)
171
- */
172
- async connectNativeIGMP(config) {
173
- try {
174
- const multicastApi = window.Multicast;
175
- if (!multicastApi?.subscribe)
214
+ if (generation !== this.connectionGeneration) {
215
+ await lease.release();
176
216
  return false;
177
- const subscription = await multicastApi.subscribe({
178
- group: config.group,
179
- port: config.port,
180
- protocol: "mmtp",
181
- fec: true,
182
- });
183
- subscription.onpacket = (event) => {
184
- this.handlePacket(event.data);
185
- };
217
+ }
186
218
  this.subscription = {
187
- id: `igmp-${Date.now()}`,
219
+ id: lease.key,
188
220
  config,
189
- close: () => subscription.unsubscribe(),
221
+ close: () => { void lease.release(); },
190
222
  };
191
223
  this.state = {
192
- mode: "igmp",
224
+ mode: "multicast",
193
225
  connected: true,
194
226
  group: config.group,
227
+ source: config.source,
195
228
  quality: this.abr.getCurrentQuality(),
196
229
  packetsReceived: 0,
197
230
  bytesReceived: 0,
198
231
  lastPacketTime: 0,
199
232
  };
200
- console.log(`[Transport] Connected via IGMP: ${config.group}`);
233
+ console.log(`[Transport] Connected via window.multicast: (${config.source}, ${config.group})`);
201
234
  this.onStateChange?.(this.state);
202
235
  return true;
203
236
  }
204
237
  catch (error) {
205
- console.warn("[Transport] Native IGMP failed:", error);
238
+ console.warn("[Transport] window.multicast failed:", error);
206
239
  return false;
207
240
  }
208
241
  }
209
242
  /**
210
- * Connect via AMT Gateway (with optional DRIAD discovery)
243
+ * Connect via AMT proxy (with optional DRIAD discovery)
211
244
  */
212
- async connectAMT(config) {
245
+ async connectAmt(config, generation) {
213
246
  try {
214
247
  let amtRelay = config.amtRelay;
215
248
  // Use DRIAD to discover relay if not specified (RFC 8777)
@@ -217,50 +250,22 @@ export class TransportManager {
217
250
  if (!amtRelay && config.driadEnabled !== false && config.source) {
218
251
  console.log(`[Transport] Discovering AMT relay via DRIAD for source ${config.source}...`);
219
252
  const relays = await this.driad.discoverRelays(config.source);
253
+ if (generation !== this.connectionGeneration)
254
+ return false;
220
255
  const bestRelay = await this.driad.selectBestRelay(relays);
256
+ if (generation !== this.connectionGeneration)
257
+ return false;
221
258
  if (bestRelay) {
222
259
  amtRelay = bestRelay.host;
223
- this.state.driadRelay = amtRelay;
260
+ this.state.amtRelay = amtRelay;
224
261
  }
225
262
  }
226
263
  if (!amtRelay) {
227
264
  console.warn("[Transport] No AMT relay available (DRIAD requires source address for SSM)");
228
265
  return false;
229
266
  }
230
- // Connect via AMT proxy/gateway
231
- const multicastApi = window.Multicast;
232
- if (multicastApi?.connectAMT) {
233
- const gateway = await multicastApi.connectAMT({
234
- relay: amtRelay,
235
- group: config.group,
236
- source: config.source,
237
- port: config.port,
238
- });
239
- gateway.onpacket = (event) => {
240
- this.handlePacket(event.data);
241
- };
242
- this.subscription = {
243
- id: `amt-${Date.now()}`,
244
- config,
245
- close: () => gateway.close(),
246
- };
247
- this.state = {
248
- mode: config.driadEnabled ? "driad" : "amt",
249
- connected: true,
250
- group: config.group,
251
- source: config.source,
252
- amtRelay,
253
- quality: this.abr.getCurrentQuality(),
254
- packetsReceived: 0,
255
- bytesReceived: 0,
256
- lastPacketTime: 0,
257
- };
258
- console.log(`[Transport] Connected via AMT: ${amtRelay}`);
259
- this.onStateChange?.(this.state);
260
- return true;
261
- }
262
- // Fallback: Use WebSocket-based AMT proxy
263
- return await this.connectAMTProxy(config, amtRelay);
267
+ // Use the WebSocket-based AMT proxy when a relay is known.
268
+ return await this.connectAmtProxy(config, amtRelay, generation);
264
269
  }
265
270
  catch (error) {
266
271
  console.warn("[Transport] AMT connection failed:", error);
@@ -270,13 +275,28 @@ export class TransportManager {
270
275
  /**
271
276
  * Connect via WebSocket-based AMT proxy (browser fallback)
272
277
  */
273
- async connectAMTProxy(config, amtRelay) {
278
+ async connectAmtProxy(config, amtRelay, generation) {
274
279
  try {
275
- const wsUrl = `wss://${amtRelay}/amt-proxy?group=${config.group}&source=${config.source || ""}&port=${config.port}`;
280
+ const relayHost = amtRelay.includes(":") && !amtRelay.startsWith("[") ? `[${amtRelay}]` : amtRelay;
281
+ const relayAuthority = config.amtRelayPort ? `${relayHost}:${config.amtRelayPort}` : relayHost;
282
+ const wsUrl = new URL(`wss://${relayAuthority}/amt-proxy`);
283
+ wsUrl.searchParams.set("group", config.group);
284
+ wsUrl.searchParams.set("source", config.source || "");
285
+ wsUrl.searchParams.set("port", String(config.port));
276
286
  const ws = new WebSocket(wsUrl);
277
287
  return new Promise((resolve, reject) => {
278
288
  ws.binaryType = "arraybuffer";
289
+ const timeout = setTimeout(() => {
290
+ ws.close();
291
+ reject(new Error("AMT proxy connection timeout"));
292
+ }, 10000);
279
293
  ws.onopen = () => {
294
+ clearTimeout(timeout);
295
+ if (generation !== this.connectionGeneration) {
296
+ ws.close();
297
+ resolve(false);
298
+ return;
299
+ }
280
300
  console.log(`[Transport] Connected to AMT proxy: ${amtRelay}`);
281
301
  this.subscription = {
282
302
  id: `amt-proxy-${Date.now()}`,
@@ -298,20 +318,29 @@ export class TransportManager {
298
318
  resolve(true);
299
319
  };
300
320
  ws.onmessage = (event) => {
301
- if (event.data instanceof ArrayBuffer) {
321
+ if (generation === this.connectionGeneration && event.data instanceof ArrayBuffer) {
302
322
  this.handlePacket(event.data);
303
323
  }
304
324
  };
305
325
  ws.onerror = (error) => {
326
+ clearTimeout(timeout);
327
+ if (generation !== this.connectionGeneration) {
328
+ resolve(false);
329
+ return;
330
+ }
306
331
  console.error("[Transport] AMT proxy error:", error);
307
332
  reject(error);
308
333
  };
309
334
  ws.onclose = () => {
335
+ clearTimeout(timeout);
336
+ if (generation !== this.connectionGeneration) {
337
+ resolve(false);
338
+ return;
339
+ }
310
340
  this.state.connected = false;
311
341
  this.onStateChange?.(this.state);
342
+ resolve(false);
312
343
  };
313
- // Timeout
314
- setTimeout(() => reject(new Error("AMT proxy connection timeout")), 10000);
315
344
  });
316
345
  }
317
346
  catch (error) {
@@ -349,6 +378,22 @@ export class TransportManager {
349
378
  setQuality(name) {
350
379
  this.abr.setQuality(name);
351
380
  }
381
+ /** Configures multicast-only ABR while leaving the caller's MoQ ABR untouched. */
382
+ configureMulticastTiers(options, onCommand) {
383
+ this.dispatchOrchestratorCommand(this.multicastOrchestrator?.cancel());
384
+ this.multicastOrchestrator = new MulticastOrchestrator(options);
385
+ this.onOrchestratorCommand = onCommand;
386
+ return this.multicastOrchestrator.start();
387
+ }
388
+ recordMulticastGoodput(bitrate) {
389
+ return this.dispatchOrchestratorCommand(this.multicastOrchestrator?.onGoodput({ bitrate }));
390
+ }
391
+ recordMulticastTierPacket(packet) {
392
+ return this.dispatchOrchestratorCommand(this.multicastOrchestrator?.onTierPacket(packet));
393
+ }
394
+ pollMulticastTierSwitch() {
395
+ return this.dispatchOrchestratorCommand(this.multicastOrchestrator?.poll());
396
+ }
352
397
  /**
353
398
  * Set packet callback
354
399
  */
@@ -371,8 +416,12 @@ export class TransportManager {
371
416
  * Disconnect
372
417
  */
373
418
  disconnect() {
419
+ this.connectionGeneration++;
374
420
  this.subscription?.close();
375
421
  this.subscription = null;
422
+ this.dispatchOrchestratorCommand(this.multicastOrchestrator?.cancel());
423
+ this.multicastOrchestrator = null;
424
+ this.onOrchestratorCommand = undefined;
376
425
  this.state = {
377
426
  mode: "disconnected",
378
427
  connected: false,
@@ -382,6 +431,11 @@ export class TransportManager {
382
431
  };
383
432
  this.onStateChange?.(this.state);
384
433
  }
434
+ dispatchOrchestratorCommand(command) {
435
+ if (command)
436
+ this.onOrchestratorCommand?.(command);
437
+ return command;
438
+ }
385
439
  }
386
440
  // Export singleton instance
387
441
  export const transportManager = new TransportManager();
@@ -1 +1 @@
1
- {"version":3,"file":"transport-manager.js","sourceRoot":"","sources":["../src/transport-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transport-manager.js","sourceRoot":"","sources":["../src/transport-manager.ts"],"names":[],"mappings":"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"}