@whereby.com/media 1.17.2 → 1.17.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +264 -382
- package/dist/index.d.cts +67 -7
- package/dist/index.d.mts +67 -7
- package/dist/index.d.ts +67 -7
- package/dist/index.mjs +264 -382
- package/dist/legacy-esm.js +264 -382
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var mediasoupClient = require('mediasoup-client');
|
|
4
|
-
var EventEmitter = require('events');
|
|
5
|
-
var socket_ioClient = require('socket.io-client');
|
|
6
3
|
var adapterRaw = require('webrtc-adapter');
|
|
7
4
|
var rtcstats = require('rtcstats');
|
|
8
5
|
var uuid = require('uuid');
|
|
6
|
+
var mediasoupClient = require('mediasoup-client');
|
|
7
|
+
var EventEmitter = require('events');
|
|
8
|
+
var socket_ioClient = require('socket.io-client');
|
|
9
9
|
var SDPUtils = require('sdp');
|
|
10
10
|
var sdpTransform = require('sdp-transform');
|
|
11
11
|
var ipAddress = require('ip-address');
|
|
@@ -118,6 +118,178 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
|
|
|
118
118
|
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
119
119
|
};
|
|
120
120
|
|
|
121
|
+
var _a$7;
|
|
122
|
+
(_a$7 = adapterRaw.default) !== null && _a$7 !== void 0 ? _a$7 : adapterRaw;
|
|
123
|
+
const RTCSTATS_PROTOCOL_VERSION = "1.0";
|
|
124
|
+
const GETSTATS_BUFFER_SIZE = 20;
|
|
125
|
+
const clientInfo = {
|
|
126
|
+
id: uuid.v4(),
|
|
127
|
+
connectionNumber: 0,
|
|
128
|
+
};
|
|
129
|
+
const noop = () => { };
|
|
130
|
+
let resetDelta = noop;
|
|
131
|
+
function rtcStatsConnection(wsURL, logger = console) {
|
|
132
|
+
const buffer = [];
|
|
133
|
+
let ws;
|
|
134
|
+
let organizationId;
|
|
135
|
+
let clientId;
|
|
136
|
+
let displayName;
|
|
137
|
+
let userRole;
|
|
138
|
+
let roomSessionId;
|
|
139
|
+
let connectionShouldBeOpen;
|
|
140
|
+
let connectionAttempt = 0;
|
|
141
|
+
let hasPassedOnRoomSessionId = false;
|
|
142
|
+
let getStatsBufferUsed = 0;
|
|
143
|
+
let deviceId;
|
|
144
|
+
let roomProduct;
|
|
145
|
+
let roomMode;
|
|
146
|
+
let sfuServer;
|
|
147
|
+
let featureFlags;
|
|
148
|
+
const connection = {
|
|
149
|
+
connected: false,
|
|
150
|
+
trace: (...args) => {
|
|
151
|
+
args.push(Date.now());
|
|
152
|
+
if (args[0] === "customEvent" && args[2].type === "roomSessionId") {
|
|
153
|
+
const oldRoomSessionIdValue = roomSessionId && roomSessionId[2].value.roomSessionId;
|
|
154
|
+
const newRoomSessionIdValue = args[2].value.roomSessionId;
|
|
155
|
+
roomSessionId = args;
|
|
156
|
+
if (hasPassedOnRoomSessionId &&
|
|
157
|
+
newRoomSessionIdValue &&
|
|
158
|
+
newRoomSessionIdValue !== oldRoomSessionIdValue) {
|
|
159
|
+
ws === null || ws === void 0 ? void 0 : ws.close();
|
|
160
|
+
}
|
|
161
|
+
if (newRoomSessionIdValue)
|
|
162
|
+
hasPassedOnRoomSessionId = true;
|
|
163
|
+
}
|
|
164
|
+
else if (args[0] === "customEvent" && args[2].type === "clientId") {
|
|
165
|
+
clientId = args;
|
|
166
|
+
}
|
|
167
|
+
else if (args[0] === "customEvent" && args[2].type === "organizationId") {
|
|
168
|
+
organizationId = args;
|
|
169
|
+
}
|
|
170
|
+
else if (args[0] === "customEvent" && args[2].type === "displayName") {
|
|
171
|
+
displayName = args;
|
|
172
|
+
}
|
|
173
|
+
else if (args[0] === "customEvent" && args[2].type === "userRole") {
|
|
174
|
+
userRole = args;
|
|
175
|
+
}
|
|
176
|
+
else if (args[0] === "customEvent" && args[2].type === "deviceId") {
|
|
177
|
+
deviceId = args;
|
|
178
|
+
}
|
|
179
|
+
else if (args[0] === "customEvent" && args[2].type === "roomProduct") {
|
|
180
|
+
roomProduct = args;
|
|
181
|
+
}
|
|
182
|
+
else if (args[0] === "customEvent" && args[2].type === "roomMode") {
|
|
183
|
+
roomMode = args;
|
|
184
|
+
}
|
|
185
|
+
else if (args[0] === "customEvent" && args[2].type === "sfuServer") {
|
|
186
|
+
sfuServer = args;
|
|
187
|
+
}
|
|
188
|
+
else if (args[0] === "customEvent" && args[2].type === "featureFlags") {
|
|
189
|
+
featureFlags = args;
|
|
190
|
+
}
|
|
191
|
+
if ((ws === null || ws === void 0 ? void 0 : ws.readyState) === WebSocket.OPEN) {
|
|
192
|
+
connectionAttempt = 0;
|
|
193
|
+
ws.send(JSON.stringify(args));
|
|
194
|
+
}
|
|
195
|
+
else if (args[0] === "getstats") {
|
|
196
|
+
if (getStatsBufferUsed < GETSTATS_BUFFER_SIZE) {
|
|
197
|
+
getStatsBufferUsed++;
|
|
198
|
+
buffer.push(args);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
else if (args[0] === "customEvent" && args[2].type === "insightsStats") ;
|
|
202
|
+
else {
|
|
203
|
+
buffer.push(args);
|
|
204
|
+
}
|
|
205
|
+
if ((ws === null || ws === void 0 ? void 0 : ws.readyState) === WebSocket.CLOSED && connectionShouldBeOpen) {
|
|
206
|
+
setTimeout(() => {
|
|
207
|
+
if (ws.readyState === WebSocket.CLOSED && connectionShouldBeOpen) {
|
|
208
|
+
connection.connect();
|
|
209
|
+
}
|
|
210
|
+
}, 1000 * connectionAttempt);
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
close: () => {
|
|
214
|
+
connectionShouldBeOpen = false;
|
|
215
|
+
ws === null || ws === void 0 ? void 0 : ws.close();
|
|
216
|
+
},
|
|
217
|
+
connect: () => {
|
|
218
|
+
connectionShouldBeOpen = true;
|
|
219
|
+
connectionAttempt += 1;
|
|
220
|
+
ws === null || ws === void 0 ? void 0 : ws.close();
|
|
221
|
+
connection.connected = true;
|
|
222
|
+
ws = new WebSocket(wsURL + window.location.pathname, RTCSTATS_PROTOCOL_VERSION);
|
|
223
|
+
ws.onerror = (e) => {
|
|
224
|
+
connection.connected = false;
|
|
225
|
+
logger.warn(`[RTCSTATS] WebSocket error`, e);
|
|
226
|
+
};
|
|
227
|
+
ws.onclose = (e) => {
|
|
228
|
+
connection.connected = false;
|
|
229
|
+
logger.info(`[RTCSTATS] Closed ${e.code}`);
|
|
230
|
+
resetDelta();
|
|
231
|
+
};
|
|
232
|
+
ws.onopen = () => {
|
|
233
|
+
clientInfo.connectionNumber++;
|
|
234
|
+
ws.send(JSON.stringify(["clientInfo", null, clientInfo]));
|
|
235
|
+
if (organizationId) {
|
|
236
|
+
ws.send(JSON.stringify(organizationId));
|
|
237
|
+
}
|
|
238
|
+
if (clientId) {
|
|
239
|
+
ws.send(JSON.stringify(clientId));
|
|
240
|
+
}
|
|
241
|
+
if (roomSessionId) {
|
|
242
|
+
ws.send(JSON.stringify(roomSessionId));
|
|
243
|
+
}
|
|
244
|
+
if (displayName) {
|
|
245
|
+
ws.send(JSON.stringify(displayName));
|
|
246
|
+
}
|
|
247
|
+
if (userRole) {
|
|
248
|
+
ws.send(JSON.stringify(userRole));
|
|
249
|
+
}
|
|
250
|
+
if (deviceId) {
|
|
251
|
+
ws.send(JSON.stringify(deviceId));
|
|
252
|
+
}
|
|
253
|
+
if (roomMode) {
|
|
254
|
+
ws.send(JSON.stringify(roomMode));
|
|
255
|
+
}
|
|
256
|
+
if (roomProduct) {
|
|
257
|
+
ws.send(JSON.stringify(roomProduct));
|
|
258
|
+
}
|
|
259
|
+
if (sfuServer) {
|
|
260
|
+
ws.send(JSON.stringify(sfuServer));
|
|
261
|
+
}
|
|
262
|
+
if (featureFlags) {
|
|
263
|
+
ws.send(JSON.stringify(featureFlags));
|
|
264
|
+
}
|
|
265
|
+
while (buffer.length) {
|
|
266
|
+
ws.send(JSON.stringify(buffer.shift()));
|
|
267
|
+
}
|
|
268
|
+
getStatsBufferUsed = 0;
|
|
269
|
+
};
|
|
270
|
+
},
|
|
271
|
+
};
|
|
272
|
+
return connection;
|
|
273
|
+
}
|
|
274
|
+
const server = rtcStatsConnection(process.env.RTCSTATS_URL || "wss://rtcstats.srv.whereby.com");
|
|
275
|
+
const stats = rtcstats(server.trace, 10000, [""]);
|
|
276
|
+
resetDelta = (stats === null || stats === void 0 ? void 0 : stats.resetDelta) || noop;
|
|
277
|
+
const rtcStats = {
|
|
278
|
+
sendEvent: (type, value) => {
|
|
279
|
+
server.trace("customEvent", null, {
|
|
280
|
+
type,
|
|
281
|
+
value,
|
|
282
|
+
});
|
|
283
|
+
},
|
|
284
|
+
sendAudioMuted: (muted) => {
|
|
285
|
+
rtcStats.sendEvent("audio_muted", { muted });
|
|
286
|
+
},
|
|
287
|
+
sendVideoMuted: (muted) => {
|
|
288
|
+
rtcStats.sendEvent("video_muted", { muted });
|
|
289
|
+
},
|
|
290
|
+
server,
|
|
291
|
+
};
|
|
292
|
+
|
|
121
293
|
function captureCandidatePairInfoMetrics(cpMetrics, currentCptats, prevCptats, timeDiff, report) {
|
|
122
294
|
const bytesReceivedDiff = currentCptats.bytesReceived - ((prevCptats === null || prevCptats === void 0 ? void 0 : prevCptats.bytesReceived) || 0);
|
|
123
295
|
const bytesSentDiff = currentCptats.bytesSent - ((prevCptats === null || prevCptats === void 0 ? void 0 : prevCptats.bytesSent) || 0);
|
|
@@ -553,8 +725,14 @@ function collectStats(state, { logger, interval }, immediate) {
|
|
|
553
725
|
state.subscriptions.forEach((subscription) => { var _a; return (_a = subscription.onUpdatedStats) === null || _a === void 0 ? void 0 : _a.call(subscription, state.statsByView, clients); });
|
|
554
726
|
}
|
|
555
727
|
}
|
|
556
|
-
catch (
|
|
557
|
-
logger.warn(
|
|
728
|
+
catch (e) {
|
|
729
|
+
logger.warn(e);
|
|
730
|
+
state.numFailedStatsReports++;
|
|
731
|
+
rtcStats.sendEvent("collectStatsFailed", {
|
|
732
|
+
name: e === null || e === void 0 ? void 0 : e.name,
|
|
733
|
+
cause: e === null || e === void 0 ? void 0 : e.cause,
|
|
734
|
+
message: e === null || e === void 0 ? void 0 : e.message,
|
|
735
|
+
});
|
|
558
736
|
}
|
|
559
737
|
state.nextTimeout = setTimeout(collectStatsBound, interval);
|
|
560
738
|
});
|
|
@@ -610,6 +788,7 @@ const STATE = {
|
|
|
610
788
|
lastUpdateTime: 0,
|
|
611
789
|
statsByView: {},
|
|
612
790
|
subscriptions: [],
|
|
791
|
+
numFailedStatsReports: 0,
|
|
613
792
|
};
|
|
614
793
|
const OPTIONS = {
|
|
615
794
|
interval: 2000,
|
|
@@ -618,6 +797,9 @@ const OPTIONS = {
|
|
|
618
797
|
const getStats = () => {
|
|
619
798
|
return Object.assign({}, STATE.statsByView);
|
|
620
799
|
};
|
|
800
|
+
const getNumFailedStatsReports = () => {
|
|
801
|
+
return STATE.numFailedStatsReports;
|
|
802
|
+
};
|
|
621
803
|
const getUpdatedStats = () => { var _a; return (_a = STATE.currentMonitor) === null || _a === void 0 ? void 0 : _a.getUpdatedStats(); };
|
|
622
804
|
const setClientProvider = (provider) => (STATE.getClients = provider);
|
|
623
805
|
function startStatsMonitor(state, { interval, logger }) {
|
|
@@ -1280,8 +1462,8 @@ class ReconnectManager extends EventEmitter {
|
|
|
1280
1462
|
}
|
|
1281
1463
|
}
|
|
1282
1464
|
|
|
1283
|
-
var _a$
|
|
1284
|
-
const adapter$6 = (_a$
|
|
1465
|
+
var _a$6;
|
|
1466
|
+
const adapter$6 = (_a$6 = adapterRaw.default) !== null && _a$6 !== void 0 ? _a$6 : adapterRaw;
|
|
1285
1467
|
const DEFAULT_SOCKET_PATH = "/protocol/socket.io/v4";
|
|
1286
1468
|
const NOOP_KEEPALIVE_INTERVAL = 2000;
|
|
1287
1469
|
class ServerSocket {
|
|
@@ -1574,9 +1756,15 @@ const packetLossAnalyser = new PacketLossAnalyser();
|
|
|
1574
1756
|
const periodicPacketLossDetector = {
|
|
1575
1757
|
id: "periodic-packet-loss",
|
|
1576
1758
|
enabled: ({ client, hasLiveTrack, ssrc0 }) => {
|
|
1577
|
-
return client.isLocalClient &&
|
|
1759
|
+
return (client.isLocalClient &&
|
|
1760
|
+
hasLiveTrack &&
|
|
1761
|
+
!!(ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.ssrc) &&
|
|
1762
|
+
(ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.direction) === "out" &&
|
|
1763
|
+
((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.bitrate) || 0) > 0);
|
|
1578
1764
|
},
|
|
1579
1765
|
check: ({ ssrc0 }) => {
|
|
1766
|
+
if (!ssrc0 || !ssrc0.ssrc)
|
|
1767
|
+
return false;
|
|
1580
1768
|
packetLossAnalyser.addPacketLossMeasurement(ssrc0.ssrc, ssrc0.fractionLost || 0, Date.now());
|
|
1581
1769
|
return packetLossAnalyser.hasPeriodicPacketLoss(ssrc0.ssrc, Date.now());
|
|
1582
1770
|
},
|
|
@@ -1682,8 +1870,12 @@ const issueDetectors = [
|
|
|
1682
1870
|
dryTrackIssueDetector,
|
|
1683
1871
|
{
|
|
1684
1872
|
id: "low-layer0-bitrate",
|
|
1685
|
-
enabled: ({ hasLiveTrack, ssrc0, kind, client }) => hasLiveTrack && kind === "video" && ssrc0 && ssrc0.height && !client.isPresentation,
|
|
1686
|
-
check: ({ ssrc0 }) =>
|
|
1873
|
+
enabled: ({ hasLiveTrack, ssrc0, kind, client }) => hasLiveTrack && kind === "video" && !!ssrc0 && !!(ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.height) && !client.isPresentation,
|
|
1874
|
+
check: ({ ssrc0 }) => {
|
|
1875
|
+
if (!(ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.bitrate))
|
|
1876
|
+
return false;
|
|
1877
|
+
return ((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.height) || 0) < 200 && ssrc0.bitrate < 30000;
|
|
1878
|
+
},
|
|
1687
1879
|
},
|
|
1688
1880
|
{
|
|
1689
1881
|
id: "quality-limitation-bw",
|
|
@@ -1697,43 +1889,43 @@ const issueDetectors = [
|
|
|
1697
1889
|
},
|
|
1698
1890
|
{
|
|
1699
1891
|
id: "high-plirate",
|
|
1700
|
-
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && ssrc0 && ssrc0.height,
|
|
1701
|
-
check: ({ ssrc0 }) => ssrc0.pliRate > 2,
|
|
1892
|
+
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && !!ssrc0 && !!ssrc0.height,
|
|
1893
|
+
check: ({ ssrc0 }) => ((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.pliRate) || 0) > 2,
|
|
1702
1894
|
},
|
|
1703
1895
|
{
|
|
1704
1896
|
id: "extreme-plirate",
|
|
1705
|
-
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && ssrc0 && ssrc0.height,
|
|
1706
|
-
check: ({ ssrc0 }) => ssrc0.pliRate > 5,
|
|
1897
|
+
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && !!ssrc0 && !!ssrc0.height,
|
|
1898
|
+
check: ({ ssrc0 }) => ((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.pliRate) || 0) > 5,
|
|
1707
1899
|
},
|
|
1708
1900
|
{
|
|
1709
1901
|
id: "high-packetloss",
|
|
1710
|
-
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && ssrc0 && ssrc0.direction === "in",
|
|
1711
|
-
check: ({ ssrc0 }) => ssrc0.lossRatio > 0.02,
|
|
1902
|
+
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && !!ssrc0 && ssrc0.direction === "in",
|
|
1903
|
+
check: ({ ssrc0 }) => ((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.lossRatio) || 0) > 0.02,
|
|
1712
1904
|
},
|
|
1713
1905
|
{
|
|
1714
1906
|
id: "extreme-packetloss",
|
|
1715
|
-
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && ssrc0 && ssrc0.direction === "in",
|
|
1716
|
-
check: ({ ssrc0 }) => ssrc0.lossRatio > 0.1,
|
|
1907
|
+
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && !!ssrc0 && ssrc0.direction === "in",
|
|
1908
|
+
check: ({ ssrc0 }) => ((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.lossRatio) || 0) > 0.1,
|
|
1717
1909
|
},
|
|
1718
1910
|
{
|
|
1719
1911
|
id: "high-packetloss",
|
|
1720
|
-
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && ssrc0 && ssrc0.direction === "out",
|
|
1721
|
-
check: ({ ssrc0 }) => (ssrc0.fractionLost || 0) > 0.02,
|
|
1912
|
+
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && !!ssrc0 && ssrc0.direction === "out",
|
|
1913
|
+
check: ({ ssrc0 }) => ((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.fractionLost) || 0) > 0.02,
|
|
1722
1914
|
},
|
|
1723
1915
|
{
|
|
1724
1916
|
id: "extreme-packetloss",
|
|
1725
|
-
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && ssrc0 && ssrc0.direction === "out",
|
|
1726
|
-
check: ({ ssrc0 }) => (ssrc0.fractionLost || 0) > 0.1,
|
|
1917
|
+
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && !!ssrc0 && ssrc0.direction === "out",
|
|
1918
|
+
check: ({ ssrc0 }) => ((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.fractionLost) || 0) > 0.1,
|
|
1727
1919
|
},
|
|
1728
1920
|
{
|
|
1729
1921
|
id: "fps-below-20",
|
|
1730
|
-
enabled: ({ hasLiveTrack, ssrc0, kind, client }) => hasLiveTrack && ssrc0 && ssrc0.height && kind === "video" && !client.isPresentation,
|
|
1731
|
-
check: ({ ssrc0 }) => ssrc0.height > 180 && ssrc0.fps < 20,
|
|
1922
|
+
enabled: ({ hasLiveTrack, ssrc0, kind, client }) => hasLiveTrack && !!ssrc0 && !!ssrc0.height && kind === "video" && !client.isPresentation,
|
|
1923
|
+
check: ({ ssrc0 }) => ((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.height) || 0) > 180 && ((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.fps) || 0) < 20,
|
|
1732
1924
|
},
|
|
1733
1925
|
{
|
|
1734
1926
|
id: "fps-below-10",
|
|
1735
|
-
enabled: ({ hasLiveTrack, ssrc0, kind, client }) => hasLiveTrack && ssrc0 && ssrc0.height && kind === "video" && !client.isPresentation,
|
|
1736
|
-
check: ({ ssrc0 }) => ssrc0.fps < 10,
|
|
1927
|
+
enabled: ({ hasLiveTrack, ssrc0, kind, client }) => hasLiveTrack && !!ssrc0 && !!ssrc0.height && kind === "video" && !client.isPresentation,
|
|
1928
|
+
check: ({ ssrc0 }) => ((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.fps) || 0) < 10,
|
|
1737
1929
|
},
|
|
1738
1930
|
badNetworkIssueDetector,
|
|
1739
1931
|
periodicPacketLossDetector,
|
|
@@ -1751,18 +1943,27 @@ const issueDetectors = [
|
|
|
1751
1943
|
},
|
|
1752
1944
|
{
|
|
1753
1945
|
id: "concealed",
|
|
1754
|
-
enabled: ({ hasLiveTrack, ssrc0, kind }) => hasLiveTrack && ssrc0 && kind === "audio",
|
|
1755
|
-
check: ({ ssrc0 }) => ssrc0
|
|
1946
|
+
enabled: ({ hasLiveTrack, ssrc0, kind }) => hasLiveTrack && !!ssrc0 && kind === "audio",
|
|
1947
|
+
check: ({ ssrc0 }) => !!(ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.bitrate) &&
|
|
1948
|
+
(ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.direction) === "in" &&
|
|
1949
|
+
((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.audioLevel) || 0) >= 0.001 &&
|
|
1950
|
+
((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.audioConcealment) || 0) >= 0.1,
|
|
1756
1951
|
},
|
|
1757
1952
|
{
|
|
1758
1953
|
id: "decelerated",
|
|
1759
|
-
enabled: ({ hasLiveTrack, ssrc0, kind }) => hasLiveTrack && ssrc0 && kind === "audio",
|
|
1760
|
-
check: ({ ssrc0 }) => ssrc0
|
|
1954
|
+
enabled: ({ hasLiveTrack, ssrc0, kind }) => hasLiveTrack && !!ssrc0 && kind === "audio",
|
|
1955
|
+
check: ({ ssrc0 }) => !!(ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.bitrate) &&
|
|
1956
|
+
ssrc0.direction === "in" &&
|
|
1957
|
+
(ssrc0.audioLevel || 0) >= 0.001 &&
|
|
1958
|
+
((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.audioDeceleration) || 0) >= 0.1,
|
|
1761
1959
|
},
|
|
1762
1960
|
{
|
|
1763
1961
|
id: "accelerated",
|
|
1764
|
-
enabled: ({ hasLiveTrack, ssrc0, kind }) => hasLiveTrack && ssrc0 && kind === "audio",
|
|
1765
|
-
check: ({ ssrc0 }) => ssrc0
|
|
1962
|
+
enabled: ({ hasLiveTrack, ssrc0, kind }) => hasLiveTrack && !!ssrc0 && kind === "audio",
|
|
1963
|
+
check: ({ ssrc0 }) => !!(ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.bitrate) &&
|
|
1964
|
+
ssrc0.direction === "in" &&
|
|
1965
|
+
(ssrc0.audioLevel || 0) >= 0.001 &&
|
|
1966
|
+
(ssrc0.audioAcceleration || 0) >= 0.1,
|
|
1766
1967
|
},
|
|
1767
1968
|
];
|
|
1768
1969
|
|
|
@@ -1771,41 +1972,41 @@ let stopStats = null;
|
|
|
1771
1972
|
const metrics = [
|
|
1772
1973
|
{
|
|
1773
1974
|
id: "bitrate",
|
|
1774
|
-
enabled: ({ hasLiveTrack, track, ssrc0 }) => hasLiveTrack && track && ssrc0,
|
|
1975
|
+
enabled: ({ hasLiveTrack, track, ssrc0 }) => hasLiveTrack && !!track && !!ssrc0,
|
|
1775
1976
|
value: ({ trackStats }) => Object.values(trackStats.ssrcs).reduce((sum, ssrc) => sum + ssrc.bitrate, 0),
|
|
1776
1977
|
},
|
|
1777
1978
|
{
|
|
1778
1979
|
id: "pixelrate",
|
|
1779
|
-
enabled: ({ hasLiveTrack, track, ssrc0, kind }) => hasLiveTrack && kind === "video" && track && ssrc0 && ssrc0.height,
|
|
1980
|
+
enabled: ({ hasLiveTrack, track, ssrc0, kind }) => hasLiveTrack && kind === "video" && !!track && !!ssrc0 && !!ssrc0.height,
|
|
1780
1981
|
value: ({ trackStats }) => Object.values(trackStats.ssrcs).reduce((sum, ssrc) => sum + (ssrc.fps || 0) * (ssrc.width || 0) * (ssrc.height || 0), 0),
|
|
1781
1982
|
},
|
|
1782
1983
|
{
|
|
1783
1984
|
id: "height",
|
|
1784
|
-
enabled: ({ hasLiveTrack, track, ssrc0, kind }) => hasLiveTrack && kind === "video" && track && ssrc0 && ssrc0.height,
|
|
1985
|
+
enabled: ({ hasLiveTrack, track, ssrc0, kind }) => hasLiveTrack && kind === "video" && !!track && !!ssrc0 && !!ssrc0.height,
|
|
1785
1986
|
value: ({ trackStats }) => Object.values(trackStats.ssrcs).reduce((max, ssrc) => Math.max(max, ssrc.fps > 0 ? ssrc.height : 0), 0),
|
|
1786
1987
|
},
|
|
1787
1988
|
{
|
|
1788
1989
|
id: "sourceHeight",
|
|
1789
|
-
enabled: ({ hasLiveTrack, track, ssrc0, kind }) => hasLiveTrack && kind === "video" && track && ssrc0 && ssrc0.sourceHeight && ssrc0.direction === "out",
|
|
1790
|
-
value: ({ ssrc0 }) => ssrc0.sourceHeight,
|
|
1990
|
+
enabled: ({ hasLiveTrack, track, ssrc0, kind }) => hasLiveTrack && kind === "video" && !!track && !!ssrc0 && !!ssrc0.sourceHeight && ssrc0.direction === "out",
|
|
1991
|
+
value: ({ ssrc0 }) => ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.sourceHeight,
|
|
1791
1992
|
},
|
|
1792
1993
|
{
|
|
1793
1994
|
id: "packetloss",
|
|
1794
|
-
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && ssrc0 && ssrc0.bitrate,
|
|
1795
|
-
value: ({ ssrc0 }) => (ssrc0.direction === "in" ? ssrc0.lossRatio : ssrc0.fractionLost) || 0,
|
|
1995
|
+
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && !!ssrc0 && !!ssrc0.bitrate,
|
|
1996
|
+
value: ({ ssrc0 }) => ((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.direction) === "in" ? ssrc0.lossRatio : ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.fractionLost) || 0,
|
|
1796
1997
|
},
|
|
1797
1998
|
{
|
|
1798
1999
|
id: "jitter",
|
|
1799
|
-
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && ssrc0 && ssrc0.bitrate && ssrc0.direction === "in",
|
|
1800
|
-
value: ({ ssrc0 }) => ssrc0.jitter,
|
|
2000
|
+
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && !!ssrc0 && !!ssrc0.bitrate && ssrc0.direction === "in",
|
|
2001
|
+
value: ({ ssrc0 }) => ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.jitter,
|
|
1801
2002
|
},
|
|
1802
2003
|
{
|
|
1803
2004
|
id: "mos",
|
|
1804
|
-
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && ssrc0 && ssrc0.bitrate && ssrc0.direction === "out",
|
|
2005
|
+
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && !!ssrc0 && !!ssrc0.bitrate && ssrc0.direction === "out",
|
|
1805
2006
|
value: ({ ssrc0 }) => {
|
|
1806
|
-
const averageLatency = ssrc0.roundTripTime || 0;
|
|
1807
|
-
const jitter = ssrc0.jitter || 0;
|
|
1808
|
-
const packetLoss = (ssrc0.fractionLost || 0) * 100;
|
|
2007
|
+
const averageLatency = (ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.roundTripTime) || 0;
|
|
2008
|
+
const jitter = (ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.jitter) || 0;
|
|
2009
|
+
const packetLoss = ((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.fractionLost) || 0) * 100;
|
|
1809
2010
|
const effectiveLatency = averageLatency + jitter * 2 + 10;
|
|
1810
2011
|
let r = effectiveLatency < 160 ? 93.2 - effectiveLatency / 40 : 93.2 - (effectiveLatency - 120) / 10;
|
|
1811
2012
|
r = r - packetLoss * 2.5;
|
|
@@ -1842,36 +2043,36 @@ const metrics = [
|
|
|
1842
2043
|
{
|
|
1843
2044
|
id: "concealment",
|
|
1844
2045
|
enabled: ({ hasLiveTrack, ssrc0, kind }) => hasLiveTrack &&
|
|
1845
|
-
ssrc0 &&
|
|
1846
|
-
ssrc0.bitrate &&
|
|
2046
|
+
!!ssrc0 &&
|
|
2047
|
+
!!ssrc0.bitrate &&
|
|
1847
2048
|
ssrc0.direction === "in" &&
|
|
1848
2049
|
kind === "audio" &&
|
|
1849
|
-
ssrc0.audioLevel >= 0.001,
|
|
1850
|
-
value: ({ ssrc0 }) => ssrc0.audioConcealment,
|
|
2050
|
+
(ssrc0.audioLevel || 0) >= 0.001,
|
|
2051
|
+
value: ({ ssrc0 }) => ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.audioConcealment,
|
|
1851
2052
|
},
|
|
1852
2053
|
{
|
|
1853
2054
|
id: "deceleration",
|
|
1854
2055
|
enabled: ({ hasLiveTrack, ssrc0, kind }) => hasLiveTrack &&
|
|
1855
|
-
ssrc0 &&
|
|
1856
|
-
ssrc0.bitrate &&
|
|
2056
|
+
!!ssrc0 &&
|
|
2057
|
+
!!ssrc0.bitrate &&
|
|
1857
2058
|
ssrc0.direction === "in" &&
|
|
1858
2059
|
kind === "audio" &&
|
|
1859
|
-
ssrc0.audioLevel >= 0.001,
|
|
1860
|
-
value: ({ ssrc0 }) => ssrc0.audioDeceleration,
|
|
2060
|
+
(ssrc0.audioLevel || 0) >= 0.001,
|
|
2061
|
+
value: ({ ssrc0 }) => ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.audioDeceleration,
|
|
1861
2062
|
},
|
|
1862
2063
|
{
|
|
1863
2064
|
id: "acceleration",
|
|
1864
2065
|
enabled: ({ hasLiveTrack, ssrc0, kind }) => hasLiveTrack &&
|
|
1865
|
-
ssrc0 &&
|
|
1866
|
-
ssrc0.bitrate &&
|
|
2066
|
+
!!ssrc0 &&
|
|
2067
|
+
!!ssrc0.bitrate &&
|
|
1867
2068
|
ssrc0.direction === "in" &&
|
|
1868
2069
|
kind === "audio" &&
|
|
1869
|
-
ssrc0.audioLevel >= 0.001,
|
|
1870
|
-
value: ({ ssrc0 }) => ssrc0.audioAcceleration,
|
|
2070
|
+
(ssrc0.audioLevel || 0) >= 0.001,
|
|
2071
|
+
value: ({ ssrc0 }) => ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.audioAcceleration,
|
|
1871
2072
|
},
|
|
1872
2073
|
{
|
|
1873
2074
|
id: "qpf",
|
|
1874
|
-
enabled: ({ hasLiveTrack, track, ssrc0, kind }) => hasLiveTrack && kind === "video" && track && ssrc0 && ssrc0.height,
|
|
2075
|
+
enabled: ({ hasLiveTrack, track, ssrc0, kind }) => hasLiveTrack && kind === "video" && !!track && !!ssrc0 && !!ssrc0.height,
|
|
1875
2076
|
value: ({ trackStats }) => Object.values(trackStats.ssrcs).reduce((sum, ssrc) => sum + (ssrc.qpf || 0), 0),
|
|
1876
2077
|
},
|
|
1877
2078
|
];
|
|
@@ -2776,8 +2977,8 @@ class BandwidthTester extends EventEmitter {
|
|
|
2776
2977
|
}
|
|
2777
2978
|
}
|
|
2778
2979
|
|
|
2779
|
-
var _a$
|
|
2780
|
-
const adapter$5 = (_a$
|
|
2980
|
+
var _a$5;
|
|
2981
|
+
const adapter$5 = (_a$5 = adapterRaw.default) !== null && _a$5 !== void 0 ? _a$5 : adapterRaw;
|
|
2781
2982
|
function detectMicrophoneNotWorking(pc) {
|
|
2782
2983
|
if (adapter$5.browserDetails.browser !== "chrome" ||
|
|
2783
2984
|
adapter$5.browserDetails.browser < 58 ||
|
|
@@ -2812,8 +3013,8 @@ const MAXIMUM_TURN_BANDWIDTH = 1280;
|
|
|
2812
3013
|
const MAXIMUM_TURN_BANDWIDTH_UNLIMITED = -1;
|
|
2813
3014
|
const MEDIA_JITTER_BUFFER_TARGET = 400;
|
|
2814
3015
|
|
|
2815
|
-
var _a$
|
|
2816
|
-
const adapter$4 = (_a$
|
|
3016
|
+
var _a$4;
|
|
3017
|
+
const adapter$4 = (_a$4 = adapterRaw.default) !== null && _a$4 !== void 0 ? _a$4 : adapterRaw;
|
|
2817
3018
|
const isSafari = adapter$4.browserDetails.browser === "safari";
|
|
2818
3019
|
const parseResolution = (res) => res.split(/[^\d]/g).map((n) => parseInt(n, 10));
|
|
2819
3020
|
function getMediaConstraints({ disableAEC, disableAGC, hd, lax, lowDataMode, preferredDeviceIds, resolution, simulcast, widescreen, }) {
|
|
@@ -2991,153 +3192,6 @@ function replaceTracksInStream(stream, newStream, only) {
|
|
|
2991
3192
|
});
|
|
2992
3193
|
return replacedTracks;
|
|
2993
3194
|
}
|
|
2994
|
-
function getTrack({ kind, deviceId, type, fallback = true, primerTrack, }) {
|
|
2995
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
2996
|
-
const devId = (deviceId) => (type === "exact" ? { deviceId: { exact: deviceId } } : { deviceId });
|
|
2997
|
-
const constraints = {
|
|
2998
|
-
[kind]: deviceId ? devId(deviceId) : kind === "video" ? { facingMode: "user" } : true,
|
|
2999
|
-
};
|
|
3000
|
-
let stream;
|
|
3001
|
-
try {
|
|
3002
|
-
stream = yield getUserMedia(constraints);
|
|
3003
|
-
}
|
|
3004
|
-
catch (e) {
|
|
3005
|
-
if (!fallback) {
|
|
3006
|
-
e.details = { constraints, constraint: e.constraint };
|
|
3007
|
-
throw e;
|
|
3008
|
-
}
|
|
3009
|
-
if (primerTrack) {
|
|
3010
|
-
return primerTrack;
|
|
3011
|
-
}
|
|
3012
|
-
stream = yield getUserMedia({ [kind]: true });
|
|
3013
|
-
}
|
|
3014
|
-
return stream.getTracks()[0];
|
|
3015
|
-
});
|
|
3016
|
-
}
|
|
3017
|
-
function constrainTrack(track, constraints) {
|
|
3018
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
3019
|
-
while (constraints.length) {
|
|
3020
|
-
try {
|
|
3021
|
-
yield track.applyConstraints(Object.assign({}, ...constraints));
|
|
3022
|
-
break;
|
|
3023
|
-
}
|
|
3024
|
-
catch (e) {
|
|
3025
|
-
const c = constraints.pop();
|
|
3026
|
-
logger$6.warn(`unable to apply ${JSON.stringify(c)}`, e);
|
|
3027
|
-
}
|
|
3028
|
-
}
|
|
3029
|
-
});
|
|
3030
|
-
}
|
|
3031
|
-
function getStream2(constraintOpt, additionalOpts = {}) {
|
|
3032
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
3033
|
-
const { audioId, videoId, devices, type, options } = constraintOpt;
|
|
3034
|
-
const { replaceStream, fallback } = additionalOpts;
|
|
3035
|
-
const hasGrantedPermissions = !!devices.find((d) => d.label !== "");
|
|
3036
|
-
let audioPrimerTrack;
|
|
3037
|
-
let videoPrimerTrack;
|
|
3038
|
-
if (!hasGrantedPermissions) {
|
|
3039
|
-
try {
|
|
3040
|
-
const primerStream = yield getUserMedia({
|
|
3041
|
-
audio: constraintOpt.audioId !== false,
|
|
3042
|
-
video: constraintOpt.videoId !== false,
|
|
3043
|
-
});
|
|
3044
|
-
audioPrimerTrack = primerStream.getAudioTracks()[0];
|
|
3045
|
-
videoPrimerTrack = primerStream.getVideoTracks()[0];
|
|
3046
|
-
}
|
|
3047
|
-
catch (err) {
|
|
3048
|
-
if (err.name === "NotAllowedError") {
|
|
3049
|
-
throw err;
|
|
3050
|
-
}
|
|
3051
|
-
}
|
|
3052
|
-
}
|
|
3053
|
-
const getAudio = () => __awaiter(this, void 0, void 0, function* () {
|
|
3054
|
-
if (audioId === false)
|
|
3055
|
-
return false;
|
|
3056
|
-
if (replaceStream)
|
|
3057
|
-
stopStreamTracks(replaceStream, "audio");
|
|
3058
|
-
const audioTrack = yield getTrack({
|
|
3059
|
-
deviceId: audioId,
|
|
3060
|
-
type,
|
|
3061
|
-
kind: "audio",
|
|
3062
|
-
fallback,
|
|
3063
|
-
primerTrack: audioPrimerTrack,
|
|
3064
|
-
});
|
|
3065
|
-
if (audioPrimerTrack && audioTrack !== audioPrimerTrack) {
|
|
3066
|
-
audioPrimerTrack.stop();
|
|
3067
|
-
}
|
|
3068
|
-
const { disableAEC, disableAGC } = options;
|
|
3069
|
-
const changes = [];
|
|
3070
|
-
if (disableAGC) {
|
|
3071
|
-
changes.push({ autoGainControl: false });
|
|
3072
|
-
}
|
|
3073
|
-
if (disableAEC) {
|
|
3074
|
-
changes.push({ echoCancellation: false });
|
|
3075
|
-
}
|
|
3076
|
-
yield constrainTrack(audioTrack, changes);
|
|
3077
|
-
return audioTrack;
|
|
3078
|
-
});
|
|
3079
|
-
const getVideo = () => __awaiter(this, void 0, void 0, function* () {
|
|
3080
|
-
if (videoId === false)
|
|
3081
|
-
return false;
|
|
3082
|
-
if (replaceStream)
|
|
3083
|
-
stopStreamTracks(replaceStream, "video");
|
|
3084
|
-
const videoTrack = yield getTrack({
|
|
3085
|
-
deviceId: videoId,
|
|
3086
|
-
type,
|
|
3087
|
-
kind: "video",
|
|
3088
|
-
fallback,
|
|
3089
|
-
primerTrack: videoPrimerTrack,
|
|
3090
|
-
});
|
|
3091
|
-
if (videoPrimerTrack && videoTrack !== videoPrimerTrack) {
|
|
3092
|
-
videoPrimerTrack.stop();
|
|
3093
|
-
}
|
|
3094
|
-
const { lowDataMode, simulcast, usingAspectRatio16x9 } = options;
|
|
3095
|
-
const changes = [];
|
|
3096
|
-
if (lowDataMode) {
|
|
3097
|
-
changes.push({ frameRate: simulcast ? 30 : 15 });
|
|
3098
|
-
}
|
|
3099
|
-
if (usingAspectRatio16x9) {
|
|
3100
|
-
changes.push({ aspectRatio: 16 / 9 });
|
|
3101
|
-
}
|
|
3102
|
-
if (lowDataMode) {
|
|
3103
|
-
changes.push({ width: { max: simulcast ? 640 : 320 } });
|
|
3104
|
-
}
|
|
3105
|
-
else {
|
|
3106
|
-
changes.push({ width: { max: 1280 } });
|
|
3107
|
-
}
|
|
3108
|
-
yield constrainTrack(videoTrack, changes);
|
|
3109
|
-
return videoTrack;
|
|
3110
|
-
});
|
|
3111
|
-
const audioPromise = getAudio();
|
|
3112
|
-
const videoPromise = getVideo();
|
|
3113
|
-
let audioTrack;
|
|
3114
|
-
let videoTrack;
|
|
3115
|
-
let error;
|
|
3116
|
-
try {
|
|
3117
|
-
audioTrack = yield audioPromise;
|
|
3118
|
-
}
|
|
3119
|
-
catch (e) {
|
|
3120
|
-
error = e;
|
|
3121
|
-
if (type === "exact")
|
|
3122
|
-
throw e;
|
|
3123
|
-
}
|
|
3124
|
-
try {
|
|
3125
|
-
videoTrack = yield videoPromise;
|
|
3126
|
-
}
|
|
3127
|
-
catch (e) {
|
|
3128
|
-
error = e;
|
|
3129
|
-
if (type === "exact")
|
|
3130
|
-
throw e;
|
|
3131
|
-
}
|
|
3132
|
-
const newStream = new MediaStream([audioTrack, videoTrack].filter(Boolean));
|
|
3133
|
-
let replacedTracks;
|
|
3134
|
-
if (replaceStream) {
|
|
3135
|
-
const only = (audioId === false && "video") || (videoId === false && "audio") || "audio";
|
|
3136
|
-
replacedTracks = replaceTracksInStream(replaceStream, newStream, only);
|
|
3137
|
-
}
|
|
3138
|
-
return { stream: replaceStream || newStream, error, replacedTracks };
|
|
3139
|
-
});
|
|
3140
|
-
}
|
|
3141
3195
|
function getStream(constraintOpt, { replaceStream, fallback = true } = {}) {
|
|
3142
3196
|
var _a;
|
|
3143
3197
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -3339,178 +3393,6 @@ function getUpdatedDevices({ oldDevices, newDevices, currentAudioId, currentVide
|
|
|
3339
3393
|
return { addedDevices, changedDevices };
|
|
3340
3394
|
}
|
|
3341
3395
|
|
|
3342
|
-
var _a$4;
|
|
3343
|
-
(_a$4 = adapterRaw.default) !== null && _a$4 !== void 0 ? _a$4 : adapterRaw;
|
|
3344
|
-
const RTCSTATS_PROTOCOL_VERSION = "1.0";
|
|
3345
|
-
const GETSTATS_BUFFER_SIZE = 20;
|
|
3346
|
-
const clientInfo = {
|
|
3347
|
-
id: uuid.v4(),
|
|
3348
|
-
connectionNumber: 0,
|
|
3349
|
-
};
|
|
3350
|
-
const noop = () => { };
|
|
3351
|
-
let resetDelta = noop;
|
|
3352
|
-
function rtcStatsConnection(wsURL, logger = console) {
|
|
3353
|
-
const buffer = [];
|
|
3354
|
-
let ws;
|
|
3355
|
-
let organizationId;
|
|
3356
|
-
let clientId;
|
|
3357
|
-
let displayName;
|
|
3358
|
-
let userRole;
|
|
3359
|
-
let roomSessionId;
|
|
3360
|
-
let connectionShouldBeOpen;
|
|
3361
|
-
let connectionAttempt = 0;
|
|
3362
|
-
let hasPassedOnRoomSessionId = false;
|
|
3363
|
-
let getStatsBufferUsed = 0;
|
|
3364
|
-
let deviceId;
|
|
3365
|
-
let roomProduct;
|
|
3366
|
-
let roomMode;
|
|
3367
|
-
let sfuServer;
|
|
3368
|
-
let featureFlags;
|
|
3369
|
-
const connection = {
|
|
3370
|
-
connected: false,
|
|
3371
|
-
trace: (...args) => {
|
|
3372
|
-
args.push(Date.now());
|
|
3373
|
-
if (args[0] === "customEvent" && args[2].type === "roomSessionId") {
|
|
3374
|
-
const oldRoomSessionIdValue = roomSessionId && roomSessionId[2].value.roomSessionId;
|
|
3375
|
-
const newRoomSessionIdValue = args[2].value.roomSessionId;
|
|
3376
|
-
roomSessionId = args;
|
|
3377
|
-
if (hasPassedOnRoomSessionId &&
|
|
3378
|
-
newRoomSessionIdValue &&
|
|
3379
|
-
newRoomSessionIdValue !== oldRoomSessionIdValue) {
|
|
3380
|
-
ws === null || ws === void 0 ? void 0 : ws.close();
|
|
3381
|
-
}
|
|
3382
|
-
if (newRoomSessionIdValue)
|
|
3383
|
-
hasPassedOnRoomSessionId = true;
|
|
3384
|
-
}
|
|
3385
|
-
else if (args[0] === "customEvent" && args[2].type === "clientId") {
|
|
3386
|
-
clientId = args;
|
|
3387
|
-
}
|
|
3388
|
-
else if (args[0] === "customEvent" && args[2].type === "organizationId") {
|
|
3389
|
-
organizationId = args;
|
|
3390
|
-
}
|
|
3391
|
-
else if (args[0] === "customEvent" && args[2].type === "displayName") {
|
|
3392
|
-
displayName = args;
|
|
3393
|
-
}
|
|
3394
|
-
else if (args[0] === "customEvent" && args[2].type === "userRole") {
|
|
3395
|
-
userRole = args;
|
|
3396
|
-
}
|
|
3397
|
-
else if (args[0] === "customEvent" && args[2].type === "deviceId") {
|
|
3398
|
-
deviceId = args;
|
|
3399
|
-
}
|
|
3400
|
-
else if (args[0] === "customEvent" && args[2].type === "roomProduct") {
|
|
3401
|
-
roomProduct = args;
|
|
3402
|
-
}
|
|
3403
|
-
else if (args[0] === "customEvent" && args[2].type === "roomMode") {
|
|
3404
|
-
roomMode = args;
|
|
3405
|
-
}
|
|
3406
|
-
else if (args[0] === "customEvent" && args[2].type === "sfuServer") {
|
|
3407
|
-
sfuServer = args;
|
|
3408
|
-
}
|
|
3409
|
-
else if (args[0] === "customEvent" && args[2].type === "featureFlags") {
|
|
3410
|
-
featureFlags = args;
|
|
3411
|
-
}
|
|
3412
|
-
if ((ws === null || ws === void 0 ? void 0 : ws.readyState) === WebSocket.OPEN) {
|
|
3413
|
-
connectionAttempt = 0;
|
|
3414
|
-
ws.send(JSON.stringify(args));
|
|
3415
|
-
}
|
|
3416
|
-
else if (args[0] === "getstats") {
|
|
3417
|
-
if (getStatsBufferUsed < GETSTATS_BUFFER_SIZE) {
|
|
3418
|
-
getStatsBufferUsed++;
|
|
3419
|
-
buffer.push(args);
|
|
3420
|
-
}
|
|
3421
|
-
}
|
|
3422
|
-
else if (args[0] === "customEvent" && args[2].type === "insightsStats") ;
|
|
3423
|
-
else {
|
|
3424
|
-
buffer.push(args);
|
|
3425
|
-
}
|
|
3426
|
-
if ((ws === null || ws === void 0 ? void 0 : ws.readyState) === WebSocket.CLOSED && connectionShouldBeOpen) {
|
|
3427
|
-
setTimeout(() => {
|
|
3428
|
-
if (ws.readyState === WebSocket.CLOSED && connectionShouldBeOpen) {
|
|
3429
|
-
connection.connect();
|
|
3430
|
-
}
|
|
3431
|
-
}, 1000 * connectionAttempt);
|
|
3432
|
-
}
|
|
3433
|
-
},
|
|
3434
|
-
close: () => {
|
|
3435
|
-
connectionShouldBeOpen = false;
|
|
3436
|
-
ws === null || ws === void 0 ? void 0 : ws.close();
|
|
3437
|
-
},
|
|
3438
|
-
connect: () => {
|
|
3439
|
-
connectionShouldBeOpen = true;
|
|
3440
|
-
connectionAttempt += 1;
|
|
3441
|
-
ws === null || ws === void 0 ? void 0 : ws.close();
|
|
3442
|
-
connection.connected = true;
|
|
3443
|
-
ws = new WebSocket(wsURL + window.location.pathname, RTCSTATS_PROTOCOL_VERSION);
|
|
3444
|
-
ws.onerror = (e) => {
|
|
3445
|
-
connection.connected = false;
|
|
3446
|
-
logger.warn(`[RTCSTATS] WebSocket error`, e);
|
|
3447
|
-
};
|
|
3448
|
-
ws.onclose = (e) => {
|
|
3449
|
-
connection.connected = false;
|
|
3450
|
-
logger.info(`[RTCSTATS] Closed ${e.code}`);
|
|
3451
|
-
resetDelta();
|
|
3452
|
-
};
|
|
3453
|
-
ws.onopen = () => {
|
|
3454
|
-
clientInfo.connectionNumber++;
|
|
3455
|
-
ws.send(JSON.stringify(["clientInfo", null, clientInfo]));
|
|
3456
|
-
if (organizationId) {
|
|
3457
|
-
ws.send(JSON.stringify(organizationId));
|
|
3458
|
-
}
|
|
3459
|
-
if (clientId) {
|
|
3460
|
-
ws.send(JSON.stringify(clientId));
|
|
3461
|
-
}
|
|
3462
|
-
if (roomSessionId) {
|
|
3463
|
-
ws.send(JSON.stringify(roomSessionId));
|
|
3464
|
-
}
|
|
3465
|
-
if (displayName) {
|
|
3466
|
-
ws.send(JSON.stringify(displayName));
|
|
3467
|
-
}
|
|
3468
|
-
if (userRole) {
|
|
3469
|
-
ws.send(JSON.stringify(userRole));
|
|
3470
|
-
}
|
|
3471
|
-
if (deviceId) {
|
|
3472
|
-
ws.send(JSON.stringify(deviceId));
|
|
3473
|
-
}
|
|
3474
|
-
if (roomMode) {
|
|
3475
|
-
ws.send(JSON.stringify(roomMode));
|
|
3476
|
-
}
|
|
3477
|
-
if (roomProduct) {
|
|
3478
|
-
ws.send(JSON.stringify(roomProduct));
|
|
3479
|
-
}
|
|
3480
|
-
if (sfuServer) {
|
|
3481
|
-
ws.send(JSON.stringify(sfuServer));
|
|
3482
|
-
}
|
|
3483
|
-
if (featureFlags) {
|
|
3484
|
-
ws.send(JSON.stringify(featureFlags));
|
|
3485
|
-
}
|
|
3486
|
-
while (buffer.length) {
|
|
3487
|
-
ws.send(JSON.stringify(buffer.shift()));
|
|
3488
|
-
}
|
|
3489
|
-
getStatsBufferUsed = 0;
|
|
3490
|
-
};
|
|
3491
|
-
},
|
|
3492
|
-
};
|
|
3493
|
-
return connection;
|
|
3494
|
-
}
|
|
3495
|
-
const server = rtcStatsConnection(process.env.RTCSTATS_URL || "wss://rtcstats.srv.whereby.com");
|
|
3496
|
-
const stats = rtcstats(server.trace, 10000, [""]);
|
|
3497
|
-
resetDelta = (stats === null || stats === void 0 ? void 0 : stats.resetDelta) || noop;
|
|
3498
|
-
const rtcStats = {
|
|
3499
|
-
sendEvent: (type, value) => {
|
|
3500
|
-
server.trace("customEvent", null, {
|
|
3501
|
-
type,
|
|
3502
|
-
value,
|
|
3503
|
-
});
|
|
3504
|
-
},
|
|
3505
|
-
sendAudioMuted: (muted) => {
|
|
3506
|
-
rtcStats.sendEvent("audio_muted", { muted });
|
|
3507
|
-
},
|
|
3508
|
-
sendVideoMuted: (muted) => {
|
|
3509
|
-
rtcStats.sendEvent("video_muted", { muted });
|
|
3510
|
-
},
|
|
3511
|
-
server,
|
|
3512
|
-
};
|
|
3513
|
-
|
|
3514
3396
|
var _a$3;
|
|
3515
3397
|
const adapter$3 = (_a$3 = adapterRaw.default) !== null && _a$3 !== void 0 ? _a$3 : adapterRaw;
|
|
3516
3398
|
const logger$5 = new Logger();
|
|
@@ -7123,11 +7005,11 @@ exports.getHandler = getHandler;
|
|
|
7123
7005
|
exports.getIssuesAndMetrics = getIssuesAndMetrics;
|
|
7124
7006
|
exports.getMediaConstraints = getMediaConstraints;
|
|
7125
7007
|
exports.getMediaSettings = getMediaSettings;
|
|
7008
|
+
exports.getNumFailedStatsReports = getNumFailedStatsReports;
|
|
7126
7009
|
exports.getOptimalBitrate = getOptimalBitrate;
|
|
7127
7010
|
exports.getPeerConnectionIndex = getPeerConnectionIndex;
|
|
7128
7011
|
exports.getStats = getStats;
|
|
7129
7012
|
exports.getStream = getStream;
|
|
7130
|
-
exports.getStream2 = getStream2;
|
|
7131
7013
|
exports.getUpdatedDevices = getUpdatedDevices;
|
|
7132
7014
|
exports.getUpdatedStats = getUpdatedStats;
|
|
7133
7015
|
exports.getUserMedia = getUserMedia;
|