livekit-client 0.14.0 → 0.15.0
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/.github/workflows/{lint.yaml → test.yaml} +7 -4
- package/README.md +27 -12
- package/dist/api/SignalClient.d.ts +4 -31
- package/dist/api/SignalClient.js +25 -7
- package/dist/api/SignalClient.js.map +1 -1
- package/dist/connect.d.ts +1 -1
- package/dist/connect.js +70 -56
- package/dist/connect.js.map +1 -1
- package/dist/index.d.ts +3 -4
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +10 -0
- package/dist/logger.js +14 -0
- package/dist/logger.js.map +1 -1
- package/dist/options.d.ts +77 -12
- package/dist/options.js +0 -10
- package/dist/options.js.map +1 -1
- package/dist/proto/livekit_models.d.ts +28 -1
- package/dist/proto/livekit_models.js +194 -3
- package/dist/proto/livekit_models.js.map +1 -1
- package/dist/proto/livekit_rtc.d.ts +49 -7
- package/dist/proto/livekit_rtc.js +303 -28
- package/dist/proto/livekit_rtc.js.map +1 -1
- package/dist/room/RTCEngine.d.ts +2 -2
- package/dist/room/RTCEngine.js +6 -4
- package/dist/room/RTCEngine.js.map +1 -1
- package/dist/room/Room.d.ts +12 -14
- package/dist/room/Room.js +78 -45
- package/dist/room/Room.js.map +1 -1
- package/dist/room/events.d.ts +98 -1
- package/dist/room/events.js +97 -0
- package/dist/room/events.js.map +1 -1
- package/dist/room/participant/LocalParticipant.d.ts +27 -9
- package/dist/room/participant/LocalParticipant.js +194 -155
- package/dist/room/participant/LocalParticipant.js.map +1 -1
- package/dist/room/participant/Participant.js +6 -2
- package/dist/room/participant/Participant.js.map +1 -1
- package/dist/room/participant/RemoteParticipant.d.ts +1 -1
- package/dist/room/participant/RemoteParticipant.js +6 -5
- package/dist/room/participant/RemoteParticipant.js.map +1 -1
- package/dist/room/participant/publishUtils.d.ts +11 -0
- package/dist/room/participant/publishUtils.js +148 -0
- package/dist/room/participant/publishUtils.js.map +1 -0
- package/dist/room/participant/publishUtils.test.d.ts +1 -0
- package/dist/room/participant/publishUtils.test.js +79 -0
- package/dist/room/participant/publishUtils.test.js.map +1 -0
- package/dist/room/track/LocalAudioTrack.d.ts +4 -3
- package/dist/room/track/LocalAudioTrack.js +5 -3
- package/dist/room/track/LocalAudioTrack.js.map +1 -1
- package/dist/room/track/LocalTrack.d.ts +1 -3
- package/dist/room/track/LocalTrack.js +2 -49
- package/dist/room/track/LocalTrack.js.map +1 -1
- package/dist/room/track/LocalVideoTrack.d.ts +6 -4
- package/dist/room/track/LocalVideoTrack.js +41 -12
- package/dist/room/track/LocalVideoTrack.js.map +1 -1
- package/dist/room/track/LocalVideoTrack.test.d.ts +1 -0
- package/dist/room/track/LocalVideoTrack.test.js +68 -0
- package/dist/room/track/LocalVideoTrack.test.js.map +1 -0
- package/dist/room/track/RemoteTrackPublication.d.ts +10 -4
- package/dist/room/track/RemoteTrackPublication.js +60 -4
- package/dist/room/track/RemoteTrackPublication.js.map +1 -1
- package/dist/room/track/RemoteVideoTrack.d.ts +15 -1
- package/dist/room/track/RemoteVideoTrack.js +98 -1
- package/dist/room/track/RemoteVideoTrack.js.map +1 -1
- package/dist/room/track/Track.d.ts +15 -2
- package/dist/room/track/Track.js +6 -2
- package/dist/room/track/Track.js.map +1 -1
- package/dist/room/track/options.d.ts +15 -65
- package/dist/room/track/options.js +14 -13
- package/dist/room/track/options.js.map +1 -1
- package/dist/room/track/utils.d.ts +3 -0
- package/dist/room/track/utils.js +68 -0
- package/dist/room/track/utils.js.map +1 -0
- package/dist/room/track/utils.test.d.ts +1 -0
- package/dist/room/track/utils.test.js +85 -0
- package/dist/room/track/utils.test.js.map +1 -0
- package/dist/room/utils.d.ts +6 -0
- package/dist/room/utils.js +25 -1
- package/dist/room/utils.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/example/index.html +183 -178
- package/example/sample.ts +410 -326
- package/example/styles.css +144 -0
- package/example/webpack.config.js +1 -1
- package/jest.config.js +6 -0
- package/package.json +9 -6
- package/tsconfig.eslint.json +8 -1
- package/dist/room/defaults.d.ts +0 -5
- package/dist/room/defaults.js +0 -32
- package/dist/room/defaults.js.map +0 -1
- package/dist/room/track/create.d.ts +0 -25
- package/dist/room/track/create.js +0 -170
- package/dist/room/track/create.js.map +0 -1
@@ -48,7 +48,7 @@ class RemoteParticipant extends Participant_1.default {
|
|
48
48
|
}
|
49
49
|
}
|
50
50
|
/** @internal */
|
51
|
-
addSubscribedMediaTrack(mediaTrack, sid, receiver, triesLeft) {
|
51
|
+
addSubscribedMediaTrack(mediaTrack, sid, receiver, autoManageVideo, triesLeft) {
|
52
52
|
// find the track publication
|
53
53
|
// it's possible for the media track to arrive before participant info
|
54
54
|
let publication = this.getTrackPublication(sid);
|
@@ -75,22 +75,21 @@ class RemoteParticipant extends Participant_1.default {
|
|
75
75
|
if (triesLeft === undefined)
|
76
76
|
triesLeft = 20;
|
77
77
|
setTimeout(() => {
|
78
|
-
this.addSubscribedMediaTrack(mediaTrack, sid, receiver, triesLeft - 1);
|
78
|
+
this.addSubscribedMediaTrack(mediaTrack, sid, receiver, autoManageVideo, triesLeft - 1);
|
79
79
|
}, 150);
|
80
80
|
return;
|
81
81
|
}
|
82
82
|
const isVideo = mediaTrack.kind === 'video';
|
83
83
|
let track;
|
84
84
|
if (isVideo) {
|
85
|
-
track = new RemoteVideoTrack_1.default(mediaTrack, sid, receiver);
|
85
|
+
track = new RemoteVideoTrack_1.default(mediaTrack, sid, receiver, autoManageVideo);
|
86
86
|
}
|
87
87
|
else {
|
88
88
|
track = new RemoteAudioTrack_1.default(mediaTrack, sid, receiver);
|
89
89
|
}
|
90
90
|
track.start();
|
91
91
|
publication.setTrack(track);
|
92
|
-
// set track
|
93
|
-
track.name = publication.trackName;
|
92
|
+
// set track info
|
94
93
|
track.sid = publication.trackSid;
|
95
94
|
track.source = publication.source;
|
96
95
|
// keep publication's muted status
|
@@ -101,6 +100,7 @@ class RemoteParticipant extends Participant_1.default {
|
|
101
100
|
publication.track = undefined;
|
102
101
|
}
|
103
102
|
this.emit(events_1.ParticipantEvent.TrackUnsubscribed, track, publication);
|
103
|
+
this.removeAllListeners(events_1.ParticipantEvent.TrackUnsubscribed);
|
104
104
|
};
|
105
105
|
this.emit(events_1.ParticipantEvent.TrackSubscribed, track, publication);
|
106
106
|
return publication;
|
@@ -180,6 +180,7 @@ class RemoteParticipant extends Participant_1.default {
|
|
180
180
|
// always send unsubscribed, since apps may rely on this
|
181
181
|
if (isSubscribed) {
|
182
182
|
this.emit(events_1.ParticipantEvent.TrackUnsubscribed, track, publication);
|
183
|
+
this.removeAllListeners(events_1.ParticipantEvent.TrackUnsubscribed);
|
183
184
|
}
|
184
185
|
}
|
185
186
|
if (sendUnpublish) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"RemoteParticipant.js","sourceRoot":"","sources":["../../../src/room/participant/RemoteParticipant.ts"],"names":[],"mappings":";;;;;
|
1
|
+
{"version":3,"file":"RemoteParticipant.js","sourceRoot":"","sources":["../../../src/room/participant/RemoteParticipant.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import LocalAudioTrack from '../track/LocalAudioTrack';
|
2
|
+
import LocalVideoTrack from '../track/LocalVideoTrack';
|
3
|
+
import { TrackPublishOptions, VideoEncoding, VideoPreset } from '../track/options';
|
4
|
+
/** @internal */
|
5
|
+
export declare function mediaTrackToLocalTrack(mediaStreamTrack: MediaStreamTrack, constraints?: MediaTrackConstraints): LocalVideoTrack | LocalAudioTrack;
|
6
|
+
export declare const presets169: VideoPreset[];
|
7
|
+
export declare const presets43: VideoPreset[];
|
8
|
+
export declare const presetsScreenShare: VideoPreset[];
|
9
|
+
export declare function computeVideoEncodings(isScreenShare: boolean, width?: number, height?: number, options?: TrackPublishOptions): RTCRtpEncodingParameters[] | undefined;
|
10
|
+
export declare function determineAppropriateEncoding(isScreenShare: boolean, width: number, height: number): VideoEncoding;
|
11
|
+
export declare function presetsForResolution(isScreenShare: boolean, width: number, height: number): VideoPreset[];
|
@@ -0,0 +1,148 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.presetsForResolution = exports.determineAppropriateEncoding = exports.computeVideoEncodings = exports.presetsScreenShare = exports.presets43 = exports.presets169 = exports.mediaTrackToLocalTrack = void 0;
|
7
|
+
const logger_1 = __importDefault(require("../../logger"));
|
8
|
+
const errors_1 = require("../errors");
|
9
|
+
const LocalAudioTrack_1 = __importDefault(require("../track/LocalAudioTrack"));
|
10
|
+
const LocalVideoTrack_1 = __importDefault(require("../track/LocalVideoTrack"));
|
11
|
+
const options_1 = require("../track/options");
|
12
|
+
/** @internal */
|
13
|
+
function mediaTrackToLocalTrack(mediaStreamTrack, constraints) {
|
14
|
+
switch (mediaStreamTrack.kind) {
|
15
|
+
case 'audio':
|
16
|
+
return new LocalAudioTrack_1.default(mediaStreamTrack, constraints);
|
17
|
+
case 'video':
|
18
|
+
return new LocalVideoTrack_1.default(mediaStreamTrack, constraints);
|
19
|
+
default:
|
20
|
+
throw new errors_1.TrackInvalidError(`unsupported track type: ${mediaStreamTrack.kind}`);
|
21
|
+
}
|
22
|
+
}
|
23
|
+
exports.mediaTrackToLocalTrack = mediaTrackToLocalTrack;
|
24
|
+
/* @internal */
|
25
|
+
exports.presets169 = [
|
26
|
+
options_1.VideoPresets.qvga,
|
27
|
+
options_1.VideoPresets.vga,
|
28
|
+
options_1.VideoPresets.qhd,
|
29
|
+
options_1.VideoPresets.hd,
|
30
|
+
options_1.VideoPresets.fhd,
|
31
|
+
];
|
32
|
+
/* @internal */
|
33
|
+
exports.presets43 = [
|
34
|
+
options_1.VideoPresets43.qvga,
|
35
|
+
options_1.VideoPresets43.vga,
|
36
|
+
options_1.VideoPresets43.qhd,
|
37
|
+
options_1.VideoPresets43.hd,
|
38
|
+
options_1.VideoPresets43.fhd,
|
39
|
+
];
|
40
|
+
/* @internal */
|
41
|
+
exports.presetsScreenShare = [
|
42
|
+
options_1.ScreenSharePresets.vga,
|
43
|
+
options_1.ScreenSharePresets.hd_8,
|
44
|
+
options_1.ScreenSharePresets.hd_15,
|
45
|
+
options_1.ScreenSharePresets.fhd_15,
|
46
|
+
options_1.ScreenSharePresets.fhd_30,
|
47
|
+
];
|
48
|
+
const videoRids = ['q', 'h', 'f'];
|
49
|
+
/* @internal */
|
50
|
+
function computeVideoEncodings(isScreenShare, width, height, options) {
|
51
|
+
let videoEncoding = options === null || options === void 0 ? void 0 : options.videoEncoding;
|
52
|
+
if (isScreenShare) {
|
53
|
+
videoEncoding = options === null || options === void 0 ? void 0 : options.screenShareEncoding;
|
54
|
+
}
|
55
|
+
const useSimulcast = !isScreenShare && (options === null || options === void 0 ? void 0 : options.simulcast);
|
56
|
+
if ((!videoEncoding && !useSimulcast) || !width || !height) {
|
57
|
+
// don't set encoding when we are not simulcasting and user isn't restricting
|
58
|
+
// encoding parameters
|
59
|
+
return;
|
60
|
+
}
|
61
|
+
if (!videoEncoding) {
|
62
|
+
// find the right encoding based on width/height
|
63
|
+
videoEncoding = determineAppropriateEncoding(isScreenShare, width, height);
|
64
|
+
logger_1.default.debug('using video encoding', videoEncoding);
|
65
|
+
}
|
66
|
+
if (!useSimulcast) {
|
67
|
+
return [videoEncoding];
|
68
|
+
}
|
69
|
+
const presets = presetsForResolution(isScreenShare, width, height);
|
70
|
+
let midPreset;
|
71
|
+
const lowPreset = presets[0];
|
72
|
+
if (presets.length > 1) {
|
73
|
+
[, midPreset] = presets;
|
74
|
+
}
|
75
|
+
const original = new options_1.VideoPreset(width, height, videoEncoding.maxBitrate, videoEncoding.maxFramerate);
|
76
|
+
// NOTE:
|
77
|
+
// 1. Ordering of these encodings is important. Chrome seems
|
78
|
+
// to use the index into encodings to decide which layer
|
79
|
+
// to disable when CPU constrained.
|
80
|
+
// So encodings should be ordered in increasing spatial
|
81
|
+
// resolution order.
|
82
|
+
// 2. ion-sfu translates rids into layers. So, all encodings
|
83
|
+
// should have the base layer `q` and then more added
|
84
|
+
// based on other conditions.
|
85
|
+
const size = Math.max(width, height);
|
86
|
+
if (size >= 960 && midPreset) {
|
87
|
+
return encodingsFromPresets(width, height, [
|
88
|
+
lowPreset, midPreset, original,
|
89
|
+
]);
|
90
|
+
}
|
91
|
+
if (size >= 500) {
|
92
|
+
return encodingsFromPresets(width, height, [
|
93
|
+
lowPreset, original,
|
94
|
+
]);
|
95
|
+
}
|
96
|
+
return encodingsFromPresets(width, height, [
|
97
|
+
original,
|
98
|
+
]);
|
99
|
+
}
|
100
|
+
exports.computeVideoEncodings = computeVideoEncodings;
|
101
|
+
/* @internal */
|
102
|
+
function determineAppropriateEncoding(isScreenShare, width, height) {
|
103
|
+
const presets = presetsForResolution(isScreenShare, width, height);
|
104
|
+
let { encoding } = presets[0];
|
105
|
+
// handle portrait by swapping dimensions
|
106
|
+
const size = Math.max(width, height);
|
107
|
+
for (let i = 0; i < presets.length; i += 1) {
|
108
|
+
const preset = presets[i];
|
109
|
+
encoding = preset.encoding;
|
110
|
+
if (preset.width >= size) {
|
111
|
+
break;
|
112
|
+
}
|
113
|
+
}
|
114
|
+
return encoding;
|
115
|
+
}
|
116
|
+
exports.determineAppropriateEncoding = determineAppropriateEncoding;
|
117
|
+
/* @internal */
|
118
|
+
function presetsForResolution(isScreenShare, width, height) {
|
119
|
+
if (isScreenShare) {
|
120
|
+
return exports.presetsScreenShare;
|
121
|
+
}
|
122
|
+
const aspect = width > height ? width / height : height / width;
|
123
|
+
if (Math.abs(aspect - 16.0 / 9) < Math.abs(aspect - 4.0 / 3)) {
|
124
|
+
return exports.presets169;
|
125
|
+
}
|
126
|
+
return exports.presets43;
|
127
|
+
}
|
128
|
+
exports.presetsForResolution = presetsForResolution;
|
129
|
+
// presets should be ordered by low, medium, high
|
130
|
+
function encodingsFromPresets(width, height, presets) {
|
131
|
+
const encodings = [];
|
132
|
+
presets.forEach((preset, idx) => {
|
133
|
+
if (idx >= videoRids.length) {
|
134
|
+
return;
|
135
|
+
}
|
136
|
+
const size = Math.min(width, height);
|
137
|
+
const rid = videoRids[idx];
|
138
|
+
encodings.push({
|
139
|
+
rid,
|
140
|
+
scaleResolutionDownBy: size / preset.height,
|
141
|
+
maxBitrate: preset.encoding.maxBitrate,
|
142
|
+
/* @ts-ignore */
|
143
|
+
maxFramerate: preset.encoding.maxFramerate,
|
144
|
+
});
|
145
|
+
});
|
146
|
+
return encodings;
|
147
|
+
}
|
148
|
+
//# sourceMappingURL=publishUtils.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"publishUtils.js","sourceRoot":"","sources":["../../../src/room/participant/publishUtils.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,79 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const options_1 = require("../track/options");
|
4
|
+
const publishUtils_1 = require("./publishUtils");
|
5
|
+
describe('presetsForResolution', () => {
|
6
|
+
it('handles screenshare', () => {
|
7
|
+
expect(publishUtils_1.presetsForResolution(true, 600, 300)).toEqual(publishUtils_1.presetsScreenShare);
|
8
|
+
});
|
9
|
+
it('handles landscape', () => {
|
10
|
+
expect(publishUtils_1.presetsForResolution(false, 600, 300)).toEqual(publishUtils_1.presets169);
|
11
|
+
expect(publishUtils_1.presetsForResolution(false, 500, 500)).toEqual(publishUtils_1.presets43);
|
12
|
+
});
|
13
|
+
it('handles portrait', () => {
|
14
|
+
expect(publishUtils_1.presetsForResolution(false, 300, 600)).toEqual(publishUtils_1.presets169);
|
15
|
+
expect(publishUtils_1.presetsForResolution(false, 500, 500)).toEqual(publishUtils_1.presets43);
|
16
|
+
});
|
17
|
+
});
|
18
|
+
describe('determineAppropriateEncoding', () => {
|
19
|
+
it('uses higher encoding', () => {
|
20
|
+
expect(publishUtils_1.determineAppropriateEncoding(false, 600, 300))
|
21
|
+
.toEqual(options_1.VideoPresets.vga.encoding);
|
22
|
+
});
|
23
|
+
it('handles portrait', () => {
|
24
|
+
expect(publishUtils_1.determineAppropriateEncoding(false, 300, 600))
|
25
|
+
.toEqual(options_1.VideoPresets.vga.encoding);
|
26
|
+
});
|
27
|
+
});
|
28
|
+
describe('computeVideoEncodings', () => {
|
29
|
+
it('handles non-simulcast', () => {
|
30
|
+
const encodings = publishUtils_1.computeVideoEncodings(false, 640, 480, {
|
31
|
+
simulcast: false,
|
32
|
+
});
|
33
|
+
expect(encodings).toBeUndefined();
|
34
|
+
});
|
35
|
+
it('respects client defined bitrate', () => {
|
36
|
+
const encodings = publishUtils_1.computeVideoEncodings(false, 640, 480, {
|
37
|
+
simulcast: false,
|
38
|
+
videoEncoding: {
|
39
|
+
maxBitrate: 1024,
|
40
|
+
},
|
41
|
+
});
|
42
|
+
expect(encodings).toHaveLength(1);
|
43
|
+
expect(encodings[0].maxBitrate).toBe(1024);
|
44
|
+
});
|
45
|
+
it('returns three encodings for high-res simulcast', () => {
|
46
|
+
const encodings = publishUtils_1.computeVideoEncodings(false, 960, 540, {
|
47
|
+
simulcast: true,
|
48
|
+
});
|
49
|
+
expect(encodings).toHaveLength(3);
|
50
|
+
// ensure they are what we expect
|
51
|
+
expect(encodings[0].rid).toBe('q');
|
52
|
+
expect(encodings[0].maxBitrate).toBe(options_1.VideoPresets.qvga.encoding.maxBitrate);
|
53
|
+
expect(encodings[0].scaleResolutionDownBy).toBe(3);
|
54
|
+
expect(encodings[1].rid).toBe('h');
|
55
|
+
expect(encodings[1].scaleResolutionDownBy).toBe(1.5);
|
56
|
+
expect(encodings[2].rid).toBe('f');
|
57
|
+
});
|
58
|
+
it('handles portrait simulcast', () => {
|
59
|
+
const encodings = publishUtils_1.computeVideoEncodings(false, 540, 960, {
|
60
|
+
simulcast: true,
|
61
|
+
});
|
62
|
+
expect(encodings).toHaveLength(3);
|
63
|
+
expect(encodings[0].scaleResolutionDownBy).toBe(3);
|
64
|
+
expect(encodings[1].scaleResolutionDownBy).toBe(1.5);
|
65
|
+
expect(encodings[2].maxBitrate).toBe(options_1.VideoPresets.qhd.encoding.maxBitrate);
|
66
|
+
});
|
67
|
+
it('returns two encodings for lower-res simulcast', () => {
|
68
|
+
const encodings = publishUtils_1.computeVideoEncodings(false, 640, 360, {
|
69
|
+
simulcast: true,
|
70
|
+
});
|
71
|
+
expect(encodings).toHaveLength(2);
|
72
|
+
// ensure they are what we expect
|
73
|
+
expect(encodings[0].rid).toBe('q');
|
74
|
+
expect(encodings[0].maxBitrate).toBe(options_1.VideoPresets.qvga.encoding.maxBitrate);
|
75
|
+
expect(encodings[1].rid).toBe('h');
|
76
|
+
expect(encodings[1].maxBitrate).toBe(options_1.VideoPresets.vga.encoding.maxBitrate);
|
77
|
+
});
|
78
|
+
});
|
79
|
+
//# sourceMappingURL=publishUtils.test.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"publishUtils.test.js","sourceRoot":"","sources":["../../../src/room/participant/publishUtils.test.ts"],"names":[],"mappings":"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"}
|
@@ -1,12 +1,13 @@
|
|
1
1
|
import LocalTrack from './LocalTrack';
|
2
|
-
import {
|
2
|
+
import { AudioCaptureOptions } from './options';
|
3
3
|
export default class LocalAudioTrack extends LocalTrack {
|
4
4
|
sender?: RTCRtpSender;
|
5
5
|
/** @internal */
|
6
6
|
stopOnMute: boolean;
|
7
|
-
|
7
|
+
/** @internal */
|
8
|
+
constructor(mediaTrack: MediaStreamTrack, constraints?: MediaTrackConstraints);
|
8
9
|
setDeviceId(deviceId: string): Promise<void>;
|
9
10
|
mute(): Promise<LocalAudioTrack>;
|
10
11
|
unmute(): Promise<LocalAudioTrack>;
|
11
|
-
restartTrack(options?:
|
12
|
+
restartTrack(options?: AudioCaptureOptions): Promise<void>;
|
12
13
|
}
|
@@ -15,9 +15,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
const logger_1 = __importDefault(require("../../logger"));
|
16
16
|
const LocalTrack_1 = __importDefault(require("./LocalTrack"));
|
17
17
|
const Track_1 = require("./Track");
|
18
|
+
const utils_1 = require("./utils");
|
18
19
|
class LocalAudioTrack extends LocalTrack_1.default {
|
19
|
-
|
20
|
-
|
20
|
+
/** @internal */
|
21
|
+
constructor(mediaTrack, constraints) {
|
22
|
+
super(mediaTrack, Track_1.Track.Kind.Audio, constraints);
|
21
23
|
/** @internal */
|
22
24
|
this.stopOnMute = false;
|
23
25
|
}
|
@@ -64,7 +66,7 @@ class LocalAudioTrack extends LocalTrack_1.default {
|
|
64
66
|
return __awaiter(this, void 0, void 0, function* () {
|
65
67
|
let constraints;
|
66
68
|
if (options) {
|
67
|
-
const streamConstraints =
|
69
|
+
const streamConstraints = utils_1.constraintsForOptions({ audio: options });
|
68
70
|
if (typeof streamConstraints.audio !== 'boolean') {
|
69
71
|
constraints = streamConstraints.audio;
|
70
72
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"LocalAudioTrack.js","sourceRoot":"","sources":["../../../src/room/track/LocalAudioTrack.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,0DAA+B;AAC/B,8DAAsC;AAEtC,mCAAgC;
|
1
|
+
{"version":3,"file":"LocalAudioTrack.js","sourceRoot":"","sources":["../../../src/room/track/LocalAudioTrack.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,0DAA+B;AAC/B,8DAAsC;AAEtC,mCAAgC;AAChC,mCAAgD;AAEhD,MAAqB,eAAgB,SAAQ,oBAAU;IAMrD,gBAAgB;IAEhB,YACE,UAA4B,EAC5B,WAAmC;QAEnC,KAAK,CAAC,UAAU,EAAE,aAAK,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QATnD,gBAAgB;QAChB,eAAU,GAAY,KAAK,CAAC;IAS5B,CAAC;IAEK,WAAW,CAAC,QAAgB;;YAChC,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,KAAK,QAAQ,EAAE;gBAC1C,OAAO;aACR;YACD,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;aAC3B;QACH,CAAC;KAAA;IAEK,IAAI;;;;;YACR,uFAAuF;YACvF,IAAI,IAAI,CAAC,MAAM,KAAK,aAAK,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE;gBAC9D,gBAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;gBAChC,kEAAkE;gBAClE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;aAC9B;YACD,MAAM,OAAM,IAAI,WAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IAEK,MAAM;;;;;YACV,IAAI,IAAI,CAAC,MAAM,KAAK,aAAK,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE;gBAC9D,gBAAG,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;gBACnC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;aAC3B;YACD,MAAM,OAAM,MAAM,WAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IAEK,YAAY,CAAC,OAA6B;;YAC9C,IAAI,WAA8C,CAAC;YACnD,IAAI,OAAO,EAAE;gBACX,MAAM,iBAAiB,GAAG,6BAAqB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;gBACpE,IAAI,OAAO,iBAAiB,CAAC,KAAK,KAAK,SAAS,EAAE;oBAChD,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC;iBACvC;aACF;YACD,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAClC,CAAC;KAAA;CACF;AAvDD,kCAuDC"}
|
@@ -1,13 +1,11 @@
|
|
1
|
-
import { CreateLocalTracksOptions } from './options';
|
2
1
|
import { Track } from './Track';
|
3
2
|
export default class LocalTrack extends Track {
|
4
3
|
/** @internal */
|
5
4
|
sender?: RTCRtpSender;
|
6
5
|
protected constraints: MediaTrackConstraints;
|
7
|
-
protected constructor(mediaTrack: MediaStreamTrack, kind: Track.Kind,
|
6
|
+
protected constructor(mediaTrack: MediaStreamTrack, kind: Track.Kind, constraints?: MediaTrackConstraints);
|
8
7
|
get id(): string;
|
9
8
|
get dimensions(): Track.Dimensions | undefined;
|
10
|
-
static constraintsForOptions(options: CreateLocalTracksOptions): MediaStreamConstraints;
|
11
9
|
/**
|
12
10
|
* @returns DeviceID of the device that is currently being used for this track
|
13
11
|
*/
|
@@ -13,14 +13,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
13
13
|
};
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
15
15
|
const logger_1 = __importDefault(require("../../logger"));
|
16
|
-
const defaults_1 = require("../defaults");
|
17
16
|
const DeviceManager_1 = __importDefault(require("../DeviceManager"));
|
18
17
|
const errors_1 = require("../errors");
|
19
18
|
const events_1 = require("../events");
|
20
19
|
const Track_1 = require("./Track");
|
21
20
|
class LocalTrack extends Track_1.Track {
|
22
|
-
constructor(mediaTrack, kind,
|
23
|
-
super(mediaTrack, kind
|
21
|
+
constructor(mediaTrack, kind, constraints) {
|
22
|
+
super(mediaTrack, kind);
|
24
23
|
this.handleEnded = () => {
|
25
24
|
this.emit(events_1.TrackEvent.Ended);
|
26
25
|
};
|
@@ -43,52 +42,6 @@ class LocalTrack extends Track_1.Track {
|
|
43
42
|
}
|
44
43
|
return undefined;
|
45
44
|
}
|
46
|
-
static constraintsForOptions(options) {
|
47
|
-
const constraints = {};
|
48
|
-
// default video options
|
49
|
-
const defaults = defaults_1.getTrackCaptureDefaults();
|
50
|
-
const videoOptions = {
|
51
|
-
deviceId: defaults.videoDeviceId,
|
52
|
-
};
|
53
|
-
if (defaults.videoResolution) {
|
54
|
-
videoOptions.width = defaults.videoResolution.width;
|
55
|
-
videoOptions.height = defaults.videoResolution.height;
|
56
|
-
videoOptions.frameRate = defaults.videoResolution.frameRate;
|
57
|
-
}
|
58
|
-
if (typeof options.video === 'object' && options.video) {
|
59
|
-
Object.assign(videoOptions, options.video);
|
60
|
-
if (options.video.resolution) {
|
61
|
-
Object.assign(videoOptions, options.video.resolution);
|
62
|
-
}
|
63
|
-
}
|
64
|
-
if (options.video === false) {
|
65
|
-
constraints.video = false;
|
66
|
-
}
|
67
|
-
else {
|
68
|
-
// use defaults
|
69
|
-
constraints.video = videoOptions;
|
70
|
-
}
|
71
|
-
// default audio options
|
72
|
-
const audioOptions = {
|
73
|
-
deviceId: defaults.audioDeviceId,
|
74
|
-
echoCancellation: defaults.echoCancellation,
|
75
|
-
/* @ts-ignore */
|
76
|
-
autoGainControl: defaults.autoGainControl,
|
77
|
-
/* @ts-ignore */
|
78
|
-
noiseSuppression: defaults.noiseSuppression,
|
79
|
-
channelCount: defaults.channelCount,
|
80
|
-
};
|
81
|
-
if (typeof options.audio === 'object' && options.audio) {
|
82
|
-
Object.assign(audioOptions, options.audio);
|
83
|
-
}
|
84
|
-
if (options.audio === false) {
|
85
|
-
constraints.audio = false;
|
86
|
-
}
|
87
|
-
else {
|
88
|
-
constraints.audio = audioOptions;
|
89
|
-
}
|
90
|
-
return constraints;
|
91
|
-
}
|
92
45
|
/**
|
93
46
|
* @returns DeviceID of the device that is currently being used for this track
|
94
47
|
*/
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"LocalTrack.js","sourceRoot":"","sources":["../../../src/room/track/LocalTrack.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,0DAA+B;AAC/B,
|
1
|
+
{"version":3,"file":"LocalTrack.js","sourceRoot":"","sources":["../../../src/room/track/LocalTrack.ts"],"names":[],"mappings":"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"}
|
@@ -1,15 +1,15 @@
|
|
1
1
|
import { SignalClient } from '../../api/SignalClient';
|
2
|
-
import { VideoQuality } from '../../proto/
|
2
|
+
import { VideoLayer, VideoQuality } from '../../proto/livekit_models';
|
3
3
|
import { VideoSenderStats } from '../stats';
|
4
4
|
import LocalTrack from './LocalTrack';
|
5
|
-
import {
|
5
|
+
import { VideoCaptureOptions } from './options';
|
6
6
|
export default class LocalVideoTrack extends LocalTrack {
|
7
7
|
signalClient?: SignalClient;
|
8
8
|
private prevStats?;
|
9
9
|
private lastQualityChange?;
|
10
10
|
private lastExplicitQualityChange?;
|
11
11
|
private encodings?;
|
12
|
-
constructor(mediaTrack: MediaStreamTrack,
|
12
|
+
constructor(mediaTrack: MediaStreamTrack, constraints?: MediaTrackConstraints);
|
13
13
|
get isSimulcast(): boolean;
|
14
14
|
startMonitor(signalClient: SignalClient): void;
|
15
15
|
stop(): void;
|
@@ -18,7 +18,9 @@ export default class LocalVideoTrack extends LocalTrack {
|
|
18
18
|
getSenderStats(): Promise<VideoSenderStats[]>;
|
19
19
|
setPublishingQuality(maxQuality: VideoQuality): void;
|
20
20
|
setDeviceId(deviceId: string): Promise<void>;
|
21
|
-
restartTrack(options?:
|
21
|
+
restartTrack(options?: VideoCaptureOptions): Promise<void>;
|
22
22
|
private monitorSender;
|
23
23
|
private checkAndUpdateSimulcast;
|
24
24
|
}
|
25
|
+
export declare function videoQualityForRid(rid: string): VideoQuality;
|
26
|
+
export declare function videoLayersFromEncodings(width: number, height: number, encodings?: RTCRtpEncodingParameters[]): VideoLayer[];
|
@@ -12,19 +12,21 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
13
|
};
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
15
|
+
exports.videoLayersFromEncodings = exports.videoQualityForRid = void 0;
|
15
16
|
const logger_1 = __importDefault(require("../../logger"));
|
16
|
-
const
|
17
|
+
const livekit_models_1 = require("../../proto/livekit_models");
|
17
18
|
const stats_1 = require("../stats");
|
18
19
|
const LocalTrack_1 = __importDefault(require("./LocalTrack"));
|
19
20
|
const Track_1 = require("./Track");
|
21
|
+
const utils_1 = require("./utils");
|
20
22
|
// delay before attempting to upgrade
|
21
23
|
const QUALITY_UPGRADE_DELAY = 60 * 1000;
|
22
24
|
// avoid downgrading too quickly
|
23
25
|
const QUALITY_DOWNGRADE_DELAY = 5 * 1000;
|
24
26
|
const ridOrder = ['q', 'h', 'f'];
|
25
27
|
class LocalVideoTrack extends LocalTrack_1.default {
|
26
|
-
constructor(mediaTrack,
|
27
|
-
super(mediaTrack, Track_1.Track.Kind.Video,
|
28
|
+
constructor(mediaTrack, constraints) {
|
29
|
+
super(mediaTrack, Track_1.Track.Kind.Video, constraints);
|
28
30
|
this.monitorSender = () => __awaiter(this, void 0, void 0, function* () {
|
29
31
|
if (!this.sender) {
|
30
32
|
return;
|
@@ -46,7 +48,7 @@ class LocalVideoTrack extends LocalTrack_1.default {
|
|
46
48
|
}
|
47
49
|
return false;
|
48
50
|
}
|
49
|
-
/* internal */
|
51
|
+
/* @internal */
|
50
52
|
startMonitor(signalClient) {
|
51
53
|
// only monitor simulcast streams
|
52
54
|
if (!this.isSimulcast) {
|
@@ -183,7 +185,7 @@ class LocalVideoTrack extends LocalTrack_1.default {
|
|
183
185
|
return __awaiter(this, void 0, void 0, function* () {
|
184
186
|
let constraints;
|
185
187
|
if (options) {
|
186
|
-
const streamConstraints =
|
188
|
+
const streamConstraints = utils_1.constraintsForOptions({ video: options });
|
187
189
|
if (typeof streamConstraints.video !== 'boolean') {
|
188
190
|
constraints = streamConstraints.video;
|
189
191
|
}
|
@@ -246,7 +248,7 @@ class LocalVideoTrack extends LocalTrack_1.default {
|
|
246
248
|
// 'elapsed', sendStats.timestamp - lastStats.timestamp);
|
247
249
|
if (sendStats.framesSent - lastStats.framesSent > 0) {
|
248
250
|
// frames have been sending ok, consider upgrading quality
|
249
|
-
if (currentQuality ===
|
251
|
+
if (currentQuality === livekit_models_1.VideoQuality.HIGH || !this.lastQualityChange)
|
250
252
|
return;
|
251
253
|
const nextQuality = currentQuality + 1;
|
252
254
|
if ((new Date()).getTime() - this.lastQualityChange < QUALITY_UPGRADE_DELAY) {
|
@@ -268,10 +270,10 @@ class LocalVideoTrack extends LocalTrack_1.default {
|
|
268
270
|
&& ((new Date()).getTime() - this.lastExplicitQualityChange) < QUALITY_DOWNGRADE_DELAY) {
|
269
271
|
return;
|
270
272
|
}
|
271
|
-
if (currentQuality ===
|
273
|
+
if (currentQuality === livekit_models_1.VideoQuality.UNRECOGNIZED) {
|
272
274
|
return;
|
273
275
|
}
|
274
|
-
if (currentQuality ===
|
276
|
+
if (currentQuality === livekit_models_1.VideoQuality.LOW) {
|
275
277
|
// already the lowest quality, nothing we can do
|
276
278
|
return;
|
277
279
|
}
|
@@ -283,13 +285,40 @@ exports.default = LocalVideoTrack;
|
|
283
285
|
function videoQualityForRid(rid) {
|
284
286
|
switch (rid) {
|
285
287
|
case 'f':
|
286
|
-
return
|
288
|
+
return livekit_models_1.VideoQuality.HIGH;
|
287
289
|
case 'h':
|
288
|
-
return
|
290
|
+
return livekit_models_1.VideoQuality.MEDIUM;
|
289
291
|
case 'q':
|
290
|
-
return
|
292
|
+
return livekit_models_1.VideoQuality.LOW;
|
291
293
|
default:
|
292
|
-
return
|
294
|
+
return livekit_models_1.VideoQuality.UNRECOGNIZED;
|
293
295
|
}
|
294
296
|
}
|
297
|
+
exports.videoQualityForRid = videoQualityForRid;
|
298
|
+
function videoLayersFromEncodings(width, height, encodings) {
|
299
|
+
// default to a single layer, HQ
|
300
|
+
if (!encodings) {
|
301
|
+
return [{
|
302
|
+
quality: livekit_models_1.VideoQuality.HIGH,
|
303
|
+
width,
|
304
|
+
height,
|
305
|
+
bitrate: 0,
|
306
|
+
}];
|
307
|
+
}
|
308
|
+
return encodings.map((encoding) => {
|
309
|
+
var _a, _b, _c;
|
310
|
+
const scale = (_a = encoding.scaleResolutionDownBy) !== null && _a !== void 0 ? _a : 1;
|
311
|
+
let quality = videoQualityForRid((_b = encoding.rid) !== null && _b !== void 0 ? _b : '');
|
312
|
+
if (quality === livekit_models_1.VideoQuality.UNRECOGNIZED && encodings.length === 1) {
|
313
|
+
quality = livekit_models_1.VideoQuality.HIGH;
|
314
|
+
}
|
315
|
+
return {
|
316
|
+
quality,
|
317
|
+
width: width / scale,
|
318
|
+
height: height / scale,
|
319
|
+
bitrate: (_c = encoding.maxBitrate) !== null && _c !== void 0 ? _c : 0,
|
320
|
+
};
|
321
|
+
});
|
322
|
+
}
|
323
|
+
exports.videoLayersFromEncodings = videoLayersFromEncodings;
|
295
324
|
//# sourceMappingURL=LocalVideoTrack.js.map
|