@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.
- package/README.md +264 -0
- package/dist/.build-stamp +0 -0
- package/dist/abr-controller.d.ts +3 -0
- package/dist/abr-controller.d.ts.map +1 -1
- package/dist/abr-controller.js +5 -0
- package/dist/abr-controller.js.map +1 -1
- package/dist/amt-gateway.d.ts.map +1 -1
- package/dist/amt-gateway.js +2 -1
- package/dist/amt-gateway.js.map +1 -1
- package/dist/endpoint-config.d.ts +20 -0
- package/dist/endpoint-config.d.ts.map +1 -0
- package/dist/endpoint-config.js +103 -0
- package/dist/endpoint-config.js.map +1 -0
- package/dist/endpoint-config.test.d.ts +2 -0
- package/dist/endpoint-config.test.d.ts.map +1 -0
- package/dist/endpoint-config.test.js +39 -0
- package/dist/endpoint-config.test.js.map +1 -0
- package/dist/fec-client.d.ts +2 -2
- package/dist/fec-client.d.ts.map +1 -1
- package/dist/fec-client.js +10 -5
- package/dist/fec-client.js.map +1 -1
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/mmt-transport.no-modules.js +1154 -0
- package/dist/mmt-transport.no-modules.js.map +7 -0
- package/dist/multicast-orchestrator.d.ts +56 -0
- package/dist/multicast-orchestrator.d.ts.map +1 -0
- package/dist/multicast-orchestrator.js +123 -0
- package/dist/multicast-orchestrator.js.map +1 -0
- package/dist/multicast-subscription-pool.d.ts +18 -0
- package/dist/multicast-subscription-pool.d.ts.map +1 -0
- package/dist/multicast-subscription-pool.js +130 -0
- package/dist/multicast-subscription-pool.js.map +1 -0
- package/dist/multicast-subscription-pool.test.d.ts +2 -0
- package/dist/multicast-subscription-pool.test.d.ts.map +1 -0
- package/dist/multicast-subscription-pool.test.js +108 -0
- package/dist/multicast-subscription-pool.test.js.map +1 -0
- package/dist/multicast-tier.d.ts +14 -0
- package/dist/multicast-tier.d.ts.map +1 -0
- package/dist/multicast-tier.js +22 -0
- package/dist/multicast-tier.js.map +1 -0
- package/dist/multicast-tier.test.d.ts +2 -0
- package/dist/multicast-tier.test.d.ts.map +1 -0
- package/dist/multicast-tier.test.js +75 -0
- package/dist/multicast-tier.test.js.map +1 -0
- package/dist/no-modules.d.ts +29 -0
- package/dist/no-modules.d.ts.map +1 -0
- package/dist/no-modules.js +35 -0
- package/dist/no-modules.js.map +1 -0
- package/dist/stall-detector.d.ts +22 -0
- package/dist/stall-detector.d.ts.map +1 -0
- package/dist/stall-detector.js +46 -0
- package/dist/stall-detector.js.map +1 -0
- package/dist/stall-detector.test.d.ts +2 -0
- package/dist/stall-detector.test.d.ts.map +1 -0
- package/dist/stall-detector.test.js +33 -0
- package/dist/stall-detector.test.js.map +1 -0
- package/dist/takeover.d.ts +49 -0
- package/dist/takeover.d.ts.map +1 -0
- package/dist/takeover.js +43 -0
- package/dist/takeover.js.map +1 -0
- package/dist/transport-manager.d.ts +28 -18
- package/dist/transport-manager.d.ts.map +1 -1
- package/dist/transport-manager.js +192 -138
- package/dist/transport-manager.js.map +1 -1
- package/dist/transport-manager.test.d.ts +2 -0
- package/dist/transport-manager.test.d.ts.map +1 -0
- package/dist/transport-manager.test.js +155 -0
- package/dist/transport-manager.test.js.map +1 -0
- package/dist/types.d.ts +36 -36
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/unicast-fallback.d.ts +36 -0
- package/dist/unicast-fallback.d.ts.map +1 -0
- package/dist/unicast-fallback.js +53 -0
- package/dist/unicast-fallback.js.map +1 -0
- package/package.json +6 -6
- package/src/abr-controller.ts +9 -0
- package/src/amt-gateway.ts +2 -1
- package/src/endpoint-config.test.ts +54 -0
- package/src/endpoint-config.ts +121 -0
- package/src/fec-client.ts +11 -5
- package/src/index.ts +72 -2
- package/src/multicast-orchestrator.ts +150 -0
- package/src/multicast-subscription-pool.test.ts +115 -0
- package/src/multicast-subscription-pool.ts +164 -0
- package/src/multicast-tier.test.ts +80 -0
- package/src/multicast-tier.ts +32 -0
- package/src/no-modules.ts +44 -0
- package/src/stall-detector.test.ts +34 -0
- package/src/stall-detector.ts +63 -0
- package/src/takeover.ts +71 -0
- package/src/transport-manager.test.ts +192 -0
- package/src/transport-manager.ts +203 -153
- package/src/types.ts +50 -31
- 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
|
-
* -
|
|
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
|
|
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 ->
|
|
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.
|
|
51
|
-
* 2.
|
|
52
|
-
* 3.
|
|
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
|
|
65
|
+
* Connect via the lowercase window.multicast bytes gateway.
|
|
58
66
|
*/
|
|
59
|
-
private
|
|
67
|
+
private connectWindowMulticast;
|
|
60
68
|
/**
|
|
61
|
-
* Connect via
|
|
69
|
+
* Connect via AMT proxy (with optional DRIAD discovery)
|
|
62
70
|
*/
|
|
63
|
-
private
|
|
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
|
|
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,
|
|
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
|
-
* -
|
|
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
|
|
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 ->
|
|
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
|
|
58
|
-
const
|
|
93
|
+
const gateway = this.getWindowMulticastGateway();
|
|
94
|
+
const hasGatewayBytes = await this.gatewaySupportsBytes(gateway);
|
|
95
|
+
const win = this.getWindow();
|
|
59
96
|
this.capabilities = {
|
|
60
|
-
nativeSSM:
|
|
61
|
-
nativeIGMP:
|
|
62
|
-
directSockets: typeof
|
|
63
|
-
amt:
|
|
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:
|
|
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.
|
|
75
|
-
* 2.
|
|
76
|
-
* 3.
|
|
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
|
|
93
|
-
if (caps.nativeSSM
|
|
94
|
-
console.log("[Transport] Attempting
|
|
95
|
-
connected = await this.
|
|
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.
|
|
167
|
+
if (generation !== this.connectionGeneration)
|
|
168
|
+
return false;
|
|
169
|
+
this.state.mode = "multicast";
|
|
98
170
|
return true;
|
|
99
171
|
}
|
|
100
172
|
}
|
|
101
|
-
// 2. Try
|
|
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.
|
|
176
|
+
connected = await this.connectAmt(config, generation);
|
|
114
177
|
if (connected) {
|
|
115
|
-
|
|
178
|
+
if (generation !== this.connectionGeneration)
|
|
179
|
+
return false;
|
|
180
|
+
this.state.mode = "amt";
|
|
116
181
|
return true;
|
|
117
182
|
}
|
|
118
183
|
}
|
|
119
|
-
//
|
|
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
|
|
189
|
+
* Connect via the lowercase window.multicast bytes gateway.
|
|
125
190
|
*/
|
|
126
|
-
async
|
|
191
|
+
async connectWindowMulticast(config, generation) {
|
|
127
192
|
try {
|
|
128
|
-
const
|
|
129
|
-
if (
|
|
193
|
+
const gateway = this.getWindowMulticastGateway();
|
|
194
|
+
if (typeof gateway?.subscribe !== "function")
|
|
130
195
|
return false;
|
|
131
|
-
const
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
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
|
-
|
|
139
|
-
|
|
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
|
-
|
|
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:
|
|
219
|
+
id: lease.key,
|
|
188
220
|
config,
|
|
189
|
-
close: () =>
|
|
221
|
+
close: () => { void lease.release(); },
|
|
190
222
|
};
|
|
191
223
|
this.state = {
|
|
192
|
-
mode: "
|
|
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
|
|
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]
|
|
238
|
+
console.warn("[Transport] window.multicast failed:", error);
|
|
206
239
|
return false;
|
|
207
240
|
}
|
|
208
241
|
}
|
|
209
242
|
/**
|
|
210
|
-
* Connect via AMT
|
|
243
|
+
* Connect via AMT proxy (with optional DRIAD discovery)
|
|
211
244
|
*/
|
|
212
|
-
async
|
|
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.
|
|
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
|
-
//
|
|
231
|
-
|
|
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
|
|
278
|
+
async connectAmtProxy(config, amtRelay, generation) {
|
|
274
279
|
try {
|
|
275
|
-
const
|
|
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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"}
|