livekit-client 0.18.4 → 0.18.5
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 +130 -46
- 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/room/participant/LocalParticipant.d.ts.map +1 -1
- package/dist/room/participant/publishUtils.d.ts.map +1 -1
- package/dist/room/track/RemoteVideoTrack.d.ts +1 -0
- package/dist/room/track/RemoteVideoTrack.d.ts.map +1 -1
- package/dist/room/track/Track.d.ts +7 -3
- package/dist/room/track/Track.d.ts.map +1 -1
- package/dist/room/track/defaults.d.ts.map +1 -1
- package/dist/room/track/options.d.ts +9 -0
- package/dist/room/track/options.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/package.json +1 -1
- package/src/room/participant/LocalParticipant.ts +33 -9
- package/src/room/participant/publishUtils.ts +34 -5
- package/src/room/track/LocalAudioTrack.ts +2 -2
- package/src/room/track/LocalTrack.ts +17 -17
- package/src/room/track/LocalVideoTrack.ts +3 -3
- package/src/room/track/RemoteVideoTrack.ts +11 -2
- package/src/room/track/Track.ts +20 -13
- package/src/room/track/defaults.ts +1 -2
- package/src/room/track/options.ts +11 -0
- package/src/version.ts +1 -1
@@ -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,wBAAwB,EACxB,yBAAyB,EAEzB,mBAAmB,EAEpB,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;AAEpD,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,MAAM,CAAY;IAG1B,OAAO,CAAC,WAAW,CAAC,CAAc;IAElC,gBAAgB;gBACJ,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW;IAyBlF,IAAI,eAAe,IAAI,KAAK,GAAG,SAAS,CAEvC;IAED,IAAI,mBAAmB,IAAI,KAAK,GAAG,SAAS,CAE3C;IAED,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAOjE,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAO/D;;;;;OAKG;IACH,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAI9E;;;;;OAKG;IACH,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAIlF;;;OAGG;IACH,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IAInF,gBAAgB;IAChB,cAAc,CAAC,WAAW,EAAE,qBAAqB,GAAG,OAAO;IAS3D;;;;OAIG;YACW,eAAe;IAyD7B;;;OAGG;IACG,yBAAyB;IAwB/B;;;;OAIG;IACG,YAAY,CAAC,OAAO,CAAC,EAAE,wBAAwB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAqD7E;;;;OAIG;IACG,kBAAkB,CAAC,OAAO,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAsCzF;;;;OAIG;IACG,YAAY,CAChB,KAAK,EAAE,UAAU,GAAG,gBAAgB,EACpC,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,qBAAqB,CAAC;
|
1
|
+
{"version":3,"file":"LocalParticipant.d.ts","sourceRoot":"","sources":["../../../src/room/participant/LocalParticipant.ts"],"names":[],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"publishUtils.d.ts","sourceRoot":"","sources":["../../../src/room/participant/publishUtils.ts"],"names":[],"mappings":"AAEA,OAAO,eAAe,MAAM,0BAA0B,CAAC;AACvD,OAAO,eAAe,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAEL,mBAAmB,EACnB,aAAa,EACb,WAAW,EAGZ,MAAM,kBAAkB,CAAC;AAE1B,gBAAgB;AAChB,wBAAgB,sBAAsB,CACpC,gBAAgB,EAAE,gBAAgB,EAClC,WAAW,CAAC,EAAE,qBAAqB,GAClC,eAAe,GAAG,eAAe,CASnC;AAGD,eAAO,MAAM,UAAU,eAA8B,CAAC;AAGtD,eAAO,MAAM,SAAS,eAAgC,CAAC;AAGvD,eAAO,MAAM,kBAAkB,eAAoC,CAAC;AAGpE,eAAO,MAAM,0BAA0B,eAAyC,CAAC;AAGjF,eAAO,MAAM,yBAAyB,eAA6C,CAAC;AAGpF,eAAO,MAAM,yCAAyC,eAAgB,WAAW,kBAiBhF,CAAC;AAKF,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,OAAO,EACtB,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,mBAAmB,GAC5B,wBAAwB,EAAE,
|
1
|
+
{"version":3,"file":"publishUtils.d.ts","sourceRoot":"","sources":["../../../src/room/participant/publishUtils.ts"],"names":[],"mappings":"AAEA,OAAO,eAAe,MAAM,0BAA0B,CAAC;AACvD,OAAO,eAAe,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAEL,mBAAmB,EACnB,aAAa,EACb,WAAW,EAGZ,MAAM,kBAAkB,CAAC;AAE1B,gBAAgB;AAChB,wBAAgB,sBAAsB,CACpC,gBAAgB,EAAE,gBAAgB,EAClC,WAAW,CAAC,EAAE,qBAAqB,GAClC,eAAe,GAAG,eAAe,CASnC;AAGD,eAAO,MAAM,UAAU,eAA8B,CAAC;AAGtD,eAAO,MAAM,SAAS,eAAgC,CAAC;AAGvD,eAAO,MAAM,kBAAkB,eAAoC,CAAC;AAGpE,eAAO,MAAM,0BAA0B,eAAyC,CAAC;AAGjF,eAAO,MAAM,yBAAyB,eAA6C,CAAC;AAGpF,eAAO,MAAM,yCAAyC,eAAgB,WAAW,kBAiBhF,CAAC;AAKF,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,OAAO,EACtB,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,mBAAmB,GAC5B,wBAAwB,EAAE,CAyF5B;AAGD,wBAAgB,4BAA4B,CAC1C,aAAa,EAAE,OAAO,EACtB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,aAAa,CAgBf;AAGD,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,OAAO,EACtB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,WAAW,EAAE,CASf;AAGD,wBAAgB,sBAAsB,CACpC,aAAa,EAAE,OAAO,EACtB,QAAQ,EAAE,WAAW,GACpB,WAAW,EAAE,CAUf;AA0BD,gBAAgB;AAChB,wBAAgB,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,SAAS,6BAelE"}
|
@@ -10,6 +10,7 @@ export default class RemoteVideoTrack extends RemoteTrack {
|
|
10
10
|
private lastDimensions?;
|
11
11
|
constructor(mediaTrack: MediaStreamTrack, sid: string, receiver?: RTCRtpReceiver, adaptiveStreamSettings?: AdaptiveStreamSettings);
|
12
12
|
get isAdaptiveStream(): boolean;
|
13
|
+
get mediaStreamTrack(): MediaStreamTrack;
|
13
14
|
/** @internal */
|
14
15
|
setMuted(muted: boolean): void;
|
15
16
|
attach(): HTMLMediaElement;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"RemoteVideoTrack.d.ts","sourceRoot":"","sources":["../../../src/room/track/RemoteVideoTrack.ts"],"names":[],"mappings":"AASA,OAAO,WAAW,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAIjD,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,WAAW;IACvD,gBAAgB;IAChB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAE1B,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;IASjD,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED,gBAAgB;IAChB,QAAQ,CAAC,KAAK,EAAE,OAAO;IAavB,MAAM,IAAI,gBAAgB;IAC1B,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,gBAAgB;IAiCnD,MAAM,IAAI,gBAAgB,EAAE;IAC5B,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,gBAAgB;IAgBnD,SAAS,CAAC,eAAe,sBAevB;YAEY,gBAAgB;IA8B9B,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,uBAAuB,CAQ7B;cAEc,0BAA0B;IAQ1C,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAEnB;IAEnB,OAAO,CAAC,gBAAgB;IAuBxB,OAAO,CAAC,gBAAgB;CAwBzB"}
|
1
|
+
{"version":3,"file":"RemoteVideoTrack.d.ts","sourceRoot":"","sources":["../../../src/room/track/RemoteVideoTrack.ts"],"names":[],"mappings":"AASA,OAAO,WAAW,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAIjD,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,WAAW;IACvD,gBAAgB;IAChB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAE1B,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;IASjD,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED,IAAI,gBAAgB,qBAOnB;IAED,gBAAgB;IAChB,QAAQ,CAAC,KAAK,EAAE,OAAO;IAavB,MAAM,IAAI,gBAAgB;IAC1B,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,gBAAgB;IAiCnD,MAAM,IAAI,gBAAgB,EAAE;IAC5B,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,gBAAgB;IAgBnD,SAAS,CAAC,eAAe,sBAevB;YAEY,gBAAgB;IA8B9B,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,uBAAuB,CAQ7B;cAEc,0BAA0B;IAQ1C,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAEnB;IAEnB,OAAO,CAAC,gBAAgB;IAuBxB,OAAO,CAAC,gBAAgB;CAwBzB"}
|
@@ -4,20 +4,24 @@ import { StreamState as ProtoStreamState } from '../../proto/livekit_rtc';
|
|
4
4
|
declare const Track_base: new () => TypedEventEmitter<TrackEventCallbacks>;
|
5
5
|
export declare class Track extends Track_base {
|
6
6
|
kind: Track.Kind;
|
7
|
-
mediaStream?: MediaStream;
|
8
|
-
mediaStreamTrack: MediaStreamTrack;
|
9
7
|
attachedElements: HTMLMediaElement[];
|
10
8
|
isMuted: boolean;
|
11
9
|
source: Track.Source;
|
12
|
-
protected isInBackground: boolean;
|
13
10
|
/**
|
14
11
|
* sid is set after track is published to server, or if it's a remote track
|
15
12
|
*/
|
16
13
|
sid?: Track.SID;
|
14
|
+
/**
|
15
|
+
* @internal
|
16
|
+
*/
|
17
|
+
mediaStream?: MediaStream;
|
18
|
+
protected _mediaStreamTrack: MediaStreamTrack;
|
19
|
+
protected isInBackground: boolean;
|
17
20
|
protected _currentBitrate: number;
|
18
21
|
protected constructor(mediaTrack: MediaStreamTrack, kind: Track.Kind);
|
19
22
|
/** current receive bits per second */
|
20
23
|
get currentBitrate(): number;
|
24
|
+
get mediaStreamTrack(): MediaStreamTrack;
|
21
25
|
/**
|
22
26
|
* creates a new HTMLAudioElement or HTMLVideoElement, attaches to it, and returns it
|
23
27
|
*/
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Track.d.ts","sourceRoot":"","sources":["../../../src/room/track/Track.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,iBAAiB,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,WAAW,IAAI,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;oCAQpB,kBAAkB,mBAAmB,CAAC;AAA5F,qBAAa,KAAM,SAAQ,UAAkE;IAC3F,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;IAEjB,
|
1
|
+
{"version":3,"file":"Track.d.ts","sourceRoot":"","sources":["../../../src/room/track/Track.ts"],"names":[],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../src/room/track/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EAGnB,oBAAoB,EACpB,mBAAmB,EAEpB,MAAM,WAAW,CAAC;AAEnB,eAAO,MAAM,eAAe,EAAE,oBAM7B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../src/room/track/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EAGnB,oBAAoB,EACpB,mBAAmB,EAEpB,MAAM,WAAW,CAAC;AAEnB,eAAO,MAAM,eAAe,EAAE,oBAM7B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,mBAI3B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,mBAE3B,CAAC"}
|
@@ -26,6 +26,11 @@ export interface TrackPublishDefaults {
|
|
26
26
|
* at various resolutions.
|
27
27
|
*/
|
28
28
|
simulcast?: boolean;
|
29
|
+
/**
|
30
|
+
* scalability mode for svc codecs, defaults to 'L3T3'.
|
31
|
+
* for svc codecs, simulcast is disabled.
|
32
|
+
*/
|
33
|
+
scalabilityMode?: ScalabilityMode;
|
29
34
|
/**
|
30
35
|
* custom video simulcast layers for camera tracks, defaults to h180, h360, h540
|
31
36
|
* You can specify up to two custom layers that will be used instead of
|
@@ -150,6 +155,10 @@ export interface AudioPreset {
|
|
150
155
|
maxBitrate: number;
|
151
156
|
}
|
152
157
|
export declare type VideoCodec = 'vp8' | 'h264' | 'av1' | 'vp9';
|
158
|
+
/**
|
159
|
+
* scalability modes for svc, only supprot l3t3 now.
|
160
|
+
*/
|
161
|
+
export declare type ScalabilityMode = 'L3T3';
|
153
162
|
export declare namespace AudioPresets {
|
154
163
|
const telephone: AudioPreset;
|
155
164
|
const speech: AudioPreset;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../src/room/track/options.ts"],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../src/room/track/options.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
package/package.json
CHANGED
@@ -409,6 +409,18 @@ export default class LocalParticipant extends Participant {
|
|
409
409
|
// width and height should be defined for video
|
410
410
|
req.width = width ?? 0;
|
411
411
|
req.height = height ?? 0;
|
412
|
+
// for svc codecs, disable simulcast and enable scalability L3T3
|
413
|
+
// by default
|
414
|
+
if (track instanceof LocalVideoTrack) {
|
415
|
+
if (opts?.videoCodec === 'vp9' || opts?.videoCodec === 'av1') {
|
416
|
+
opts.simulcast = false;
|
417
|
+
opts.scalabilityMode = opts.scalabilityMode ?? 'L3T3';
|
418
|
+
} else {
|
419
|
+
// other codecs, unset scalability
|
420
|
+
opts.scalabilityMode = undefined;
|
421
|
+
}
|
422
|
+
}
|
423
|
+
|
412
424
|
encodings = computeVideoEncodings(
|
413
425
|
track.source === Track.Source.ScreenShare,
|
414
426
|
width,
|
@@ -440,6 +452,9 @@ export default class LocalParticipant extends Participant {
|
|
440
452
|
track.mediaStreamTrack,
|
441
453
|
transceiverInit,
|
442
454
|
);
|
455
|
+
if (opts.videoCodec) {
|
456
|
+
this.setPreferredCodec(transceiver, track.kind, opts.videoCodec);
|
457
|
+
}
|
443
458
|
this.engine.negotiate();
|
444
459
|
|
445
460
|
// store RTPSender
|
@@ -449,10 +464,6 @@ export default class LocalParticipant extends Participant {
|
|
449
464
|
} else if (track instanceof LocalAudioTrack) {
|
450
465
|
track.startMonitor();
|
451
466
|
}
|
452
|
-
|
453
|
-
if (opts.videoCodec) {
|
454
|
-
this.setPreferredCodec(transceiver, track.kind, opts.videoCodec);
|
455
|
-
}
|
456
467
|
this.addTrackPublication(publication);
|
457
468
|
|
458
469
|
// send event for publication
|
@@ -699,21 +710,34 @@ export default class LocalParticipant extends Participant {
|
|
699
710
|
}
|
700
711
|
const cap = RTCRtpSender.getCapabilities(kind);
|
701
712
|
if (!cap) return;
|
702
|
-
|
713
|
+
let selected: RTCRtpCodecCapability | undefined;
|
714
|
+
const codecs: RTCRtpCodecCapability[] = [];
|
715
|
+
cap.codecs.forEach((c) => {
|
703
716
|
const codec = c.mimeType.toLowerCase();
|
704
717
|
const matchesVideoCodec = codec === `video/${videoCodec}`;
|
705
718
|
|
719
|
+
if (selected !== undefined) {
|
720
|
+
codecs.push(c);
|
721
|
+
return;
|
722
|
+
}
|
706
723
|
// for h264 codecs that have sdpFmtpLine available, use only if the
|
707
724
|
// profile-level-id is 42e01f for cross-browser compatibility
|
708
725
|
if (videoCodec === 'h264' && c.sdpFmtpLine) {
|
709
|
-
|
726
|
+
if (matchesVideoCodec && c.sdpFmtpLine.includes('profile-level-id=42e01f')) {
|
727
|
+
selected = c;
|
728
|
+
return;
|
729
|
+
}
|
710
730
|
}
|
711
|
-
|
712
|
-
|
731
|
+
if (matchesVideoCodec || codec === 'audio/opus') {
|
732
|
+
selected = c;
|
733
|
+
return;
|
734
|
+
}
|
735
|
+
codecs.push(c);
|
713
736
|
});
|
714
737
|
if (selected && 'setCodecPreferences' in transceiver) {
|
715
738
|
// @ts-ignore
|
716
|
-
|
739
|
+
codecs.unshift(selected);
|
740
|
+
transceiver.setCodecPreferences(codecs);
|
717
741
|
}
|
718
742
|
}
|
719
743
|
|
@@ -75,9 +75,10 @@ export function computeVideoEncodings(
|
|
75
75
|
videoEncoding = options?.screenShareEncoding;
|
76
76
|
}
|
77
77
|
const useSimulcast = options?.simulcast;
|
78
|
+
const scalabilityMode = options?.scalabilityMode;
|
78
79
|
|
79
|
-
if ((!videoEncoding && !useSimulcast) || !width || !height) {
|
80
|
-
// when we aren't simulcasting, will need to return a single encoding without
|
80
|
+
if ((!videoEncoding && !useSimulcast && !scalabilityMode) || !width || !height) {
|
81
|
+
// when we aren't simulcasting or svc, will need to return a single encoding without
|
81
82
|
// capping bandwidth. we always require a encoding for dynacast
|
82
83
|
return [{}];
|
83
84
|
}
|
@@ -88,15 +89,43 @@ export function computeVideoEncodings(
|
|
88
89
|
log.debug('using video encoding', videoEncoding);
|
89
90
|
}
|
90
91
|
|
91
|
-
if (!useSimulcast) {
|
92
|
-
return [videoEncoding];
|
93
|
-
}
|
94
92
|
const original = new VideoPreset(
|
95
93
|
width,
|
96
94
|
height,
|
97
95
|
videoEncoding.maxBitrate,
|
98
96
|
videoEncoding.maxFramerate,
|
99
97
|
);
|
98
|
+
|
99
|
+
log.debug(`scalabilityMode ${scalabilityMode}`);
|
100
|
+
if (scalabilityMode) {
|
101
|
+
const encodings: RTCRtpEncodingParameters[] = [];
|
102
|
+
// svc use first encoding as the original, so we sort encoding from high to low
|
103
|
+
switch (scalabilityMode) {
|
104
|
+
case 'L3T3':
|
105
|
+
for (let i = 0; i < 3; i += 1) {
|
106
|
+
encodings.push({
|
107
|
+
rid: videoRids[2 - i],
|
108
|
+
scaleResolutionDownBy: 2 ** i,
|
109
|
+
maxBitrate: videoEncoding ? videoEncoding.maxBitrate / 2 ** i : 0,
|
110
|
+
/* @ts-ignore */
|
111
|
+
maxFramerate: original.encoding.maxFramerate,
|
112
|
+
/* @ts-ignore */
|
113
|
+
scalabilityMode: 'L3T3',
|
114
|
+
});
|
115
|
+
}
|
116
|
+
log.debug('encodings', encodings);
|
117
|
+
return encodings;
|
118
|
+
|
119
|
+
default:
|
120
|
+
// TODO : support other scalability modes
|
121
|
+
throw new Error(`unsupported scalabilityMode: ${scalabilityMode}`);
|
122
|
+
}
|
123
|
+
}
|
124
|
+
|
125
|
+
if (!useSimulcast) {
|
126
|
+
return [videoEncoding];
|
127
|
+
}
|
128
|
+
|
100
129
|
let presets: Array<VideoPreset> = [];
|
101
130
|
if (isScreenShare) {
|
102
131
|
presets =
|
@@ -34,7 +34,7 @@ export default class LocalAudioTrack extends LocalTrack {
|
|
34
34
|
if (this.source === Track.Source.Microphone && this.stopOnMute) {
|
35
35
|
log.debug('stopping mic track');
|
36
36
|
// also stop the track, so that microphone indicator is turned off
|
37
|
-
this.
|
37
|
+
this._mediaStreamTrack.stop();
|
38
38
|
}
|
39
39
|
await super.mute();
|
40
40
|
return this;
|
@@ -83,7 +83,7 @@ export default class LocalAudioTrack extends LocalTrack {
|
|
83
83
|
try {
|
84
84
|
stats = await this.getSenderStats();
|
85
85
|
} catch (e) {
|
86
|
-
log.error('could not get audio sender stats', e);
|
86
|
+
log.error('could not get audio sender stats', { error: e });
|
87
87
|
return;
|
88
88
|
}
|
89
89
|
|
@@ -21,14 +21,14 @@ export default class LocalTrack extends Track {
|
|
21
21
|
constraints?: MediaTrackConstraints,
|
22
22
|
) {
|
23
23
|
super(mediaTrack, kind);
|
24
|
-
this.
|
24
|
+
this._mediaStreamTrack.addEventListener('ended', this.handleEnded);
|
25
25
|
this.constraints = constraints ?? mediaTrack.getConstraints();
|
26
26
|
this.reacquireTrack = false;
|
27
27
|
this.wasMuted = false;
|
28
28
|
}
|
29
29
|
|
30
30
|
get id(): string {
|
31
|
-
return this.
|
31
|
+
return this._mediaStreamTrack.id;
|
32
32
|
}
|
33
33
|
|
34
34
|
get dimensions(): Track.Dimensions | undefined {
|
@@ -36,7 +36,7 @@ export default class LocalTrack extends Track {
|
|
36
36
|
return undefined;
|
37
37
|
}
|
38
38
|
|
39
|
-
const { width, height } = this.
|
39
|
+
const { width, height } = this._mediaStreamTrack.getSettings();
|
40
40
|
if (width && height) {
|
41
41
|
return {
|
42
42
|
width,
|
@@ -60,7 +60,7 @@ export default class LocalTrack extends Track {
|
|
60
60
|
if (this.source === Track.Source.ScreenShare) {
|
61
61
|
return;
|
62
62
|
}
|
63
|
-
const { deviceId, groupId } = this.
|
63
|
+
const { deviceId, groupId } = this._mediaStreamTrack.getSettings();
|
64
64
|
const kind = this.kind === Track.Kind.Audio ? 'audioinput' : 'videoinput';
|
65
65
|
|
66
66
|
return DeviceManager.getInstance().normalizeDeviceId(kind, deviceId, groupId);
|
@@ -83,19 +83,19 @@ export default class LocalTrack extends Track {
|
|
83
83
|
|
84
84
|
// detach
|
85
85
|
this.attachedElements.forEach((el) => {
|
86
|
-
detachTrack(this.
|
86
|
+
detachTrack(this._mediaStreamTrack, el);
|
87
87
|
});
|
88
|
-
this.
|
88
|
+
this._mediaStreamTrack.removeEventListener('ended', this.handleEnded);
|
89
89
|
// on Safari, the old audio track must be stopped before attempting to acquire
|
90
90
|
// the new track, otherwise the new track will stop with
|
91
91
|
// 'A MediaStreamTrack ended due to a capture failure`
|
92
|
-
this.
|
92
|
+
this._mediaStreamTrack.stop();
|
93
93
|
|
94
94
|
track.addEventListener('ended', this.handleEnded);
|
95
95
|
log.debug('replace MediaStreamTrack');
|
96
96
|
|
97
97
|
await this.sender.replaceTrack(track);
|
98
|
-
this.
|
98
|
+
this._mediaStreamTrack = track;
|
99
99
|
|
100
100
|
this.attachedElements.forEach((el) => {
|
101
101
|
attachToElement(track, el);
|
@@ -127,13 +127,13 @@ export default class LocalTrack extends Track {
|
|
127
127
|
|
128
128
|
// detach
|
129
129
|
this.attachedElements.forEach((el) => {
|
130
|
-
detachTrack(this.
|
130
|
+
detachTrack(this._mediaStreamTrack, el);
|
131
131
|
});
|
132
|
-
this.
|
132
|
+
this._mediaStreamTrack.removeEventListener('ended', this.handleEnded);
|
133
133
|
// on Safari, the old audio track must be stopped before attempting to acquire
|
134
134
|
// the new track, otherwise the new track will stop with
|
135
135
|
// 'A MediaStreamTrack ended due to a capture failure`
|
136
|
-
this.
|
136
|
+
this._mediaStreamTrack.stop();
|
137
137
|
|
138
138
|
// create new track and attach
|
139
139
|
const mediaStream = await navigator.mediaDevices.getUserMedia(streamConstraints);
|
@@ -142,7 +142,7 @@ export default class LocalTrack extends Track {
|
|
142
142
|
log.debug('re-acquired MediaStreamTrack');
|
143
143
|
|
144
144
|
await this.sender.replaceTrack(newTrack);
|
145
|
-
this.
|
145
|
+
this._mediaStreamTrack = newTrack;
|
146
146
|
|
147
147
|
this.attachedElements.forEach((el) => {
|
148
148
|
attachToElement(newTrack, el);
|
@@ -159,15 +159,15 @@ export default class LocalTrack extends Track {
|
|
159
159
|
}
|
160
160
|
|
161
161
|
this.isMuted = muted;
|
162
|
-
this.
|
162
|
+
this._mediaStreamTrack.enabled = !muted;
|
163
163
|
this.emit(muted ? TrackEvent.Muted : TrackEvent.Unmuted, this);
|
164
164
|
}
|
165
165
|
|
166
166
|
protected get needsReAcquisition(): boolean {
|
167
167
|
return (
|
168
|
-
this.
|
169
|
-
this.
|
170
|
-
!this.
|
168
|
+
this._mediaStreamTrack.readyState !== 'live' ||
|
169
|
+
this._mediaStreamTrack.muted ||
|
170
|
+
!this._mediaStreamTrack.enabled ||
|
171
171
|
this.reacquireTrack
|
172
172
|
);
|
173
173
|
}
|
@@ -224,6 +224,6 @@ export default class LocalTrack extends Track {
|
|
224
224
|
this._isUpstreamPaused = false;
|
225
225
|
this.emit(TrackEvent.UpstreamResumed, this);
|
226
226
|
|
227
|
-
await this.sender.replaceTrack(this.
|
227
|
+
await this.sender.replaceTrack(this._mediaStreamTrack);
|
228
228
|
}
|
229
229
|
}
|
@@ -44,7 +44,7 @@ export default class LocalVideoTrack extends LocalTrack {
|
|
44
44
|
|
45
45
|
stop() {
|
46
46
|
this.sender = undefined;
|
47
|
-
this.
|
47
|
+
this._mediaStreamTrack.getConstraints();
|
48
48
|
super.stop();
|
49
49
|
}
|
50
50
|
|
@@ -52,7 +52,7 @@ export default class LocalVideoTrack extends LocalTrack {
|
|
52
52
|
if (this.source === Track.Source.Camera) {
|
53
53
|
log.debug('stopping camera track');
|
54
54
|
// also stop the track, so that camera indicator is turned off
|
55
|
-
this.
|
55
|
+
this._mediaStreamTrack.stop();
|
56
56
|
}
|
57
57
|
await super.mute();
|
58
58
|
return this;
|
@@ -243,7 +243,7 @@ export default class LocalVideoTrack extends LocalTrack {
|
|
243
243
|
await super.handleAppVisibilityChanged();
|
244
244
|
if (!isMobile()) return;
|
245
245
|
if (this.isInBackground && this.source === Track.Source.Camera) {
|
246
|
-
this.
|
246
|
+
this._mediaStreamTrack.enabled = false;
|
247
247
|
}
|
248
248
|
}
|
249
249
|
}
|
@@ -44,6 +44,15 @@ export default class RemoteVideoTrack extends RemoteTrack {
|
|
44
44
|
return this.adaptiveStreamSettings !== undefined;
|
45
45
|
}
|
46
46
|
|
47
|
+
get mediaStreamTrack() {
|
48
|
+
if (this.isAdaptiveStream && this.attachedElements.length === 0) {
|
49
|
+
throw Error(
|
50
|
+
'When using adaptiveStream, you need to use remoteVideoTrack.attach() to add the track to a HTMLVideoElement, direct usage of mediaStreamTrack is unsupported in this case',
|
51
|
+
);
|
52
|
+
}
|
53
|
+
return this._mediaStreamTrack;
|
54
|
+
}
|
55
|
+
|
47
56
|
/** @internal */
|
48
57
|
setMuted(muted: boolean) {
|
49
58
|
super.setMuted(muted);
|
@@ -51,9 +60,9 @@ export default class RemoteVideoTrack extends RemoteTrack {
|
|
51
60
|
this.attachedElements.forEach((element) => {
|
52
61
|
// detach or attach
|
53
62
|
if (muted) {
|
54
|
-
detachTrack(this.
|
63
|
+
detachTrack(this._mediaStreamTrack, element);
|
55
64
|
} else {
|
56
|
-
attachToElement(this.
|
65
|
+
attachToElement(this._mediaStreamTrack, element);
|
57
66
|
}
|
58
67
|
});
|
59
68
|
}
|
package/src/room/track/Track.ts
CHANGED
@@ -12,29 +12,32 @@ const recycledElements: Array<HTMLAudioElement> = [];
|
|
12
12
|
export class Track extends (EventEmitter as new () => TypedEventEmitter<TrackEventCallbacks>) {
|
13
13
|
kind: Track.Kind;
|
14
14
|
|
15
|
-
mediaStream?: MediaStream;
|
16
|
-
|
17
|
-
mediaStreamTrack: MediaStreamTrack;
|
18
|
-
|
19
15
|
attachedElements: HTMLMediaElement[] = [];
|
20
16
|
|
21
17
|
isMuted: boolean = false;
|
22
18
|
|
23
19
|
source: Track.Source;
|
24
20
|
|
25
|
-
protected isInBackground: boolean;
|
26
|
-
|
27
21
|
/**
|
28
22
|
* sid is set after track is published to server, or if it's a remote track
|
29
23
|
*/
|
30
24
|
sid?: Track.SID;
|
31
25
|
|
26
|
+
/**
|
27
|
+
* @internal
|
28
|
+
*/
|
29
|
+
mediaStream?: MediaStream;
|
30
|
+
|
31
|
+
protected _mediaStreamTrack: MediaStreamTrack;
|
32
|
+
|
33
|
+
protected isInBackground: boolean;
|
34
|
+
|
32
35
|
protected _currentBitrate: number = 0;
|
33
36
|
|
34
37
|
protected constructor(mediaTrack: MediaStreamTrack, kind: Track.Kind) {
|
35
38
|
super();
|
36
39
|
this.kind = kind;
|
37
|
-
this.
|
40
|
+
this._mediaStreamTrack = mediaTrack;
|
38
41
|
this.source = Track.Source.Unknown;
|
39
42
|
if (isWeb()) {
|
40
43
|
this.isInBackground = document.visibilityState === 'hidden';
|
@@ -49,6 +52,10 @@ export class Track extends (EventEmitter as new () => TypedEventEmitter<TrackEve
|
|
49
52
|
return this._currentBitrate;
|
50
53
|
}
|
51
54
|
|
55
|
+
get mediaStreamTrack() {
|
56
|
+
return this._mediaStreamTrack;
|
57
|
+
}
|
58
|
+
|
52
59
|
/**
|
53
60
|
* creates a new HTMLAudioElement or HTMLVideoElement, attaches to it, and returns it
|
54
61
|
*/
|
@@ -87,7 +94,7 @@ export class Track extends (EventEmitter as new () => TypedEventEmitter<TrackEve
|
|
87
94
|
// even if we believe it's already attached to the element, it's possible
|
88
95
|
// the element's srcObject was set to something else out of band.
|
89
96
|
// we'll want to re-attach it in that case
|
90
|
-
attachToElement(this.
|
97
|
+
attachToElement(this._mediaStreamTrack, element);
|
91
98
|
|
92
99
|
if (element instanceof HTMLAudioElement) {
|
93
100
|
// manually play audio to detect audio playback status
|
@@ -118,7 +125,7 @@ export class Track extends (EventEmitter as new () => TypedEventEmitter<TrackEve
|
|
118
125
|
detach(element?: HTMLMediaElement): HTMLMediaElement | HTMLMediaElement[] {
|
119
126
|
// detach from a single element
|
120
127
|
if (element) {
|
121
|
-
detachTrack(this.
|
128
|
+
detachTrack(this._mediaStreamTrack, element);
|
122
129
|
const idx = this.attachedElements.indexOf(element);
|
123
130
|
if (idx >= 0) {
|
124
131
|
this.attachedElements.splice(idx, 1);
|
@@ -130,7 +137,7 @@ export class Track extends (EventEmitter as new () => TypedEventEmitter<TrackEve
|
|
130
137
|
|
131
138
|
const detached: HTMLMediaElement[] = [];
|
132
139
|
this.attachedElements.forEach((elm) => {
|
133
|
-
detachTrack(this.
|
140
|
+
detachTrack(this._mediaStreamTrack, elm);
|
134
141
|
detached.push(elm);
|
135
142
|
this.recycleElement(elm);
|
136
143
|
this.emit(TrackEvent.ElementDetached, elm);
|
@@ -142,18 +149,18 @@ export class Track extends (EventEmitter as new () => TypedEventEmitter<TrackEve
|
|
142
149
|
}
|
143
150
|
|
144
151
|
stop() {
|
145
|
-
this.
|
152
|
+
this._mediaStreamTrack.stop();
|
146
153
|
if (isWeb()) {
|
147
154
|
document.removeEventListener('visibilitychange', this.appVisibilityChangedListener);
|
148
155
|
}
|
149
156
|
}
|
150
157
|
|
151
158
|
protected enable() {
|
152
|
-
this.
|
159
|
+
this._mediaStreamTrack.enabled = true;
|
153
160
|
}
|
154
161
|
|
155
162
|
protected disable() {
|
156
|
-
this.
|
163
|
+
this._mediaStreamTrack.enabled = false;
|
157
164
|
}
|
158
165
|
|
159
166
|
private recycleElement(element: HTMLMediaElement) {
|
@@ -17,11 +17,10 @@ export const publishDefaults: TrackPublishDefaults = {
|
|
17
17
|
|
18
18
|
export const audioDefaults: AudioCaptureOptions = {
|
19
19
|
autoGainControl: true,
|
20
|
-
channelCount: 1,
|
21
20
|
echoCancellation: true,
|
22
21
|
noiseSuppression: true,
|
23
22
|
};
|
24
23
|
|
25
24
|
export const videoDefaults: VideoCaptureOptions = {
|
26
|
-
resolution: VideoPresets.
|
25
|
+
resolution: VideoPresets.h720.resolution,
|
27
26
|
};
|
@@ -33,6 +33,12 @@ export interface TrackPublishDefaults {
|
|
33
33
|
*/
|
34
34
|
simulcast?: boolean;
|
35
35
|
|
36
|
+
/**
|
37
|
+
* scalability mode for svc codecs, defaults to 'L3T3'.
|
38
|
+
* for svc codecs, simulcast is disabled.
|
39
|
+
*/
|
40
|
+
scalabilityMode?: ScalabilityMode;
|
41
|
+
|
36
42
|
/**
|
37
43
|
* custom video simulcast layers for camera tracks, defaults to h180, h360, h540
|
38
44
|
* You can specify up to two custom layers that will be used instead of
|
@@ -200,6 +206,11 @@ export interface AudioPreset {
|
|
200
206
|
|
201
207
|
export type VideoCodec = 'vp8' | 'h264' | 'av1' | 'vp9';
|
202
208
|
|
209
|
+
/**
|
210
|
+
* scalability modes for svc, only supprot l3t3 now.
|
211
|
+
*/
|
212
|
+
export type ScalabilityMode = 'L3T3';
|
213
|
+
|
203
214
|
export namespace AudioPresets {
|
204
215
|
export const telephone: AudioPreset = {
|
205
216
|
maxBitrate: 12_000,
|
package/src/version.ts
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
export const version = '0.18.
|
1
|
+
export const version = '0.18.5';
|
2
2
|
export const protocolVersion = 7;
|