livekit-client 1.1.3 → 1.1.4
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.esm.mjs +57 -31
- package/dist/livekit-client.esm.mjs.map +1 -1
- package/dist/livekit-client.umd.js +1 -1
- package/dist/livekit-client.umd.js.map +1 -1
- package/dist/src/room/Room.d.ts +1 -0
- package/dist/src/room/Room.d.ts.map +1 -1
- package/dist/src/room/participant/LocalParticipant.d.ts +2 -1
- package/dist/src/room/participant/LocalParticipant.d.ts.map +1 -1
- package/dist/src/room/track/LocalAudioTrack.d.ts +1 -1
- package/dist/src/room/track/LocalAudioTrack.d.ts.map +1 -1
- package/dist/src/room/track/LocalTrack.d.ts +4 -2
- package/dist/src/room/track/LocalTrack.d.ts.map +1 -1
- package/dist/src/room/track/LocalVideoTrack.d.ts +1 -1
- package/dist/src/room/track/LocalVideoTrack.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/room/Room.ts +40 -16
- package/src/room/participant/LocalParticipant.ts +7 -6
- package/src/room/participant/publishUtils.ts +2 -2
- package/src/room/track/LocalAudioTrack.ts +7 -3
- package/src/room/track/LocalTrack.ts +11 -2
- package/src/room/track/LocalVideoTrack.ts +7 -3
- package/src/room/track/create.ts +2 -2
package/dist/src/room/Room.d.ts
CHANGED
@@ -109,6 +109,7 @@ declare class Room extends Room_base {
|
|
109
109
|
* @param deviceId
|
110
110
|
*/
|
111
111
|
switchActiveDevice(kind: MediaDeviceKind, deviceId: string): Promise<void>;
|
112
|
+
private recreateEngine;
|
112
113
|
private onTrackAdded;
|
113
114
|
private handleRestarting;
|
114
115
|
private handleRestarted;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Room.d.ts","sourceRoot":"","sources":["../../../src/room/Room.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,YAAY,MAAM,eAAe,CAAC;AAG9C,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EACL,eAAe,EAGf,qBAAqB,EAItB,MAAM,yBAAyB,CAAC;AAWjC,OAAO,gBAAgB,MAAM,gCAAgC,CAAC;AAC9D,OAAO,WAAW,EAAE,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,iBAAiB,MAAM,iCAAiC,CAAC;AAChE,OAAO,SAAmC,MAAM,aAAa,CAAC;AAG9D,OAAO,qBAAqB,MAAM,+BAA+B,CAAC;AAElE,OAAO,sBAAsB,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAA0B,WAAW,EAAE,MAAM,eAAe,CAAC;AAIpE,oBAAY,eAAe;IACzB,YAAY,iBAAiB;IAC7B,UAAU,eAAe;IACzB,SAAS,cAAc;IACvB,YAAY,iBAAiB;CAC9B;AAED,oEAAoE;AACpE,eAAO,MAAM,SAAS,wBAAkB,CAAC;mCAUK,aAAa,kBAAkB,CAAC;AAR9E;;;;;;;GAOG;AACH,cAAM,IAAK,SAAQ,SAA4D;IAC7E,KAAK,EAAE,eAAe,CAAgC;IAEtD,wCAAwC;IACxC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAE7C;;;OAGG;IACH,cAAc,EAAE,WAAW,EAAE,CAAM;IAEnC,gBAAgB;IAChB,MAAM,EAAG,SAAS,CAAC;IAGnB,qCAAqC;IACrC,GAAG,EAAE,MAAM,CAAM;IAEjB,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAM;IAElB,8BAA8B;IAC9B,gBAAgB,EAAE,gBAAgB,CAAC;IAEnC,oBAAoB;IACpB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAa;IAEzC,sBAAsB;IACtB,OAAO,EAAE,WAAW,CAAC;IAErB,OAAO,CAAC,aAAa,CAAsB;IAE3C,8BAA8B;IAC9B,OAAO,CAAC,WAAW,CAAC,CAAqB;IAEzC,OAAO,CAAC,YAAY,CAAQ;IAE5B,OAAO,CAAC,YAAY,CAAC,CAAe;IAEpC,gEAAgE;IAChE,OAAO,CAAC,eAAe,CAAC,CAAkB;IAE1C;;;OAGG;gBACS,OAAO,CAAC,EAAE,WAAW;IAwBjC,OAAO,CAAC,YAAY;
|
1
|
+
{"version":3,"file":"Room.d.ts","sourceRoot":"","sources":["../../../src/room/Room.ts"],"names":[],"mappings":"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"}
|
@@ -14,10 +14,11 @@ export default class LocalParticipant extends Participant {
|
|
14
14
|
videoTracks: Map<string, LocalTrackPublication>;
|
15
15
|
/** map of track sid => all published tracks */
|
16
16
|
tracks: Map<string, LocalTrackPublication>;
|
17
|
+
/** @internal */
|
18
|
+
engine: RTCEngine;
|
17
19
|
private pendingPublishing;
|
18
20
|
private cameraError;
|
19
21
|
private microphoneError;
|
20
|
-
private engine;
|
21
22
|
private participantTrackPermissions;
|
22
23
|
private allParticipantsAllowedToSubscribe;
|
23
24
|
private roomOptions?;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"LocalParticipant.d.ts","sourceRoot":"","sources":["../../../../src/room/participant/LocalParticipant.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAc,eAAe,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAChG,OAAO,EAEL,eAAe,EAGf,sBAAsB,EAEvB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAC7C,OAAO,qBAAqB,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,EAEzB,mBAAmB,EACnB,mBAAmB,EACnB,UAAU,EACX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAGvC,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,0BAA0B,EAA0B,MAAM,8BAA8B,CAAC;AAElG,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AAGpD,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,WAAW;IACvD,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAEhD,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAEhD,+CAA+C;IAC/C,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAE3C,OAAO,CAAC,iBAAiB,CAA2B;IAEpD,OAAO,CAAC,WAAW,CAAoB;IAEvC,OAAO,CAAC,eAAe,CAAoB;IAE3C,OAAO,CAAC,
|
1
|
+
{"version":3,"file":"LocalParticipant.d.ts","sourceRoot":"","sources":["../../../../src/room/participant/LocalParticipant.ts"],"names":[],"mappings":"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"}
|
@@ -6,7 +6,7 @@ export default class LocalAudioTrack extends LocalTrack {
|
|
6
6
|
/** @internal */
|
7
7
|
stopOnMute: boolean;
|
8
8
|
private prevStats?;
|
9
|
-
constructor(mediaTrack: MediaStreamTrack, constraints?: MediaTrackConstraints);
|
9
|
+
constructor(mediaTrack: MediaStreamTrack, constraints?: MediaTrackConstraints, userProvidedTrack?: boolean);
|
10
10
|
setDeviceId(deviceId: string): Promise<void>;
|
11
11
|
mute(): Promise<LocalAudioTrack>;
|
12
12
|
unmute(): Promise<LocalAudioTrack>;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"LocalAudioTrack.d.ts","sourceRoot":"","sources":["../../../../src/room/track/LocalAudioTrack.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAoC,MAAM,UAAU,CAAC;AAE9E,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAIhD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,UAAU;IACrD,MAAM,CAAC,EAAE,YAAY,CAAC;IAEtB,gBAAgB;IAChB,UAAU,EAAE,OAAO,CAAS;IAE5B,OAAO,CAAC,SAAS,CAAC,CAAmB;
|
1
|
+
{"version":3,"file":"LocalAudioTrack.d.ts","sourceRoot":"","sources":["../../../../src/room/track/LocalAudioTrack.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAoC,MAAM,UAAU,CAAC;AAE9E,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAIhD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,UAAU;IACrD,MAAM,CAAC,EAAE,YAAY,CAAC;IAEtB,gBAAgB;IAChB,UAAU,EAAE,OAAO,CAAS;IAE5B,OAAO,CAAC,SAAS,CAAC,CAAmB;gBAGnC,UAAU,EAAE,gBAAgB,EAC5B,WAAW,CAAC,EAAE,qBAAqB,EACnC,iBAAiB,UAAO;IAMpB,WAAW,CAAC,QAAQ,EAAE,MAAM;IAU5B,IAAI,IAAI,OAAO,CAAC,eAAe,CAAC;IAWhC,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC;IASlC,YAAY,CAAC,OAAO,CAAC,EAAE,mBAAmB;cAWhC,OAAO,CAAC,WAAW,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC;IAOjF,YAAY;IASZ,OAAO,CAAC,aAAa,CAsBnB;IAEI,cAAc,IAAI,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAyBvD,eAAe;CAStB"}
|
@@ -8,18 +8,20 @@ export default class LocalTrack extends Track {
|
|
8
8
|
protected constraints: MediaTrackConstraints;
|
9
9
|
protected wasMuted: boolean;
|
10
10
|
protected reacquireTrack: boolean;
|
11
|
-
protected
|
11
|
+
protected providedByUser: boolean;
|
12
|
+
protected constructor(mediaTrack: MediaStreamTrack, kind: Track.Kind, constraints?: MediaTrackConstraints, userProvidedTrack?: boolean);
|
12
13
|
get id(): string;
|
13
14
|
get dimensions(): Track.Dimensions | undefined;
|
14
15
|
private _isUpstreamPaused;
|
15
16
|
get isUpstreamPaused(): boolean;
|
17
|
+
get isUserProvided(): boolean;
|
16
18
|
/**
|
17
19
|
* @returns DeviceID of the device that is currently being used for this track
|
18
20
|
*/
|
19
21
|
getDeviceId(): Promise<string | undefined>;
|
20
22
|
mute(): Promise<LocalTrack>;
|
21
23
|
unmute(): Promise<LocalTrack>;
|
22
|
-
replaceTrack(track: MediaStreamTrack): Promise<LocalTrack>;
|
24
|
+
replaceTrack(track: MediaStreamTrack, userProvidedTrack?: boolean): Promise<LocalTrack>;
|
23
25
|
protected restart(constraints?: MediaTrackConstraints): Promise<LocalTrack>;
|
24
26
|
protected setTrackMuted(muted: boolean): void;
|
25
27
|
protected get needsReAcquisition(): boolean;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"LocalTrack.d.ts","sourceRoot":"","sources":["../../../../src/room/track/LocalTrack.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,OAAO,EAAgC,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9D,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,KAAK;IAC3C,gBAAgB;IAChB,MAAM,CAAC,EAAE,YAAY,CAAC;IAEtB,gBAAgB;IAChB,KAAK,CAAC,EAAE,UAAU,CAAC;IAEnB,SAAS,CAAC,WAAW,EAAE,qBAAqB,CAAC;IAE7C,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC;IAE5B,SAAS,CAAC,cAAc,EAAE,OAAO,CAAC;IAElC,SAAS,aACP,UAAU,EAAE,gBAAgB,EAC5B,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,WAAW,CAAC,EAAE,qBAAqB;
|
1
|
+
{"version":3,"file":"LocalTrack.d.ts","sourceRoot":"","sources":["../../../../src/room/track/LocalTrack.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,OAAO,EAAgC,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9D,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,KAAK;IAC3C,gBAAgB;IAChB,MAAM,CAAC,EAAE,YAAY,CAAC;IAEtB,gBAAgB;IAChB,KAAK,CAAC,EAAE,UAAU,CAAC;IAEnB,SAAS,CAAC,WAAW,EAAE,qBAAqB,CAAC;IAE7C,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC;IAE5B,SAAS,CAAC,cAAc,EAAE,OAAO,CAAC;IAElC,SAAS,CAAC,cAAc,EAAE,OAAO,CAAC;IAElC,SAAS,aACP,UAAU,EAAE,gBAAgB,EAC5B,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,WAAW,CAAC,EAAE,qBAAqB,EACnC,iBAAiB,UAAQ;IAU3B,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,IAAI,UAAU,IAAI,KAAK,CAAC,UAAU,GAAG,SAAS,CAa7C;IAED,OAAO,CAAC,iBAAiB,CAAkB;IAE3C,IAAI,gBAAgB,YAEnB;IAED,IAAI,cAAc,YAEjB;IAED;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAW1C,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC;IAK3B,MAAM,IAAI,OAAO,CAAC,UAAU,CAAC;IAK7B,YAAY,CAAC,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,UAAO,GAAG,OAAO,CAAC,UAAU,CAAC;cAgC1E,OAAO,CAAC,WAAW,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC;IAiDjF,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO;IAUtC,SAAS,KAAK,kBAAkB,IAAI,OAAO,CAO1C;cAEe,0BAA0B;IAmB1C,OAAO,CAAC,WAAW,CAKjB;IAEI,aAAa;IAeb,cAAc;CAarB"}
|
@@ -17,7 +17,7 @@ export default class LocalVideoTrack extends LocalTrack {
|
|
17
17
|
private encodings?;
|
18
18
|
private simulcastCodecs;
|
19
19
|
private subscribedCodecs?;
|
20
|
-
constructor(mediaTrack: MediaStreamTrack, constraints?: MediaTrackConstraints);
|
20
|
+
constructor(mediaTrack: MediaStreamTrack, constraints?: MediaTrackConstraints, userProvidedTrack?: boolean);
|
21
21
|
get isSimulcast(): boolean;
|
22
22
|
startMonitor(signalClient: SignalClient): void;
|
23
23
|
stop(): void;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"LocalVideoTrack.d.ts","sourceRoot":"","sources":["../../../../src/room/track/LocalVideoTrack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAoC,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE9E,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAI5D,qBAAa,kBAAkB;IAC7B,KAAK,EAAE,UAAU,CAAC;IAElB,gBAAgB,EAAE,gBAAgB,CAAC;IAEnC,MAAM,CAAC,EAAE,YAAY,CAAC;IAEtB,SAAS,CAAC,EAAE,wBAAwB,EAAE,CAAC;gBAE3B,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB;CAIlE;AAID,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,UAAU;IAErD,YAAY,CAAC,EAAE,YAAY,CAAC;IAE5B,OAAO,CAAC,SAAS,CAAC,CAAgC;IAElD,OAAO,CAAC,SAAS,CAAC,CAA6B;IAE/C,OAAO,CAAC,eAAe,CAGnB;IAEJ,OAAO,CAAC,gBAAgB,CAAC,CAAoB;
|
1
|
+
{"version":3,"file":"LocalVideoTrack.d.ts","sourceRoot":"","sources":["../../../../src/room/track/LocalVideoTrack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAoC,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE9E,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAI5D,qBAAa,kBAAkB;IAC7B,KAAK,EAAE,UAAU,CAAC;IAElB,gBAAgB,EAAE,gBAAgB,CAAC;IAEnC,MAAM,CAAC,EAAE,YAAY,CAAC;IAEtB,SAAS,CAAC,EAAE,wBAAwB,EAAE,CAAC;gBAE3B,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB;CAIlE;AAID,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,UAAU;IAErD,YAAY,CAAC,EAAE,YAAY,CAAC;IAE5B,OAAO,CAAC,SAAS,CAAC,CAAgC;IAElD,OAAO,CAAC,SAAS,CAAC,CAA6B;IAE/C,OAAO,CAAC,eAAe,CAGnB;IAEJ,OAAO,CAAC,gBAAgB,CAAC,CAAoB;gBAG3C,UAAU,EAAE,gBAAgB,EAC5B,WAAW,CAAC,EAAE,qBAAqB,EACnC,iBAAiB,UAAO;IAK1B,IAAI,WAAW,IAAI,OAAO,CAKzB;IAGD,YAAY,CAAC,YAAY,EAAE,YAAY;IAiBvC,IAAI;IAWE,IAAI,IAAI,OAAO,CAAC,eAAe,CAAC;IAUhC,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC;IASlC,cAAc,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IA2CnD,oBAAoB,CAAC,UAAU,EAAE,YAAY;IAYvC,WAAW,CAAC,QAAQ,EAAE,MAAM;IAY5B,YAAY,CAAC,OAAO,CAAC,EAAE,mBAAmB;IAWhD,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,wBAAwB,EAAE,GAAG,kBAAkB;IAchG,uBAAuB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY;IAgB/D;;;OAGG;IACG,mBAAmB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAwC3E;;;OAGG;IACG,mBAAmB,CAAC,SAAS,EAAE,iBAAiB,EAAE;IASxD,OAAO,CAAC,aAAa,CA4BnB;cAEc,0BAA0B;CAO3C;AA6DD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAW5D;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,wBAAwB,EAAE,GACrC,UAAU,EAAE,CA2Bd"}
|
package/package.json
CHANGED
package/src/room/Room.ts
CHANGED
@@ -170,6 +170,10 @@ class Room extends (EventEmitter as new () => TypedEmitter<RoomEventCallbacks>)
|
|
170
170
|
})
|
171
171
|
.on(EngineEvent.Restarting, this.handleRestarting)
|
172
172
|
.on(EngineEvent.Restarted, this.handleRestarted);
|
173
|
+
|
174
|
+
if (this.localParticipant) {
|
175
|
+
this.localParticipant.engine = this.engine;
|
176
|
+
}
|
173
177
|
}
|
174
178
|
|
175
179
|
/**
|
@@ -287,7 +291,7 @@ class Room extends (EventEmitter as new () => TypedEmitter<RoomEventCallbacks>)
|
|
287
291
|
this.metadata = joinResponse.room!.metadata;
|
288
292
|
this.emit(RoomEvent.SignalConnected);
|
289
293
|
} catch (err) {
|
290
|
-
this.
|
294
|
+
this.recreateEngine();
|
291
295
|
this.setAndEmitConnectionState(ConnectionState.Disconnected);
|
292
296
|
throw err;
|
293
297
|
}
|
@@ -296,14 +300,14 @@ class Room extends (EventEmitter as new () => TypedEmitter<RoomEventCallbacks>)
|
|
296
300
|
return new Promise<Room>((resolve, reject) => {
|
297
301
|
const connectTimeout = setTimeout(() => {
|
298
302
|
// timeout
|
299
|
-
this.
|
303
|
+
this.recreateEngine();
|
300
304
|
this.setAndEmitConnectionState(ConnectionState.Disconnected);
|
301
305
|
reject(new ConnectionError('could not connect after timeout'));
|
302
306
|
}, maxICEConnectTimeout);
|
303
307
|
const abortHandler = () => {
|
304
308
|
log.warn('closing engine');
|
305
309
|
clearTimeout(connectTimeout);
|
306
|
-
this.
|
310
|
+
this.recreateEngine();
|
307
311
|
this.setAndEmitConnectionState(ConnectionState.Disconnected);
|
308
312
|
reject(new ConnectionError('room connection has been cancelled'));
|
309
313
|
};
|
@@ -495,6 +499,18 @@ class Room extends (EventEmitter as new () => TypedEmitter<RoomEventCallbacks>)
|
|
495
499
|
}
|
496
500
|
}
|
497
501
|
|
502
|
+
private recreateEngine() {
|
503
|
+
this.engine.close();
|
504
|
+
/* @ts-ignore */
|
505
|
+
this.engine = undefined;
|
506
|
+
|
507
|
+
// clear out existing remote participants, since they may have attached
|
508
|
+
// the old engine
|
509
|
+
this.participants.clear();
|
510
|
+
|
511
|
+
this.createEngine();
|
512
|
+
}
|
513
|
+
|
498
514
|
private onTrackAdded(
|
499
515
|
mediaTrack: MediaStreamTrack,
|
500
516
|
stream: MediaStream,
|
@@ -508,7 +524,7 @@ class Room extends (EventEmitter as new () => TypedEmitter<RoomEventCallbacks>)
|
|
508
524
|
if (this.state === ConnectionState.Connecting || this.state === ConnectionState.Reconnecting) {
|
509
525
|
setTimeout(() => {
|
510
526
|
this.onTrackAdded(mediaTrack, stream, receiver);
|
511
|
-
},
|
527
|
+
}, 50);
|
512
528
|
return;
|
513
529
|
}
|
514
530
|
if (this.state === ConnectionState.Disconnected) {
|
@@ -538,14 +554,14 @@ class Room extends (EventEmitter as new () => TypedEmitter<RoomEventCallbacks>)
|
|
538
554
|
}
|
539
555
|
|
540
556
|
private handleRestarting = () => {
|
541
|
-
if (this.setAndEmitConnectionState(ConnectionState.Reconnecting)) {
|
542
|
-
this.emit(RoomEvent.Reconnecting);
|
543
|
-
}
|
544
|
-
|
545
557
|
// also unwind existing participants & existing subscriptions
|
546
558
|
for (const p of this.participants.values()) {
|
547
559
|
this.handleParticipantDisconnected(p.sid, p);
|
548
560
|
}
|
561
|
+
|
562
|
+
if (this.setAndEmitConnectionState(ConnectionState.Reconnecting)) {
|
563
|
+
this.emit(RoomEvent.Reconnecting);
|
564
|
+
}
|
549
565
|
};
|
550
566
|
|
551
567
|
private handleRestarted = async (joinResponse: JoinResponse) => {
|
@@ -576,7 +592,10 @@ class Room extends (EventEmitter as new () => TypedEmitter<RoomEventCallbacks>)
|
|
576
592
|
const track = pub.track!;
|
577
593
|
this.localParticipant.unpublishTrack(track, false);
|
578
594
|
if (!track.isMuted) {
|
579
|
-
if (
|
595
|
+
if (
|
596
|
+
(track instanceof LocalAudioTrack || track instanceof LocalVideoTrack) &&
|
597
|
+
!track.isUserProvided
|
598
|
+
) {
|
580
599
|
// we need to restart the track before publishing, often a full reconnect
|
581
600
|
// is necessary because computer had gone to sleep.
|
582
601
|
log.debug('restarting existing track', {
|
@@ -650,7 +669,7 @@ class Room extends (EventEmitter as new () => TypedEmitter<RoomEventCallbacks>)
|
|
650
669
|
this.handleParticipantDisconnected(info.sid, remoteParticipant);
|
651
670
|
} else if (isNewParticipant) {
|
652
671
|
// fire connected event
|
653
|
-
this.
|
672
|
+
this.emitWhenConnected(RoomEvent.ParticipantConnected, remoteParticipant);
|
654
673
|
} else {
|
655
674
|
// just update, no events
|
656
675
|
remoteParticipant.updateInfo(info);
|
@@ -669,7 +688,7 @@ class Room extends (EventEmitter as new () => TypedEmitter<RoomEventCallbacks>)
|
|
669
688
|
participant.tracks.forEach((publication) => {
|
670
689
|
participant.unpublishTrack(publication.trackSid, true);
|
671
690
|
});
|
672
|
-
this.
|
691
|
+
this.emitWhenConnected(RoomEvent.ParticipantDisconnected, participant);
|
673
692
|
}
|
674
693
|
|
675
694
|
// updates are sent only when there's a change to speaker ordering
|
@@ -704,7 +723,7 @@ class Room extends (EventEmitter as new () => TypedEmitter<RoomEventCallbacks>)
|
|
704
723
|
});
|
705
724
|
|
706
725
|
this.activeSpeakers = activeSpeakers;
|
707
|
-
this.
|
726
|
+
this.emitWhenConnected(RoomEvent.ActiveSpeakersChanged, activeSpeakers);
|
708
727
|
};
|
709
728
|
|
710
729
|
// process list of changed speakers
|
@@ -733,7 +752,7 @@ class Room extends (EventEmitter as new () => TypedEmitter<RoomEventCallbacks>)
|
|
733
752
|
const activeSpeakers = Array.from(lastSpeakers.values());
|
734
753
|
activeSpeakers.sort((a, b) => b.audioLevel - a.audioLevel);
|
735
754
|
this.activeSpeakers = activeSpeakers;
|
736
|
-
this.
|
755
|
+
this.emitWhenConnected(RoomEvent.ActiveSpeakersChanged, activeSpeakers);
|
737
756
|
};
|
738
757
|
|
739
758
|
private handleStreamStateUpdate = (streamStateUpdate: StreamStateUpdate) => {
|
@@ -748,7 +767,12 @@ class Room extends (EventEmitter as new () => TypedEmitter<RoomEventCallbacks>)
|
|
748
767
|
}
|
749
768
|
pub.track.streamState = Track.streamStateFromProto(streamState.state);
|
750
769
|
participant.emit(ParticipantEvent.TrackStreamStateChanged, pub, pub.track.streamState);
|
751
|
-
this.
|
770
|
+
this.emitWhenConnected(
|
771
|
+
ParticipantEvent.TrackStreamStateChanged,
|
772
|
+
pub,
|
773
|
+
pub.track.streamState,
|
774
|
+
participant,
|
775
|
+
);
|
752
776
|
});
|
753
777
|
};
|
754
778
|
|
@@ -768,7 +792,7 @@ class Room extends (EventEmitter as new () => TypedEmitter<RoomEventCallbacks>)
|
|
768
792
|
pub,
|
769
793
|
pub.subscriptionStatus,
|
770
794
|
);
|
771
|
-
this.
|
795
|
+
this.emitWhenConnected(
|
772
796
|
ParticipantEvent.TrackSubscriptionPermissionChanged,
|
773
797
|
pub,
|
774
798
|
pub.subscriptionStatus,
|
@@ -809,7 +833,7 @@ class Room extends (EventEmitter as new () => TypedEmitter<RoomEventCallbacks>)
|
|
809
833
|
|
810
834
|
private handleRoomUpdate = (r: RoomModel) => {
|
811
835
|
this.metadata = r.metadata;
|
812
|
-
this.
|
836
|
+
this.emitWhenConnected(RoomEvent.RoomMetadataChanged, r.metadata);
|
813
837
|
};
|
814
838
|
|
815
839
|
private handleConnectionQualityUpdate = (update: ConnectionQualityUpdate) => {
|
@@ -42,14 +42,15 @@ export default class LocalParticipant extends Participant {
|
|
42
42
|
/** map of track sid => all published tracks */
|
43
43
|
tracks: Map<string, LocalTrackPublication>;
|
44
44
|
|
45
|
+
/** @internal */
|
46
|
+
engine: RTCEngine;
|
47
|
+
|
45
48
|
private pendingPublishing = new Set<Track.Source>();
|
46
49
|
|
47
50
|
private cameraError: Error | undefined;
|
48
51
|
|
49
52
|
private microphoneError: Error | undefined;
|
50
53
|
|
51
|
-
private engine: RTCEngine;
|
52
|
-
|
53
54
|
private participantTrackPermissions: Array<ParticipantTrackPermission> = [];
|
54
55
|
|
55
56
|
private allParticipantsAllowedToSubscribe: boolean = true;
|
@@ -366,11 +367,11 @@ export default class LocalParticipant extends Participant {
|
|
366
367
|
if (tracks.length === 0) {
|
367
368
|
throw new TrackInvalidError('no video track found');
|
368
369
|
}
|
369
|
-
const screenVideo = new LocalVideoTrack(tracks[0]);
|
370
|
+
const screenVideo = new LocalVideoTrack(tracks[0], undefined, false);
|
370
371
|
screenVideo.source = Track.Source.ScreenShare;
|
371
372
|
const localTracks: Array<LocalTrack> = [screenVideo];
|
372
373
|
if (stream.getAudioTracks().length > 0) {
|
373
|
-
const screenAudio = new LocalAudioTrack(stream.getAudioTracks()[0]);
|
374
|
+
const screenAudio = new LocalAudioTrack(stream.getAudioTracks()[0], undefined, false);
|
374
375
|
screenAudio.source = Track.Source.ScreenShareAudio;
|
375
376
|
localTracks.push(screenAudio);
|
376
377
|
}
|
@@ -395,10 +396,10 @@ export default class LocalParticipant extends Participant {
|
|
395
396
|
if (track instanceof MediaStreamTrack) {
|
396
397
|
switch (track.kind) {
|
397
398
|
case 'audio':
|
398
|
-
track = new LocalAudioTrack(track);
|
399
|
+
track = new LocalAudioTrack(track, undefined, true);
|
399
400
|
break;
|
400
401
|
case 'video':
|
401
|
-
track = new LocalVideoTrack(track);
|
402
|
+
track = new LocalVideoTrack(track, undefined, true);
|
402
403
|
break;
|
403
404
|
default:
|
404
405
|
throw new TrackInvalidError(`unsupported MediaStreamTrack kind ${track.kind}`);
|
@@ -18,9 +18,9 @@ export function mediaTrackToLocalTrack(
|
|
18
18
|
): LocalVideoTrack | LocalAudioTrack {
|
19
19
|
switch (mediaStreamTrack.kind) {
|
20
20
|
case 'audio':
|
21
|
-
return new LocalAudioTrack(mediaStreamTrack, constraints);
|
21
|
+
return new LocalAudioTrack(mediaStreamTrack, constraints, false);
|
22
22
|
case 'video':
|
23
|
-
return new LocalVideoTrack(mediaStreamTrack, constraints);
|
23
|
+
return new LocalVideoTrack(mediaStreamTrack, constraints, false);
|
24
24
|
default:
|
25
25
|
throw new TrackInvalidError(`unsupported track type: ${mediaStreamTrack.kind}`);
|
26
26
|
}
|
@@ -15,8 +15,12 @@ export default class LocalAudioTrack extends LocalTrack {
|
|
15
15
|
|
16
16
|
private prevStats?: AudioSenderStats;
|
17
17
|
|
18
|
-
constructor(
|
19
|
-
|
18
|
+
constructor(
|
19
|
+
mediaTrack: MediaStreamTrack,
|
20
|
+
constraints?: MediaTrackConstraints,
|
21
|
+
userProvidedTrack = true,
|
22
|
+
) {
|
23
|
+
super(mediaTrack, Track.Kind.Audio, constraints, userProvidedTrack);
|
20
24
|
this.checkForSilence();
|
21
25
|
}
|
22
26
|
|
@@ -42,7 +46,7 @@ export default class LocalAudioTrack extends LocalTrack {
|
|
42
46
|
}
|
43
47
|
|
44
48
|
async unmute(): Promise<LocalAudioTrack> {
|
45
|
-
if (this.source === Track.Source.Microphone && this.stopOnMute) {
|
49
|
+
if (this.source === Track.Source.Microphone && this.stopOnMute && !this.isUserProvided) {
|
46
50
|
log.debug('reacquiring mic track');
|
47
51
|
await this.restartTrack();
|
48
52
|
}
|
@@ -19,16 +19,20 @@ export default class LocalTrack extends Track {
|
|
19
19
|
|
20
20
|
protected reacquireTrack: boolean;
|
21
21
|
|
22
|
+
protected providedByUser: boolean;
|
23
|
+
|
22
24
|
protected constructor(
|
23
25
|
mediaTrack: MediaStreamTrack,
|
24
26
|
kind: Track.Kind,
|
25
27
|
constraints?: MediaTrackConstraints,
|
28
|
+
userProvidedTrack = false,
|
26
29
|
) {
|
27
30
|
super(mediaTrack, kind);
|
28
31
|
this._mediaStreamTrack.addEventListener('ended', this.handleEnded);
|
29
32
|
this.constraints = constraints ?? mediaTrack.getConstraints();
|
30
33
|
this.reacquireTrack = false;
|
31
34
|
this.wasMuted = false;
|
35
|
+
this.providedByUser = userProvidedTrack;
|
32
36
|
}
|
33
37
|
|
34
38
|
get id(): string {
|
@@ -56,6 +60,10 @@ export default class LocalTrack extends Track {
|
|
56
60
|
return this._isUpstreamPaused;
|
57
61
|
}
|
58
62
|
|
63
|
+
get isUserProvided() {
|
64
|
+
return this.providedByUser;
|
65
|
+
}
|
66
|
+
|
59
67
|
/**
|
60
68
|
* @returns DeviceID of the device that is currently being used for this track
|
61
69
|
*/
|
@@ -80,7 +88,7 @@ export default class LocalTrack extends Track {
|
|
80
88
|
return this;
|
81
89
|
}
|
82
90
|
|
83
|
-
async replaceTrack(track: MediaStreamTrack): Promise<LocalTrack> {
|
91
|
+
async replaceTrack(track: MediaStreamTrack, userProvidedTrack = true): Promise<LocalTrack> {
|
84
92
|
if (!this.sender) {
|
85
93
|
throw new TrackInvalidError('unable to replace an unpublished track');
|
86
94
|
}
|
@@ -108,6 +116,7 @@ export default class LocalTrack extends Track {
|
|
108
116
|
});
|
109
117
|
|
110
118
|
this.mediaStream = new MediaStream([track]);
|
119
|
+
this.providedByUser = userProvidedTrack;
|
111
120
|
return this;
|
112
121
|
}
|
113
122
|
|
@@ -184,7 +193,7 @@ export default class LocalTrack extends Track {
|
|
184
193
|
if (!isMobile()) return;
|
185
194
|
log.debug(`visibility changed, is in Background: ${this.isInBackground}`);
|
186
195
|
|
187
|
-
if (!this.isInBackground && this.needsReAcquisition) {
|
196
|
+
if (!this.isInBackground && this.needsReAcquisition && !this.isUserProvided) {
|
188
197
|
log.debug(`track needs to be reaquired, restarting ${this.source}`);
|
189
198
|
await this.restart();
|
190
199
|
this.reacquireTrack = false;
|
@@ -41,8 +41,12 @@ export default class LocalVideoTrack extends LocalTrack {
|
|
41
41
|
|
42
42
|
private subscribedCodecs?: SubscribedCodec[];
|
43
43
|
|
44
|
-
constructor(
|
45
|
-
|
44
|
+
constructor(
|
45
|
+
mediaTrack: MediaStreamTrack,
|
46
|
+
constraints?: MediaTrackConstraints,
|
47
|
+
userProvidedTrack = true,
|
48
|
+
) {
|
49
|
+
super(mediaTrack, Track.Kind.Video, constraints, userProvidedTrack);
|
46
50
|
}
|
47
51
|
|
48
52
|
get isSimulcast(): boolean {
|
@@ -92,7 +96,7 @@ export default class LocalVideoTrack extends LocalTrack {
|
|
92
96
|
}
|
93
97
|
|
94
98
|
async unmute(): Promise<LocalVideoTrack> {
|
95
|
-
if (this.source === Track.Source.Camera) {
|
99
|
+
if (this.source === Track.Source.Camera && !this.isUserProvided) {
|
96
100
|
log.debug('reacquiring camera track');
|
97
101
|
await this.restartTrack();
|
98
102
|
}
|
package/src/room/track/create.ts
CHANGED
@@ -110,11 +110,11 @@ export async function createLocalScreenTracks(
|
|
110
110
|
if (tracks.length === 0) {
|
111
111
|
throw new TrackInvalidError('no video track found');
|
112
112
|
}
|
113
|
-
const screenVideo = new LocalVideoTrack(tracks[0]);
|
113
|
+
const screenVideo = new LocalVideoTrack(tracks[0], undefined, false);
|
114
114
|
screenVideo.source = Track.Source.ScreenShare;
|
115
115
|
const localTracks: Array<LocalTrack> = [screenVideo];
|
116
116
|
if (stream.getAudioTracks().length > 0) {
|
117
|
-
const screenAudio = new LocalAudioTrack(stream.getAudioTracks()[0]);
|
117
|
+
const screenAudio = new LocalAudioTrack(stream.getAudioTracks()[0], undefined, false);
|
118
118
|
screenAudio.source = Track.Source.ScreenShareAudio;
|
119
119
|
localTracks.push(screenAudio);
|
120
120
|
}
|