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,178 +0,0 @@
|
|
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
|
-
const logger_1 = __importDefault(require("../../logger"));
|
7
|
-
const livekit_models_1 = require("../../proto/livekit_models");
|
8
|
-
const livekit_rtc_1 = require("../../proto/livekit_rtc");
|
9
|
-
const events_1 = require("../events");
|
10
|
-
const RemoteVideoTrack_1 = __importDefault(require("./RemoteVideoTrack"));
|
11
|
-
const TrackPublication_1 = require("./TrackPublication");
|
12
|
-
class RemoteTrackPublication extends TrackPublication_1.TrackPublication {
|
13
|
-
constructor() {
|
14
|
-
super(...arguments);
|
15
|
-
/** @internal */
|
16
|
-
this._allowed = true;
|
17
|
-
this.disabled = false;
|
18
|
-
this.currentVideoQuality = livekit_models_1.VideoQuality.HIGH;
|
19
|
-
this.handleEnded = (track) => {
|
20
|
-
this.emit(events_1.TrackEvent.Ended, track);
|
21
|
-
};
|
22
|
-
this.handleVisibilityChange = (visible) => {
|
23
|
-
logger_1.default.debug('adaptivestream video visibility', this.trackSid, `visible=${visible}`);
|
24
|
-
this.disabled = !visible;
|
25
|
-
this.emitTrackUpdate();
|
26
|
-
};
|
27
|
-
this.handleVideoDimensionsChange = (dimensions) => {
|
28
|
-
logger_1.default.debug('adaptivestream video dimensions', this.trackSid, `${dimensions.width}x${dimensions.height}`);
|
29
|
-
this.videoDimensions = dimensions;
|
30
|
-
this.emitTrackUpdate();
|
31
|
-
};
|
32
|
-
}
|
33
|
-
/**
|
34
|
-
* Subscribe or unsubscribe to this remote track
|
35
|
-
* @param subscribed true to subscribe to a track, false to unsubscribe
|
36
|
-
*/
|
37
|
-
setSubscribed(subscribed) {
|
38
|
-
this.subscribed = subscribed;
|
39
|
-
const sub = {
|
40
|
-
trackSids: [this.trackSid],
|
41
|
-
subscribe: this.subscribed,
|
42
|
-
participantTracks: [{
|
43
|
-
// sending an empty participant id since TrackPublication doesn't keep it
|
44
|
-
// this is filled in by the participant that receives this message
|
45
|
-
participantSid: '',
|
46
|
-
trackSids: [this.trackSid],
|
47
|
-
}],
|
48
|
-
};
|
49
|
-
this.emit(events_1.TrackEvent.UpdateSubscription, sub);
|
50
|
-
}
|
51
|
-
get subscriptionStatus() {
|
52
|
-
if (this.subscribed === false || !super.isSubscribed) {
|
53
|
-
return TrackPublication_1.TrackPublication.SubscriptionStatus.Unsubscribed;
|
54
|
-
}
|
55
|
-
if (!this._allowed) {
|
56
|
-
return TrackPublication_1.TrackPublication.SubscriptionStatus.NotAllowed;
|
57
|
-
}
|
58
|
-
return TrackPublication_1.TrackPublication.SubscriptionStatus.Subscribed;
|
59
|
-
}
|
60
|
-
/**
|
61
|
-
* Returns true if track is subscribed, and ready for playback
|
62
|
-
*/
|
63
|
-
get isSubscribed() {
|
64
|
-
if (this.subscribed === false) {
|
65
|
-
return false;
|
66
|
-
}
|
67
|
-
if (!this._allowed) {
|
68
|
-
return false;
|
69
|
-
}
|
70
|
-
return super.isSubscribed;
|
71
|
-
}
|
72
|
-
get isEnabled() {
|
73
|
-
return !this.disabled;
|
74
|
-
}
|
75
|
-
/**
|
76
|
-
* disable server from sending down data for this track. this is useful when
|
77
|
-
* the participant is off screen, you may disable streaming down their video
|
78
|
-
* to reduce bandwidth requirements
|
79
|
-
* @param enabled
|
80
|
-
*/
|
81
|
-
setEnabled(enabled) {
|
82
|
-
if (!this.isManualOperationAllowed() || this.disabled === !enabled) {
|
83
|
-
return;
|
84
|
-
}
|
85
|
-
this.disabled = !enabled;
|
86
|
-
this.emitTrackUpdate();
|
87
|
-
}
|
88
|
-
/**
|
89
|
-
* for tracks that support simulcasting, adjust subscribed quality
|
90
|
-
*
|
91
|
-
* This indicates the highest quality the client can accept. if network
|
92
|
-
* bandwidth does not allow, server will automatically reduce quality to
|
93
|
-
* optimize for uninterrupted video
|
94
|
-
*/
|
95
|
-
setVideoQuality(quality) {
|
96
|
-
if (!this.isManualOperationAllowed() || this.currentVideoQuality === quality) {
|
97
|
-
return;
|
98
|
-
}
|
99
|
-
this.currentVideoQuality = quality;
|
100
|
-
this.videoDimensions = undefined;
|
101
|
-
this.emitTrackUpdate();
|
102
|
-
}
|
103
|
-
setVideoDimensions(dimensions) {
|
104
|
-
var _a, _b;
|
105
|
-
if (!this.isManualOperationAllowed()) {
|
106
|
-
return;
|
107
|
-
}
|
108
|
-
if (((_a = this.videoDimensions) === null || _a === void 0 ? void 0 : _a.width) === dimensions.width
|
109
|
-
&& ((_b = this.videoDimensions) === null || _b === void 0 ? void 0 : _b.height) === dimensions.height) {
|
110
|
-
return;
|
111
|
-
}
|
112
|
-
if (this.track instanceof RemoteVideoTrack_1.default) {
|
113
|
-
this.videoDimensions = dimensions;
|
114
|
-
}
|
115
|
-
this.currentVideoQuality = undefined;
|
116
|
-
this.emitTrackUpdate();
|
117
|
-
}
|
118
|
-
get videoQuality() {
|
119
|
-
return this.currentVideoQuality;
|
120
|
-
}
|
121
|
-
setTrack(track) {
|
122
|
-
if (this.track) {
|
123
|
-
// unregister listener
|
124
|
-
this.track.off(events_1.TrackEvent.VideoDimensionsChanged, this.handleVideoDimensionsChange);
|
125
|
-
this.track.off(events_1.TrackEvent.VisibilityChanged, this.handleVisibilityChange);
|
126
|
-
this.track.off(events_1.TrackEvent.Ended, this.handleEnded);
|
127
|
-
}
|
128
|
-
super.setTrack(track);
|
129
|
-
if (track) {
|
130
|
-
track.sid = this.trackSid;
|
131
|
-
track.on(events_1.TrackEvent.VideoDimensionsChanged, this.handleVideoDimensionsChange);
|
132
|
-
track.on(events_1.TrackEvent.VisibilityChanged, this.handleVisibilityChange);
|
133
|
-
track.on(events_1.TrackEvent.Ended, this.handleEnded);
|
134
|
-
}
|
135
|
-
}
|
136
|
-
/** @internal */
|
137
|
-
updateInfo(info) {
|
138
|
-
var _a;
|
139
|
-
super.updateInfo(info);
|
140
|
-
this.metadataMuted = info.muted;
|
141
|
-
(_a = this.track) === null || _a === void 0 ? void 0 : _a.setMuted(info.muted);
|
142
|
-
}
|
143
|
-
isManualOperationAllowed() {
|
144
|
-
if (this.isAdaptiveStream) {
|
145
|
-
logger_1.default.warn('adaptive stream is enabled, cannot change track settings', this.trackSid);
|
146
|
-
return false;
|
147
|
-
}
|
148
|
-
if (!this.isSubscribed) {
|
149
|
-
logger_1.default.warn('cannot update track settings when not subscribed', this.trackSid);
|
150
|
-
return false;
|
151
|
-
}
|
152
|
-
return true;
|
153
|
-
}
|
154
|
-
get isAdaptiveStream() {
|
155
|
-
return this.track instanceof RemoteVideoTrack_1.default && this.track.isAdaptiveStream;
|
156
|
-
}
|
157
|
-
/* @internal */
|
158
|
-
emitTrackUpdate() {
|
159
|
-
const settings = livekit_rtc_1.UpdateTrackSettings.fromPartial({
|
160
|
-
trackSids: [this.trackSid],
|
161
|
-
disabled: this.disabled,
|
162
|
-
});
|
163
|
-
if (this.videoDimensions) {
|
164
|
-
settings.width = this.videoDimensions.width;
|
165
|
-
settings.height = this.videoDimensions.height;
|
166
|
-
}
|
167
|
-
else if (this.currentVideoQuality !== undefined) {
|
168
|
-
settings.quality = this.currentVideoQuality;
|
169
|
-
}
|
170
|
-
else {
|
171
|
-
// defaults to high quality
|
172
|
-
settings.quality = livekit_models_1.VideoQuality.HIGH;
|
173
|
-
}
|
174
|
-
this.emit(events_1.TrackEvent.UpdateSettings, settings);
|
175
|
-
}
|
176
|
-
}
|
177
|
-
exports.default = RemoteTrackPublication;
|
178
|
-
//# sourceMappingURL=RemoteTrackPublication.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"RemoteTrackPublication.js","sourceRoot":"","sources":["../../../src/room/track/RemoteTrackPublication.ts"],"names":[],"mappings":"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"}
|
@@ -1,201 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
-
});
|
10
|
-
};
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
|
-
};
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
15
|
-
const ts_debounce_1 = require("ts-debounce");
|
16
|
-
const events_1 = require("../events");
|
17
|
-
const stats_1 = require("../stats");
|
18
|
-
const utils_1 = require("../utils");
|
19
|
-
const RemoteTrack_1 = __importDefault(require("./RemoteTrack"));
|
20
|
-
const Track_1 = require("./Track");
|
21
|
-
const REACTION_DELAY = 100;
|
22
|
-
class RemoteVideoTrack extends RemoteTrack_1.default {
|
23
|
-
constructor(mediaTrack, sid, receiver, adaptiveStreamSettings) {
|
24
|
-
super(mediaTrack, sid, Track_1.Track.Kind.Video, receiver);
|
25
|
-
this.elementInfos = [];
|
26
|
-
this.monitorReceiver = () => __awaiter(this, void 0, void 0, function* () {
|
27
|
-
if (!this.receiver) {
|
28
|
-
this._currentBitrate = 0;
|
29
|
-
return;
|
30
|
-
}
|
31
|
-
const stats = yield this.getReceiverStats();
|
32
|
-
if (stats && this.prevStats && this.receiver) {
|
33
|
-
this._currentBitrate = stats_1.computeBitrate(stats, this.prevStats);
|
34
|
-
}
|
35
|
-
this.prevStats = stats;
|
36
|
-
setTimeout(() => {
|
37
|
-
this.monitorReceiver();
|
38
|
-
}, stats_1.monitorFrequency);
|
39
|
-
});
|
40
|
-
this.handleVisibilityChanged = (entry) => {
|
41
|
-
const { target, isIntersecting } = entry;
|
42
|
-
const elementInfo = this.elementInfos.find((info) => info.element === target);
|
43
|
-
if (elementInfo) {
|
44
|
-
elementInfo.visible = isIntersecting;
|
45
|
-
elementInfo.visibilityChangedAt = Date.now();
|
46
|
-
}
|
47
|
-
this.updateVisibility();
|
48
|
-
};
|
49
|
-
this.debouncedHandleResize = ts_debounce_1.debounce(() => {
|
50
|
-
this.updateDimensions();
|
51
|
-
}, REACTION_DELAY);
|
52
|
-
this.adaptiveStreamSettings = adaptiveStreamSettings;
|
53
|
-
}
|
54
|
-
get isAdaptiveStream() {
|
55
|
-
return this.adaptiveStreamSettings !== undefined;
|
56
|
-
}
|
57
|
-
/** @internal */
|
58
|
-
setMuted(muted) {
|
59
|
-
super.setMuted(muted);
|
60
|
-
this.attachedElements.forEach((element) => {
|
61
|
-
// detach or attach
|
62
|
-
if (muted) {
|
63
|
-
Track_1.detachTrack(this.mediaStreamTrack, element);
|
64
|
-
}
|
65
|
-
else {
|
66
|
-
Track_1.attachToElement(this.mediaStreamTrack, element);
|
67
|
-
}
|
68
|
-
});
|
69
|
-
}
|
70
|
-
attach(element) {
|
71
|
-
if (!element) {
|
72
|
-
element = super.attach();
|
73
|
-
}
|
74
|
-
else {
|
75
|
-
super.attach(element);
|
76
|
-
}
|
77
|
-
// It's possible attach is called multiple times on an element. When that's
|
78
|
-
// the case, we'd want to avoid adding duplicate elementInfos
|
79
|
-
if (this.adaptiveStreamSettings
|
80
|
-
&& this.elementInfos.find((info) => info.element === element) === undefined) {
|
81
|
-
this.elementInfos.push({
|
82
|
-
element,
|
83
|
-
visible: true, // default visible
|
84
|
-
});
|
85
|
-
element
|
86
|
-
.handleResize = this.debouncedHandleResize;
|
87
|
-
element
|
88
|
-
.handleVisibilityChanged = this.handleVisibilityChanged;
|
89
|
-
utils_1.getIntersectionObserver().observe(element);
|
90
|
-
utils_1.getResizeObserver().observe(element);
|
91
|
-
// trigger the first resize update cycle
|
92
|
-
// if the tab is backgrounded, the initial resize event does not fire until
|
93
|
-
// the tab comes into focus for the first time.
|
94
|
-
this.debouncedHandleResize();
|
95
|
-
}
|
96
|
-
return element;
|
97
|
-
}
|
98
|
-
detach(element) {
|
99
|
-
let detachedElements = [];
|
100
|
-
if (element) {
|
101
|
-
this.stopObservingElement(element);
|
102
|
-
return super.detach(element);
|
103
|
-
}
|
104
|
-
detachedElements = super.detach();
|
105
|
-
for (const e of detachedElements) {
|
106
|
-
this.stopObservingElement(e);
|
107
|
-
}
|
108
|
-
return detachedElements;
|
109
|
-
}
|
110
|
-
getReceiverStats() {
|
111
|
-
return __awaiter(this, void 0, void 0, function* () {
|
112
|
-
if (!this.receiver) {
|
113
|
-
return;
|
114
|
-
}
|
115
|
-
const stats = yield this.receiver.getStats();
|
116
|
-
let receiverStats;
|
117
|
-
stats.forEach((v) => {
|
118
|
-
if (v.type === 'inbound-rtp') {
|
119
|
-
receiverStats = {
|
120
|
-
type: 'video',
|
121
|
-
framesDecoded: v.framesDecoded,
|
122
|
-
framesDropped: v.framesDropped,
|
123
|
-
framesReceived: v.framesReceived,
|
124
|
-
packetsReceived: v.packetsReceived,
|
125
|
-
packetsLost: v.packetsLost,
|
126
|
-
frameWidth: v.frameWidth,
|
127
|
-
frameHeight: v.frameHeight,
|
128
|
-
pliCount: v.pliCount,
|
129
|
-
firCount: v.firCount,
|
130
|
-
nackCount: v.nackCount,
|
131
|
-
jitter: v.jitter,
|
132
|
-
timestamp: v.timestamp,
|
133
|
-
bytesReceived: v.bytesReceived,
|
134
|
-
};
|
135
|
-
}
|
136
|
-
});
|
137
|
-
return receiverStats;
|
138
|
-
});
|
139
|
-
}
|
140
|
-
stopObservingElement(element) {
|
141
|
-
var _a, _b;
|
142
|
-
(_a = utils_1.getIntersectionObserver()) === null || _a === void 0 ? void 0 : _a.unobserve(element);
|
143
|
-
(_b = utils_1.getResizeObserver()) === null || _b === void 0 ? void 0 : _b.unobserve(element);
|
144
|
-
this.elementInfos = this.elementInfos.filter((info) => info.element !== element);
|
145
|
-
}
|
146
|
-
handleAppVisibilityChanged() {
|
147
|
-
const _super = Object.create(null, {
|
148
|
-
handleAppVisibilityChanged: { get: () => super.handleAppVisibilityChanged }
|
149
|
-
});
|
150
|
-
return __awaiter(this, void 0, void 0, function* () {
|
151
|
-
yield _super.handleAppVisibilityChanged.call(this);
|
152
|
-
if (!this.isAdaptiveStream)
|
153
|
-
return;
|
154
|
-
// on desktop don't pause when tab is backgrounded
|
155
|
-
if (!utils_1.isMobile())
|
156
|
-
return;
|
157
|
-
this.updateVisibility();
|
158
|
-
});
|
159
|
-
}
|
160
|
-
updateVisibility() {
|
161
|
-
const lastVisibilityChange = this.elementInfos.reduce((prev, info) => Math.max(prev, info.visibilityChangedAt || 0), 0);
|
162
|
-
const isVisible = this.elementInfos.some((info) => info.visible) && !this.isInBackground;
|
163
|
-
if (this.lastVisible === isVisible) {
|
164
|
-
return;
|
165
|
-
}
|
166
|
-
if (!isVisible && Date.now() - lastVisibilityChange < REACTION_DELAY) {
|
167
|
-
// delay hidden events
|
168
|
-
setTimeout(() => {
|
169
|
-
this.updateVisibility();
|
170
|
-
}, REACTION_DELAY);
|
171
|
-
return;
|
172
|
-
}
|
173
|
-
this.lastVisible = isVisible;
|
174
|
-
this.emit(events_1.TrackEvent.VisibilityChanged, isVisible, this);
|
175
|
-
}
|
176
|
-
updateDimensions() {
|
177
|
-
var _a, _b, _c, _d;
|
178
|
-
let maxWidth = 0;
|
179
|
-
let maxHeight = 0;
|
180
|
-
for (const info of this.elementInfos) {
|
181
|
-
const pixelDensity = (_b = (_a = this.adaptiveStreamSettings) === null || _a === void 0 ? void 0 : _a.pixelDensity) !== null && _b !== void 0 ? _b : 1;
|
182
|
-
const pixelDensityValue = pixelDensity === 'screen' ? window.devicePixelRatio : pixelDensity;
|
183
|
-
const currentElementWidth = info.element.clientWidth * pixelDensityValue;
|
184
|
-
const currentElementHeight = info.element.clientHeight * pixelDensityValue;
|
185
|
-
if (currentElementWidth + currentElementHeight > maxWidth + maxHeight) {
|
186
|
-
maxWidth = currentElementWidth;
|
187
|
-
maxHeight = currentElementHeight;
|
188
|
-
}
|
189
|
-
}
|
190
|
-
if (((_c = this.lastDimensions) === null || _c === void 0 ? void 0 : _c.width) === maxWidth && ((_d = this.lastDimensions) === null || _d === void 0 ? void 0 : _d.height) === maxHeight) {
|
191
|
-
return;
|
192
|
-
}
|
193
|
-
this.lastDimensions = {
|
194
|
-
width: maxWidth,
|
195
|
-
height: maxHeight,
|
196
|
-
};
|
197
|
-
this.emit(events_1.TrackEvent.VideoDimensionsChanged, this.lastDimensions, this);
|
198
|
-
}
|
199
|
-
}
|
200
|
-
exports.default = RemoteVideoTrack;
|
201
|
-
//# sourceMappingURL=RemoteVideoTrack.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"RemoteVideoTrack.js","sourceRoot":"","sources":["../../../src/room/track/RemoteVideoTrack.ts"],"names":[],"mappings":"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"}
|
package/dist/room/track/Track.js
DELETED
@@ -1,283 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
-
});
|
10
|
-
};
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
12
|
-
exports.detachTrack = exports.attachToElement = exports.Track = void 0;
|
13
|
-
const events_1 = require("events");
|
14
|
-
const livekit_models_1 = require("../../proto/livekit_models");
|
15
|
-
const livekit_rtc_1 = require("../../proto/livekit_rtc");
|
16
|
-
const events_2 = require("../events");
|
17
|
-
const utils_1 = require("../utils");
|
18
|
-
// keep old audio elements when detached, we would re-use them since on iOS
|
19
|
-
// Safari tracks which audio elements have been "blessed" by the user.
|
20
|
-
const recycledElements = [];
|
21
|
-
class Track extends events_1.EventEmitter {
|
22
|
-
constructor(mediaTrack, kind) {
|
23
|
-
super();
|
24
|
-
this.attachedElements = [];
|
25
|
-
this.isMuted = false;
|
26
|
-
this._currentBitrate = 0;
|
27
|
-
this.appVisibilityChangedListener = () => {
|
28
|
-
this.handleAppVisibilityChanged();
|
29
|
-
};
|
30
|
-
this.kind = kind;
|
31
|
-
this.mediaStreamTrack = mediaTrack;
|
32
|
-
this.source = Track.Source.Unknown;
|
33
|
-
if (utils_1.isWeb()) {
|
34
|
-
this.isInBackground = document.visibilityState === 'hidden';
|
35
|
-
document.addEventListener('visibilitychange', this.appVisibilityChangedListener);
|
36
|
-
}
|
37
|
-
else {
|
38
|
-
this.isInBackground = false;
|
39
|
-
}
|
40
|
-
}
|
41
|
-
/** current receive bits per second */
|
42
|
-
get currentBitrate() {
|
43
|
-
return this._currentBitrate;
|
44
|
-
}
|
45
|
-
attach(element) {
|
46
|
-
let elementType = 'audio';
|
47
|
-
if (this.kind === Track.Kind.Video) {
|
48
|
-
elementType = 'video';
|
49
|
-
}
|
50
|
-
if (!element) {
|
51
|
-
if (elementType === 'audio') {
|
52
|
-
recycledElements.forEach((e) => {
|
53
|
-
if (e.parentElement === null && !element) {
|
54
|
-
element = e;
|
55
|
-
}
|
56
|
-
});
|
57
|
-
if (element) {
|
58
|
-
// remove it from pool
|
59
|
-
recycledElements.splice(recycledElements.indexOf(element), 1);
|
60
|
-
}
|
61
|
-
}
|
62
|
-
if (!element) {
|
63
|
-
element = document.createElement(elementType);
|
64
|
-
}
|
65
|
-
}
|
66
|
-
if (!this.attachedElements.includes(element)) {
|
67
|
-
this.attachedElements.push(element);
|
68
|
-
}
|
69
|
-
// even if we believe it's already attached to the element, it's possible
|
70
|
-
// the element's srcObject was set to something else out of band.
|
71
|
-
// we'll want to re-attach it in that case
|
72
|
-
attachToElement(this.mediaStreamTrack, element);
|
73
|
-
if (element instanceof HTMLAudioElement) {
|
74
|
-
// manually play audio to detect audio playback status
|
75
|
-
element.play()
|
76
|
-
.then(() => {
|
77
|
-
this.emit(events_2.TrackEvent.AudioPlaybackStarted);
|
78
|
-
})
|
79
|
-
.catch((e) => {
|
80
|
-
this.emit(events_2.TrackEvent.AudioPlaybackFailed, e);
|
81
|
-
});
|
82
|
-
}
|
83
|
-
return element;
|
84
|
-
}
|
85
|
-
detach(element) {
|
86
|
-
// detach from a single element
|
87
|
-
if (element) {
|
88
|
-
detachTrack(this.mediaStreamTrack, element);
|
89
|
-
const idx = this.attachedElements.indexOf(element);
|
90
|
-
if (idx >= 0) {
|
91
|
-
this.attachedElements.splice(idx, 1);
|
92
|
-
this.recycleElement(element);
|
93
|
-
}
|
94
|
-
return element;
|
95
|
-
}
|
96
|
-
const detached = [];
|
97
|
-
this.attachedElements.forEach((elm) => {
|
98
|
-
detachTrack(this.mediaStreamTrack, elm);
|
99
|
-
detached.push(elm);
|
100
|
-
this.recycleElement(elm);
|
101
|
-
});
|
102
|
-
// remove all tracks
|
103
|
-
this.attachedElements = [];
|
104
|
-
return detached;
|
105
|
-
}
|
106
|
-
stop() {
|
107
|
-
this.mediaStreamTrack.stop();
|
108
|
-
if (utils_1.isWeb()) {
|
109
|
-
document.removeEventListener('visibilitychange', this.appVisibilityChangedListener);
|
110
|
-
}
|
111
|
-
}
|
112
|
-
enable() {
|
113
|
-
this.mediaStreamTrack.enabled = true;
|
114
|
-
}
|
115
|
-
disable() {
|
116
|
-
this.mediaStreamTrack.enabled = false;
|
117
|
-
}
|
118
|
-
recycleElement(element) {
|
119
|
-
if (element instanceof HTMLAudioElement) {
|
120
|
-
// we only need to re-use a single element
|
121
|
-
let shouldCache = true;
|
122
|
-
element.pause();
|
123
|
-
recycledElements.forEach((e) => {
|
124
|
-
if (!e.parentElement) {
|
125
|
-
shouldCache = false;
|
126
|
-
}
|
127
|
-
});
|
128
|
-
if (shouldCache) {
|
129
|
-
recycledElements.push(element);
|
130
|
-
}
|
131
|
-
}
|
132
|
-
}
|
133
|
-
handleAppVisibilityChanged() {
|
134
|
-
return __awaiter(this, void 0, void 0, function* () {
|
135
|
-
this.isInBackground = document.visibilityState === 'hidden';
|
136
|
-
});
|
137
|
-
}
|
138
|
-
}
|
139
|
-
exports.Track = Track;
|
140
|
-
/** @internal */
|
141
|
-
function attachToElement(track, element) {
|
142
|
-
let mediaStream;
|
143
|
-
if (element.srcObject instanceof MediaStream) {
|
144
|
-
mediaStream = element.srcObject;
|
145
|
-
}
|
146
|
-
else {
|
147
|
-
mediaStream = new MediaStream();
|
148
|
-
}
|
149
|
-
// check if track matches existing track
|
150
|
-
let existingTracks;
|
151
|
-
if (track.kind === 'audio') {
|
152
|
-
existingTracks = mediaStream.getAudioTracks();
|
153
|
-
}
|
154
|
-
else {
|
155
|
-
existingTracks = mediaStream.getVideoTracks();
|
156
|
-
}
|
157
|
-
if (!existingTracks.includes(track)) {
|
158
|
-
existingTracks.forEach((et) => {
|
159
|
-
mediaStream.removeTrack(et);
|
160
|
-
});
|
161
|
-
mediaStream.addTrack(track);
|
162
|
-
}
|
163
|
-
// avoid flicker
|
164
|
-
if (element.srcObject !== mediaStream) {
|
165
|
-
element.srcObject = mediaStream;
|
166
|
-
if ((utils_1.isSafari() || utils_1.isFireFox()) && element instanceof HTMLVideoElement) {
|
167
|
-
// Firefox also has a timing issue where video doesn't actually get attached unless
|
168
|
-
// performed out-of-band
|
169
|
-
// Safari 15 has a bug where in certain layouts, video element renders
|
170
|
-
// black until the page is resized or other changes take place.
|
171
|
-
// Resetting the src triggers it to render.
|
172
|
-
// https://developer.apple.com/forums/thread/690523
|
173
|
-
setTimeout(() => {
|
174
|
-
element.srcObject = mediaStream;
|
175
|
-
}, 0);
|
176
|
-
}
|
177
|
-
}
|
178
|
-
element.autoplay = true;
|
179
|
-
if (element instanceof HTMLVideoElement) {
|
180
|
-
element.playsInline = true;
|
181
|
-
}
|
182
|
-
}
|
183
|
-
exports.attachToElement = attachToElement;
|
184
|
-
/** @internal */
|
185
|
-
function detachTrack(track, element) {
|
186
|
-
if (element.srcObject instanceof MediaStream) {
|
187
|
-
const mediaStream = element.srcObject;
|
188
|
-
mediaStream.removeTrack(track);
|
189
|
-
element.srcObject = null;
|
190
|
-
}
|
191
|
-
}
|
192
|
-
exports.detachTrack = detachTrack;
|
193
|
-
(function (Track) {
|
194
|
-
let Kind;
|
195
|
-
(function (Kind) {
|
196
|
-
Kind["Audio"] = "audio";
|
197
|
-
Kind["Video"] = "video";
|
198
|
-
Kind["Unknown"] = "unknown";
|
199
|
-
})(Kind = Track.Kind || (Track.Kind = {}));
|
200
|
-
let Source;
|
201
|
-
(function (Source) {
|
202
|
-
Source["Camera"] = "camera";
|
203
|
-
Source["Microphone"] = "microphone";
|
204
|
-
Source["ScreenShare"] = "screen_share";
|
205
|
-
Source["ScreenShareAudio"] = "screen_share_audio";
|
206
|
-
Source["Unknown"] = "unknown";
|
207
|
-
})(Source = Track.Source || (Track.Source = {}));
|
208
|
-
let StreamState;
|
209
|
-
(function (StreamState) {
|
210
|
-
StreamState["Active"] = "active";
|
211
|
-
StreamState["Paused"] = "paused";
|
212
|
-
StreamState["Unknown"] = "unknown";
|
213
|
-
})(StreamState = Track.StreamState || (Track.StreamState = {}));
|
214
|
-
/** @internal */
|
215
|
-
function kindToProto(k) {
|
216
|
-
switch (k) {
|
217
|
-
case Kind.Audio:
|
218
|
-
return livekit_models_1.TrackType.AUDIO;
|
219
|
-
case Kind.Video:
|
220
|
-
return livekit_models_1.TrackType.VIDEO;
|
221
|
-
default:
|
222
|
-
return livekit_models_1.TrackType.UNRECOGNIZED;
|
223
|
-
}
|
224
|
-
}
|
225
|
-
Track.kindToProto = kindToProto;
|
226
|
-
/** @internal */
|
227
|
-
function kindFromProto(t) {
|
228
|
-
switch (t) {
|
229
|
-
case livekit_models_1.TrackType.AUDIO:
|
230
|
-
return Kind.Audio;
|
231
|
-
case livekit_models_1.TrackType.VIDEO:
|
232
|
-
return Kind.Video;
|
233
|
-
default:
|
234
|
-
return Kind.Unknown;
|
235
|
-
}
|
236
|
-
}
|
237
|
-
Track.kindFromProto = kindFromProto;
|
238
|
-
/** @internal */
|
239
|
-
function sourceToProto(s) {
|
240
|
-
switch (s) {
|
241
|
-
case Source.Camera:
|
242
|
-
return livekit_models_1.TrackSource.CAMERA;
|
243
|
-
case Source.Microphone:
|
244
|
-
return livekit_models_1.TrackSource.MICROPHONE;
|
245
|
-
case Source.ScreenShare:
|
246
|
-
return livekit_models_1.TrackSource.SCREEN_SHARE;
|
247
|
-
case Source.ScreenShareAudio:
|
248
|
-
return livekit_models_1.TrackSource.SCREEN_SHARE_AUDIO;
|
249
|
-
default:
|
250
|
-
return livekit_models_1.TrackSource.UNRECOGNIZED;
|
251
|
-
}
|
252
|
-
}
|
253
|
-
Track.sourceToProto = sourceToProto;
|
254
|
-
/** @internal */
|
255
|
-
function sourceFromProto(s) {
|
256
|
-
switch (s) {
|
257
|
-
case livekit_models_1.TrackSource.CAMERA:
|
258
|
-
return Source.Camera;
|
259
|
-
case livekit_models_1.TrackSource.MICROPHONE:
|
260
|
-
return Source.Microphone;
|
261
|
-
case livekit_models_1.TrackSource.SCREEN_SHARE:
|
262
|
-
return Source.ScreenShare;
|
263
|
-
case livekit_models_1.TrackSource.SCREEN_SHARE_AUDIO:
|
264
|
-
return Source.ScreenShareAudio;
|
265
|
-
default:
|
266
|
-
return Source.Unknown;
|
267
|
-
}
|
268
|
-
}
|
269
|
-
Track.sourceFromProto = sourceFromProto;
|
270
|
-
/** @internal */
|
271
|
-
function streamStateFromProto(s) {
|
272
|
-
switch (s) {
|
273
|
-
case livekit_rtc_1.StreamState.ACTIVE:
|
274
|
-
return StreamState.Active;
|
275
|
-
case livekit_rtc_1.StreamState.PAUSED:
|
276
|
-
return StreamState.Paused;
|
277
|
-
default:
|
278
|
-
return StreamState.Unknown;
|
279
|
-
}
|
280
|
-
}
|
281
|
-
Track.streamStateFromProto = streamStateFromProto;
|
282
|
-
})(Track = exports.Track || (exports.Track = {}));
|
283
|
-
//# sourceMappingURL=Track.js.map
|