livekit-client 1.11.1 → 1.11.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.esm.mjs +87 -35
- 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 +5 -4
- package/dist/src/room/Room.d.ts.map +1 -1
- package/dist/src/room/events.d.ts +6 -1
- package/dist/src/room/events.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/LocalVideoTrack.d.ts +1 -1
- package/dist/src/room/track/LocalVideoTrack.d.ts.map +1 -1
- package/dist/src/room/track/RemoteVideoTrack.d.ts +3 -1
- package/dist/src/room/track/RemoteVideoTrack.d.ts.map +1 -1
- package/dist/src/room/utils.d.ts +1 -0
- package/dist/src/room/utils.d.ts.map +1 -1
- package/dist/ts4.2/src/room/Room.d.ts +5 -4
- package/dist/ts4.2/src/room/events.d.ts +6 -1
- package/dist/ts4.2/src/room/track/LocalAudioTrack.d.ts +1 -1
- package/dist/ts4.2/src/room/track/LocalVideoTrack.d.ts +1 -1
- package/dist/ts4.2/src/room/track/RemoteVideoTrack.d.ts +3 -1
- package/dist/ts4.2/src/room/utils.d.ts +1 -0
- package/package.json +1 -1
- package/src/room/Room.test.ts +29 -0
- package/src/room/Room.ts +55 -10
- package/src/room/events.ts +6 -0
- package/src/room/track/LocalAudioTrack.ts +4 -3
- package/src/room/track/LocalTrack.ts +2 -2
- package/src/room/track/LocalVideoTrack.ts +8 -4
- package/src/room/track/RemoteVideoTrack.ts +3 -8
- package/src/room/utils.ts +23 -0
package/dist/src/room/Room.d.ts
CHANGED
@@ -57,6 +57,7 @@ declare class Room extends EventEmitter<RoomEventCallbacks> {
|
|
57
57
|
private disconnectLock;
|
58
58
|
private cachedParticipantSids;
|
59
59
|
private connectionReconcileInterval?;
|
60
|
+
private activeDeviceMap;
|
60
61
|
/**
|
61
62
|
* Creates a new Room, the primary construct for a LiveKit session.
|
62
63
|
* @param options
|
@@ -127,12 +128,11 @@ declare class Room extends EventEmitter<RoomEventCallbacks> {
|
|
127
128
|
get canPlaybackAudio(): boolean;
|
128
129
|
/**
|
129
130
|
* Returns the active audio output device used in this room.
|
130
|
-
*
|
131
|
-
* Note: to get the active `audioinput` or `videoinput` use [[LocalTrack.getDeviceId()]]
|
132
|
-
*
|
133
131
|
* @return the previously successfully set audio output device ID or an empty string if the default device is used.
|
132
|
+
* @deprecated use `getActiveDevice('audiooutput')` instead
|
134
133
|
*/
|
135
134
|
getActiveAudioOutputDevice(): string;
|
135
|
+
getActiveDevice(kind: MediaDeviceKind): string | undefined;
|
136
136
|
/**
|
137
137
|
* Switches all active devices used in this room to the given device.
|
138
138
|
*
|
@@ -143,7 +143,7 @@ declare class Room extends EventEmitter<RoomEventCallbacks> {
|
|
143
143
|
* `audiooutput` to set speaker for all incoming audio tracks
|
144
144
|
* @param deviceId
|
145
145
|
*/
|
146
|
-
switchActiveDevice(kind: MediaDeviceKind, deviceId: string, exact?: boolean): Promise<
|
146
|
+
switchActiveDevice(kind: MediaDeviceKind, deviceId: string, exact?: boolean): Promise<boolean>;
|
147
147
|
private setupLocalParticipantEvents;
|
148
148
|
private recreateEngine;
|
149
149
|
private onTrackAdded;
|
@@ -230,5 +230,6 @@ export type RoomEventCallbacks = {
|
|
230
230
|
signalConnected: () => void;
|
231
231
|
recordingStatusChanged: (recording: boolean) => void;
|
232
232
|
dcBufferStatusChanged: (isLow: boolean, kind: DataPacket_Kind) => void;
|
233
|
+
activeDeviceChanged: (kind: MediaDeviceKind, deviceId: string) => void;
|
233
234
|
};
|
234
235
|
//# sourceMappingURL=Room.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Room.d.ts","sourceRoot":"","sources":["../../../src/room/Room.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,OAAO,gBAAgB,CAAC;AAGxB,OAAO,KAAK,EAEV,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,eAAe,EACf,gBAAgB,EAGhB,qBAAqB,EAIrB,iBAAiB,EAKlB,MAAM,yBAAyB,CAAC;AAUjC,OAAO,SAAS,MAAM,aAAa,CAAC;AAWpC,OAAO,gBAAgB,MAAM,gCAAgC,CAAC;AAC9D,OAAO,KAAK,WAAW,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,iBAAiB,MAAM,iCAAiC,CAAC;AAGhE,OAAO,qBAAqB,MAAM,+BAA+B,CAAC;AAElE,OAAO,KAAK,WAAW,MAAM,qBAAqB,CAAC;AACnD,OAAO,sBAAsB,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAGjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;
|
1
|
+
{"version":3,"file":"Room.d.ts","sourceRoot":"","sources":["../../../src/room/Room.ts"],"names":[],"mappings":"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"}
|
@@ -243,7 +243,12 @@ export declare enum RoomEvent {
|
|
243
243
|
* Emits whenever the current buffer status of a data channel changes
|
244
244
|
* args: (isLow: boolean, kind: [[DataPacket_Kind]])
|
245
245
|
*/
|
246
|
-
DCBufferStatusChanged = "dcBufferStatusChanged"
|
246
|
+
DCBufferStatusChanged = "dcBufferStatusChanged",
|
247
|
+
/**
|
248
|
+
* Triggered by a call to room.switchActiveDevice
|
249
|
+
* args: (kind: MediaDeviceKind, deviceId: string)
|
250
|
+
*/
|
251
|
+
ActiveDeviceChanged = "activeDeviceChanged"
|
247
252
|
}
|
248
253
|
export declare enum ParticipantEvent {
|
249
254
|
/**
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/room/events.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,oBAAY,SAAS;IACnB;;OAEG;IACH,SAAS,cAAc;IAEvB;;;OAGG;IACH,YAAY,iBAAiB;IAE7B;;OAEG;IACH,WAAW,gBAAgB;IAE3B;;;OAGG;IACH,YAAY,iBAAiB;IAE7B;;;;OAIG;IACH,sBAAsB,2BAA2B;IAEjD;;OAEG;IACH,YAAY,2BAA2B;IAEvC;;OAEG;IACH,mBAAmB,wBAAwB;IAE3C;;;;;;OAMG;IACH,oBAAoB,yBAAyB;IAE7C;;;;;OAKG;IACH,uBAAuB,4BAA4B;IAEnD;;;;;;;;OAQG;IACH,cAAc,mBAAmB;IAEjC;;;;;OAKG;IACH,eAAe,oBAAoB;IAEnC;;;;OAIG;IACH,uBAAuB,4BAA4B;IAEnD;;;;OAIG;IACH,gBAAgB,qBAAqB;IAErC;;;;;OAKG;IACH,iBAAiB,sBAAsB;IAEvC;;;;OAIG;IACH,UAAU,eAAe;IAEzB;;;;OAIG;IACH,YAAY,iBAAiB;IAE7B;;;;;OAKG;IACH,mBAAmB,wBAAwB;IAE3C;;;;;;;;OAQG;IACH,qBAAqB,0BAA0B;IAE/C;;;;;OAKG;IACH,yBAAyB,8BAA8B;IAEvD;;;;;;;OAOG;IACH,qBAAqB,0BAA0B;IAE/C;;;;;;;;OAQG;IACH,0BAA0B,+BAA+B;IAEzD;;;;;OAKG;IACH,sBAAsB,2BAA2B;IAEjD;;;;;;;OAOG;IACH,mBAAmB,wBAAwB;IAE3C;;;;;;OAMG;IACH,YAAY,iBAAiB;IAE7B;;;;;;OAMG;IACH,wBAAwB,6BAA6B;IAErD;;;;;;;;;OASG;IACH,uBAAuB,4BAA4B;IAEnD;;;;;;;;;OASG;IACH,kCAAkC,uCAAuC;IAEzE;;;;;;;OAOG;IACH,8BAA8B,mCAAmC;IAEjE;;;;OAIG;IACH,0BAA0B,yBAAyB;IAEnD;;;;;;;;OAQG;IACH,iBAAiB,sBAAsB;IAEvC;;;OAGG;IACH,6BAA6B,kCAAkC;IAE/D;;OAEG;IACH,eAAe,oBAAoB;IAEnC;;;OAGG;IACH,sBAAsB,2BAA2B;IAEjD;;;OAGG;IACH,qBAAqB,0BAA0B;
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/room/events.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,oBAAY,SAAS;IACnB;;OAEG;IACH,SAAS,cAAc;IAEvB;;;OAGG;IACH,YAAY,iBAAiB;IAE7B;;OAEG;IACH,WAAW,gBAAgB;IAE3B;;;OAGG;IACH,YAAY,iBAAiB;IAE7B;;;;OAIG;IACH,sBAAsB,2BAA2B;IAEjD;;OAEG;IACH,YAAY,2BAA2B;IAEvC;;OAEG;IACH,mBAAmB,wBAAwB;IAE3C;;;;;;OAMG;IACH,oBAAoB,yBAAyB;IAE7C;;;;;OAKG;IACH,uBAAuB,4BAA4B;IAEnD;;;;;;;;OAQG;IACH,cAAc,mBAAmB;IAEjC;;;;;OAKG;IACH,eAAe,oBAAoB;IAEnC;;;;OAIG;IACH,uBAAuB,4BAA4B;IAEnD;;;;OAIG;IACH,gBAAgB,qBAAqB;IAErC;;;;;OAKG;IACH,iBAAiB,sBAAsB;IAEvC;;;;OAIG;IACH,UAAU,eAAe;IAEzB;;;;OAIG;IACH,YAAY,iBAAiB;IAE7B;;;;;OAKG;IACH,mBAAmB,wBAAwB;IAE3C;;;;;;;;OAQG;IACH,qBAAqB,0BAA0B;IAE/C;;;;;OAKG;IACH,yBAAyB,8BAA8B;IAEvD;;;;;;;OAOG;IACH,qBAAqB,0BAA0B;IAE/C;;;;;;;;OAQG;IACH,0BAA0B,+BAA+B;IAEzD;;;;;OAKG;IACH,sBAAsB,2BAA2B;IAEjD;;;;;;;OAOG;IACH,mBAAmB,wBAAwB;IAE3C;;;;;;OAMG;IACH,YAAY,iBAAiB;IAE7B;;;;;;OAMG;IACH,wBAAwB,6BAA6B;IAErD;;;;;;;;;OASG;IACH,uBAAuB,4BAA4B;IAEnD;;;;;;;;;OASG;IACH,kCAAkC,uCAAuC;IAEzE;;;;;;;OAOG;IACH,8BAA8B,mCAAmC;IAEjE;;;;OAIG;IACH,0BAA0B,yBAAyB;IAEnD;;;;;;;;OAQG;IACH,iBAAiB,sBAAsB;IAEvC;;;OAGG;IACH,6BAA6B,kCAAkC;IAE/D;;OAEG;IACH,eAAe,oBAAoB;IAEnC;;;OAGG;IACH,sBAAsB,2BAA2B;IAEjD;;;OAGG;IACH,qBAAqB,0BAA0B;IAE/C;;;OAGG;IACH,mBAAmB,wBAAwB;CAC5C;AAED,oBAAY,gBAAgB;IAC1B;;;;;;;;OAQG;IACH,cAAc,mBAAmB;IAEjC;;;;;OAKG;IACH,eAAe,oBAAoB;IAEnC;;;;OAIG;IACH,uBAAuB,4BAA4B;IAEnD;;;;OAIG;IACH,gBAAgB,qBAAqB;IAErC;;;;;OAKG;IACH,iBAAiB,sBAAsB;IAEvC;;;;OAIG;IACH,UAAU,eAAe;IAEzB;;;;OAIG;IACH,YAAY,iBAAiB;IAE7B;;;;;OAKG;IACH,mBAAmB,wBAAwB;IAE3C;;;;;;;;OAQG;IACH,qBAAqB,0BAA0B;IAE/C;;;;;;;;;OASG;IACH,0BAA0B,+BAA+B;IAEzD;;;;;OAKG;IACH,sBAAsB,2BAA2B;IAEjD;;;;;;OAMG;IACH,YAAY,iBAAiB;IAE7B;;;;OAIG;IACH,iBAAiB,sBAAsB;IAEvC;;;;;;OAMG;IACH,wBAAwB,6BAA6B;IAErD;;;;;;;;OAQG;IACH,uBAAuB,4BAA4B;IAEnD;;;;;;;;OAQG;IACH,kCAAkC,uCAAuC;IAEzE;;;OAGG;IACH,8BAA8B,mCAAmC;IAGjE,gBAAgB;IAChB,iBAAiB,sBAAsB;IAEvC;;;OAGG;IACH,6BAA6B,kCAAkC;CAChE;AAED,gBAAgB;AAChB,oBAAY,WAAW;IACrB,iBAAiB,sBAAsB;IACvC,SAAS,cAAc;IACvB,YAAY,iBAAiB;IAC7B,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,SAAS,cAAc;IACvB,aAAa,kBAAkB;IAC/B,eAAe,oBAAoB;IACnC,OAAO,YAAY;IACnB,eAAe,oBAAoB;IACnC,oBAAoB,yBAAyB;IAC7C,kBAAkB,uBAAuB;IACzC,qBAAqB,0BAA0B;CAChD;AAED,oBAAY,UAAU;IACpB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,OAAO,YAAY;IACnB;;OAEG;IACH,SAAS,cAAc;IACvB,KAAK,UAAU;IACf,UAAU,eAAe;IACzB,YAAY,iBAAiB;IAC7B,gBAAgB;IAChB,cAAc,mBAAmB;IACjC,gBAAgB;IAChB,kBAAkB,uBAAuB;IACzC,gBAAgB;IAChB,oBAAoB,yBAAyB;IAC7C,gBAAgB;IAChB,mBAAmB,wBAAwB;IAC3C;;;OAGG;IACH,oBAAoB,yBAAyB;IAC7C,gBAAgB;IAChB,iBAAiB,sBAAsB;IACvC,gBAAgB;IAChB,sBAAsB,2BAA2B;IACjD,gBAAgB;IAChB,eAAe,oBAAoB;IACnC,gBAAgB;IAChB,eAAe,oBAAoB;IACnC;;;OAGG;IACH,cAAc,mBAAmB;IACjC;;;OAGG;IACH,eAAe,oBAAoB;IACnC;;;OAGG;IACH,6BAA6B,kCAAkC;IAC/D;;OAEG;IACH,yBAAyB,8BAA8B;IACvD;;OAEG;IACH,kBAAkB,uBAAuB;CAC1C"}
|
@@ -12,7 +12,7 @@ export default class LocalAudioTrack extends LocalTrack {
|
|
12
12
|
* @param userProvidedTrack Signals to the SDK whether or not the mediaTrack should be managed (i.e. released and reacquired) internally by the SDK
|
13
13
|
*/
|
14
14
|
constructor(mediaTrack: MediaStreamTrack, constraints?: MediaTrackConstraints, userProvidedTrack?: boolean);
|
15
|
-
setDeviceId(deviceId: ConstrainDOMString): Promise<
|
15
|
+
setDeviceId(deviceId: ConstrainDOMString): Promise<boolean>;
|
16
16
|
mute(): Promise<LocalAudioTrack>;
|
17
17
|
unmute(): Promise<LocalAudioTrack>;
|
18
18
|
restartTrack(options?: AudioCaptureOptions): Promise<void>;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"LocalAudioTrack.d.ts","sourceRoot":"","sources":["../../../../src/room/track/LocalAudioTrack.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAGrD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,UAAU;IACrD,gBAAgB;IAChB,UAAU,EAAE,OAAO,CAAS;IAE5B,OAAO,CAAC,SAAS,CAAC,CAAmB;IAErC;;;;;OAKG;gBAED,UAAU,EAAE,gBAAgB,EAC5B,WAAW,CAAC,EAAE,qBAAqB,EACnC,iBAAiB,UAAO;IAMpB,WAAW,CAAC,QAAQ,EAAE,kBAAkB;
|
1
|
+
{"version":3,"file":"LocalAudioTrack.d.ts","sourceRoot":"","sources":["../../../../src/room/track/LocalAudioTrack.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAGrD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,UAAU;IACrD,gBAAgB;IAChB,UAAU,EAAE,OAAO,CAAS;IAE5B,OAAO,CAAC,SAAS,CAAC,CAAmB;IAErC;;;;;OAKG;gBAED,UAAU,EAAE,gBAAgB,EAC5B,WAAW,CAAC,EAAE,qBAAqB,EACnC,iBAAiB,UAAO;IAMpB,WAAW,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IAW3D,IAAI,IAAI,OAAO,CAAC,eAAe,CAAC;IAgBhC,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC;IAmBlC,YAAY,CAAC,OAAO,CAAC,EAAE,mBAAmB;cAWhC,OAAO,CAAC,WAAW,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC;IAOjF,YAAY;IAYZ,SAAS,CAAC,aAAa,sBAmBrB;IAEI,cAAc,IAAI,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAyBvD,eAAe;CAUtB"}
|
@@ -32,7 +32,7 @@ export default class LocalVideoTrack extends LocalTrack {
|
|
32
32
|
unmute(): Promise<LocalVideoTrack>;
|
33
33
|
getSenderStats(): Promise<VideoSenderStats[]>;
|
34
34
|
setPublishingQuality(maxQuality: VideoQuality): void;
|
35
|
-
setDeviceId(deviceId: ConstrainDOMString): Promise<
|
35
|
+
setDeviceId(deviceId: ConstrainDOMString): Promise<boolean>;
|
36
36
|
restartTrack(options?: VideoCaptureOptions): Promise<void>;
|
37
37
|
addSimulcastTrack(codec: VideoCodec, encodings?: RTCRtpEncodingParameters[]): SimulcastTrackInfo;
|
38
38
|
setSimulcastTrackSender(codec: VideoCodec, sender: RTCRtpSender): void;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"LocalVideoTrack.d.ts","sourceRoot":"","sources":["../../../../src/room/track/LocalVideoTrack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAGlF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGjE,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;IAG/C,eAAe,EAAE,GAAG,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAA6C;IAEjG,OAAO,CAAC,gBAAgB,CAAC,CAAoB;IAM7C,OAAO,CAAC,UAAU,CAAQ;IAE1B;;;;;OAKG;gBAED,UAAU,EAAE,gBAAgB,EAC5B,WAAW,CAAC,EAAE,qBAAqB,EACnC,iBAAiB,UAAO;IAM1B,IAAI,WAAW,IAAI,OAAO,CAKzB;IAGD,YAAY,CAAC,YAAY,EAAE,YAAY;IAoBvC,IAAI;IAQE,IAAI,IAAI,OAAO,CAAC,eAAe,CAAC;IAehC,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC;IAclC,cAAc,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IA2CnD,oBAAoB,CAAC,UAAU,EAAE,YAAY;IAYvC,WAAW,CAAC,QAAQ,EAAE,kBAAkB;
|
1
|
+
{"version":3,"file":"LocalVideoTrack.d.ts","sourceRoot":"","sources":["../../../../src/room/track/LocalVideoTrack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAGlF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGjE,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;IAG/C,eAAe,EAAE,GAAG,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAA6C;IAEjG,OAAO,CAAC,gBAAgB,CAAC,CAAoB;IAM7C,OAAO,CAAC,UAAU,CAAQ;IAE1B;;;;;OAKG;gBAED,UAAU,EAAE,gBAAgB,EAC5B,WAAW,CAAC,EAAE,qBAAqB,EACnC,iBAAiB,UAAO;IAM1B,IAAI,WAAW,IAAI,OAAO,CAKzB;IAGD,YAAY,CAAC,YAAY,EAAE,YAAY;IAoBvC,IAAI;IAQE,IAAI,IAAI,OAAO,CAAC,eAAe,CAAC;IAehC,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC;IAclC,cAAc,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IA2CnD,oBAAoB,CAAC,UAAU,EAAE,YAAY;IAYvC,WAAW,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IAgB3D,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;IAyC3E;;;OAGG;IACG,mBAAmB,CAAC,SAAS,EAAE,iBAAiB,EAAE;IASxD,SAAS,CAAC,aAAa,sBAyBrB;cAEc,0BAA0B;CAO3C;AAkHD,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,EACtC,GAAG,CAAC,EAAE,OAAO,GACZ,UAAU,EAAE,CA6Cd"}
|
@@ -6,9 +6,11 @@ export default class RemoteVideoTrack extends RemoteTrack {
|
|
6
6
|
private adaptiveStreamSettings?;
|
7
7
|
private lastVisible?;
|
8
8
|
private lastDimensions?;
|
9
|
-
private isObserved;
|
10
9
|
constructor(mediaTrack: MediaStreamTrack, sid: string, receiver?: RTCRtpReceiver, adaptiveStreamSettings?: AdaptiveStreamSettings);
|
11
10
|
get isAdaptiveStream(): boolean;
|
11
|
+
/**
|
12
|
+
* Note: When using adaptiveStream, you need to use remoteVideoTrack.attach() to add the track to a HTMLVideoElement, otherwise your video tracks might never start
|
13
|
+
*/
|
12
14
|
get mediaStreamTrack(): MediaStreamTrack;
|
13
15
|
/** @internal */
|
14
16
|
setMuted(muted: boolean): void;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"RemoteVideoTrack.d.ts","sourceRoot":"","sources":["../../../../src/room/track/RemoteVideoTrack.ts"],"names":[],"mappings":"AAQA,OAAO,WAAW,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAItD,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,WAAW;IACvD,OAAO,CAAC,SAAS,CAAC,CAAqB;IAEvC,OAAO,CAAC,YAAY,CAAqB;IAEzC,OAAO,CAAC,sBAAsB,CAAC,CAAyB;IAExD,OAAO,CAAC,WAAW,CAAC,CAAU;IAE9B,OAAO,CAAC,cAAc,CAAC,CAAmB;
|
1
|
+
{"version":3,"file":"RemoteVideoTrack.d.ts","sourceRoot":"","sources":["../../../../src/room/track/RemoteVideoTrack.ts"],"names":[],"mappings":"AAQA,OAAO,WAAW,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAItD,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,WAAW;IACvD,OAAO,CAAC,SAAS,CAAC,CAAqB;IAEvC,OAAO,CAAC,YAAY,CAAqB;IAEzC,OAAO,CAAC,sBAAsB,CAAC,CAAyB;IAExD,OAAO,CAAC,WAAW,CAAC,CAAU;IAE9B,OAAO,CAAC,cAAc,CAAC,CAAmB;gBAGxC,UAAU,EAAE,gBAAgB,EAC5B,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,cAAc,EACzB,sBAAsB,CAAC,EAAE,sBAAsB;IAMjD,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED;;OAEG;IACH,IAAI,gBAAgB,qBAEnB;IAED,gBAAgB;IAChB,QAAQ,CAAC,KAAK,EAAE,OAAO;IAavB,MAAM,IAAI,gBAAgB;IAC1B,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,gBAAgB;IAoBnD;;;;OAIG;IACH,kBAAkB,CAAC,WAAW,EAAE,WAAW;IAuB3C;;;;OAIG;IACH,wBAAwB,CAAC,WAAW,EAAE,WAAW;IAajD,MAAM,IAAI,gBAAgB,EAAE;IAC5B,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,gBAAgB;IAgBnD,gBAAgB;IAChB,wBAAwB,IAAI,MAAM,GAAG,SAAS;IAI9C,SAAS,CAAC,eAAe,sBAYvB;YAEY,gBAAgB;IA+B9B,OAAO,CAAC,oBAAoB;cAQZ,0BAA0B;IAM1C,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAEnB;IAEnB,OAAO,CAAC,gBAAgB;IA8BxB,OAAO,CAAC,gBAAgB;IAyBxB,OAAO,CAAC,eAAe;CAiBxB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,IAAI,MAAM,CAAC;IAChB,MAAM,IAAI,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;IAExC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,uBAAuB,CAAC,EAAE,MAAM,IAAI,CAAC;IACrC,OAAO,IAAI,IAAI,CAAC;IAChB,aAAa,IAAI,IAAI,CAAC;CACvB"}
|
package/dist/src/room/utils.d.ts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/room/utils.ts"],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/room/utils.ts"],"names":[],"mappings":"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"}
|
@@ -57,6 +57,7 @@ declare class Room extends EventEmitter<RoomEventCallbacks> {
|
|
57
57
|
private disconnectLock;
|
58
58
|
private cachedParticipantSids;
|
59
59
|
private connectionReconcileInterval?;
|
60
|
+
private activeDeviceMap;
|
60
61
|
/**
|
61
62
|
* Creates a new Room, the primary construct for a LiveKit session.
|
62
63
|
* @param options
|
@@ -127,12 +128,11 @@ declare class Room extends EventEmitter<RoomEventCallbacks> {
|
|
127
128
|
get canPlaybackAudio(): boolean;
|
128
129
|
/**
|
129
130
|
* Returns the active audio output device used in this room.
|
130
|
-
*
|
131
|
-
* Note: to get the active `audioinput` or `videoinput` use [[LocalTrack.getDeviceId()]]
|
132
|
-
*
|
133
131
|
* @return the previously successfully set audio output device ID or an empty string if the default device is used.
|
132
|
+
* @deprecated use `getActiveDevice('audiooutput')` instead
|
134
133
|
*/
|
135
134
|
getActiveAudioOutputDevice(): string;
|
135
|
+
getActiveDevice(kind: MediaDeviceKind): string | undefined;
|
136
136
|
/**
|
137
137
|
* Switches all active devices used in this room to the given device.
|
138
138
|
*
|
@@ -143,7 +143,7 @@ declare class Room extends EventEmitter<RoomEventCallbacks> {
|
|
143
143
|
* `audiooutput` to set speaker for all incoming audio tracks
|
144
144
|
* @param deviceId
|
145
145
|
*/
|
146
|
-
switchActiveDevice(kind: MediaDeviceKind, deviceId: string, exact?: boolean): Promise<
|
146
|
+
switchActiveDevice(kind: MediaDeviceKind, deviceId: string, exact?: boolean): Promise<boolean>;
|
147
147
|
private setupLocalParticipantEvents;
|
148
148
|
private recreateEngine;
|
149
149
|
private onTrackAdded;
|
@@ -230,5 +230,6 @@ export type RoomEventCallbacks = {
|
|
230
230
|
signalConnected: () => void;
|
231
231
|
recordingStatusChanged: (recording: boolean) => void;
|
232
232
|
dcBufferStatusChanged: (isLow: boolean, kind: DataPacket_Kind) => void;
|
233
|
+
activeDeviceChanged: (kind: MediaDeviceKind, deviceId: string) => void;
|
233
234
|
};
|
234
235
|
//# sourceMappingURL=Room.d.ts.map
|
@@ -243,7 +243,12 @@ export declare enum RoomEvent {
|
|
243
243
|
* Emits whenever the current buffer status of a data channel changes
|
244
244
|
* args: (isLow: boolean, kind: [[DataPacket_Kind]])
|
245
245
|
*/
|
246
|
-
DCBufferStatusChanged = "dcBufferStatusChanged"
|
246
|
+
DCBufferStatusChanged = "dcBufferStatusChanged",
|
247
|
+
/**
|
248
|
+
* Triggered by a call to room.switchActiveDevice
|
249
|
+
* args: (kind: MediaDeviceKind, deviceId: string)
|
250
|
+
*/
|
251
|
+
ActiveDeviceChanged = "activeDeviceChanged"
|
247
252
|
}
|
248
253
|
export declare enum ParticipantEvent {
|
249
254
|
/**
|
@@ -12,7 +12,7 @@ export default class LocalAudioTrack extends LocalTrack {
|
|
12
12
|
* @param userProvidedTrack Signals to the SDK whether or not the mediaTrack should be managed (i.e. released and reacquired) internally by the SDK
|
13
13
|
*/
|
14
14
|
constructor(mediaTrack: MediaStreamTrack, constraints?: MediaTrackConstraints, userProvidedTrack?: boolean);
|
15
|
-
setDeviceId(deviceId: ConstrainDOMString): Promise<
|
15
|
+
setDeviceId(deviceId: ConstrainDOMString): Promise<boolean>;
|
16
16
|
mute(): Promise<LocalAudioTrack>;
|
17
17
|
unmute(): Promise<LocalAudioTrack>;
|
18
18
|
restartTrack(options?: AudioCaptureOptions): Promise<void>;
|
@@ -32,7 +32,7 @@ export default class LocalVideoTrack extends LocalTrack {
|
|
32
32
|
unmute(): Promise<LocalVideoTrack>;
|
33
33
|
getSenderStats(): Promise<VideoSenderStats[]>;
|
34
34
|
setPublishingQuality(maxQuality: VideoQuality): void;
|
35
|
-
setDeviceId(deviceId: ConstrainDOMString): Promise<
|
35
|
+
setDeviceId(deviceId: ConstrainDOMString): Promise<boolean>;
|
36
36
|
restartTrack(options?: VideoCaptureOptions): Promise<void>;
|
37
37
|
addSimulcastTrack(codec: VideoCodec, encodings?: RTCRtpEncodingParameters[]): SimulcastTrackInfo;
|
38
38
|
setSimulcastTrackSender(codec: VideoCodec, sender: RTCRtpSender): void;
|
@@ -6,9 +6,11 @@ export default class RemoteVideoTrack extends RemoteTrack {
|
|
6
6
|
private adaptiveStreamSettings?;
|
7
7
|
private lastVisible?;
|
8
8
|
private lastDimensions?;
|
9
|
-
private isObserved;
|
10
9
|
constructor(mediaTrack: MediaStreamTrack, sid: string, receiver?: RTCRtpReceiver, adaptiveStreamSettings?: AdaptiveStreamSettings);
|
11
10
|
get isAdaptiveStream(): boolean;
|
11
|
+
/**
|
12
|
+
* Note: When using adaptiveStream, you need to use remoteVideoTrack.attach() to add the track to a HTMLVideoElement, otherwise your video tracks might never start
|
13
|
+
*/
|
12
14
|
get mediaStreamTrack(): MediaStreamTrack;
|
13
15
|
/** @internal */
|
14
16
|
setMuted(muted: boolean): void;
|
package/package.json
CHANGED
@@ -0,0 +1,29 @@
|
|
1
|
+
import Room from './Room';
|
2
|
+
import { RoomEvent } from './events';
|
3
|
+
|
4
|
+
describe('Active device switch', () => {
|
5
|
+
it('updates devices correctly', async () => {
|
6
|
+
const room = new Room();
|
7
|
+
await room.switchActiveDevice('audioinput', 'test');
|
8
|
+
expect(room.getActiveDevice('audioinput')).toBe('test');
|
9
|
+
});
|
10
|
+
it('updates devices with exact constraint', async () => {
|
11
|
+
const room = new Room();
|
12
|
+
await room.switchActiveDevice('audioinput', 'test', true);
|
13
|
+
expect(room.getActiveDevice('audioinput')).toBe('test');
|
14
|
+
});
|
15
|
+
it('emits changed event', async () => {
|
16
|
+
const room = new Room();
|
17
|
+
let kind: MediaDeviceKind | undefined;
|
18
|
+
let deviceId: string | undefined;
|
19
|
+
const deviceChangeHandler = (_kind: MediaDeviceKind, _deviceId: string) => {
|
20
|
+
kind = _kind;
|
21
|
+
deviceId = _deviceId;
|
22
|
+
};
|
23
|
+
room.on(RoomEvent.ActiveDeviceChanged, deviceChangeHandler);
|
24
|
+
await room.switchActiveDevice('audioinput', 'test', true);
|
25
|
+
|
26
|
+
expect(deviceId).toBe('test');
|
27
|
+
expect(kind).toBe('audioinput');
|
28
|
+
});
|
29
|
+
});
|
package/src/room/Room.ts
CHANGED
@@ -68,6 +68,7 @@ import {
|
|
68
68
|
isWeb,
|
69
69
|
supportsSetSinkId,
|
70
70
|
unpackStreamId,
|
71
|
+
unwrapConstraint,
|
71
72
|
} from './utils';
|
72
73
|
|
73
74
|
export enum ConnectionState {
|
@@ -134,6 +135,8 @@ class Room extends EventEmitter<RoomEventCallbacks> {
|
|
134
135
|
|
135
136
|
private connectionReconcileInterval?: ReturnType<typeof setInterval>;
|
136
137
|
|
138
|
+
private activeDeviceMap: Map<MediaDeviceKind, string>;
|
139
|
+
|
137
140
|
/**
|
138
141
|
* Creates a new Room, the primary construct for a LiveKit session.
|
139
142
|
* @param options
|
@@ -161,6 +164,22 @@ class Room extends EventEmitter<RoomEventCallbacks> {
|
|
161
164
|
this.maybeCreateEngine();
|
162
165
|
|
163
166
|
this.disconnectLock = new Mutex();
|
167
|
+
this.activeDeviceMap = new Map();
|
168
|
+
if (this.options.videoCaptureDefaults.deviceId) {
|
169
|
+
this.activeDeviceMap.set(
|
170
|
+
'videoinput',
|
171
|
+
unwrapConstraint(this.options.videoCaptureDefaults.deviceId),
|
172
|
+
);
|
173
|
+
}
|
174
|
+
if (this.options.audioCaptureDefaults.deviceId) {
|
175
|
+
this.activeDeviceMap.set(
|
176
|
+
'audioinput',
|
177
|
+
unwrapConstraint(this.options.audioCaptureDefaults.deviceId),
|
178
|
+
);
|
179
|
+
}
|
180
|
+
if (this.options.audioOutput?.deviceId) {
|
181
|
+
this.switchActiveDevice('audiooutput', unwrapConstraint(this.options.audioOutput.deviceId));
|
182
|
+
}
|
164
183
|
|
165
184
|
this.localParticipant = new LocalParticipant('', '', this.engine, this.options);
|
166
185
|
}
|
@@ -717,15 +736,17 @@ class Room extends EventEmitter<RoomEventCallbacks> {
|
|
717
736
|
|
718
737
|
/**
|
719
738
|
* Returns the active audio output device used in this room.
|
720
|
-
*
|
721
|
-
* Note: to get the active `audioinput` or `videoinput` use [[LocalTrack.getDeviceId()]]
|
722
|
-
*
|
723
739
|
* @return the previously successfully set audio output device ID or an empty string if the default device is used.
|
740
|
+
* @deprecated use `getActiveDevice('audiooutput')` instead
|
724
741
|
*/
|
725
742
|
getActiveAudioOutputDevice(): string {
|
726
743
|
return this.options.audioOutput?.deviceId ?? '';
|
727
744
|
}
|
728
745
|
|
746
|
+
getActiveDevice(kind: MediaDeviceKind): string | undefined {
|
747
|
+
return this.activeDeviceMap.get(kind);
|
748
|
+
}
|
749
|
+
|
729
750
|
/**
|
730
751
|
* Switches all active devices used in this room to the given device.
|
731
752
|
*
|
@@ -737,15 +758,20 @@ class Room extends EventEmitter<RoomEventCallbacks> {
|
|
737
758
|
* @param deviceId
|
738
759
|
*/
|
739
760
|
async switchActiveDevice(kind: MediaDeviceKind, deviceId: string, exact: boolean = false) {
|
761
|
+
let deviceHasChanged = false;
|
762
|
+
let success = true;
|
740
763
|
const deviceConstraint = exact ? { exact: deviceId } : deviceId;
|
741
764
|
if (kind === 'audioinput') {
|
742
765
|
const prevDeviceId = this.options.audioCaptureDefaults!.deviceId;
|
743
766
|
this.options.audioCaptureDefaults!.deviceId = deviceConstraint;
|
767
|
+
deviceHasChanged = prevDeviceId !== deviceConstraint;
|
744
768
|
const tracks = Array.from(this.localParticipant.audioTracks.values()).filter(
|
745
769
|
(track) => track.source === Track.Source.Microphone,
|
746
770
|
);
|
747
771
|
try {
|
748
|
-
|
772
|
+
success = (
|
773
|
+
await Promise.all(tracks.map((t) => t.audioTrack?.setDeviceId(deviceConstraint)))
|
774
|
+
).every((val) => val === true);
|
749
775
|
} catch (e) {
|
750
776
|
this.options.audioCaptureDefaults!.deviceId = prevDeviceId;
|
751
777
|
throw e;
|
@@ -753,32 +779,50 @@ class Room extends EventEmitter<RoomEventCallbacks> {
|
|
753
779
|
} else if (kind === 'videoinput') {
|
754
780
|
const prevDeviceId = this.options.videoCaptureDefaults!.deviceId;
|
755
781
|
this.options.videoCaptureDefaults!.deviceId = deviceConstraint;
|
782
|
+
deviceHasChanged = prevDeviceId !== deviceConstraint;
|
756
783
|
const tracks = Array.from(this.localParticipant.videoTracks.values()).filter(
|
757
784
|
(track) => track.source === Track.Source.Camera,
|
758
785
|
);
|
759
786
|
try {
|
760
|
-
|
787
|
+
success = (
|
788
|
+
await Promise.all(tracks.map((t) => t.videoTrack?.setDeviceId(deviceConstraint)))
|
789
|
+
).every((val) => val === true);
|
761
790
|
} catch (e) {
|
762
791
|
this.options.videoCaptureDefaults!.deviceId = prevDeviceId;
|
763
792
|
throw e;
|
764
793
|
}
|
765
794
|
} else if (kind === 'audiooutput') {
|
766
|
-
|
767
|
-
|
795
|
+
if (
|
796
|
+
(!supportsSetSinkId() && !this.options.expWebAudioMix) ||
|
797
|
+
(this.audioContext && !('setSinkId' in this.audioContext))
|
798
|
+
) {
|
768
799
|
throw new Error('cannot switch audio output, setSinkId not supported');
|
769
800
|
}
|
770
801
|
this.options.audioOutput ??= {};
|
771
802
|
const prevDeviceId = this.options.audioOutput.deviceId;
|
772
803
|
this.options.audioOutput.deviceId = deviceId;
|
804
|
+
deviceHasChanged = prevDeviceId !== deviceConstraint;
|
805
|
+
|
773
806
|
try {
|
774
|
-
|
775
|
-
|
776
|
-
|
807
|
+
if (this.options.expWebAudioMix) {
|
808
|
+
// @ts-expect-error setSinkId is not yet in the typescript type of AudioContext
|
809
|
+
this.audioContext?.setSinkId(deviceId);
|
810
|
+
} else {
|
811
|
+
await Promise.all(
|
812
|
+
Array.from(this.participants.values()).map((p) => p.setAudioOutput({ deviceId })),
|
813
|
+
);
|
814
|
+
}
|
777
815
|
} catch (e) {
|
778
816
|
this.options.audioOutput.deviceId = prevDeviceId;
|
779
817
|
throw e;
|
780
818
|
}
|
781
819
|
}
|
820
|
+
if (deviceHasChanged && success) {
|
821
|
+
this.activeDeviceMap.set(kind, deviceId);
|
822
|
+
this.emit(RoomEvent.ActiveDeviceChanged, kind, deviceId);
|
823
|
+
}
|
824
|
+
|
825
|
+
return success;
|
782
826
|
}
|
783
827
|
|
784
828
|
private setupLocalParticipantEvents() {
|
@@ -1717,4 +1761,5 @@ export type RoomEventCallbacks = {
|
|
1717
1761
|
signalConnected: () => void;
|
1718
1762
|
recordingStatusChanged: (recording: boolean) => void;
|
1719
1763
|
dcBufferStatusChanged: (isLow: boolean, kind: DataPacket_Kind) => void;
|
1764
|
+
activeDeviceChanged: (kind: MediaDeviceKind, deviceId: string) => void;
|
1720
1765
|
};
|
package/src/room/events.ts
CHANGED
@@ -278,6 +278,12 @@ export enum RoomEvent {
|
|
278
278
|
* args: (isLow: boolean, kind: [[DataPacket_Kind]])
|
279
279
|
*/
|
280
280
|
DCBufferStatusChanged = 'dcBufferStatusChanged',
|
281
|
+
|
282
|
+
/**
|
283
|
+
* Triggered by a call to room.switchActiveDevice
|
284
|
+
* args: (kind: MediaDeviceKind, deviceId: string)
|
285
|
+
*/
|
286
|
+
ActiveDeviceChanged = 'activeDeviceChanged',
|
281
287
|
}
|
282
288
|
|
283
289
|
export enum ParticipantEvent {
|
@@ -2,7 +2,7 @@ import log from '../../logger';
|
|
2
2
|
import { TrackEvent } from '../events';
|
3
3
|
import { computeBitrate, monitorFrequency } from '../stats';
|
4
4
|
import type { AudioSenderStats } from '../stats';
|
5
|
-
import { isWeb } from '../utils';
|
5
|
+
import { isWeb, unwrapConstraint } from '../utils';
|
6
6
|
import LocalTrack from './LocalTrack';
|
7
7
|
import { Track } from './Track';
|
8
8
|
import type { AudioCaptureOptions } from './options';
|
@@ -29,14 +29,15 @@ export default class LocalAudioTrack extends LocalTrack {
|
|
29
29
|
this.checkForSilence();
|
30
30
|
}
|
31
31
|
|
32
|
-
async setDeviceId(deviceId: ConstrainDOMString) {
|
32
|
+
async setDeviceId(deviceId: ConstrainDOMString): Promise<boolean> {
|
33
33
|
if (this.constraints.deviceId === deviceId) {
|
34
|
-
return;
|
34
|
+
return true;
|
35
35
|
}
|
36
36
|
this.constraints.deviceId = deviceId;
|
37
37
|
if (!this.isMuted) {
|
38
38
|
await this.restartTrack();
|
39
39
|
}
|
40
|
+
return unwrapConstraint(deviceId) === this.mediaStreamTrack.getSettings().deviceId;
|
40
41
|
}
|
41
42
|
|
42
43
|
async mute(): Promise<LocalAudioTrack> {
|
@@ -182,7 +182,7 @@ export default abstract class LocalTrack extends Track {
|
|
182
182
|
}
|
183
183
|
|
184
184
|
log.debug('replace MediaStreamTrack');
|
185
|
-
this.setMediaStreamTrack(track);
|
185
|
+
await this.setMediaStreamTrack(track);
|
186
186
|
// this must be synced *after* setting mediaStreamTrack above, since it relies
|
187
187
|
// on the previous state in order to cleanup
|
188
188
|
this.providedByUser = userProvidedTrack;
|
@@ -227,7 +227,7 @@ export default abstract class LocalTrack extends Track {
|
|
227
227
|
newTrack.addEventListener('ended', this.handleEnded);
|
228
228
|
log.debug('re-acquired MediaStreamTrack');
|
229
229
|
|
230
|
-
this.setMediaStreamTrack(newTrack);
|
230
|
+
await this.setMediaStreamTrack(newTrack);
|
231
231
|
this.constraints = constraints;
|
232
232
|
if (this.processor) {
|
233
233
|
const processor = this.processor;
|
@@ -5,7 +5,7 @@ import type { SubscribedCodec, SubscribedQuality } from '../../proto/livekit_rtc
|
|
5
5
|
import { ScalabilityMode } from '../participant/publishUtils';
|
6
6
|
import { computeBitrate, monitorFrequency } from '../stats';
|
7
7
|
import type { VideoSenderStats } from '../stats';
|
8
|
-
import { Mutex, isFireFox, isMobile, isWeb } from '../utils';
|
8
|
+
import { Mutex, isFireFox, isMobile, isWeb, unwrapConstraint } from '../utils';
|
9
9
|
import LocalTrack from './LocalTrack';
|
10
10
|
import { Track } from './Track';
|
11
11
|
import type { VideoCaptureOptions, VideoCodec } from './options';
|
@@ -182,9 +182,12 @@ export default class LocalVideoTrack extends LocalTrack {
|
|
182
182
|
this.setPublishingLayers(qualities);
|
183
183
|
}
|
184
184
|
|
185
|
-
async setDeviceId(deviceId: ConstrainDOMString) {
|
186
|
-
if (
|
187
|
-
|
185
|
+
async setDeviceId(deviceId: ConstrainDOMString): Promise<boolean> {
|
186
|
+
if (
|
187
|
+
this.constraints.deviceId === deviceId &&
|
188
|
+
this._mediaStreamTrack.getSettings().deviceId === unwrapConstraint(deviceId)
|
189
|
+
) {
|
190
|
+
return true;
|
188
191
|
}
|
189
192
|
this.constraints.deviceId = deviceId;
|
190
193
|
// when video is muted, underlying media stream track is stopped and
|
@@ -192,6 +195,7 @@ export default class LocalVideoTrack extends LocalTrack {
|
|
192
195
|
if (!this.isMuted) {
|
193
196
|
await this.restartTrack();
|
194
197
|
}
|
198
|
+
return unwrapConstraint(deviceId) === this._mediaStreamTrack.getSettings().deviceId;
|
195
199
|
}
|
196
200
|
|
197
201
|
async restartTrack(options?: VideoCaptureOptions) {
|
@@ -23,8 +23,6 @@ export default class RemoteVideoTrack extends RemoteTrack {
|
|
23
23
|
|
24
24
|
private lastDimensions?: Track.Dimensions;
|
25
25
|
|
26
|
-
private isObserved: boolean = false;
|
27
|
-
|
28
26
|
constructor(
|
29
27
|
mediaTrack: MediaStreamTrack,
|
30
28
|
sid: string,
|
@@ -39,12 +37,10 @@ export default class RemoteVideoTrack extends RemoteTrack {
|
|
39
37
|
return this.adaptiveStreamSettings !== undefined;
|
40
38
|
}
|
41
39
|
|
40
|
+
/**
|
41
|
+
* Note: When using adaptiveStream, you need to use remoteVideoTrack.attach() to add the track to a HTMLVideoElement, otherwise your video tracks might never start
|
42
|
+
*/
|
42
43
|
get mediaStreamTrack() {
|
43
|
-
if (this.isAdaptiveStream && !this.isObserved) {
|
44
|
-
log.warn(
|
45
|
-
'When using adaptiveStream, you need to use remoteVideoTrack.attach() to add the track to a HTMLVideoElement, otherwise your video tracks might never start',
|
46
|
-
);
|
47
|
-
}
|
48
44
|
return this._mediaStreamTrack;
|
49
45
|
}
|
50
46
|
|
@@ -106,7 +102,6 @@ export default class RemoteVideoTrack extends RemoteTrack {
|
|
106
102
|
// the tab comes into focus for the first time.
|
107
103
|
this.debouncedHandleResize();
|
108
104
|
this.updateVisibility();
|
109
|
-
this.isObserved = true;
|
110
105
|
} else {
|
111
106
|
log.warn('visibility resize observer not triggered');
|
112
107
|
}
|
package/src/room/utils.ts
CHANGED
@@ -455,3 +455,26 @@ export class Mutex {
|
|
455
455
|
return willUnlock;
|
456
456
|
}
|
457
457
|
}
|
458
|
+
|
459
|
+
export function unwrapConstraint(constraint: ConstrainDOMString): string {
|
460
|
+
if (typeof constraint === 'string') {
|
461
|
+
return constraint;
|
462
|
+
}
|
463
|
+
|
464
|
+
if (Array.isArray(constraint)) {
|
465
|
+
return constraint[0];
|
466
|
+
}
|
467
|
+
if (constraint.exact) {
|
468
|
+
if (Array.isArray(constraint.exact)) {
|
469
|
+
return constraint.exact[0];
|
470
|
+
}
|
471
|
+
return constraint.exact;
|
472
|
+
}
|
473
|
+
if (constraint.ideal) {
|
474
|
+
if (Array.isArray(constraint.ideal)) {
|
475
|
+
return constraint.ideal[0];
|
476
|
+
}
|
477
|
+
return constraint.ideal;
|
478
|
+
}
|
479
|
+
throw Error('could not unwrap constraint');
|
480
|
+
}
|