livekit-client 2.19.1 → 2.19.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/dist/livekit-client.e2ee.worker.js +1 -1
- package/dist/livekit-client.e2ee.worker.js.map +1 -1
- package/dist/livekit-client.e2ee.worker.mjs +181 -122
- package/dist/livekit-client.e2ee.worker.mjs.map +1 -1
- package/dist/livekit-client.esm.mjs +489 -419
- package/dist/livekit-client.esm.mjs.map +1 -1
- package/dist/livekit-client.pt.worker.js +1 -1
- package/dist/livekit-client.pt.worker.js.map +1 -1
- package/dist/livekit-client.pt.worker.mjs +129 -95
- package/dist/livekit-client.pt.worker.mjs.map +1 -1
- package/dist/livekit-client.umd.js +1 -1
- package/dist/livekit-client.umd.js.map +1 -1
- package/dist/src/e2ee/worker/FrameCryptor.d.ts +12 -2
- package/dist/src/e2ee/worker/FrameCryptor.d.ts.map +1 -1
- package/dist/src/room/RTCEngine.d.ts +8 -0
- package/dist/src/room/RTCEngine.d.ts.map +1 -1
- package/dist/src/room/rpc/client/RpcClientManager.d.ts.map +1 -1
- package/dist/ts4.2/e2ee/worker/FrameCryptor.d.ts +11 -1
- package/dist/ts4.2/room/RTCEngine.d.ts +8 -0
- package/package.json +7 -7
- package/src/e2ee/worker/FrameCryptor.ts +42 -7
- package/src/room/RTCEngine.ts +46 -18
- package/src/room/rpc/client/RpcClientManager.ts +5 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type TypedEventEmitter from 'typed-emitter';
|
|
2
2
|
import type { PacketTrailerPublishOptions } from '../../packetTrailer/types';
|
|
3
|
-
import type
|
|
3
|
+
import { type VideoCodec } from '../../room/track/options';
|
|
4
4
|
import { type CryptorCallbacks } from '../events';
|
|
5
5
|
import type { KeyProviderOptions } from '../types';
|
|
6
6
|
import type { ParticipantKeyHandler } from './ParticipantKeyHandler';
|
|
@@ -54,6 +54,11 @@ export declare class FrameCryptor extends BaseFrameCryptor {
|
|
|
54
54
|
private readonly ERROR_THROTTLE_MS;
|
|
55
55
|
private readonly MAX_ERRORS_PER_MINUTE;
|
|
56
56
|
private readonly ERROR_WINDOW_MS;
|
|
57
|
+
/**
|
|
58
|
+
* Tracks (participant, trackId, payloadType) tuples for which we've already logged a NALU
|
|
59
|
+
* fallback, so a persistent bad state doesn't flood the console (Firefox doesn't filter debug).
|
|
60
|
+
*/
|
|
61
|
+
private loggedNALUFallbacks;
|
|
57
62
|
constructor(opts: {
|
|
58
63
|
keys: ParticipantKeyHandler;
|
|
59
64
|
participantIdentity: string;
|
|
@@ -160,7 +165,12 @@ export declare class FrameCryptor extends BaseFrameCryptor {
|
|
|
160
165
|
private makeIV;
|
|
161
166
|
private getUnencryptedBytes;
|
|
162
167
|
/**
|
|
163
|
-
*
|
|
168
|
+
* Logs a NALU processing fallback at most once per (participant, trackId, payloadType) tuple,
|
|
169
|
+
* so a persistent bad state doesn't flood the console (Firefox doesn't filter debug).
|
|
170
|
+
*/
|
|
171
|
+
private logNALUFallbackOnce;
|
|
172
|
+
/**
|
|
173
|
+
* inspects frame mimetype if available. falls back to payloadtype and maps it to the codec specified in rtpMap
|
|
164
174
|
*/
|
|
165
175
|
private getVideoCodec;
|
|
166
176
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FrameCryptor.d.ts","sourceRoot":"","sources":["../../../../src/e2ee/worker/FrameCryptor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,iBAAiB,MAAM,eAAe,CAAC;AAMnD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAE7E,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"FrameCryptor.d.ts","sourceRoot":"","sources":["../../../../src/e2ee/worker/FrameCryptor.ts"],"names":[],"mappings":"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"}
|
|
@@ -119,6 +119,13 @@ export default class RTCEngine extends RTCEngine_base {
|
|
|
119
119
|
private configure;
|
|
120
120
|
private setupSignalClientCallbacks;
|
|
121
121
|
private makeRTCConfiguration;
|
|
122
|
+
/**
|
|
123
|
+
* Populate the publisher PC so its first offer carries the data channels + recvonly media
|
|
124
|
+
* sections. Required for every V1 connection: Firefox only binds receive decoders for media
|
|
125
|
+
* present in that first offer, and the offer-with-join path needs the sections to
|
|
126
|
+
* build a meaningful initial offer. Must be called on a configured pcManager.
|
|
127
|
+
*/
|
|
128
|
+
private applyInitialPublisherLayout;
|
|
122
129
|
private addMediaSections;
|
|
123
130
|
private createDataChannels;
|
|
124
131
|
private handleDataChannel;
|
|
@@ -161,6 +168,7 @@ export default class RTCEngine extends RTCEngine_base {
|
|
|
161
168
|
sendSyncState(remoteTracks: RemoteTrackPublication[], localTracks: LocalTrackPublication[], localDataTrackInfos: Array<DataTrackInfo>): void;
|
|
162
169
|
failNext(): void;
|
|
163
170
|
failNextV1Path(): void;
|
|
171
|
+
private onRtpMapAvailable;
|
|
164
172
|
private dataChannelsInfo;
|
|
165
173
|
private clearReconnectTimeout;
|
|
166
174
|
private clearPendingReconnect;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RTCEngine.d.ts","sourceRoot":"","sources":["../../../src/room/RTCEngine.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"RTCEngine.d.ts","sourceRoot":"","sources":["../../../src/room/RTCEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcClientManager.d.ts","sourceRoot":"","sources":["../../../../../src/room/rpc/client/RpcClientManager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,YAAY,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,KAAK,yBAAyB,MAAM,sDAAsD,CAAC;AAClG,OAAO,KAAK,WAAW,MAAM,+BAA+B,CAAC;AAE7D,OAAO,EAEL,KAAK,gBAAgB,EAIrB,QAAQ,EAGT,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;qCAOK,UAAU,YAAY,CAAC,yBAAyB,CAAC;AALhH;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,qBAAmE;IAC/G,OAAO,CAAC,GAAG,CAAmB;IAE9B,OAAO,CAAC,yBAAyB,CAA4B;IAE7D,OAAO,CAAC,kCAAkC,CAAgD;IAE1F,OAAO,CAAC,gBAAgB,CAA2B;IAEnD,OAAO,CAAC,WAAW,CAA2E;IAE9F,OAAO,CAAC,gBAAgB,CAMpB;gBAGF,GAAG,EAAE,gBAAgB,EACrB,yBAAyB,EAAE,yBAAyB,EACpD,kCAAkC,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,UAAU,CAAC,KAAK,MAAM,EACjF,gBAAgB,EAAE,MAAM,MAAM,GAAG,SAAS;IAStC,UAAU,CAAC,EACf,mBAAmB,EACnB,MAAM,EACN,OAAO,EACP,eAAe,EAAE,iBAAyB,GAC3C,EAAE,gBAAgB,GAAG,OAAO,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"RpcClientManager.d.ts","sourceRoot":"","sources":["../../../../../src/room/rpc/client/RpcClientManager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,YAAY,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,KAAK,yBAAyB,MAAM,sDAAsD,CAAC;AAClG,OAAO,KAAK,WAAW,MAAM,+BAA+B,CAAC;AAE7D,OAAO,EAEL,KAAK,gBAAgB,EAIrB,QAAQ,EAGT,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;qCAOK,UAAU,YAAY,CAAC,yBAAyB,CAAC;AALhH;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,qBAAmE;IAC/G,OAAO,CAAC,GAAG,CAAmB;IAE9B,OAAO,CAAC,yBAAyB,CAA4B;IAE7D,OAAO,CAAC,kCAAkC,CAAgD;IAE1F,OAAO,CAAC,gBAAgB,CAA2B;IAEnD,OAAO,CAAC,WAAW,CAA2E;IAE9F,OAAO,CAAC,gBAAgB,CAMpB;gBAGF,GAAG,EAAE,gBAAgB,EACrB,yBAAyB,EAAE,yBAAyB,EACpD,kCAAkC,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,UAAU,CAAC,KAAK,MAAM,EACjF,gBAAgB,EAAE,MAAM,MAAM,GAAG,SAAS;IAStC,UAAU,CAAC,EACf,mBAAmB,EACnB,MAAM,EACN,OAAO,EACP,eAAe,EAAE,iBAAyB,GAC3C,EAAE,gBAAgB,GAAG,OAAO,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YA0EjE,iBAAiB;IA6C/B;;;OAGG;IACG,wBAAwB,CAC5B,MAAM,EAAE,gBAAgB,EACxB,cAAc,EAAE,WAAW,CAAC,UAAU,CAAC,EACvC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAiCpC,gBAAgB;IAChB,gCAAgC,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAUnE,gBAAgB;IAChB,gCAAgC,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ;IAUnE,gBAAgB;IAChB,oBAAoB,CAAC,SAAS,EAAE,MAAM;IAUtC,gBAAgB;IAChB,6BAA6B,CAAC,mBAAmB,EAAE,MAAM;CAe1D"}
|
|
@@ -54,6 +54,11 @@ export declare class FrameCryptor extends BaseFrameCryptor {
|
|
|
54
54
|
private readonly ERROR_THROTTLE_MS;
|
|
55
55
|
private readonly MAX_ERRORS_PER_MINUTE;
|
|
56
56
|
private readonly ERROR_WINDOW_MS;
|
|
57
|
+
/**
|
|
58
|
+
* Tracks (participant, trackId, payloadType) tuples for which we've already logged a NALU
|
|
59
|
+
* fallback, so a persistent bad state doesn't flood the console (Firefox doesn't filter debug).
|
|
60
|
+
*/
|
|
61
|
+
private loggedNALUFallbacks;
|
|
57
62
|
constructor(opts: {
|
|
58
63
|
keys: ParticipantKeyHandler;
|
|
59
64
|
participantIdentity: string;
|
|
@@ -160,7 +165,12 @@ export declare class FrameCryptor extends BaseFrameCryptor {
|
|
|
160
165
|
private makeIV;
|
|
161
166
|
private getUnencryptedBytes;
|
|
162
167
|
/**
|
|
163
|
-
*
|
|
168
|
+
* Logs a NALU processing fallback at most once per (participant, trackId, payloadType) tuple,
|
|
169
|
+
* so a persistent bad state doesn't flood the console (Firefox doesn't filter debug).
|
|
170
|
+
*/
|
|
171
|
+
private logNALUFallbackOnce;
|
|
172
|
+
/**
|
|
173
|
+
* inspects frame mimetype if available. falls back to payloadtype and maps it to the codec specified in rtpMap
|
|
164
174
|
*/
|
|
165
175
|
private getVideoCodec;
|
|
166
176
|
}
|
|
@@ -120,6 +120,13 @@ export default class RTCEngine extends RTCEngine_base {
|
|
|
120
120
|
private configure;
|
|
121
121
|
private setupSignalClientCallbacks;
|
|
122
122
|
private makeRTCConfiguration;
|
|
123
|
+
/**
|
|
124
|
+
* Populate the publisher PC so its first offer carries the data channels + recvonly media
|
|
125
|
+
* sections. Required for every V1 connection: Firefox only binds receive decoders for media
|
|
126
|
+
* present in that first offer, and the offer-with-join path needs the sections to
|
|
127
|
+
* build a meaningful initial offer. Must be called on a configured pcManager.
|
|
128
|
+
*/
|
|
129
|
+
private applyInitialPublisherLayout;
|
|
123
130
|
private addMediaSections;
|
|
124
131
|
private createDataChannels;
|
|
125
132
|
private handleDataChannel;
|
|
@@ -162,6 +169,7 @@ export default class RTCEngine extends RTCEngine_base {
|
|
|
162
169
|
sendSyncState(remoteTracks: RemoteTrackPublication[], localTracks: LocalTrackPublication[], localDataTrackInfos: Array<DataTrackInfo>): void;
|
|
163
170
|
failNext(): void;
|
|
164
171
|
failNextV1Path(): void;
|
|
172
|
+
private onRtpMapAvailable;
|
|
165
173
|
private dataChannelsInfo;
|
|
166
174
|
private clearReconnectTimeout;
|
|
167
175
|
private clearPendingReconnect;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "livekit-client",
|
|
3
|
-
"version": "2.19.
|
|
3
|
+
"version": "2.19.2",
|
|
4
4
|
"description": "JavaScript/TypeScript client SDK for LiveKit",
|
|
5
5
|
"main": "./dist/livekit-client.umd.js",
|
|
6
6
|
"unpkg": "./dist/livekit-client.umd.js",
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
61
|
"@babel/core": "7.29.0",
|
|
62
|
-
"@babel/preset-env": "7.29.
|
|
62
|
+
"@babel/preset-env": "7.29.5",
|
|
63
63
|
"@bufbuild/protoc-gen-es": "^1.10.0",
|
|
64
64
|
"@changesets/cli": "2.31.0",
|
|
65
65
|
"@eslint/js": "10.0.1",
|
|
@@ -77,10 +77,10 @@
|
|
|
77
77
|
"@types/events": "^3.0.3",
|
|
78
78
|
"@types/sdp-transform": "2.15.0",
|
|
79
79
|
"@types/ua-parser-js": "0.7.39",
|
|
80
|
-
"@typescript-eslint/eslint-plugin": "8.59.
|
|
81
|
-
"@typescript-eslint/parser": "8.59.
|
|
80
|
+
"@typescript-eslint/eslint-plugin": "8.59.3",
|
|
81
|
+
"@typescript-eslint/parser": "8.59.3",
|
|
82
82
|
"downlevel-dts": "^0.11.0",
|
|
83
|
-
"eslint": "10.
|
|
83
|
+
"eslint": "10.4.0",
|
|
84
84
|
"eslint-config-airbnb-extended": "^2.3.2",
|
|
85
85
|
"eslint-config-prettier": "10.1.8",
|
|
86
86
|
"eslint-plugin-compat": "^6.0.2",
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
"jsdom": "^26.1.0",
|
|
93
93
|
"prettier": "^3.4.2",
|
|
94
94
|
"publint": "^0.3.21",
|
|
95
|
-
"rollup": "4.60.
|
|
95
|
+
"rollup": "4.60.4",
|
|
96
96
|
"rollup-plugin-delete": "^2.1.0",
|
|
97
97
|
"rollup-plugin-typescript2": "0.37.0",
|
|
98
98
|
"size-limit": "^11.2.0",
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
"typedoc-plugin-no-inherit": "1.6.1",
|
|
102
102
|
"typescript": "5.9.3",
|
|
103
103
|
"typescript-eslint": "^8.47.0",
|
|
104
|
-
"vite": "7.3.
|
|
104
|
+
"vite": "7.3.3",
|
|
105
105
|
"vitest": "^3.0.0"
|
|
106
106
|
},
|
|
107
107
|
"scripts": {
|
|
@@ -8,7 +8,8 @@ import {
|
|
|
8
8
|
} from '../../packetTrailer/packetTrailer';
|
|
9
9
|
import type { PacketTrailerPublishOptions } from '../../packetTrailer/types';
|
|
10
10
|
import { hasPacketTrailerPublishOptions } from '../../packetTrailer/utils';
|
|
11
|
-
import type
|
|
11
|
+
import { type VideoCodec, videoCodecs } from '../../room/track/options';
|
|
12
|
+
import { mimeTypeToVideoCodecString } from '../../room/track/utils';
|
|
12
13
|
import { ENCRYPTION_ALGORITHM, IV_LENGTH, UNENCRYPTED_BYTES } from '../constants';
|
|
13
14
|
import { CryptorError, CryptorErrorReason } from '../errors';
|
|
14
15
|
import { type CryptorCallbacks, CryptorEvent } from '../events';
|
|
@@ -106,6 +107,12 @@ export class FrameCryptor extends BaseFrameCryptor {
|
|
|
106
107
|
|
|
107
108
|
private readonly ERROR_WINDOW_MS = 60000; // 1 minute window
|
|
108
109
|
|
|
110
|
+
/**
|
|
111
|
+
* Tracks (participant, trackId, payloadType) tuples for which we've already logged a NALU
|
|
112
|
+
* fallback, so a persistent bad state doesn't flood the console (Firefox doesn't filter debug).
|
|
113
|
+
*/
|
|
114
|
+
private loggedNALUFallbacks: Set<string> = new Set();
|
|
115
|
+
|
|
109
116
|
constructor(opts: {
|
|
110
117
|
keys: ParticipantKeyHandler;
|
|
111
118
|
participantIdentity: string;
|
|
@@ -795,22 +802,23 @@ export class FrameCryptor extends BaseFrameCryptor {
|
|
|
795
802
|
}
|
|
796
803
|
|
|
797
804
|
// Try NALU processing for H.264/H.265 codecs
|
|
805
|
+
const payloadType = frame.getMetadata().payloadType;
|
|
806
|
+
const fallbackKey = `${this.participantIdentity}-${this.trackId}-${payloadType}`;
|
|
798
807
|
try {
|
|
799
808
|
const knownCodec =
|
|
800
809
|
detectedCodec === 'h264' || detectedCodec === 'h265' ? detectedCodec : undefined;
|
|
801
810
|
const naluResult = processNALUsForEncryption(new Uint8Array(frame.data), knownCodec);
|
|
802
811
|
|
|
803
812
|
if (naluResult.requiresNALUProcessing) {
|
|
813
|
+
// Recovered for this tuple, allow a future failure to log again.
|
|
814
|
+
this.loggedNALUFallbacks.delete(fallbackKey);
|
|
804
815
|
return {
|
|
805
816
|
unencryptedBytes: naluResult.unencryptedBytes,
|
|
806
817
|
requiresNALUProcessing: true,
|
|
807
818
|
};
|
|
808
819
|
}
|
|
809
820
|
} catch (e) {
|
|
810
|
-
|
|
811
|
-
error: e,
|
|
812
|
-
...this.logContext,
|
|
813
|
-
});
|
|
821
|
+
this.logNALUFallbackOnce(fallbackKey, payloadType, e);
|
|
814
822
|
}
|
|
815
823
|
|
|
816
824
|
// Fallback to VP8 handling
|
|
@@ -818,13 +826,40 @@ export class FrameCryptor extends BaseFrameCryptor {
|
|
|
818
826
|
}
|
|
819
827
|
|
|
820
828
|
/**
|
|
821
|
-
*
|
|
829
|
+
* Logs a NALU processing fallback at most once per (participant, trackId, payloadType) tuple,
|
|
830
|
+
* so a persistent bad state doesn't flood the console (Firefox doesn't filter debug).
|
|
831
|
+
*/
|
|
832
|
+
private logNALUFallbackOnce(
|
|
833
|
+
fallbackKey: string,
|
|
834
|
+
payloadType: number | undefined,
|
|
835
|
+
error: unknown,
|
|
836
|
+
) {
|
|
837
|
+
if (this.loggedNALUFallbacks.has(fallbackKey)) {
|
|
838
|
+
return;
|
|
839
|
+
}
|
|
840
|
+
this.loggedNALUFallbacks.add(fallbackKey);
|
|
841
|
+
workerLogger.warn('NALU processing failed, falling back to VP8 handling', {
|
|
842
|
+
error,
|
|
843
|
+
payloadType,
|
|
844
|
+
...this.logContext,
|
|
845
|
+
});
|
|
846
|
+
}
|
|
847
|
+
|
|
848
|
+
/**
|
|
849
|
+
* inspects frame mimetype if available. falls back to payloadtype and maps it to the codec specified in rtpMap
|
|
822
850
|
*/
|
|
823
851
|
private getVideoCodec(frame: RTCEncodedVideoFrame): VideoCodec | undefined {
|
|
852
|
+
const metadata = frame.getMetadata();
|
|
853
|
+
if (metadata.mimeType) {
|
|
854
|
+
const maybeKnownCodec = mimeTypeToVideoCodecString(metadata.mimeType);
|
|
855
|
+
if (videoCodecs.includes(maybeKnownCodec)) {
|
|
856
|
+
return maybeKnownCodec;
|
|
857
|
+
}
|
|
858
|
+
}
|
|
824
859
|
if (this.rtpMap.size === 0) {
|
|
825
860
|
return undefined;
|
|
826
861
|
}
|
|
827
|
-
const payloadType =
|
|
862
|
+
const payloadType = metadata.payloadType;
|
|
828
863
|
const codec = payloadType ? this.rtpMap.get(payloadType) : undefined;
|
|
829
864
|
return codec;
|
|
830
865
|
}
|
package/src/room/RTCEngine.ts
CHANGED
|
@@ -324,12 +324,21 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit
|
|
|
324
324
|
this.joinAttempts += 1;
|
|
325
325
|
|
|
326
326
|
this.setupSignalClientCallbacks();
|
|
327
|
+
// Whether the initial publisher offer is bundled with the join request. Computed once and
|
|
328
|
+
// reused after the join below. Only the (non-Firefox) offer-with-join path does this.
|
|
329
|
+
const sendOfferWithJoin = !useV0Path && isPublisherOfferWithJoinSupported();
|
|
330
|
+
|
|
327
331
|
let offerProto: SessionDescription | undefined;
|
|
328
|
-
if (
|
|
332
|
+
if (sendOfferWithJoin) {
|
|
329
333
|
if (!this.pcManager) {
|
|
334
|
+
// Firefox is excluded from offer-with-join (see isPublisherOfferWithJoinSupported):
|
|
335
|
+
// customers reported ICE connectivity problems for FF on this path (#1919) that we were
|
|
336
|
+
// never able to reproduce, so out of caution FF stays on the deferred path below. The
|
|
337
|
+
// exact cause is unknown — note that ICE gathering does not actually start here, since
|
|
338
|
+
// createInitialOffer() defers setLocalDescription (via pendingInitialOffer) until the
|
|
339
|
+
// answer is applied, after updateConfiguration() has set the server's TURN servers.
|
|
330
340
|
await this.configure();
|
|
331
|
-
this.
|
|
332
|
-
this.addMediaSections(initialMediaSectionsAudio, initialMediaSectionsVideo);
|
|
341
|
+
this.applyInitialPublisherLayout();
|
|
333
342
|
}
|
|
334
343
|
const offer = await this.pcManager?.publisher.createInitialOffer();
|
|
335
344
|
if (offer) {
|
|
@@ -358,11 +367,20 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit
|
|
|
358
367
|
this.participantSid = joinResponse.participant?.sid;
|
|
359
368
|
|
|
360
369
|
this.subscriberPrimary = joinResponse.subscriberPrimary;
|
|
361
|
-
if (
|
|
370
|
+
if (sendOfferWithJoin) {
|
|
362
371
|
this.pcManager?.updateConfiguration(this.makeRTCConfiguration(joinResponse));
|
|
363
372
|
} else {
|
|
364
373
|
if (!this.pcManager) {
|
|
374
|
+
// Deferred path (Firefox, and V0): configure with the join response so the PC picks up
|
|
375
|
+
// the server's ICE servers and topology, then negotiate separately rather than bundling
|
|
376
|
+
// the offer with the join.
|
|
365
377
|
await this.configure(joinResponse, !useV0Path);
|
|
378
|
+
if (!useV0Path) {
|
|
379
|
+
// The V1 first offer must carry the media layout so Firefox binds receive decoders for
|
|
380
|
+
// subscribed tracks — without it, subscribed audio/video arrive as RTP but
|
|
381
|
+
// never decode. V0 (legacy dual-PC) keeps its original lazy behavior.
|
|
382
|
+
this.applyInitialPublisherLayout();
|
|
383
|
+
}
|
|
366
384
|
}
|
|
367
385
|
// create offer
|
|
368
386
|
if (!this.subscriberPrimary || joinResponse.fastPublish) {
|
|
@@ -814,6 +832,17 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit
|
|
|
814
832
|
return rtcConfig;
|
|
815
833
|
}
|
|
816
834
|
|
|
835
|
+
/**
|
|
836
|
+
* Populate the publisher PC so its first offer carries the data channels + recvonly media
|
|
837
|
+
* sections. Required for every V1 connection: Firefox only binds receive decoders for media
|
|
838
|
+
* present in that first offer, and the offer-with-join path needs the sections to
|
|
839
|
+
* build a meaningful initial offer. Must be called on a configured pcManager.
|
|
840
|
+
*/
|
|
841
|
+
private applyInitialPublisherLayout() {
|
|
842
|
+
this.createDataChannels();
|
|
843
|
+
this.addMediaSections(initialMediaSectionsAudio, initialMediaSectionsVideo);
|
|
844
|
+
}
|
|
845
|
+
|
|
817
846
|
private addMediaSections(numAudios: number, numVideos: number) {
|
|
818
847
|
const transceiverInit: RTCRtpTransceiverInit = { direction: 'recvonly' };
|
|
819
848
|
for (let i: number = 0; i < numAudios; i++) {
|
|
@@ -1746,20 +1775,8 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit
|
|
|
1746
1775
|
}
|
|
1747
1776
|
this.on(EngineEvent.Closing, handleClosed);
|
|
1748
1777
|
this.on(EngineEvent.Restarting, handleClosed);
|
|
1749
|
-
|
|
1750
|
-
this.pcManager.publisher.once(
|
|
1751
|
-
PCEvents.RTPVideoPayloadTypes,
|
|
1752
|
-
(rtpTypes: MediaAttributes['rtp']) => {
|
|
1753
|
-
const rtpMap = new Map<number, VideoCodec>();
|
|
1754
|
-
rtpTypes.forEach((rtp) => {
|
|
1755
|
-
const codec = rtp.codec.toLowerCase();
|
|
1756
|
-
if (isVideoCodec(codec)) {
|
|
1757
|
-
rtpMap.set(rtp.payload, codec);
|
|
1758
|
-
}
|
|
1759
|
-
});
|
|
1760
|
-
this.emit(EngineEvent.RTPVideoMapUpdate, rtpMap);
|
|
1761
|
-
},
|
|
1762
|
-
);
|
|
1778
|
+
this.pcManager.publisher.off(PCEvents.RTPVideoPayloadTypes, this.onRtpMapAvailable);
|
|
1779
|
+
this.pcManager.publisher.once(PCEvents.RTPVideoPayloadTypes, this.onRtpMapAvailable);
|
|
1763
1780
|
|
|
1764
1781
|
try {
|
|
1765
1782
|
await this.pcManager.negotiate(abortController);
|
|
@@ -1906,6 +1923,17 @@ export default class RTCEngine extends (EventEmitter as new () => TypedEventEmit
|
|
|
1906
1923
|
this.shouldFailOnV1Path = true;
|
|
1907
1924
|
}
|
|
1908
1925
|
|
|
1926
|
+
private onRtpMapAvailable = (rtpTypes: MediaAttributes['rtp']) => {
|
|
1927
|
+
const rtpMap = new Map<number, VideoCodec>();
|
|
1928
|
+
rtpTypes.forEach((rtp) => {
|
|
1929
|
+
const codec = rtp.codec.toLowerCase();
|
|
1930
|
+
if (isVideoCodec(codec)) {
|
|
1931
|
+
rtpMap.set(rtp.payload, codec);
|
|
1932
|
+
}
|
|
1933
|
+
});
|
|
1934
|
+
this.emit(EngineEvent.RTPVideoMapUpdate, rtpMap);
|
|
1935
|
+
};
|
|
1936
|
+
|
|
1909
1937
|
private dataChannelsInfo(): DataChannelInfo[] {
|
|
1910
1938
|
const infos: DataChannelInfo[] = [];
|
|
1911
1939
|
const getInfo = (dc: RTCDataChannel | undefined, target: SignalTarget) => {
|
|
@@ -86,11 +86,14 @@ export default class RpcClientManager extends (EventEmitter as new () => TypedEm
|
|
|
86
86
|
|
|
87
87
|
const completionFuture = new Future<string, RpcError>();
|
|
88
88
|
|
|
89
|
+
let responseTimeoutId: ReturnType<typeof setTimeout> | null = null;
|
|
89
90
|
const ackTimeoutId = setTimeout(() => {
|
|
90
91
|
this.pendingAcks.delete(id);
|
|
91
92
|
completionFuture.reject?.(RpcError.builtIn('CONNECTION_TIMEOUT'));
|
|
92
93
|
this.pendingResponses.delete(id);
|
|
93
|
-
|
|
94
|
+
if (responseTimeoutId !== null) {
|
|
95
|
+
clearTimeout(responseTimeoutId);
|
|
96
|
+
}
|
|
94
97
|
}, maxRoundTripLatencyMs);
|
|
95
98
|
|
|
96
99
|
this.pendingAcks.set(id, {
|
|
@@ -114,7 +117,7 @@ export default class RpcClientManager extends (EventEmitter as new () => TypedEm
|
|
|
114
117
|
remoteClientProtocol,
|
|
115
118
|
);
|
|
116
119
|
|
|
117
|
-
|
|
120
|
+
responseTimeoutId = setTimeout(() => {
|
|
118
121
|
this.pendingResponses.delete(id);
|
|
119
122
|
completionFuture.reject?.(RpcError.builtIn('RESPONSE_TIMEOUT'));
|
|
120
123
|
}, responseTimeoutMs);
|