livekit-client 0.17.4 → 0.17.6-rc2
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/CHANGELOG.md +1 -1
- package/README.md +26 -20
- package/dist/api/SignalClient.d.ts +1 -0
- package/dist/connect.d.ts +2 -0
- package/dist/index.d.ts +2 -2
- package/dist/livekit-client.esm.js +17344 -0
- package/dist/livekit-client.esm.js.map +1 -0
- package/dist/livekit-client.umd.js +2 -0
- package/dist/livekit-client.umd.js.map +1 -0
- package/dist/logger.d.ts +22 -11
- package/dist/options.d.ts +4 -2
- package/dist/proto/google/protobuf/timestamp.d.ts +12 -2
- package/dist/proto/livekit_models.d.ts +524 -17
- package/dist/proto/livekit_rtc.d.ts +3449 -31
- package/dist/room/DeviceManager.d.ts +1 -1
- package/dist/room/RTCEngine.d.ts +1 -1
- package/dist/room/Room.d.ts +2 -2
- package/dist/room/events.d.ts +1 -1
- package/dist/room/participant/LocalParticipant.d.ts +9 -5
- package/dist/room/participant/RemoteParticipant.d.ts +9 -0
- package/dist/room/track/RemoteAudioTrack.d.ts +11 -0
- package/dist/room/track/options.d.ts +1 -1
- package/dist/test/mocks.d.ts +11 -0
- package/dist/version.d.ts +1 -1
- package/package.json +41 -16
- package/.eslintrc.js +0 -17
- package/.gitmodules +0 -3
- package/dist/api/RequestQueue.js +0 -61
- package/dist/api/RequestQueue.js.map +0 -1
- package/dist/api/SignalClient.js +0 -428
- package/dist/api/SignalClient.js.map +0 -1
- package/dist/connect.js +0 -130
- package/dist/connect.js.map +0 -1
- package/dist/index.js +0 -71
- package/dist/index.js.map +0 -1
- package/dist/logger.js +0 -24
- package/dist/logger.js.map +0 -1
- package/dist/options.js +0 -3
- package/dist/options.js.map +0 -1
- package/dist/proto/google/protobuf/timestamp.js +0 -93
- package/dist/proto/google/protobuf/timestamp.js.map +0 -1
- package/dist/proto/livekit_models.js +0 -2688
- package/dist/proto/livekit_models.js.map +0 -1
- package/dist/proto/livekit_rtc.js +0 -2995
- package/dist/proto/livekit_rtc.js.map +0 -1
- package/dist/room/DeviceManager.js +0 -62
- package/dist/room/DeviceManager.js.map +0 -1
- package/dist/room/PCTransport.js +0 -91
- package/dist/room/PCTransport.js.map +0 -1
- package/dist/room/RTCEngine.js +0 -562
- package/dist/room/RTCEngine.js.map +0 -1
- package/dist/room/Room.js +0 -759
- package/dist/room/Room.js.map +0 -1
- package/dist/room/errors.js +0 -68
- package/dist/room/errors.js.map +0 -1
- package/dist/room/events.js +0 -385
- package/dist/room/events.js.map +0 -1
- package/dist/room/participant/LocalParticipant.js +0 -647
- package/dist/room/participant/LocalParticipant.js.map +0 -1
- package/dist/room/participant/Participant.js +0 -189
- package/dist/room/participant/Participant.js.map +0 -1
- package/dist/room/participant/ParticipantTrackPermission.js +0 -16
- package/dist/room/participant/ParticipantTrackPermission.js.map +0 -1
- package/dist/room/participant/RemoteParticipant.js +0 -194
- package/dist/room/participant/RemoteParticipant.js.map +0 -1
- package/dist/room/participant/publishUtils.js +0 -189
- package/dist/room/participant/publishUtils.js.map +0 -1
- package/dist/room/participant/publishUtils.test.d.ts +0 -1
- package/dist/room/participant/publishUtils.test.js +0 -118
- package/dist/room/participant/publishUtils.test.js.map +0 -1
- package/dist/room/stats.js +0 -26
- package/dist/room/stats.js.map +0 -1
- package/dist/room/track/LocalAudioTrack.js +0 -153
- package/dist/room/track/LocalAudioTrack.js.map +0 -1
- package/dist/room/track/LocalTrack.js +0 -158
- package/dist/room/track/LocalTrack.js.map +0 -1
- package/dist/room/track/LocalTrackPublication.js +0 -64
- package/dist/room/track/LocalTrackPublication.js.map +0 -1
- package/dist/room/track/LocalVideoTrack.js +0 -297
- package/dist/room/track/LocalVideoTrack.js.map +0 -1
- package/dist/room/track/LocalVideoTrack.test.d.ts +0 -1
- package/dist/room/track/LocalVideoTrack.test.js +0 -68
- package/dist/room/track/LocalVideoTrack.test.js.map +0 -1
- package/dist/room/track/RemoteAudioTrack.js +0 -64
- package/dist/room/track/RemoteAudioTrack.js.map +0 -1
- package/dist/room/track/RemoteTrack.js +0 -49
- package/dist/room/track/RemoteTrack.js.map +0 -1
- package/dist/room/track/RemoteTrackPublication.js +0 -178
- package/dist/room/track/RemoteTrackPublication.js.map +0 -1
- package/dist/room/track/RemoteVideoTrack.js +0 -201
- package/dist/room/track/RemoteVideoTrack.js.map +0 -1
- package/dist/room/track/Track.js +0 -283
- package/dist/room/track/Track.js.map +0 -1
- package/dist/room/track/TrackPublication.js +0 -92
- package/dist/room/track/TrackPublication.js.map +0 -1
- package/dist/room/track/create.js +0 -131
- package/dist/room/track/create.js.map +0 -1
- package/dist/room/track/defaults.js +0 -21
- package/dist/room/track/defaults.js.map +0 -1
- package/dist/room/track/options.js +0 -100
- package/dist/room/track/options.js.map +0 -1
- package/dist/room/track/types.js +0 -3
- package/dist/room/track/types.js.map +0 -1
- package/dist/room/track/utils.js +0 -113
- package/dist/room/track/utils.js.map +0 -1
- package/dist/room/track/utils.test.d.ts +0 -1
- package/dist/room/track/utils.test.js +0 -85
- package/dist/room/track/utils.test.js.map +0 -1
- package/dist/room/utils.js +0 -79
- package/dist/room/utils.js.map +0 -1
- package/dist/version.js +0 -6
- package/dist/version.js.map +0 -1
- package/jest.config.js +0 -6
- package/src/api/RequestQueue.ts +0 -53
- package/src/api/SignalClient.ts +0 -499
- package/src/connect.ts +0 -100
- package/src/index.ts +0 -47
- package/src/logger.ts +0 -22
- package/src/options.ts +0 -149
- package/src/proto/google/protobuf/timestamp.ts +0 -222
- package/src/proto/livekit_models.ts +0 -3019
- package/src/proto/livekit_rtc.ts +0 -3677
- package/src/room/DeviceManager.ts +0 -57
- package/src/room/PCTransport.ts +0 -86
- package/src/room/RTCEngine.ts +0 -652
- package/src/room/Room.ts +0 -943
- package/src/room/errors.ts +0 -65
- package/src/room/events.ts +0 -424
- package/src/room/participant/LocalParticipant.ts +0 -734
- package/src/room/participant/Participant.ts +0 -269
- package/src/room/participant/ParticipantTrackPermission.ts +0 -32
- package/src/room/participant/RemoteParticipant.ts +0 -243
- package/src/room/participant/publishUtils.test.ts +0 -145
- package/src/room/participant/publishUtils.ts +0 -225
- package/src/room/stats.ts +0 -130
- package/src/room/track/LocalAudioTrack.ts +0 -137
- package/src/room/track/LocalTrack.ts +0 -161
- package/src/room/track/LocalTrackPublication.ts +0 -66
- package/src/room/track/LocalVideoTrack.test.ts +0 -70
- package/src/room/track/LocalVideoTrack.ts +0 -293
- package/src/room/track/RemoteAudioTrack.ts +0 -58
- package/src/room/track/RemoteTrack.ts +0 -62
- package/src/room/track/RemoteTrackPublication.ts +0 -198
- package/src/room/track/RemoteVideoTrack.ts +0 -235
- package/src/room/track/Track.ts +0 -343
- package/src/room/track/TrackPublication.ts +0 -120
- package/src/room/track/create.ts +0 -121
- package/src/room/track/defaults.ts +0 -23
- package/src/room/track/options.ts +0 -281
- package/src/room/track/types.ts +0 -20
- package/src/room/track/utils.test.ts +0 -93
- package/src/room/track/utils.ts +0 -115
- package/src/room/utils.ts +0 -70
- package/src/version.ts +0 -2
- package/tsconfig.eslint.json +0 -11
@@ -1,647 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
-
if (k2 === undefined) k2 = k;
|
4
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
5
|
-
}) : (function(o, m, k, k2) {
|
6
|
-
if (k2 === undefined) k2 = k;
|
7
|
-
o[k2] = m[k];
|
8
|
-
}));
|
9
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
10
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
11
|
-
}) : function(o, v) {
|
12
|
-
o["default"] = v;
|
13
|
-
});
|
14
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
15
|
-
if (mod && mod.__esModule) return mod;
|
16
|
-
var result = {};
|
17
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
18
|
-
__setModuleDefault(result, mod);
|
19
|
-
return result;
|
20
|
-
};
|
21
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
22
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
23
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
24
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
25
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
26
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
27
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
28
|
-
});
|
29
|
-
};
|
30
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
31
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
32
|
-
};
|
33
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
34
|
-
const logger_1 = __importDefault(require("../../logger"));
|
35
|
-
const livekit_models_1 = require("../../proto/livekit_models");
|
36
|
-
const livekit_rtc_1 = require("../../proto/livekit_rtc");
|
37
|
-
const errors_1 = require("../errors");
|
38
|
-
const events_1 = require("../events");
|
39
|
-
const LocalAudioTrack_1 = __importDefault(require("../track/LocalAudioTrack"));
|
40
|
-
const LocalTrackPublication_1 = __importDefault(require("../track/LocalTrackPublication"));
|
41
|
-
const LocalVideoTrack_1 = __importStar(require("../track/LocalVideoTrack"));
|
42
|
-
const options_1 = require("../track/options");
|
43
|
-
const Track_1 = require("../track/Track");
|
44
|
-
const utils_1 = require("../track/utils");
|
45
|
-
const utils_2 = require("../utils");
|
46
|
-
const Participant_1 = __importDefault(require("./Participant"));
|
47
|
-
const ParticipantTrackPermission_1 = require("./ParticipantTrackPermission");
|
48
|
-
const publishUtils_1 = require("./publishUtils");
|
49
|
-
const RemoteParticipant_1 = __importDefault(require("./RemoteParticipant"));
|
50
|
-
class LocalParticipant extends Participant_1.default {
|
51
|
-
/** @internal */
|
52
|
-
constructor(sid, identity, engine, options) {
|
53
|
-
super(sid, identity);
|
54
|
-
this.pendingPublishing = new Set();
|
55
|
-
/** @internal */
|
56
|
-
this.onTrackUnmuted = (track) => {
|
57
|
-
this.onTrackMuted(track, false);
|
58
|
-
};
|
59
|
-
// when the local track changes in mute status, we'll notify server as such
|
60
|
-
/** @internal */
|
61
|
-
this.onTrackMuted = (track, muted) => {
|
62
|
-
if (muted === undefined) {
|
63
|
-
muted = true;
|
64
|
-
}
|
65
|
-
if (!track.sid) {
|
66
|
-
logger_1.default.error('could not update mute status for unpublished track', track);
|
67
|
-
return;
|
68
|
-
}
|
69
|
-
this.engine.updateMuteStatus(track.sid, muted);
|
70
|
-
};
|
71
|
-
this.handleSubscribedQualityUpdate = (update) => {
|
72
|
-
var _a, _b;
|
73
|
-
if (!((_a = this.roomOptions) === null || _a === void 0 ? void 0 : _a.dynacast)) {
|
74
|
-
return;
|
75
|
-
}
|
76
|
-
const pub = this.videoTracks.get(update.trackSid);
|
77
|
-
if (!pub) {
|
78
|
-
logger_1.default.warn('handleSubscribedQualityUpdate', 'received subscribed quality update for unknown track', update.trackSid);
|
79
|
-
return;
|
80
|
-
}
|
81
|
-
(_b = pub.videoTrack) === null || _b === void 0 ? void 0 : _b.setPublishingLayers(update.subscribedQualities);
|
82
|
-
};
|
83
|
-
this.handleLocalTrackUnpublished = (unpublished) => {
|
84
|
-
const track = this.tracks.get(unpublished.trackSid);
|
85
|
-
if (!track) {
|
86
|
-
logger_1.default.warn('handleLocalTrackUnpublished', 'received unpublished event for unknown track', unpublished.trackSid);
|
87
|
-
return;
|
88
|
-
}
|
89
|
-
this.unpublishTrack(track.track);
|
90
|
-
};
|
91
|
-
this.onTrackUnpublish = (track) => {
|
92
|
-
this.unpublishTrack(track);
|
93
|
-
};
|
94
|
-
this.audioTracks = new Map();
|
95
|
-
this.videoTracks = new Map();
|
96
|
-
this.tracks = new Map();
|
97
|
-
this.engine = engine;
|
98
|
-
this.roomOptions = options;
|
99
|
-
this.engine.client.onRemoteMuteChanged = (trackSid, muted) => {
|
100
|
-
const pub = this.tracks.get(trackSid);
|
101
|
-
if (!pub || !pub.track) {
|
102
|
-
return;
|
103
|
-
}
|
104
|
-
if (muted) {
|
105
|
-
pub.mute();
|
106
|
-
}
|
107
|
-
else {
|
108
|
-
pub.unmute();
|
109
|
-
}
|
110
|
-
};
|
111
|
-
this.engine.client.onSubscribedQualityUpdate = this.handleSubscribedQualityUpdate;
|
112
|
-
this.engine.client.onLocalTrackUnpublished = this.handleLocalTrackUnpublished;
|
113
|
-
}
|
114
|
-
get lastCameraError() {
|
115
|
-
return this.cameraError;
|
116
|
-
}
|
117
|
-
get lastMicrophoneError() {
|
118
|
-
return this.microphoneError;
|
119
|
-
}
|
120
|
-
getTrack(source) {
|
121
|
-
const track = super.getTrack(source);
|
122
|
-
if (track) {
|
123
|
-
return track;
|
124
|
-
}
|
125
|
-
}
|
126
|
-
getTrackByName(name) {
|
127
|
-
const track = super.getTrackByName(name);
|
128
|
-
if (track) {
|
129
|
-
return track;
|
130
|
-
}
|
131
|
-
}
|
132
|
-
/**
|
133
|
-
* Enable or disable a participant's camera track.
|
134
|
-
*
|
135
|
-
* If a track has already published, it'll mute or unmute the track.
|
136
|
-
*/
|
137
|
-
setCameraEnabled(enabled) {
|
138
|
-
return this.setTrackEnabled(Track_1.Track.Source.Camera, enabled);
|
139
|
-
}
|
140
|
-
/**
|
141
|
-
* Enable or disable a participant's microphone track.
|
142
|
-
*
|
143
|
-
* If a track has already published, it'll mute or unmute the track.
|
144
|
-
*/
|
145
|
-
setMicrophoneEnabled(enabled) {
|
146
|
-
return this.setTrackEnabled(Track_1.Track.Source.Microphone, enabled);
|
147
|
-
}
|
148
|
-
/**
|
149
|
-
* Start or stop sharing a participant's screen
|
150
|
-
*/
|
151
|
-
setScreenShareEnabled(enabled) {
|
152
|
-
return this.setTrackEnabled(Track_1.Track.Source.ScreenShare, enabled);
|
153
|
-
}
|
154
|
-
/** @internal */
|
155
|
-
setPermissions(permissions) {
|
156
|
-
const prevPermissions = this.permissions;
|
157
|
-
const changed = super.setPermissions(permissions);
|
158
|
-
if (changed && prevPermissions) {
|
159
|
-
this.emit(events_1.ParticipantEvent.ParticipantPermissionsChanged, prevPermissions);
|
160
|
-
}
|
161
|
-
return changed;
|
162
|
-
}
|
163
|
-
/**
|
164
|
-
* Enable or disable publishing for a track by source. This serves as a simple
|
165
|
-
* way to manage the common tracks (camera, mic, or screen share)
|
166
|
-
*/
|
167
|
-
setTrackEnabled(source, enabled) {
|
168
|
-
return __awaiter(this, void 0, void 0, function* () {
|
169
|
-
logger_1.default.debug('setTrackEnabled', source, enabled);
|
170
|
-
const track = this.getTrack(source);
|
171
|
-
if (enabled) {
|
172
|
-
if (track) {
|
173
|
-
yield track.unmute();
|
174
|
-
}
|
175
|
-
else {
|
176
|
-
let localTrack;
|
177
|
-
if (this.pendingPublishing.has(source)) {
|
178
|
-
logger_1.default.info('skipping duplicate published source', source);
|
179
|
-
// no-op it's already been requested
|
180
|
-
return;
|
181
|
-
}
|
182
|
-
this.pendingPublishing.add(source);
|
183
|
-
try {
|
184
|
-
switch (source) {
|
185
|
-
case Track_1.Track.Source.Camera:
|
186
|
-
[localTrack] = yield this.createTracks({
|
187
|
-
video: true,
|
188
|
-
});
|
189
|
-
break;
|
190
|
-
case Track_1.Track.Source.Microphone:
|
191
|
-
[localTrack] = yield this.createTracks({
|
192
|
-
audio: true,
|
193
|
-
});
|
194
|
-
break;
|
195
|
-
case Track_1.Track.Source.ScreenShare:
|
196
|
-
[localTrack] = yield this.createScreenTracks({ audio: false });
|
197
|
-
break;
|
198
|
-
default:
|
199
|
-
throw new errors_1.TrackInvalidError(source);
|
200
|
-
}
|
201
|
-
yield this.publishTrack(localTrack);
|
202
|
-
}
|
203
|
-
catch (e) {
|
204
|
-
if (e instanceof Error && !(e instanceof errors_1.TrackInvalidError)) {
|
205
|
-
this.emit(events_1.ParticipantEvent.MediaDevicesError, e);
|
206
|
-
}
|
207
|
-
throw e;
|
208
|
-
}
|
209
|
-
finally {
|
210
|
-
this.pendingPublishing.delete(source);
|
211
|
-
}
|
212
|
-
}
|
213
|
-
}
|
214
|
-
else if (track && track.track) {
|
215
|
-
// screenshare cannot be muted, unpublish instead
|
216
|
-
if (source === Track_1.Track.Source.ScreenShare) {
|
217
|
-
this.unpublishTrack(track.track);
|
218
|
-
}
|
219
|
-
else {
|
220
|
-
yield track.mute();
|
221
|
-
}
|
222
|
-
}
|
223
|
-
});
|
224
|
-
}
|
225
|
-
/**
|
226
|
-
* Publish both camera and microphone at the same time. This is useful for
|
227
|
-
* displaying a single Permission Dialog box to the end user.
|
228
|
-
*/
|
229
|
-
enableCameraAndMicrophone() {
|
230
|
-
return __awaiter(this, void 0, void 0, function* () {
|
231
|
-
if (this.pendingPublishing.has(Track_1.Track.Source.Camera)
|
232
|
-
|| this.pendingPublishing.has(Track_1.Track.Source.Microphone)) {
|
233
|
-
// no-op it's already been requested
|
234
|
-
return;
|
235
|
-
}
|
236
|
-
this.pendingPublishing.add(Track_1.Track.Source.Camera);
|
237
|
-
this.pendingPublishing.add(Track_1.Track.Source.Microphone);
|
238
|
-
try {
|
239
|
-
const tracks = yield this.createTracks({
|
240
|
-
audio: true,
|
241
|
-
video: true,
|
242
|
-
});
|
243
|
-
yield Promise.all(tracks.map((track) => this.publishTrack(track)));
|
244
|
-
}
|
245
|
-
finally {
|
246
|
-
this.pendingPublishing.delete(Track_1.Track.Source.Camera);
|
247
|
-
this.pendingPublishing.delete(Track_1.Track.Source.Microphone);
|
248
|
-
}
|
249
|
-
});
|
250
|
-
}
|
251
|
-
/**
|
252
|
-
* Create local camera and/or microphone tracks
|
253
|
-
* @param options
|
254
|
-
* @returns
|
255
|
-
*/
|
256
|
-
createTracks(options) {
|
257
|
-
var _a, _b;
|
258
|
-
return __awaiter(this, void 0, void 0, function* () {
|
259
|
-
const opts = utils_1.mergeDefaultOptions(options, (_a = this.roomOptions) === null || _a === void 0 ? void 0 : _a.audioCaptureDefaults, (_b = this.roomOptions) === null || _b === void 0 ? void 0 : _b.videoCaptureDefaults);
|
260
|
-
const constraints = utils_1.constraintsForOptions(opts);
|
261
|
-
let stream;
|
262
|
-
try {
|
263
|
-
stream = yield navigator.mediaDevices.getUserMedia(constraints);
|
264
|
-
}
|
265
|
-
catch (err) {
|
266
|
-
if (err instanceof Error) {
|
267
|
-
if (constraints.audio) {
|
268
|
-
this.microphoneError = err;
|
269
|
-
}
|
270
|
-
if (constraints.video) {
|
271
|
-
this.cameraError = err;
|
272
|
-
}
|
273
|
-
}
|
274
|
-
throw err;
|
275
|
-
}
|
276
|
-
if (constraints.audio) {
|
277
|
-
this.microphoneError = undefined;
|
278
|
-
}
|
279
|
-
if (constraints.video) {
|
280
|
-
this.cameraError = undefined;
|
281
|
-
}
|
282
|
-
return stream.getTracks().map((mediaStreamTrack) => {
|
283
|
-
const isAudio = mediaStreamTrack.kind === 'audio';
|
284
|
-
let trackOptions = isAudio ? options.audio : options.video;
|
285
|
-
if (typeof trackOptions === 'boolean' || !trackOptions) {
|
286
|
-
trackOptions = {};
|
287
|
-
}
|
288
|
-
let trackConstraints;
|
289
|
-
const conOrBool = isAudio ? constraints.audio : constraints.video;
|
290
|
-
if (typeof conOrBool !== 'boolean') {
|
291
|
-
trackConstraints = conOrBool;
|
292
|
-
}
|
293
|
-
const track = publishUtils_1.mediaTrackToLocalTrack(mediaStreamTrack, trackConstraints);
|
294
|
-
if (track.kind === Track_1.Track.Kind.Video) {
|
295
|
-
track.source = Track_1.Track.Source.Camera;
|
296
|
-
}
|
297
|
-
else if (track.kind === Track_1.Track.Kind.Audio) {
|
298
|
-
track.source = Track_1.Track.Source.Microphone;
|
299
|
-
}
|
300
|
-
track.mediaStream = stream;
|
301
|
-
return track;
|
302
|
-
});
|
303
|
-
});
|
304
|
-
}
|
305
|
-
/**
|
306
|
-
* Creates a screen capture tracks with getDisplayMedia().
|
307
|
-
* A LocalVideoTrack is always created and returned.
|
308
|
-
* If { audio: true }, and the browser supports audio capture, a LocalAudioTrack is also created.
|
309
|
-
*/
|
310
|
-
createScreenTracks(options) {
|
311
|
-
var _a;
|
312
|
-
return __awaiter(this, void 0, void 0, function* () {
|
313
|
-
if (options === undefined) {
|
314
|
-
options = {};
|
315
|
-
}
|
316
|
-
if (options.resolution === undefined) {
|
317
|
-
options.resolution = options_1.ScreenSharePresets.h1080fps15.resolution;
|
318
|
-
}
|
319
|
-
let videoConstraints = true;
|
320
|
-
if (options.resolution) {
|
321
|
-
videoConstraints = {
|
322
|
-
width: options.resolution.width,
|
323
|
-
height: options.resolution.height,
|
324
|
-
frameRate: options.resolution.frameRate,
|
325
|
-
};
|
326
|
-
}
|
327
|
-
// typescript definition is missing getDisplayMedia: https://github.com/microsoft/TypeScript/issues/33232
|
328
|
-
// @ts-ignore
|
329
|
-
const stream = yield navigator.mediaDevices.getDisplayMedia({
|
330
|
-
audio: (_a = options.audio) !== null && _a !== void 0 ? _a : false,
|
331
|
-
video: videoConstraints,
|
332
|
-
});
|
333
|
-
const tracks = stream.getVideoTracks();
|
334
|
-
if (tracks.length === 0) {
|
335
|
-
throw new errors_1.TrackInvalidError('no video track found');
|
336
|
-
}
|
337
|
-
const screenVideo = new LocalVideoTrack_1.default(tracks[0]);
|
338
|
-
screenVideo.source = Track_1.Track.Source.ScreenShare;
|
339
|
-
const localTracks = [screenVideo];
|
340
|
-
if (stream.getAudioTracks().length > 0) {
|
341
|
-
const screenAudio = new LocalAudioTrack_1.default(stream.getAudioTracks()[0]);
|
342
|
-
screenAudio.source = Track_1.Track.Source.ScreenShareAudio;
|
343
|
-
localTracks.push(screenAudio);
|
344
|
-
}
|
345
|
-
return localTracks;
|
346
|
-
});
|
347
|
-
}
|
348
|
-
/**
|
349
|
-
* Publish a new track to the room
|
350
|
-
* @param track
|
351
|
-
* @param options
|
352
|
-
*/
|
353
|
-
publishTrack(track, options) {
|
354
|
-
var _a, _b, _c, _d, _e, _f;
|
355
|
-
return __awaiter(this, void 0, void 0, function* () {
|
356
|
-
const opts = Object.assign(Object.assign({}, (_a = this.roomOptions) === null || _a === void 0 ? void 0 : _a.publishDefaults), options);
|
357
|
-
// convert raw media track into audio or video track
|
358
|
-
if (track instanceof MediaStreamTrack) {
|
359
|
-
switch (track.kind) {
|
360
|
-
case 'audio':
|
361
|
-
track = new LocalAudioTrack_1.default(track);
|
362
|
-
break;
|
363
|
-
case 'video':
|
364
|
-
track = new LocalVideoTrack_1.default(track);
|
365
|
-
break;
|
366
|
-
default:
|
367
|
-
throw new errors_1.TrackInvalidError(`unsupported MediaStreamTrack kind ${track.kind}`);
|
368
|
-
}
|
369
|
-
}
|
370
|
-
// is it already published? if so skip
|
371
|
-
let existingPublication;
|
372
|
-
this.tracks.forEach((publication) => {
|
373
|
-
if (!publication.track) {
|
374
|
-
return;
|
375
|
-
}
|
376
|
-
if (publication.track === track) {
|
377
|
-
existingPublication = publication;
|
378
|
-
}
|
379
|
-
});
|
380
|
-
if (existingPublication)
|
381
|
-
return existingPublication;
|
382
|
-
if (opts.source) {
|
383
|
-
track.source = opts.source;
|
384
|
-
}
|
385
|
-
if (opts.stopMicTrackOnMute && track instanceof LocalAudioTrack_1.default) {
|
386
|
-
track.stopOnMute = true;
|
387
|
-
}
|
388
|
-
if (track.source === Track_1.Track.Source.ScreenShare && utils_2.isFireFox()) {
|
389
|
-
// Firefox does not work well with simulcasted screen share
|
390
|
-
// we frequently get no data on layer 0 when enabled
|
391
|
-
opts.simulcast = false;
|
392
|
-
}
|
393
|
-
// handle track actions
|
394
|
-
track.on(events_1.TrackEvent.Muted, this.onTrackMuted);
|
395
|
-
track.on(events_1.TrackEvent.Unmuted, this.onTrackUnmuted);
|
396
|
-
track.on(events_1.TrackEvent.Ended, this.onTrackUnpublish);
|
397
|
-
// create track publication from track
|
398
|
-
const req = livekit_rtc_1.AddTrackRequest.fromPartial({
|
399
|
-
// get local track id for use during publishing
|
400
|
-
cid: track.mediaStreamTrack.id,
|
401
|
-
name: options === null || options === void 0 ? void 0 : options.name,
|
402
|
-
type: Track_1.Track.kindToProto(track.kind),
|
403
|
-
muted: track.isMuted,
|
404
|
-
source: Track_1.Track.sourceToProto(track.source),
|
405
|
-
disableDtx: !((_b = opts === null || opts === void 0 ? void 0 : opts.dtx) !== null && _b !== void 0 ? _b : true),
|
406
|
-
});
|
407
|
-
// compute encodings and layers for video
|
408
|
-
let encodings;
|
409
|
-
if (track.kind === Track_1.Track.Kind.Video) {
|
410
|
-
// TODO: support react native, which doesn't expose getSettings
|
411
|
-
const settings = track.mediaStreamTrack.getSettings();
|
412
|
-
const width = (_c = settings.width) !== null && _c !== void 0 ? _c : (_d = track.dimensions) === null || _d === void 0 ? void 0 : _d.width;
|
413
|
-
const height = (_e = settings.height) !== null && _e !== void 0 ? _e : (_f = track.dimensions) === null || _f === void 0 ? void 0 : _f.height;
|
414
|
-
// width and height should be defined for video
|
415
|
-
req.width = width !== null && width !== void 0 ? width : 0;
|
416
|
-
req.height = height !== null && height !== void 0 ? height : 0;
|
417
|
-
encodings = publishUtils_1.computeVideoEncodings(track.source === Track_1.Track.Source.ScreenShare, width, height, opts);
|
418
|
-
req.layers = LocalVideoTrack_1.videoLayersFromEncodings(req.width, req.height, encodings);
|
419
|
-
}
|
420
|
-
else if (track.kind === Track_1.Track.Kind.Audio && opts.audioBitrate) {
|
421
|
-
encodings = [
|
422
|
-
{
|
423
|
-
maxBitrate: opts.audioBitrate,
|
424
|
-
},
|
425
|
-
];
|
426
|
-
}
|
427
|
-
const ti = yield this.engine.addTrack(req);
|
428
|
-
const publication = new LocalTrackPublication_1.default(track.kind, ti, track);
|
429
|
-
track.sid = ti.sid;
|
430
|
-
if (!this.engine.publisher) {
|
431
|
-
throw new errors_1.UnexpectedConnectionState('publisher is closed');
|
432
|
-
}
|
433
|
-
logger_1.default.debug(`publishing ${track.kind} with encodings`, encodings, ti);
|
434
|
-
const transceiverInit = { direction: 'sendonly' };
|
435
|
-
if (encodings) {
|
436
|
-
transceiverInit.sendEncodings = encodings;
|
437
|
-
}
|
438
|
-
const transceiver = this.engine.publisher.pc.addTransceiver(track.mediaStreamTrack, transceiverInit);
|
439
|
-
this.engine.negotiate();
|
440
|
-
// store RTPSender
|
441
|
-
track.sender = transceiver.sender;
|
442
|
-
if (track instanceof LocalVideoTrack_1.default) {
|
443
|
-
track.startMonitor(this.engine.client);
|
444
|
-
}
|
445
|
-
else if (track instanceof LocalAudioTrack_1.default) {
|
446
|
-
track.startMonitor();
|
447
|
-
}
|
448
|
-
if (opts.videoCodec) {
|
449
|
-
this.setPreferredCodec(transceiver, track.kind, opts.videoCodec);
|
450
|
-
}
|
451
|
-
this.addTrackPublication(publication);
|
452
|
-
// send event for publication
|
453
|
-
this.emit(events_1.ParticipantEvent.LocalTrackPublished, publication);
|
454
|
-
return publication;
|
455
|
-
});
|
456
|
-
}
|
457
|
-
unpublishTrack(track, stopOnUnpublish) {
|
458
|
-
var _a, _b;
|
459
|
-
// look through all published tracks to find the right ones
|
460
|
-
const publication = this.getPublicationForTrack(track);
|
461
|
-
logger_1.default.debug('unpublishTrack', 'unpublishing track', track);
|
462
|
-
if (!publication || !publication.track) {
|
463
|
-
logger_1.default.warn('unpublishTrack', 'track was not unpublished because no publication was found', track);
|
464
|
-
return null;
|
465
|
-
}
|
466
|
-
track = publication.track;
|
467
|
-
track.off(events_1.TrackEvent.Muted, this.onTrackMuted);
|
468
|
-
track.off(events_1.TrackEvent.Unmuted, this.onTrackUnmuted);
|
469
|
-
track.off(events_1.TrackEvent.Ended, this.onTrackUnpublish);
|
470
|
-
if (stopOnUnpublish === undefined) {
|
471
|
-
stopOnUnpublish = (_b = (_a = this.roomOptions) === null || _a === void 0 ? void 0 : _a.stopLocalTrackOnUnpublish) !== null && _b !== void 0 ? _b : true;
|
472
|
-
}
|
473
|
-
if (stopOnUnpublish) {
|
474
|
-
track.stop();
|
475
|
-
}
|
476
|
-
const { mediaStreamTrack } = track;
|
477
|
-
if (this.engine.publisher) {
|
478
|
-
const senders = this.engine.publisher.pc.getSenders();
|
479
|
-
senders.forEach((sender) => {
|
480
|
-
var _a;
|
481
|
-
if (sender.track === mediaStreamTrack) {
|
482
|
-
try {
|
483
|
-
(_a = this.engine.publisher) === null || _a === void 0 ? void 0 : _a.pc.removeTrack(sender);
|
484
|
-
this.engine.negotiate();
|
485
|
-
}
|
486
|
-
catch (e) {
|
487
|
-
logger_1.default.warn('unpublishTrack', 'failed to remove track', e);
|
488
|
-
}
|
489
|
-
}
|
490
|
-
});
|
491
|
-
}
|
492
|
-
// remove from our maps
|
493
|
-
this.tracks.delete(publication.trackSid);
|
494
|
-
switch (publication.kind) {
|
495
|
-
case Track_1.Track.Kind.Audio:
|
496
|
-
this.audioTracks.delete(publication.trackSid);
|
497
|
-
break;
|
498
|
-
case Track_1.Track.Kind.Video:
|
499
|
-
this.videoTracks.delete(publication.trackSid);
|
500
|
-
break;
|
501
|
-
default:
|
502
|
-
break;
|
503
|
-
}
|
504
|
-
publication.setTrack(undefined);
|
505
|
-
this.emit(events_1.ParticipantEvent.LocalTrackUnpublished, publication);
|
506
|
-
return publication;
|
507
|
-
}
|
508
|
-
unpublishTracks(tracks) {
|
509
|
-
const publications = [];
|
510
|
-
tracks.forEach((track) => {
|
511
|
-
const pub = this.unpublishTrack(track);
|
512
|
-
if (pub) {
|
513
|
-
publications.push(pub);
|
514
|
-
}
|
515
|
-
});
|
516
|
-
return publications;
|
517
|
-
}
|
518
|
-
/**
|
519
|
-
* Publish a new data payload to the room. Data will be forwarded to each
|
520
|
-
* participant in the room if the destination argument is empty
|
521
|
-
*
|
522
|
-
* @param data Uint8Array of the payload. To send string data, use TextEncoder.encode
|
523
|
-
* @param kind whether to send this as reliable or lossy.
|
524
|
-
* For data that you need delivery guarantee (such as chat messages), use Reliable.
|
525
|
-
* For data that should arrive as quickly as possible, but you are ok with dropped
|
526
|
-
* packets, use Lossy.
|
527
|
-
* @param destination the participants who will receive the message
|
528
|
-
*/
|
529
|
-
publishData(data, kind, destination) {
|
530
|
-
return __awaiter(this, void 0, void 0, function* () {
|
531
|
-
const dest = [];
|
532
|
-
if (destination !== undefined) {
|
533
|
-
destination.forEach((val) => {
|
534
|
-
if (val instanceof RemoteParticipant_1.default) {
|
535
|
-
dest.push(val.sid);
|
536
|
-
}
|
537
|
-
else {
|
538
|
-
dest.push(val);
|
539
|
-
}
|
540
|
-
});
|
541
|
-
}
|
542
|
-
const packet = {
|
543
|
-
kind,
|
544
|
-
user: {
|
545
|
-
participantSid: this.sid,
|
546
|
-
payload: data,
|
547
|
-
destinationSids: dest,
|
548
|
-
},
|
549
|
-
};
|
550
|
-
yield this.engine.sendDataPacket(packet, kind);
|
551
|
-
});
|
552
|
-
}
|
553
|
-
/**
|
554
|
-
* Control who can subscribe to LocalParticipant's published tracks.
|
555
|
-
*
|
556
|
-
* By default, all participants can subscribe. This allows fine-grained control over
|
557
|
-
* who is able to subscribe at a participant and track level.
|
558
|
-
*
|
559
|
-
* Note: if access is given at a track-level (i.e. both [allParticipantsAllowed] and
|
560
|
-
* [ParticipantTrackPermission.allTracksAllowed] are false), any newer published tracks
|
561
|
-
* will not grant permissions to any participants and will require a subsequent
|
562
|
-
* permissions update to allow subscription.
|
563
|
-
*
|
564
|
-
* @param allParticipantsAllowed Allows all participants to subscribe all tracks.
|
565
|
-
* Takes precedence over [[participantTrackPermissions]] if set to true.
|
566
|
-
* By default this is set to true.
|
567
|
-
* @param participantTrackPermissions Full list of individual permissions per
|
568
|
-
* participant/track. Any omitted participants will not receive any permissions.
|
569
|
-
*/
|
570
|
-
setTrackSubscriptionPermissions(allParticipantsAllowed, participantTrackPermissions = []) {
|
571
|
-
this.engine.client.sendUpdateSubscriptionPermissions(allParticipantsAllowed, participantTrackPermissions.map((p) => ParticipantTrackPermission_1.trackPermissionToProto(p)));
|
572
|
-
}
|
573
|
-
getPublicationForTrack(track) {
|
574
|
-
let publication;
|
575
|
-
this.tracks.forEach((pub) => {
|
576
|
-
const localTrack = pub.track;
|
577
|
-
if (!localTrack) {
|
578
|
-
return;
|
579
|
-
}
|
580
|
-
// this looks overly complicated due to this object tree
|
581
|
-
if (track instanceof MediaStreamTrack) {
|
582
|
-
if (localTrack instanceof LocalAudioTrack_1.default
|
583
|
-
|| localTrack instanceof LocalVideoTrack_1.default) {
|
584
|
-
if (localTrack.mediaStreamTrack === track) {
|
585
|
-
publication = pub;
|
586
|
-
}
|
587
|
-
}
|
588
|
-
}
|
589
|
-
else if (track === localTrack) {
|
590
|
-
publication = pub;
|
591
|
-
}
|
592
|
-
});
|
593
|
-
return publication;
|
594
|
-
}
|
595
|
-
setPreferredCodec(transceiver, kind, videoCodec) {
|
596
|
-
if (!('getCapabilities' in RTCRtpSender)) {
|
597
|
-
return;
|
598
|
-
}
|
599
|
-
const cap = RTCRtpSender.getCapabilities(kind);
|
600
|
-
if (!cap)
|
601
|
-
return;
|
602
|
-
const selected = cap.codecs.find((c) => {
|
603
|
-
const codec = c.mimeType.toLowerCase();
|
604
|
-
const matchesVideoCodec = codec === `video/${videoCodec}`;
|
605
|
-
// for h264 codecs that have sdpFmtpLine available, use only if the
|
606
|
-
// profile-level-id is 42e01f for cross-browser compatibility
|
607
|
-
if (videoCodec === 'h264' && c.sdpFmtpLine) {
|
608
|
-
return matchesVideoCodec && c.sdpFmtpLine.includes('profile-level-id=42e01f');
|
609
|
-
}
|
610
|
-
return matchesVideoCodec || codec === 'audio/opus';
|
611
|
-
});
|
612
|
-
if (selected && 'setCodecPreferences' in transceiver) {
|
613
|
-
// @ts-ignore
|
614
|
-
transceiver.setCodecPreferences([selected]);
|
615
|
-
}
|
616
|
-
}
|
617
|
-
/** @internal */
|
618
|
-
publishedTracksInfo() {
|
619
|
-
const infos = [];
|
620
|
-
this.tracks.forEach((track) => {
|
621
|
-
if (track.track !== undefined) {
|
622
|
-
infos.push({
|
623
|
-
cid: track.track.mediaStreamTrack.id,
|
624
|
-
track: track.trackInfo,
|
625
|
-
});
|
626
|
-
}
|
627
|
-
});
|
628
|
-
return infos;
|
629
|
-
}
|
630
|
-
/** @internal */
|
631
|
-
dataChannelsInfo() {
|
632
|
-
const infos = [];
|
633
|
-
const getInfo = (dc) => {
|
634
|
-
if ((dc === null || dc === void 0 ? void 0 : dc.id) !== undefined && dc.id !== null) {
|
635
|
-
infos.push({
|
636
|
-
label: dc.label,
|
637
|
-
id: dc.id,
|
638
|
-
});
|
639
|
-
}
|
640
|
-
};
|
641
|
-
getInfo(this.engine.dataChannelForKind(livekit_models_1.DataPacket_Kind.LOSSY));
|
642
|
-
getInfo(this.engine.dataChannelForKind(livekit_models_1.DataPacket_Kind.RELIABLE));
|
643
|
-
return infos;
|
644
|
-
}
|
645
|
-
}
|
646
|
-
exports.default = LocalParticipant;
|
647
|
-
//# sourceMappingURL=LocalParticipant.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"LocalParticipant.js","sourceRoot":"","sources":["../../../src/room/participant/LocalParticipant.ts"],"names":[],"mappings":"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"}
|