@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/legacy-esm.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { detectDevice, Device } from 'mediasoup-client';
|
|
2
|
-
import EventEmitter, { EventEmitter as EventEmitter$1 } from 'events';
|
|
3
|
-
import { io } from 'socket.io-client';
|
|
4
1
|
import adapterRaw from 'webrtc-adapter';
|
|
5
2
|
import rtcstats from 'rtcstats';
|
|
6
3
|
import { v4 as v4$1 } from 'uuid';
|
|
4
|
+
import { detectDevice, Device } from 'mediasoup-client';
|
|
5
|
+
import EventEmitter, { EventEmitter as EventEmitter$1 } from 'events';
|
|
6
|
+
import { io } from 'socket.io-client';
|
|
7
7
|
import SDPUtils from 'sdp';
|
|
8
8
|
import * as sdpTransform from 'sdp-transform';
|
|
9
9
|
import { Address6 } from 'ip-address';
|
|
@@ -97,6 +97,178 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
|
|
|
97
97
|
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
98
98
|
};
|
|
99
99
|
|
|
100
|
+
var _a$7;
|
|
101
|
+
(_a$7 = adapterRaw.default) !== null && _a$7 !== void 0 ? _a$7 : adapterRaw;
|
|
102
|
+
const RTCSTATS_PROTOCOL_VERSION = "1.0";
|
|
103
|
+
const GETSTATS_BUFFER_SIZE = 20;
|
|
104
|
+
const clientInfo = {
|
|
105
|
+
id: v4$1(),
|
|
106
|
+
connectionNumber: 0,
|
|
107
|
+
};
|
|
108
|
+
const noop = () => { };
|
|
109
|
+
let resetDelta = noop;
|
|
110
|
+
function rtcStatsConnection(wsURL, logger = console) {
|
|
111
|
+
const buffer = [];
|
|
112
|
+
let ws;
|
|
113
|
+
let organizationId;
|
|
114
|
+
let clientId;
|
|
115
|
+
let displayName;
|
|
116
|
+
let userRole;
|
|
117
|
+
let roomSessionId;
|
|
118
|
+
let connectionShouldBeOpen;
|
|
119
|
+
let connectionAttempt = 0;
|
|
120
|
+
let hasPassedOnRoomSessionId = false;
|
|
121
|
+
let getStatsBufferUsed = 0;
|
|
122
|
+
let deviceId;
|
|
123
|
+
let roomProduct;
|
|
124
|
+
let roomMode;
|
|
125
|
+
let sfuServer;
|
|
126
|
+
let featureFlags;
|
|
127
|
+
const connection = {
|
|
128
|
+
connected: false,
|
|
129
|
+
trace: (...args) => {
|
|
130
|
+
args.push(Date.now());
|
|
131
|
+
if (args[0] === "customEvent" && args[2].type === "roomSessionId") {
|
|
132
|
+
const oldRoomSessionIdValue = roomSessionId && roomSessionId[2].value.roomSessionId;
|
|
133
|
+
const newRoomSessionIdValue = args[2].value.roomSessionId;
|
|
134
|
+
roomSessionId = args;
|
|
135
|
+
if (hasPassedOnRoomSessionId &&
|
|
136
|
+
newRoomSessionIdValue &&
|
|
137
|
+
newRoomSessionIdValue !== oldRoomSessionIdValue) {
|
|
138
|
+
ws === null || ws === void 0 ? void 0 : ws.close();
|
|
139
|
+
}
|
|
140
|
+
if (newRoomSessionIdValue)
|
|
141
|
+
hasPassedOnRoomSessionId = true;
|
|
142
|
+
}
|
|
143
|
+
else if (args[0] === "customEvent" && args[2].type === "clientId") {
|
|
144
|
+
clientId = args;
|
|
145
|
+
}
|
|
146
|
+
else if (args[0] === "customEvent" && args[2].type === "organizationId") {
|
|
147
|
+
organizationId = args;
|
|
148
|
+
}
|
|
149
|
+
else if (args[0] === "customEvent" && args[2].type === "displayName") {
|
|
150
|
+
displayName = args;
|
|
151
|
+
}
|
|
152
|
+
else if (args[0] === "customEvent" && args[2].type === "userRole") {
|
|
153
|
+
userRole = args;
|
|
154
|
+
}
|
|
155
|
+
else if (args[0] === "customEvent" && args[2].type === "deviceId") {
|
|
156
|
+
deviceId = args;
|
|
157
|
+
}
|
|
158
|
+
else if (args[0] === "customEvent" && args[2].type === "roomProduct") {
|
|
159
|
+
roomProduct = args;
|
|
160
|
+
}
|
|
161
|
+
else if (args[0] === "customEvent" && args[2].type === "roomMode") {
|
|
162
|
+
roomMode = args;
|
|
163
|
+
}
|
|
164
|
+
else if (args[0] === "customEvent" && args[2].type === "sfuServer") {
|
|
165
|
+
sfuServer = args;
|
|
166
|
+
}
|
|
167
|
+
else if (args[0] === "customEvent" && args[2].type === "featureFlags") {
|
|
168
|
+
featureFlags = args;
|
|
169
|
+
}
|
|
170
|
+
if ((ws === null || ws === void 0 ? void 0 : ws.readyState) === WebSocket.OPEN) {
|
|
171
|
+
connectionAttempt = 0;
|
|
172
|
+
ws.send(JSON.stringify(args));
|
|
173
|
+
}
|
|
174
|
+
else if (args[0] === "getstats") {
|
|
175
|
+
if (getStatsBufferUsed < GETSTATS_BUFFER_SIZE) {
|
|
176
|
+
getStatsBufferUsed++;
|
|
177
|
+
buffer.push(args);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
else if (args[0] === "customEvent" && args[2].type === "insightsStats") ;
|
|
181
|
+
else {
|
|
182
|
+
buffer.push(args);
|
|
183
|
+
}
|
|
184
|
+
if ((ws === null || ws === void 0 ? void 0 : ws.readyState) === WebSocket.CLOSED && connectionShouldBeOpen) {
|
|
185
|
+
setTimeout(() => {
|
|
186
|
+
if (ws.readyState === WebSocket.CLOSED && connectionShouldBeOpen) {
|
|
187
|
+
connection.connect();
|
|
188
|
+
}
|
|
189
|
+
}, 1000 * connectionAttempt);
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
close: () => {
|
|
193
|
+
connectionShouldBeOpen = false;
|
|
194
|
+
ws === null || ws === void 0 ? void 0 : ws.close();
|
|
195
|
+
},
|
|
196
|
+
connect: () => {
|
|
197
|
+
connectionShouldBeOpen = true;
|
|
198
|
+
connectionAttempt += 1;
|
|
199
|
+
ws === null || ws === void 0 ? void 0 : ws.close();
|
|
200
|
+
connection.connected = true;
|
|
201
|
+
ws = new WebSocket(wsURL + window.location.pathname, RTCSTATS_PROTOCOL_VERSION);
|
|
202
|
+
ws.onerror = (e) => {
|
|
203
|
+
connection.connected = false;
|
|
204
|
+
logger.warn(`[RTCSTATS] WebSocket error`, e);
|
|
205
|
+
};
|
|
206
|
+
ws.onclose = (e) => {
|
|
207
|
+
connection.connected = false;
|
|
208
|
+
logger.info(`[RTCSTATS] Closed ${e.code}`);
|
|
209
|
+
resetDelta();
|
|
210
|
+
};
|
|
211
|
+
ws.onopen = () => {
|
|
212
|
+
clientInfo.connectionNumber++;
|
|
213
|
+
ws.send(JSON.stringify(["clientInfo", null, clientInfo]));
|
|
214
|
+
if (organizationId) {
|
|
215
|
+
ws.send(JSON.stringify(organizationId));
|
|
216
|
+
}
|
|
217
|
+
if (clientId) {
|
|
218
|
+
ws.send(JSON.stringify(clientId));
|
|
219
|
+
}
|
|
220
|
+
if (roomSessionId) {
|
|
221
|
+
ws.send(JSON.stringify(roomSessionId));
|
|
222
|
+
}
|
|
223
|
+
if (displayName) {
|
|
224
|
+
ws.send(JSON.stringify(displayName));
|
|
225
|
+
}
|
|
226
|
+
if (userRole) {
|
|
227
|
+
ws.send(JSON.stringify(userRole));
|
|
228
|
+
}
|
|
229
|
+
if (deviceId) {
|
|
230
|
+
ws.send(JSON.stringify(deviceId));
|
|
231
|
+
}
|
|
232
|
+
if (roomMode) {
|
|
233
|
+
ws.send(JSON.stringify(roomMode));
|
|
234
|
+
}
|
|
235
|
+
if (roomProduct) {
|
|
236
|
+
ws.send(JSON.stringify(roomProduct));
|
|
237
|
+
}
|
|
238
|
+
if (sfuServer) {
|
|
239
|
+
ws.send(JSON.stringify(sfuServer));
|
|
240
|
+
}
|
|
241
|
+
if (featureFlags) {
|
|
242
|
+
ws.send(JSON.stringify(featureFlags));
|
|
243
|
+
}
|
|
244
|
+
while (buffer.length) {
|
|
245
|
+
ws.send(JSON.stringify(buffer.shift()));
|
|
246
|
+
}
|
|
247
|
+
getStatsBufferUsed = 0;
|
|
248
|
+
};
|
|
249
|
+
},
|
|
250
|
+
};
|
|
251
|
+
return connection;
|
|
252
|
+
}
|
|
253
|
+
const server = rtcStatsConnection(process.env.RTCSTATS_URL || "wss://rtcstats.srv.whereby.com");
|
|
254
|
+
const stats = rtcstats(server.trace, 10000, [""]);
|
|
255
|
+
resetDelta = (stats === null || stats === void 0 ? void 0 : stats.resetDelta) || noop;
|
|
256
|
+
const rtcStats = {
|
|
257
|
+
sendEvent: (type, value) => {
|
|
258
|
+
server.trace("customEvent", null, {
|
|
259
|
+
type,
|
|
260
|
+
value,
|
|
261
|
+
});
|
|
262
|
+
},
|
|
263
|
+
sendAudioMuted: (muted) => {
|
|
264
|
+
rtcStats.sendEvent("audio_muted", { muted });
|
|
265
|
+
},
|
|
266
|
+
sendVideoMuted: (muted) => {
|
|
267
|
+
rtcStats.sendEvent("video_muted", { muted });
|
|
268
|
+
},
|
|
269
|
+
server,
|
|
270
|
+
};
|
|
271
|
+
|
|
100
272
|
function captureCandidatePairInfoMetrics(cpMetrics, currentCptats, prevCptats, timeDiff, report) {
|
|
101
273
|
const bytesReceivedDiff = currentCptats.bytesReceived - ((prevCptats === null || prevCptats === void 0 ? void 0 : prevCptats.bytesReceived) || 0);
|
|
102
274
|
const bytesSentDiff = currentCptats.bytesSent - ((prevCptats === null || prevCptats === void 0 ? void 0 : prevCptats.bytesSent) || 0);
|
|
@@ -532,8 +704,14 @@ function collectStats(state, { logger, interval }, immediate) {
|
|
|
532
704
|
state.subscriptions.forEach((subscription) => { var _a; return (_a = subscription.onUpdatedStats) === null || _a === void 0 ? void 0 : _a.call(subscription, state.statsByView, clients); });
|
|
533
705
|
}
|
|
534
706
|
}
|
|
535
|
-
catch (
|
|
536
|
-
logger.warn(
|
|
707
|
+
catch (e) {
|
|
708
|
+
logger.warn(e);
|
|
709
|
+
state.numFailedStatsReports++;
|
|
710
|
+
rtcStats.sendEvent("collectStatsFailed", {
|
|
711
|
+
name: e === null || e === void 0 ? void 0 : e.name,
|
|
712
|
+
cause: e === null || e === void 0 ? void 0 : e.cause,
|
|
713
|
+
message: e === null || e === void 0 ? void 0 : e.message,
|
|
714
|
+
});
|
|
537
715
|
}
|
|
538
716
|
state.nextTimeout = setTimeout(collectStatsBound, interval);
|
|
539
717
|
});
|
|
@@ -589,6 +767,7 @@ const STATE = {
|
|
|
589
767
|
lastUpdateTime: 0,
|
|
590
768
|
statsByView: {},
|
|
591
769
|
subscriptions: [],
|
|
770
|
+
numFailedStatsReports: 0,
|
|
592
771
|
};
|
|
593
772
|
const OPTIONS = {
|
|
594
773
|
interval: 2000,
|
|
@@ -597,6 +776,9 @@ const OPTIONS = {
|
|
|
597
776
|
const getStats = () => {
|
|
598
777
|
return Object.assign({}, STATE.statsByView);
|
|
599
778
|
};
|
|
779
|
+
const getNumFailedStatsReports = () => {
|
|
780
|
+
return STATE.numFailedStatsReports;
|
|
781
|
+
};
|
|
600
782
|
const getUpdatedStats = () => { var _a; return (_a = STATE.currentMonitor) === null || _a === void 0 ? void 0 : _a.getUpdatedStats(); };
|
|
601
783
|
const setClientProvider = (provider) => (STATE.getClients = provider);
|
|
602
784
|
function startStatsMonitor(state, { interval, logger }) {
|
|
@@ -1259,8 +1441,8 @@ class ReconnectManager extends EventEmitter {
|
|
|
1259
1441
|
}
|
|
1260
1442
|
}
|
|
1261
1443
|
|
|
1262
|
-
var _a$
|
|
1263
|
-
const adapter$6 = (_a$
|
|
1444
|
+
var _a$6;
|
|
1445
|
+
const adapter$6 = (_a$6 = adapterRaw.default) !== null && _a$6 !== void 0 ? _a$6 : adapterRaw;
|
|
1264
1446
|
const DEFAULT_SOCKET_PATH = "/protocol/socket.io/v4";
|
|
1265
1447
|
const NOOP_KEEPALIVE_INTERVAL = 2000;
|
|
1266
1448
|
class ServerSocket {
|
|
@@ -1553,9 +1735,15 @@ const packetLossAnalyser = new PacketLossAnalyser();
|
|
|
1553
1735
|
const periodicPacketLossDetector = {
|
|
1554
1736
|
id: "periodic-packet-loss",
|
|
1555
1737
|
enabled: ({ client, hasLiveTrack, ssrc0 }) => {
|
|
1556
|
-
return client.isLocalClient &&
|
|
1738
|
+
return (client.isLocalClient &&
|
|
1739
|
+
hasLiveTrack &&
|
|
1740
|
+
!!(ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.ssrc) &&
|
|
1741
|
+
(ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.direction) === "out" &&
|
|
1742
|
+
((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.bitrate) || 0) > 0);
|
|
1557
1743
|
},
|
|
1558
1744
|
check: ({ ssrc0 }) => {
|
|
1745
|
+
if (!ssrc0 || !ssrc0.ssrc)
|
|
1746
|
+
return false;
|
|
1559
1747
|
packetLossAnalyser.addPacketLossMeasurement(ssrc0.ssrc, ssrc0.fractionLost || 0, Date.now());
|
|
1560
1748
|
return packetLossAnalyser.hasPeriodicPacketLoss(ssrc0.ssrc, Date.now());
|
|
1561
1749
|
},
|
|
@@ -1661,8 +1849,12 @@ const issueDetectors = [
|
|
|
1661
1849
|
dryTrackIssueDetector,
|
|
1662
1850
|
{
|
|
1663
1851
|
id: "low-layer0-bitrate",
|
|
1664
|
-
enabled: ({ hasLiveTrack, ssrc0, kind, client }) => hasLiveTrack && kind === "video" && ssrc0 && ssrc0.height && !client.isPresentation,
|
|
1665
|
-
check: ({ ssrc0 }) =>
|
|
1852
|
+
enabled: ({ hasLiveTrack, ssrc0, kind, client }) => hasLiveTrack && kind === "video" && !!ssrc0 && !!(ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.height) && !client.isPresentation,
|
|
1853
|
+
check: ({ ssrc0 }) => {
|
|
1854
|
+
if (!(ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.bitrate))
|
|
1855
|
+
return false;
|
|
1856
|
+
return ((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.height) || 0) < 200 && ssrc0.bitrate < 30000;
|
|
1857
|
+
},
|
|
1666
1858
|
},
|
|
1667
1859
|
{
|
|
1668
1860
|
id: "quality-limitation-bw",
|
|
@@ -1676,43 +1868,43 @@ const issueDetectors = [
|
|
|
1676
1868
|
},
|
|
1677
1869
|
{
|
|
1678
1870
|
id: "high-plirate",
|
|
1679
|
-
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && ssrc0 && ssrc0.height,
|
|
1680
|
-
check: ({ ssrc0 }) => ssrc0.pliRate > 2,
|
|
1871
|
+
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && !!ssrc0 && !!ssrc0.height,
|
|
1872
|
+
check: ({ ssrc0 }) => ((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.pliRate) || 0) > 2,
|
|
1681
1873
|
},
|
|
1682
1874
|
{
|
|
1683
1875
|
id: "extreme-plirate",
|
|
1684
|
-
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && ssrc0 && ssrc0.height,
|
|
1685
|
-
check: ({ ssrc0 }) => ssrc0.pliRate > 5,
|
|
1876
|
+
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && !!ssrc0 && !!ssrc0.height,
|
|
1877
|
+
check: ({ ssrc0 }) => ((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.pliRate) || 0) > 5,
|
|
1686
1878
|
},
|
|
1687
1879
|
{
|
|
1688
1880
|
id: "high-packetloss",
|
|
1689
|
-
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && ssrc0 && ssrc0.direction === "in",
|
|
1690
|
-
check: ({ ssrc0 }) => ssrc0.lossRatio > 0.02,
|
|
1881
|
+
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && !!ssrc0 && ssrc0.direction === "in",
|
|
1882
|
+
check: ({ ssrc0 }) => ((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.lossRatio) || 0) > 0.02,
|
|
1691
1883
|
},
|
|
1692
1884
|
{
|
|
1693
1885
|
id: "extreme-packetloss",
|
|
1694
|
-
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && ssrc0 && ssrc0.direction === "in",
|
|
1695
|
-
check: ({ ssrc0 }) => ssrc0.lossRatio > 0.1,
|
|
1886
|
+
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && !!ssrc0 && ssrc0.direction === "in",
|
|
1887
|
+
check: ({ ssrc0 }) => ((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.lossRatio) || 0) > 0.1,
|
|
1696
1888
|
},
|
|
1697
1889
|
{
|
|
1698
1890
|
id: "high-packetloss",
|
|
1699
|
-
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && ssrc0 && ssrc0.direction === "out",
|
|
1700
|
-
check: ({ ssrc0 }) => (ssrc0.fractionLost || 0) > 0.02,
|
|
1891
|
+
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && !!ssrc0 && ssrc0.direction === "out",
|
|
1892
|
+
check: ({ ssrc0 }) => ((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.fractionLost) || 0) > 0.02,
|
|
1701
1893
|
},
|
|
1702
1894
|
{
|
|
1703
1895
|
id: "extreme-packetloss",
|
|
1704
|
-
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && ssrc0 && ssrc0.direction === "out",
|
|
1705
|
-
check: ({ ssrc0 }) => (ssrc0.fractionLost || 0) > 0.1,
|
|
1896
|
+
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && !!ssrc0 && ssrc0.direction === "out",
|
|
1897
|
+
check: ({ ssrc0 }) => ((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.fractionLost) || 0) > 0.1,
|
|
1706
1898
|
},
|
|
1707
1899
|
{
|
|
1708
1900
|
id: "fps-below-20",
|
|
1709
|
-
enabled: ({ hasLiveTrack, ssrc0, kind, client }) => hasLiveTrack && ssrc0 && ssrc0.height && kind === "video" && !client.isPresentation,
|
|
1710
|
-
check: ({ ssrc0 }) => ssrc0.height > 180 && ssrc0.fps < 20,
|
|
1901
|
+
enabled: ({ hasLiveTrack, ssrc0, kind, client }) => hasLiveTrack && !!ssrc0 && !!ssrc0.height && kind === "video" && !client.isPresentation,
|
|
1902
|
+
check: ({ ssrc0 }) => ((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.height) || 0) > 180 && ((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.fps) || 0) < 20,
|
|
1711
1903
|
},
|
|
1712
1904
|
{
|
|
1713
1905
|
id: "fps-below-10",
|
|
1714
|
-
enabled: ({ hasLiveTrack, ssrc0, kind, client }) => hasLiveTrack && ssrc0 && ssrc0.height && kind === "video" && !client.isPresentation,
|
|
1715
|
-
check: ({ ssrc0 }) => ssrc0.fps < 10,
|
|
1906
|
+
enabled: ({ hasLiveTrack, ssrc0, kind, client }) => hasLiveTrack && !!ssrc0 && !!ssrc0.height && kind === "video" && !client.isPresentation,
|
|
1907
|
+
check: ({ ssrc0 }) => ((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.fps) || 0) < 10,
|
|
1716
1908
|
},
|
|
1717
1909
|
badNetworkIssueDetector,
|
|
1718
1910
|
periodicPacketLossDetector,
|
|
@@ -1730,18 +1922,27 @@ const issueDetectors = [
|
|
|
1730
1922
|
},
|
|
1731
1923
|
{
|
|
1732
1924
|
id: "concealed",
|
|
1733
|
-
enabled: ({ hasLiveTrack, ssrc0, kind }) => hasLiveTrack && ssrc0 && kind === "audio",
|
|
1734
|
-
check: ({ ssrc0 }) => ssrc0
|
|
1925
|
+
enabled: ({ hasLiveTrack, ssrc0, kind }) => hasLiveTrack && !!ssrc0 && kind === "audio",
|
|
1926
|
+
check: ({ ssrc0 }) => !!(ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.bitrate) &&
|
|
1927
|
+
(ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.direction) === "in" &&
|
|
1928
|
+
((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.audioLevel) || 0) >= 0.001 &&
|
|
1929
|
+
((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.audioConcealment) || 0) >= 0.1,
|
|
1735
1930
|
},
|
|
1736
1931
|
{
|
|
1737
1932
|
id: "decelerated",
|
|
1738
|
-
enabled: ({ hasLiveTrack, ssrc0, kind }) => hasLiveTrack && ssrc0 && kind === "audio",
|
|
1739
|
-
check: ({ ssrc0 }) => ssrc0
|
|
1933
|
+
enabled: ({ hasLiveTrack, ssrc0, kind }) => hasLiveTrack && !!ssrc0 && kind === "audio",
|
|
1934
|
+
check: ({ ssrc0 }) => !!(ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.bitrate) &&
|
|
1935
|
+
ssrc0.direction === "in" &&
|
|
1936
|
+
(ssrc0.audioLevel || 0) >= 0.001 &&
|
|
1937
|
+
((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.audioDeceleration) || 0) >= 0.1,
|
|
1740
1938
|
},
|
|
1741
1939
|
{
|
|
1742
1940
|
id: "accelerated",
|
|
1743
|
-
enabled: ({ hasLiveTrack, ssrc0, kind }) => hasLiveTrack && ssrc0 && kind === "audio",
|
|
1744
|
-
check: ({ ssrc0 }) => ssrc0
|
|
1941
|
+
enabled: ({ hasLiveTrack, ssrc0, kind }) => hasLiveTrack && !!ssrc0 && kind === "audio",
|
|
1942
|
+
check: ({ ssrc0 }) => !!(ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.bitrate) &&
|
|
1943
|
+
ssrc0.direction === "in" &&
|
|
1944
|
+
(ssrc0.audioLevel || 0) >= 0.001 &&
|
|
1945
|
+
(ssrc0.audioAcceleration || 0) >= 0.1,
|
|
1745
1946
|
},
|
|
1746
1947
|
];
|
|
1747
1948
|
|
|
@@ -1750,41 +1951,41 @@ let stopStats = null;
|
|
|
1750
1951
|
const metrics = [
|
|
1751
1952
|
{
|
|
1752
1953
|
id: "bitrate",
|
|
1753
|
-
enabled: ({ hasLiveTrack, track, ssrc0 }) => hasLiveTrack && track && ssrc0,
|
|
1954
|
+
enabled: ({ hasLiveTrack, track, ssrc0 }) => hasLiveTrack && !!track && !!ssrc0,
|
|
1754
1955
|
value: ({ trackStats }) => Object.values(trackStats.ssrcs).reduce((sum, ssrc) => sum + ssrc.bitrate, 0),
|
|
1755
1956
|
},
|
|
1756
1957
|
{
|
|
1757
1958
|
id: "pixelrate",
|
|
1758
|
-
enabled: ({ hasLiveTrack, track, ssrc0, kind }) => hasLiveTrack && kind === "video" && track && ssrc0 && ssrc0.height,
|
|
1959
|
+
enabled: ({ hasLiveTrack, track, ssrc0, kind }) => hasLiveTrack && kind === "video" && !!track && !!ssrc0 && !!ssrc0.height,
|
|
1759
1960
|
value: ({ trackStats }) => Object.values(trackStats.ssrcs).reduce((sum, ssrc) => sum + (ssrc.fps || 0) * (ssrc.width || 0) * (ssrc.height || 0), 0),
|
|
1760
1961
|
},
|
|
1761
1962
|
{
|
|
1762
1963
|
id: "height",
|
|
1763
|
-
enabled: ({ hasLiveTrack, track, ssrc0, kind }) => hasLiveTrack && kind === "video" && track && ssrc0 && ssrc0.height,
|
|
1964
|
+
enabled: ({ hasLiveTrack, track, ssrc0, kind }) => hasLiveTrack && kind === "video" && !!track && !!ssrc0 && !!ssrc0.height,
|
|
1764
1965
|
value: ({ trackStats }) => Object.values(trackStats.ssrcs).reduce((max, ssrc) => Math.max(max, ssrc.fps > 0 ? ssrc.height : 0), 0),
|
|
1765
1966
|
},
|
|
1766
1967
|
{
|
|
1767
1968
|
id: "sourceHeight",
|
|
1768
|
-
enabled: ({ hasLiveTrack, track, ssrc0, kind }) => hasLiveTrack && kind === "video" && track && ssrc0 && ssrc0.sourceHeight && ssrc0.direction === "out",
|
|
1769
|
-
value: ({ ssrc0 }) => ssrc0.sourceHeight,
|
|
1969
|
+
enabled: ({ hasLiveTrack, track, ssrc0, kind }) => hasLiveTrack && kind === "video" && !!track && !!ssrc0 && !!ssrc0.sourceHeight && ssrc0.direction === "out",
|
|
1970
|
+
value: ({ ssrc0 }) => ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.sourceHeight,
|
|
1770
1971
|
},
|
|
1771
1972
|
{
|
|
1772
1973
|
id: "packetloss",
|
|
1773
|
-
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && ssrc0 && ssrc0.bitrate,
|
|
1774
|
-
value: ({ ssrc0 }) => (ssrc0.direction === "in" ? ssrc0.lossRatio : ssrc0.fractionLost) || 0,
|
|
1974
|
+
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && !!ssrc0 && !!ssrc0.bitrate,
|
|
1975
|
+
value: ({ ssrc0 }) => ((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.direction) === "in" ? ssrc0.lossRatio : ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.fractionLost) || 0,
|
|
1775
1976
|
},
|
|
1776
1977
|
{
|
|
1777
1978
|
id: "jitter",
|
|
1778
|
-
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && ssrc0 && ssrc0.bitrate && ssrc0.direction === "in",
|
|
1779
|
-
value: ({ ssrc0 }) => ssrc0.jitter,
|
|
1979
|
+
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && !!ssrc0 && !!ssrc0.bitrate && ssrc0.direction === "in",
|
|
1980
|
+
value: ({ ssrc0 }) => ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.jitter,
|
|
1780
1981
|
},
|
|
1781
1982
|
{
|
|
1782
1983
|
id: "mos",
|
|
1783
|
-
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && ssrc0 && ssrc0.bitrate && ssrc0.direction === "out",
|
|
1984
|
+
enabled: ({ hasLiveTrack, ssrc0 }) => hasLiveTrack && !!ssrc0 && !!ssrc0.bitrate && ssrc0.direction === "out",
|
|
1784
1985
|
value: ({ ssrc0 }) => {
|
|
1785
|
-
const averageLatency = ssrc0.roundTripTime || 0;
|
|
1786
|
-
const jitter = ssrc0.jitter || 0;
|
|
1787
|
-
const packetLoss = (ssrc0.fractionLost || 0) * 100;
|
|
1986
|
+
const averageLatency = (ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.roundTripTime) || 0;
|
|
1987
|
+
const jitter = (ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.jitter) || 0;
|
|
1988
|
+
const packetLoss = ((ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.fractionLost) || 0) * 100;
|
|
1788
1989
|
const effectiveLatency = averageLatency + jitter * 2 + 10;
|
|
1789
1990
|
let r = effectiveLatency < 160 ? 93.2 - effectiveLatency / 40 : 93.2 - (effectiveLatency - 120) / 10;
|
|
1790
1991
|
r = r - packetLoss * 2.5;
|
|
@@ -1821,36 +2022,36 @@ const metrics = [
|
|
|
1821
2022
|
{
|
|
1822
2023
|
id: "concealment",
|
|
1823
2024
|
enabled: ({ hasLiveTrack, ssrc0, kind }) => hasLiveTrack &&
|
|
1824
|
-
ssrc0 &&
|
|
1825
|
-
ssrc0.bitrate &&
|
|
2025
|
+
!!ssrc0 &&
|
|
2026
|
+
!!ssrc0.bitrate &&
|
|
1826
2027
|
ssrc0.direction === "in" &&
|
|
1827
2028
|
kind === "audio" &&
|
|
1828
|
-
ssrc0.audioLevel >= 0.001,
|
|
1829
|
-
value: ({ ssrc0 }) => ssrc0.audioConcealment,
|
|
2029
|
+
(ssrc0.audioLevel || 0) >= 0.001,
|
|
2030
|
+
value: ({ ssrc0 }) => ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.audioConcealment,
|
|
1830
2031
|
},
|
|
1831
2032
|
{
|
|
1832
2033
|
id: "deceleration",
|
|
1833
2034
|
enabled: ({ hasLiveTrack, ssrc0, kind }) => hasLiveTrack &&
|
|
1834
|
-
ssrc0 &&
|
|
1835
|
-
ssrc0.bitrate &&
|
|
2035
|
+
!!ssrc0 &&
|
|
2036
|
+
!!ssrc0.bitrate &&
|
|
1836
2037
|
ssrc0.direction === "in" &&
|
|
1837
2038
|
kind === "audio" &&
|
|
1838
|
-
ssrc0.audioLevel >= 0.001,
|
|
1839
|
-
value: ({ ssrc0 }) => ssrc0.audioDeceleration,
|
|
2039
|
+
(ssrc0.audioLevel || 0) >= 0.001,
|
|
2040
|
+
value: ({ ssrc0 }) => ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.audioDeceleration,
|
|
1840
2041
|
},
|
|
1841
2042
|
{
|
|
1842
2043
|
id: "acceleration",
|
|
1843
2044
|
enabled: ({ hasLiveTrack, ssrc0, kind }) => hasLiveTrack &&
|
|
1844
|
-
ssrc0 &&
|
|
1845
|
-
ssrc0.bitrate &&
|
|
2045
|
+
!!ssrc0 &&
|
|
2046
|
+
!!ssrc0.bitrate &&
|
|
1846
2047
|
ssrc0.direction === "in" &&
|
|
1847
2048
|
kind === "audio" &&
|
|
1848
|
-
ssrc0.audioLevel >= 0.001,
|
|
1849
|
-
value: ({ ssrc0 }) => ssrc0.audioAcceleration,
|
|
2049
|
+
(ssrc0.audioLevel || 0) >= 0.001,
|
|
2050
|
+
value: ({ ssrc0 }) => ssrc0 === null || ssrc0 === void 0 ? void 0 : ssrc0.audioAcceleration,
|
|
1850
2051
|
},
|
|
1851
2052
|
{
|
|
1852
2053
|
id: "qpf",
|
|
1853
|
-
enabled: ({ hasLiveTrack, track, ssrc0, kind }) => hasLiveTrack && kind === "video" && track && ssrc0 && ssrc0.height,
|
|
2054
|
+
enabled: ({ hasLiveTrack, track, ssrc0, kind }) => hasLiveTrack && kind === "video" && !!track && !!ssrc0 && !!ssrc0.height,
|
|
1854
2055
|
value: ({ trackStats }) => Object.values(trackStats.ssrcs).reduce((sum, ssrc) => sum + (ssrc.qpf || 0), 0),
|
|
1855
2056
|
},
|
|
1856
2057
|
];
|
|
@@ -2755,8 +2956,8 @@ class BandwidthTester extends EventEmitter {
|
|
|
2755
2956
|
}
|
|
2756
2957
|
}
|
|
2757
2958
|
|
|
2758
|
-
var _a$
|
|
2759
|
-
const adapter$5 = (_a$
|
|
2959
|
+
var _a$5;
|
|
2960
|
+
const adapter$5 = (_a$5 = adapterRaw.default) !== null && _a$5 !== void 0 ? _a$5 : adapterRaw;
|
|
2760
2961
|
function detectMicrophoneNotWorking(pc) {
|
|
2761
2962
|
if (adapter$5.browserDetails.browser !== "chrome" ||
|
|
2762
2963
|
adapter$5.browserDetails.browser < 58 ||
|
|
@@ -2791,8 +2992,8 @@ const MAXIMUM_TURN_BANDWIDTH = 1280;
|
|
|
2791
2992
|
const MAXIMUM_TURN_BANDWIDTH_UNLIMITED = -1;
|
|
2792
2993
|
const MEDIA_JITTER_BUFFER_TARGET = 400;
|
|
2793
2994
|
|
|
2794
|
-
var _a$
|
|
2795
|
-
const adapter$4 = (_a$
|
|
2995
|
+
var _a$4;
|
|
2996
|
+
const adapter$4 = (_a$4 = adapterRaw.default) !== null && _a$4 !== void 0 ? _a$4 : adapterRaw;
|
|
2796
2997
|
const isSafari = adapter$4.browserDetails.browser === "safari";
|
|
2797
2998
|
const parseResolution = (res) => res.split(/[^\d]/g).map((n) => parseInt(n, 10));
|
|
2798
2999
|
function getMediaConstraints({ disableAEC, disableAGC, hd, lax, lowDataMode, preferredDeviceIds, resolution, simulcast, widescreen, }) {
|
|
@@ -2970,153 +3171,6 @@ function replaceTracksInStream(stream, newStream, only) {
|
|
|
2970
3171
|
});
|
|
2971
3172
|
return replacedTracks;
|
|
2972
3173
|
}
|
|
2973
|
-
function getTrack({ kind, deviceId, type, fallback = true, primerTrack, }) {
|
|
2974
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
2975
|
-
const devId = (deviceId) => (type === "exact" ? { deviceId: { exact: deviceId } } : { deviceId });
|
|
2976
|
-
const constraints = {
|
|
2977
|
-
[kind]: deviceId ? devId(deviceId) : kind === "video" ? { facingMode: "user" } : true,
|
|
2978
|
-
};
|
|
2979
|
-
let stream;
|
|
2980
|
-
try {
|
|
2981
|
-
stream = yield getUserMedia(constraints);
|
|
2982
|
-
}
|
|
2983
|
-
catch (e) {
|
|
2984
|
-
if (!fallback) {
|
|
2985
|
-
e.details = { constraints, constraint: e.constraint };
|
|
2986
|
-
throw e;
|
|
2987
|
-
}
|
|
2988
|
-
if (primerTrack) {
|
|
2989
|
-
return primerTrack;
|
|
2990
|
-
}
|
|
2991
|
-
stream = yield getUserMedia({ [kind]: true });
|
|
2992
|
-
}
|
|
2993
|
-
return stream.getTracks()[0];
|
|
2994
|
-
});
|
|
2995
|
-
}
|
|
2996
|
-
function constrainTrack(track, constraints) {
|
|
2997
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
2998
|
-
while (constraints.length) {
|
|
2999
|
-
try {
|
|
3000
|
-
yield track.applyConstraints(Object.assign({}, ...constraints));
|
|
3001
|
-
break;
|
|
3002
|
-
}
|
|
3003
|
-
catch (e) {
|
|
3004
|
-
const c = constraints.pop();
|
|
3005
|
-
logger$6.warn(`unable to apply ${JSON.stringify(c)}`, e);
|
|
3006
|
-
}
|
|
3007
|
-
}
|
|
3008
|
-
});
|
|
3009
|
-
}
|
|
3010
|
-
function getStream2(constraintOpt, additionalOpts = {}) {
|
|
3011
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
3012
|
-
const { audioId, videoId, devices, type, options } = constraintOpt;
|
|
3013
|
-
const { replaceStream, fallback } = additionalOpts;
|
|
3014
|
-
const hasGrantedPermissions = !!devices.find((d) => d.label !== "");
|
|
3015
|
-
let audioPrimerTrack;
|
|
3016
|
-
let videoPrimerTrack;
|
|
3017
|
-
if (!hasGrantedPermissions) {
|
|
3018
|
-
try {
|
|
3019
|
-
const primerStream = yield getUserMedia({
|
|
3020
|
-
audio: constraintOpt.audioId !== false,
|
|
3021
|
-
video: constraintOpt.videoId !== false,
|
|
3022
|
-
});
|
|
3023
|
-
audioPrimerTrack = primerStream.getAudioTracks()[0];
|
|
3024
|
-
videoPrimerTrack = primerStream.getVideoTracks()[0];
|
|
3025
|
-
}
|
|
3026
|
-
catch (err) {
|
|
3027
|
-
if (err.name === "NotAllowedError") {
|
|
3028
|
-
throw err;
|
|
3029
|
-
}
|
|
3030
|
-
}
|
|
3031
|
-
}
|
|
3032
|
-
const getAudio = () => __awaiter(this, void 0, void 0, function* () {
|
|
3033
|
-
if (audioId === false)
|
|
3034
|
-
return false;
|
|
3035
|
-
if (replaceStream)
|
|
3036
|
-
stopStreamTracks(replaceStream, "audio");
|
|
3037
|
-
const audioTrack = yield getTrack({
|
|
3038
|
-
deviceId: audioId,
|
|
3039
|
-
type,
|
|
3040
|
-
kind: "audio",
|
|
3041
|
-
fallback,
|
|
3042
|
-
primerTrack: audioPrimerTrack,
|
|
3043
|
-
});
|
|
3044
|
-
if (audioPrimerTrack && audioTrack !== audioPrimerTrack) {
|
|
3045
|
-
audioPrimerTrack.stop();
|
|
3046
|
-
}
|
|
3047
|
-
const { disableAEC, disableAGC } = options;
|
|
3048
|
-
const changes = [];
|
|
3049
|
-
if (disableAGC) {
|
|
3050
|
-
changes.push({ autoGainControl: false });
|
|
3051
|
-
}
|
|
3052
|
-
if (disableAEC) {
|
|
3053
|
-
changes.push({ echoCancellation: false });
|
|
3054
|
-
}
|
|
3055
|
-
yield constrainTrack(audioTrack, changes);
|
|
3056
|
-
return audioTrack;
|
|
3057
|
-
});
|
|
3058
|
-
const getVideo = () => __awaiter(this, void 0, void 0, function* () {
|
|
3059
|
-
if (videoId === false)
|
|
3060
|
-
return false;
|
|
3061
|
-
if (replaceStream)
|
|
3062
|
-
stopStreamTracks(replaceStream, "video");
|
|
3063
|
-
const videoTrack = yield getTrack({
|
|
3064
|
-
deviceId: videoId,
|
|
3065
|
-
type,
|
|
3066
|
-
kind: "video",
|
|
3067
|
-
fallback,
|
|
3068
|
-
primerTrack: videoPrimerTrack,
|
|
3069
|
-
});
|
|
3070
|
-
if (videoPrimerTrack && videoTrack !== videoPrimerTrack) {
|
|
3071
|
-
videoPrimerTrack.stop();
|
|
3072
|
-
}
|
|
3073
|
-
const { lowDataMode, simulcast, usingAspectRatio16x9 } = options;
|
|
3074
|
-
const changes = [];
|
|
3075
|
-
if (lowDataMode) {
|
|
3076
|
-
changes.push({ frameRate: simulcast ? 30 : 15 });
|
|
3077
|
-
}
|
|
3078
|
-
if (usingAspectRatio16x9) {
|
|
3079
|
-
changes.push({ aspectRatio: 16 / 9 });
|
|
3080
|
-
}
|
|
3081
|
-
if (lowDataMode) {
|
|
3082
|
-
changes.push({ width: { max: simulcast ? 640 : 320 } });
|
|
3083
|
-
}
|
|
3084
|
-
else {
|
|
3085
|
-
changes.push({ width: { max: 1280 } });
|
|
3086
|
-
}
|
|
3087
|
-
yield constrainTrack(videoTrack, changes);
|
|
3088
|
-
return videoTrack;
|
|
3089
|
-
});
|
|
3090
|
-
const audioPromise = getAudio();
|
|
3091
|
-
const videoPromise = getVideo();
|
|
3092
|
-
let audioTrack;
|
|
3093
|
-
let videoTrack;
|
|
3094
|
-
let error;
|
|
3095
|
-
try {
|
|
3096
|
-
audioTrack = yield audioPromise;
|
|
3097
|
-
}
|
|
3098
|
-
catch (e) {
|
|
3099
|
-
error = e;
|
|
3100
|
-
if (type === "exact")
|
|
3101
|
-
throw e;
|
|
3102
|
-
}
|
|
3103
|
-
try {
|
|
3104
|
-
videoTrack = yield videoPromise;
|
|
3105
|
-
}
|
|
3106
|
-
catch (e) {
|
|
3107
|
-
error = e;
|
|
3108
|
-
if (type === "exact")
|
|
3109
|
-
throw e;
|
|
3110
|
-
}
|
|
3111
|
-
const newStream = new MediaStream([audioTrack, videoTrack].filter(Boolean));
|
|
3112
|
-
let replacedTracks;
|
|
3113
|
-
if (replaceStream) {
|
|
3114
|
-
const only = (audioId === false && "video") || (videoId === false && "audio") || "audio";
|
|
3115
|
-
replacedTracks = replaceTracksInStream(replaceStream, newStream, only);
|
|
3116
|
-
}
|
|
3117
|
-
return { stream: replaceStream || newStream, error, replacedTracks };
|
|
3118
|
-
});
|
|
3119
|
-
}
|
|
3120
3174
|
function getStream(constraintOpt, { replaceStream, fallback = true } = {}) {
|
|
3121
3175
|
var _a;
|
|
3122
3176
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -3318,178 +3372,6 @@ function getUpdatedDevices({ oldDevices, newDevices, currentAudioId, currentVide
|
|
|
3318
3372
|
return { addedDevices, changedDevices };
|
|
3319
3373
|
}
|
|
3320
3374
|
|
|
3321
|
-
var _a$4;
|
|
3322
|
-
(_a$4 = adapterRaw.default) !== null && _a$4 !== void 0 ? _a$4 : adapterRaw;
|
|
3323
|
-
const RTCSTATS_PROTOCOL_VERSION = "1.0";
|
|
3324
|
-
const GETSTATS_BUFFER_SIZE = 20;
|
|
3325
|
-
const clientInfo = {
|
|
3326
|
-
id: v4$1(),
|
|
3327
|
-
connectionNumber: 0,
|
|
3328
|
-
};
|
|
3329
|
-
const noop = () => { };
|
|
3330
|
-
let resetDelta = noop;
|
|
3331
|
-
function rtcStatsConnection(wsURL, logger = console) {
|
|
3332
|
-
const buffer = [];
|
|
3333
|
-
let ws;
|
|
3334
|
-
let organizationId;
|
|
3335
|
-
let clientId;
|
|
3336
|
-
let displayName;
|
|
3337
|
-
let userRole;
|
|
3338
|
-
let roomSessionId;
|
|
3339
|
-
let connectionShouldBeOpen;
|
|
3340
|
-
let connectionAttempt = 0;
|
|
3341
|
-
let hasPassedOnRoomSessionId = false;
|
|
3342
|
-
let getStatsBufferUsed = 0;
|
|
3343
|
-
let deviceId;
|
|
3344
|
-
let roomProduct;
|
|
3345
|
-
let roomMode;
|
|
3346
|
-
let sfuServer;
|
|
3347
|
-
let featureFlags;
|
|
3348
|
-
const connection = {
|
|
3349
|
-
connected: false,
|
|
3350
|
-
trace: (...args) => {
|
|
3351
|
-
args.push(Date.now());
|
|
3352
|
-
if (args[0] === "customEvent" && args[2].type === "roomSessionId") {
|
|
3353
|
-
const oldRoomSessionIdValue = roomSessionId && roomSessionId[2].value.roomSessionId;
|
|
3354
|
-
const newRoomSessionIdValue = args[2].value.roomSessionId;
|
|
3355
|
-
roomSessionId = args;
|
|
3356
|
-
if (hasPassedOnRoomSessionId &&
|
|
3357
|
-
newRoomSessionIdValue &&
|
|
3358
|
-
newRoomSessionIdValue !== oldRoomSessionIdValue) {
|
|
3359
|
-
ws === null || ws === void 0 ? void 0 : ws.close();
|
|
3360
|
-
}
|
|
3361
|
-
if (newRoomSessionIdValue)
|
|
3362
|
-
hasPassedOnRoomSessionId = true;
|
|
3363
|
-
}
|
|
3364
|
-
else if (args[0] === "customEvent" && args[2].type === "clientId") {
|
|
3365
|
-
clientId = args;
|
|
3366
|
-
}
|
|
3367
|
-
else if (args[0] === "customEvent" && args[2].type === "organizationId") {
|
|
3368
|
-
organizationId = args;
|
|
3369
|
-
}
|
|
3370
|
-
else if (args[0] === "customEvent" && args[2].type === "displayName") {
|
|
3371
|
-
displayName = args;
|
|
3372
|
-
}
|
|
3373
|
-
else if (args[0] === "customEvent" && args[2].type === "userRole") {
|
|
3374
|
-
userRole = args;
|
|
3375
|
-
}
|
|
3376
|
-
else if (args[0] === "customEvent" && args[2].type === "deviceId") {
|
|
3377
|
-
deviceId = args;
|
|
3378
|
-
}
|
|
3379
|
-
else if (args[0] === "customEvent" && args[2].type === "roomProduct") {
|
|
3380
|
-
roomProduct = args;
|
|
3381
|
-
}
|
|
3382
|
-
else if (args[0] === "customEvent" && args[2].type === "roomMode") {
|
|
3383
|
-
roomMode = args;
|
|
3384
|
-
}
|
|
3385
|
-
else if (args[0] === "customEvent" && args[2].type === "sfuServer") {
|
|
3386
|
-
sfuServer = args;
|
|
3387
|
-
}
|
|
3388
|
-
else if (args[0] === "customEvent" && args[2].type === "featureFlags") {
|
|
3389
|
-
featureFlags = args;
|
|
3390
|
-
}
|
|
3391
|
-
if ((ws === null || ws === void 0 ? void 0 : ws.readyState) === WebSocket.OPEN) {
|
|
3392
|
-
connectionAttempt = 0;
|
|
3393
|
-
ws.send(JSON.stringify(args));
|
|
3394
|
-
}
|
|
3395
|
-
else if (args[0] === "getstats") {
|
|
3396
|
-
if (getStatsBufferUsed < GETSTATS_BUFFER_SIZE) {
|
|
3397
|
-
getStatsBufferUsed++;
|
|
3398
|
-
buffer.push(args);
|
|
3399
|
-
}
|
|
3400
|
-
}
|
|
3401
|
-
else if (args[0] === "customEvent" && args[2].type === "insightsStats") ;
|
|
3402
|
-
else {
|
|
3403
|
-
buffer.push(args);
|
|
3404
|
-
}
|
|
3405
|
-
if ((ws === null || ws === void 0 ? void 0 : ws.readyState) === WebSocket.CLOSED && connectionShouldBeOpen) {
|
|
3406
|
-
setTimeout(() => {
|
|
3407
|
-
if (ws.readyState === WebSocket.CLOSED && connectionShouldBeOpen) {
|
|
3408
|
-
connection.connect();
|
|
3409
|
-
}
|
|
3410
|
-
}, 1000 * connectionAttempt);
|
|
3411
|
-
}
|
|
3412
|
-
},
|
|
3413
|
-
close: () => {
|
|
3414
|
-
connectionShouldBeOpen = false;
|
|
3415
|
-
ws === null || ws === void 0 ? void 0 : ws.close();
|
|
3416
|
-
},
|
|
3417
|
-
connect: () => {
|
|
3418
|
-
connectionShouldBeOpen = true;
|
|
3419
|
-
connectionAttempt += 1;
|
|
3420
|
-
ws === null || ws === void 0 ? void 0 : ws.close();
|
|
3421
|
-
connection.connected = true;
|
|
3422
|
-
ws = new WebSocket(wsURL + window.location.pathname, RTCSTATS_PROTOCOL_VERSION);
|
|
3423
|
-
ws.onerror = (e) => {
|
|
3424
|
-
connection.connected = false;
|
|
3425
|
-
logger.warn(`[RTCSTATS] WebSocket error`, e);
|
|
3426
|
-
};
|
|
3427
|
-
ws.onclose = (e) => {
|
|
3428
|
-
connection.connected = false;
|
|
3429
|
-
logger.info(`[RTCSTATS] Closed ${e.code}`);
|
|
3430
|
-
resetDelta();
|
|
3431
|
-
};
|
|
3432
|
-
ws.onopen = () => {
|
|
3433
|
-
clientInfo.connectionNumber++;
|
|
3434
|
-
ws.send(JSON.stringify(["clientInfo", null, clientInfo]));
|
|
3435
|
-
if (organizationId) {
|
|
3436
|
-
ws.send(JSON.stringify(organizationId));
|
|
3437
|
-
}
|
|
3438
|
-
if (clientId) {
|
|
3439
|
-
ws.send(JSON.stringify(clientId));
|
|
3440
|
-
}
|
|
3441
|
-
if (roomSessionId) {
|
|
3442
|
-
ws.send(JSON.stringify(roomSessionId));
|
|
3443
|
-
}
|
|
3444
|
-
if (displayName) {
|
|
3445
|
-
ws.send(JSON.stringify(displayName));
|
|
3446
|
-
}
|
|
3447
|
-
if (userRole) {
|
|
3448
|
-
ws.send(JSON.stringify(userRole));
|
|
3449
|
-
}
|
|
3450
|
-
if (deviceId) {
|
|
3451
|
-
ws.send(JSON.stringify(deviceId));
|
|
3452
|
-
}
|
|
3453
|
-
if (roomMode) {
|
|
3454
|
-
ws.send(JSON.stringify(roomMode));
|
|
3455
|
-
}
|
|
3456
|
-
if (roomProduct) {
|
|
3457
|
-
ws.send(JSON.stringify(roomProduct));
|
|
3458
|
-
}
|
|
3459
|
-
if (sfuServer) {
|
|
3460
|
-
ws.send(JSON.stringify(sfuServer));
|
|
3461
|
-
}
|
|
3462
|
-
if (featureFlags) {
|
|
3463
|
-
ws.send(JSON.stringify(featureFlags));
|
|
3464
|
-
}
|
|
3465
|
-
while (buffer.length) {
|
|
3466
|
-
ws.send(JSON.stringify(buffer.shift()));
|
|
3467
|
-
}
|
|
3468
|
-
getStatsBufferUsed = 0;
|
|
3469
|
-
};
|
|
3470
|
-
},
|
|
3471
|
-
};
|
|
3472
|
-
return connection;
|
|
3473
|
-
}
|
|
3474
|
-
const server = rtcStatsConnection(process.env.RTCSTATS_URL || "wss://rtcstats.srv.whereby.com");
|
|
3475
|
-
const stats = rtcstats(server.trace, 10000, [""]);
|
|
3476
|
-
resetDelta = (stats === null || stats === void 0 ? void 0 : stats.resetDelta) || noop;
|
|
3477
|
-
const rtcStats = {
|
|
3478
|
-
sendEvent: (type, value) => {
|
|
3479
|
-
server.trace("customEvent", null, {
|
|
3480
|
-
type,
|
|
3481
|
-
value,
|
|
3482
|
-
});
|
|
3483
|
-
},
|
|
3484
|
-
sendAudioMuted: (muted) => {
|
|
3485
|
-
rtcStats.sendEvent("audio_muted", { muted });
|
|
3486
|
-
},
|
|
3487
|
-
sendVideoMuted: (muted) => {
|
|
3488
|
-
rtcStats.sendEvent("video_muted", { muted });
|
|
3489
|
-
},
|
|
3490
|
-
server,
|
|
3491
|
-
};
|
|
3492
|
-
|
|
3493
3375
|
var _a$3;
|
|
3494
3376
|
const adapter$3 = (_a$3 = adapterRaw.default) !== null && _a$3 !== void 0 ? _a$3 : adapterRaw;
|
|
3495
3377
|
const logger$5 = new Logger();
|
|
@@ -7045,5 +6927,5 @@ var RtcEventNames;
|
|
|
7045
6927
|
RtcEventNames["stream_added"] = "stream_added";
|
|
7046
6928
|
})(RtcEventNames || (RtcEventNames = {}));
|
|
7047
6929
|
|
|
7048
|
-
export { BandwidthTester, EVENTS, KNOCK_MESSAGES, KalmanFilter, Logger, MAXIMUM_TURN_BANDWIDTH, MAXIMUM_TURN_BANDWIDTH_UNLIMITED, MEDIA_JITTER_BUFFER_TARGET, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, RtcEventNames, RtcManagerDispatcher, RtcStream, STREAM_TYPES, ServerSocket, Session, SfuV2Parser, TYPES, VegaConnection, VegaMediaQualityMonitor, VegaRtcManager, addAbsCaptureTimeExtMap, addExtMap, assert, buildDeviceList, calculateStd, captureAudioSsrcMetrics, captureCandidatePairInfoMetrics, captureCommonSsrcMetrics, captureSsrcInfo, captureVideoSsrcMetrics, changeMediaDirection, cleanSdp, compareLocalDevices, createACFCalculator, createMicAnalyser, createWorker, deprioritizeH264, detectMicrophoneNotWorking, enumerate, filterMidExtension, filterMsidSemantic, fromLocation, generateByteString, getConstraints, getCurrentPeerConnections, getDeviceData, getDisplayMedia, getHandler, getIssuesAndMetrics, getMediaConstraints, getMediaSettings, getOptimalBitrate, getPeerConnectionIndex, getStats, getStream,
|
|
6930
|
+
export { BandwidthTester, EVENTS, KNOCK_MESSAGES, KalmanFilter, Logger, MAXIMUM_TURN_BANDWIDTH, MAXIMUM_TURN_BANDWIDTH_UNLIMITED, MEDIA_JITTER_BUFFER_TARGET, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, RtcEventNames, RtcManagerDispatcher, RtcStream, STREAM_TYPES, ServerSocket, Session, SfuV2Parser, TYPES, VegaConnection, VegaMediaQualityMonitor, VegaRtcManager, addAbsCaptureTimeExtMap, addExtMap, assert, buildDeviceList, calculateStd, captureAudioSsrcMetrics, captureCandidatePairInfoMetrics, captureCommonSsrcMetrics, captureSsrcInfo, captureVideoSsrcMetrics, changeMediaDirection, cleanSdp, compareLocalDevices, createACFCalculator, createMicAnalyser, createWorker, deprioritizeH264, detectMicrophoneNotWorking, enumerate, filterMidExtension, filterMsidSemantic, fromLocation, generateByteString, getConstraints, getCurrentPeerConnections, getDeviceData, getDisplayMedia, getHandler, getIssuesAndMetrics, getMediaConstraints, getMediaSettings, getNumFailedStatsReports, getOptimalBitrate, getPeerConnectionIndex, getStats, getStream, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isMobile, isRelayed, maybeRejectNoH264, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceSSRCs, replaceTracksInStream, rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, variance };
|
|
7049
6931
|
//# sourceMappingURL=legacy-esm.js.map
|