@whereby.com/media 2.8.3 → 2.8.5
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 +59 -48
- package/dist/index.d.cts +321 -293
- package/dist/index.d.mts +321 -293
- package/dist/index.d.ts +321 -293
- package/dist/index.mjs +59 -48
- package/dist/legacy-esm.js +59 -48
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1629,8 +1629,7 @@ class ServerSocket {
|
|
|
1629
1629
|
if (this._serverSideDisconnectDurationLimitOn)
|
|
1630
1630
|
this._keepAliveManager = new KeepAliveManager(this);
|
|
1631
1631
|
this._socket.on("room_joined", (payload) => {
|
|
1632
|
-
|
|
1633
|
-
if (!error) {
|
|
1632
|
+
if (!("error" in payload)) {
|
|
1634
1633
|
this.joinRoomFinished = true;
|
|
1635
1634
|
}
|
|
1636
1635
|
});
|
|
@@ -1999,7 +1998,7 @@ const adapter$5 = (_a$5 = adapterRaw.default) !== null && _a$5 !== void 0 ? _a$5
|
|
|
1999
1998
|
const logger$8 = new Logger();
|
|
2000
1999
|
const browserName$2 = (_b$2 = adapter$5.browserDetails) === null || _b$2 === void 0 ? void 0 : _b$2.browser;
|
|
2001
2000
|
const browserVersion$1 = adapter$5.browserDetails.version;
|
|
2002
|
-
function setCodecPreferenceSDP(sdp, redOn) {
|
|
2001
|
+
function setCodecPreferenceSDP({ sdp, redOn, incrementAnalyticMetric }) {
|
|
2003
2002
|
var _a, _b;
|
|
2004
2003
|
try {
|
|
2005
2004
|
const sdpObject = sdpTransform.parse(sdp);
|
|
@@ -2037,7 +2036,10 @@ function setCodecPreferenceSDP(sdp, redOn) {
|
|
|
2037
2036
|
return newSdp;
|
|
2038
2037
|
}
|
|
2039
2038
|
catch (error) {
|
|
2039
|
+
incrementAnalyticMetric("P2PSetCodecPreferenceError");
|
|
2040
|
+
rtcStats.sendEvent("P2PSetCodecPreferenceError", { error });
|
|
2040
2041
|
logger$8.error("setCodecPreferenceSDP error:", error);
|
|
2042
|
+
return sdp;
|
|
2041
2043
|
}
|
|
2042
2044
|
}
|
|
2043
2045
|
function cleanSdp(sdp) {
|
|
@@ -2325,25 +2327,35 @@ class Session {
|
|
|
2325
2327
|
this.earlyIceCandidates = [];
|
|
2326
2328
|
});
|
|
2327
2329
|
}
|
|
2328
|
-
handleOffer(
|
|
2330
|
+
handleOffer(offer) {
|
|
2329
2331
|
if (!this.canModifyPeerConnection()) {
|
|
2330
2332
|
return new Promise((resolve) => {
|
|
2331
|
-
this.pending.push(() => this.handleOffer(
|
|
2333
|
+
this.pending.push(() => this.handleOffer(offer).then(resolve));
|
|
2332
2334
|
});
|
|
2333
2335
|
}
|
|
2334
2336
|
this.isOperationPending = true;
|
|
2335
|
-
let sdp =
|
|
2337
|
+
let sdp = offer.sdp;
|
|
2336
2338
|
sdp = filterMidExtension(sdp);
|
|
2337
2339
|
sdp = filterMsidSemantic(sdp);
|
|
2338
|
-
const desc = { type:
|
|
2340
|
+
const desc = { type: offer.type, sdp };
|
|
2339
2341
|
let answerToSignal;
|
|
2340
2342
|
return this._setRemoteDescription(desc)
|
|
2341
2343
|
.then(() => {
|
|
2342
2344
|
return this.pc.createAnswer();
|
|
2343
2345
|
})
|
|
2344
2346
|
.then((answer) => {
|
|
2345
|
-
|
|
2346
|
-
|
|
2347
|
+
if (!answer.sdp) {
|
|
2348
|
+
this._incrementAnalyticMetric("P2PCreateAnswerNoSDP");
|
|
2349
|
+
rtcStats.sendEvent("P2PCreateAnswerNoSDP", {});
|
|
2350
|
+
throw new Error("SDP undefined while creating answer");
|
|
2351
|
+
}
|
|
2352
|
+
else {
|
|
2353
|
+
answerToSignal = {
|
|
2354
|
+
sdp: answer.sdp,
|
|
2355
|
+
type: answer.type,
|
|
2356
|
+
};
|
|
2357
|
+
return this.pc.setLocalDescription(answer);
|
|
2358
|
+
}
|
|
2347
2359
|
})
|
|
2348
2360
|
.then(() => {
|
|
2349
2361
|
return setVideoBandwidthUsingSetParameters(this.pc, this.bandwidth);
|
|
@@ -2598,8 +2610,8 @@ if (browserName$1 === "chrome") {
|
|
|
2598
2610
|
});
|
|
2599
2611
|
}
|
|
2600
2612
|
class P2pRtcManager {
|
|
2601
|
-
constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features
|
|
2602
|
-
const { name, session, iceServers, turnServers,
|
|
2613
|
+
constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features }) {
|
|
2614
|
+
const { name, session, iceServers, turnServers, mediaserverConfigTtlSeconds } = room;
|
|
2603
2615
|
this._selfId = selfId;
|
|
2604
2616
|
this._roomName = name;
|
|
2605
2617
|
this._roomSessionId = session && session.id;
|
|
@@ -2629,7 +2641,6 @@ class P2pRtcManager {
|
|
|
2629
2641
|
this.analytics.camTrackEndedCount++;
|
|
2630
2642
|
};
|
|
2631
2643
|
this._updateAndScheduleMediaServersRefresh({
|
|
2632
|
-
sfuServer,
|
|
2633
2644
|
iceServers: (iceServers === null || iceServers === void 0 ? void 0 : iceServers.iceServers) || [],
|
|
2634
2645
|
turnServers: turnServers || [],
|
|
2635
2646
|
mediaserverConfigTtlSeconds,
|
|
@@ -2664,13 +2675,16 @@ class P2pRtcManager {
|
|
|
2664
2675
|
P2PReplaceTrackSourceKindNotFound: 0,
|
|
2665
2676
|
P2PRemoveStreamNoPC: 0,
|
|
2666
2677
|
P2POnTrackNoStream: 0,
|
|
2678
|
+
P2PSetCodecPreferenceError: 0,
|
|
2679
|
+
P2PCreateOfferNoSDP: 0,
|
|
2680
|
+
P2PCreateAnswerNoSDP: 0,
|
|
2667
2681
|
};
|
|
2668
2682
|
}
|
|
2669
2683
|
numberOfPeerconnections() {
|
|
2670
2684
|
return Object.keys(this.peerConnections).length;
|
|
2671
2685
|
}
|
|
2672
2686
|
isInitializedWith({ selfId, roomName, isSfu }) {
|
|
2673
|
-
return this._selfId === selfId && this._roomName === roomName && isSfu
|
|
2687
|
+
return this._selfId === selfId && this._roomName === roomName && !isSfu;
|
|
2674
2688
|
}
|
|
2675
2689
|
supportsScreenShareAudio() {
|
|
2676
2690
|
return true;
|
|
@@ -2784,13 +2798,12 @@ class P2pRtcManager {
|
|
|
2784
2798
|
logger$6.warn("No RTCPeerConnection on SDP_OFFER", data);
|
|
2785
2799
|
return;
|
|
2786
2800
|
}
|
|
2787
|
-
const offer = this._transformIncomingSdp(data.message);
|
|
2788
2801
|
(_b = (_a = session
|
|
2789
|
-
.handleOffer(
|
|
2802
|
+
.handleOffer(data.message)
|
|
2790
2803
|
.then((answer) => {
|
|
2791
2804
|
this._emitServerEvent(RELAY_MESSAGES.SDP_ANSWER, {
|
|
2792
2805
|
receiverId: data.clientId,
|
|
2793
|
-
message:
|
|
2806
|
+
message: answer,
|
|
2794
2807
|
});
|
|
2795
2808
|
})).catch) === null || _b === void 0 ? void 0 : _b.call(_a, (e) => {
|
|
2796
2809
|
this.analytics.numPcOnOfferFailure++;
|
|
@@ -2803,15 +2816,13 @@ class P2pRtcManager {
|
|
|
2803
2816
|
logger$6.warn("No RTCPeerConnection on SDP_ANSWER", data);
|
|
2804
2817
|
return;
|
|
2805
2818
|
}
|
|
2806
|
-
|
|
2807
|
-
(_b = (_a = session.handleAnswer(answer)) === null || _a === void 0 ? void 0 : _a.catch) === null || _b === void 0 ? void 0 : _b.call(_a, (e) => {
|
|
2819
|
+
(_b = (_a = session.handleAnswer(data.message)) === null || _a === void 0 ? void 0 : _a.catch) === null || _b === void 0 ? void 0 : _b.call(_a, (e) => {
|
|
2808
2820
|
logger$6.warn("Could not set remote description from remote answer: ", e);
|
|
2809
2821
|
this.analytics.numPcOnAnswerFailure++;
|
|
2810
2822
|
});
|
|
2811
2823
|
}),
|
|
2812
2824
|
this._serverSocket.on(PROTOCOL_RESPONSES.ROOM_JOINED, (payload) => {
|
|
2813
|
-
|
|
2814
|
-
if (error || !this._wasScreenSharing) {
|
|
2825
|
+
if ("error" in payload || !this._wasScreenSharing) {
|
|
2815
2826
|
return;
|
|
2816
2827
|
}
|
|
2817
2828
|
const screenShareStreamId = Object.keys(this.localStreams).find((id) => id !== CAMERA_STREAM_ID);
|
|
@@ -2886,9 +2897,6 @@ class P2pRtcManager {
|
|
|
2886
2897
|
if (previousStatus === newStatus) {
|
|
2887
2898
|
return;
|
|
2888
2899
|
}
|
|
2889
|
-
if (session.peerConnectionId === this._selfId) {
|
|
2890
|
-
return;
|
|
2891
|
-
}
|
|
2892
2900
|
if (previousStatus === TYPES.CONNECTION_DISCONNECTED &&
|
|
2893
2901
|
newStatus === TYPES.CONNECTING) {
|
|
2894
2902
|
return;
|
|
@@ -2987,13 +2995,6 @@ class P2pRtcManager {
|
|
|
2987
2995
|
const streamIds = this._getNonLocalCameraStreamIds();
|
|
2988
2996
|
return streamIds.length === 0 ? null : this.localStreams[streamIds[0]];
|
|
2989
2997
|
}
|
|
2990
|
-
_transformIncomingSdp(original) {
|
|
2991
|
-
const sdp = original.sdp ? original.sdp : original.sdpU;
|
|
2992
|
-
return { type: original.type, sdp };
|
|
2993
|
-
}
|
|
2994
|
-
_transformOutgoingSdp(original) {
|
|
2995
|
-
return { type: original.type, sdpU: original.sdp, sdp: original.sdp };
|
|
2996
|
-
}
|
|
2997
2998
|
_createSession({ clientId, initialBandwidth, isOfferer, peerConnectionId, }) {
|
|
2998
2999
|
if (!peerConnectionId) {
|
|
2999
3000
|
throw new Error("peerConnectionId is missing");
|
|
@@ -3228,10 +3229,9 @@ class P2pRtcManager {
|
|
|
3228
3229
|
delete this.localStreams[streamId];
|
|
3229
3230
|
this._deleteEnabledLocalStreamId(streamId);
|
|
3230
3231
|
}
|
|
3231
|
-
_updateAndScheduleMediaServersRefresh({ iceServers, turnServers,
|
|
3232
|
+
_updateAndScheduleMediaServersRefresh({ iceServers, turnServers, mediaserverConfigTtlSeconds, }) {
|
|
3232
3233
|
this._iceServers = iceServers;
|
|
3233
3234
|
this._turnServers = turnServers;
|
|
3234
|
-
this._sfuServer = sfuServer;
|
|
3235
3235
|
this._mediaserverConfigTtlSeconds = mediaserverConfigTtlSeconds;
|
|
3236
3236
|
this._clearMediaServersRefresh();
|
|
3237
3237
|
if (!mediaserverConfigTtlSeconds) {
|
|
@@ -3359,10 +3359,19 @@ class P2pRtcManager {
|
|
|
3359
3359
|
this._setCodecPreferences(pc).then(() => pc
|
|
3360
3360
|
.createOffer(constraints || this.offerOptions)
|
|
3361
3361
|
.then((offer) => {
|
|
3362
|
+
if (!offer.sdp) {
|
|
3363
|
+
this.analytics.P2PCreateOfferNoSDP++;
|
|
3364
|
+
rtcStats.sendEvent("P2PCreateOfferNoSDP", {});
|
|
3365
|
+
throw new Error("SDP undefined while creating offer");
|
|
3366
|
+
}
|
|
3362
3367
|
if (rtpAbsCaptureTimeOn)
|
|
3363
3368
|
offer.sdp = addAbsCaptureTimeExtMap(offer.sdp);
|
|
3364
3369
|
if (browserName$1 === "firefox") {
|
|
3365
|
-
offer.sdp = setCodecPreferenceSDP(
|
|
3370
|
+
offer.sdp = setCodecPreferenceSDP({
|
|
3371
|
+
sdp: offer.sdp,
|
|
3372
|
+
redOn,
|
|
3373
|
+
incrementAnalyticMetric: (metric) => this.analytics[metric]++,
|
|
3374
|
+
});
|
|
3366
3375
|
}
|
|
3367
3376
|
if (cleanSdpOn)
|
|
3368
3377
|
offer.sdp = cleanSdp(offer.sdp);
|
|
@@ -3375,7 +3384,7 @@ class P2pRtcManager {
|
|
|
3375
3384
|
.then(() => {
|
|
3376
3385
|
this._emitServerEvent(RELAY_MESSAGES.SDP_OFFER, {
|
|
3377
3386
|
receiverId: clientId,
|
|
3378
|
-
message:
|
|
3387
|
+
message: offer,
|
|
3379
3388
|
});
|
|
3380
3389
|
});
|
|
3381
3390
|
})
|
|
@@ -4500,8 +4509,8 @@ const OUTBOUND_SCREEN_OUTBOUND_STREAM_ID = v4$1();
|
|
|
4500
4509
|
if (browserName === "chrome")
|
|
4501
4510
|
window.document.addEventListener("beforeunload", () => (unloading = true));
|
|
4502
4511
|
class VegaRtcManager {
|
|
4503
|
-
constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features, eventClaim
|
|
4504
|
-
const { session, iceServers, turnServers, sfuServer,
|
|
4512
|
+
constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features, eventClaim }) {
|
|
4513
|
+
const { session, iceServers, turnServers, sfuServer, mediaserverConfigTtlSeconds } = room;
|
|
4505
4514
|
this._selfId = selfId;
|
|
4506
4515
|
this._room = room;
|
|
4507
4516
|
this._roomSessionId = session === null || session === void 0 ? void 0 : session.id;
|
|
@@ -4555,7 +4564,6 @@ class VegaRtcManager {
|
|
|
4555
4564
|
};
|
|
4556
4565
|
this._updateAndScheduleMediaServersRefresh({
|
|
4557
4566
|
sfuServer,
|
|
4558
|
-
sfuServers,
|
|
4559
4567
|
iceServers: (iceServers === null || iceServers === void 0 ? void 0 : iceServers.iceServers) || [],
|
|
4560
4568
|
turnServers: turnServers || [],
|
|
4561
4569
|
mediaserverConfigTtlSeconds,
|
|
@@ -4582,13 +4590,14 @@ class VegaRtcManager {
|
|
|
4582
4590
|
camTrackEndedCount: 0,
|
|
4583
4591
|
};
|
|
4584
4592
|
}
|
|
4585
|
-
_updateAndScheduleMediaServersRefresh({ iceServers, turnServers, sfuServer,
|
|
4586
|
-
var _a, _b, _c;
|
|
4593
|
+
_updateAndScheduleMediaServersRefresh({ iceServers, turnServers, sfuServer, mediaserverConfigTtlSeconds, }) {
|
|
4594
|
+
var _a, _b, _c, _d;
|
|
4587
4595
|
this._iceServers = iceServers;
|
|
4588
4596
|
this._turnServers = turnServers;
|
|
4589
|
-
|
|
4590
|
-
|
|
4591
|
-
|
|
4597
|
+
if (sfuServer) {
|
|
4598
|
+
this._sfuServer = sfuServer;
|
|
4599
|
+
}
|
|
4600
|
+
if (sfuServer === null || sfuServer === void 0 ? void 0 : sfuServer.fallbackServers) {
|
|
4592
4601
|
this._sfuServers = sfuServer.fallbackServers.map((entry) => ({
|
|
4593
4602
|
host: entry.host || entry.fqdn,
|
|
4594
4603
|
dc: entry.dc,
|
|
@@ -4598,14 +4607,14 @@ class VegaRtcManager {
|
|
|
4598
4607
|
(_a = this._vegaConnectionManager) === null || _a === void 0 ? void 0 : _a.updateHostList(this._features.sfuServersOverride ||
|
|
4599
4608
|
this._sfuServers ||
|
|
4600
4609
|
this._features.sfuServerOverrideHost ||
|
|
4601
|
-
|
|
4610
|
+
((_b = this._sfuServer) === null || _b === void 0 ? void 0 : _b.url));
|
|
4602
4611
|
const iceServersList = {
|
|
4603
4612
|
iceServers: this._features.turnServersOn ? this._turnServers : this._iceServers,
|
|
4604
4613
|
};
|
|
4605
4614
|
iceServersList.iceServers = turnServerOverride(iceServersList.iceServers, this._features.turnServerOverrideHost);
|
|
4606
4615
|
if (browserName !== "firefox") {
|
|
4607
|
-
(
|
|
4608
|
-
(
|
|
4616
|
+
(_c = this._sendTransport) === null || _c === void 0 ? void 0 : _c.updateIceServers(iceServersList);
|
|
4617
|
+
(_d = this._receiveTransport) === null || _d === void 0 ? void 0 : _d.updateIceServers(iceServersList);
|
|
4609
4618
|
}
|
|
4610
4619
|
this._clearMediaServersRefresh();
|
|
4611
4620
|
if (!mediaserverConfigTtlSeconds) {
|
|
@@ -4659,6 +4668,7 @@ class VegaRtcManager {
|
|
|
4659
4668
|
});
|
|
4660
4669
|
}
|
|
4661
4670
|
_connect() {
|
|
4671
|
+
var _a;
|
|
4662
4672
|
if (this._isConnectingOrConnected)
|
|
4663
4673
|
return;
|
|
4664
4674
|
if (!this._serverSocket.isConnected()) {
|
|
@@ -4674,7 +4684,7 @@ class VegaRtcManager {
|
|
|
4674
4684
|
const hostList = this._features.sfuServersOverride ||
|
|
4675
4685
|
this._sfuServers ||
|
|
4676
4686
|
this._features.sfuServerOverrideHost ||
|
|
4677
|
-
this._sfuServer.url;
|
|
4687
|
+
((_a = this._sfuServer) === null || _a === void 0 ? void 0 : _a.url);
|
|
4678
4688
|
this._vegaConnectionManager = createVegaConnectionManager({
|
|
4679
4689
|
initialHostList: hostList,
|
|
4680
4690
|
getUrlForHost: (host) => {
|
|
@@ -5984,9 +5994,10 @@ class RtcManagerDispatcher {
|
|
|
5984
5994
|
constructor({ emitter, serverSocket, webrtcProvider, features, }) {
|
|
5985
5995
|
this.emitter = emitter;
|
|
5986
5996
|
this.currentManager = null;
|
|
5987
|
-
serverSocket.on(PROTOCOL_RESPONSES.ROOM_JOINED, (
|
|
5988
|
-
if (error)
|
|
5997
|
+
serverSocket.on(PROTOCOL_RESPONSES.ROOM_JOINED, (payload) => {
|
|
5998
|
+
if ("error" in payload)
|
|
5989
5999
|
return;
|
|
6000
|
+
const { room, selfId, eventClaim } = payload;
|
|
5990
6001
|
const config = {
|
|
5991
6002
|
selfId,
|
|
5992
6003
|
room,
|
package/dist/legacy-esm.js
CHANGED
|
@@ -1629,8 +1629,7 @@ class ServerSocket {
|
|
|
1629
1629
|
if (this._serverSideDisconnectDurationLimitOn)
|
|
1630
1630
|
this._keepAliveManager = new KeepAliveManager(this);
|
|
1631
1631
|
this._socket.on("room_joined", (payload) => {
|
|
1632
|
-
|
|
1633
|
-
if (!error) {
|
|
1632
|
+
if (!("error" in payload)) {
|
|
1634
1633
|
this.joinRoomFinished = true;
|
|
1635
1634
|
}
|
|
1636
1635
|
});
|
|
@@ -1999,7 +1998,7 @@ const adapter$5 = (_a$5 = adapterRaw.default) !== null && _a$5 !== void 0 ? _a$5
|
|
|
1999
1998
|
const logger$8 = new Logger();
|
|
2000
1999
|
const browserName$2 = (_b$2 = adapter$5.browserDetails) === null || _b$2 === void 0 ? void 0 : _b$2.browser;
|
|
2001
2000
|
const browserVersion$1 = adapter$5.browserDetails.version;
|
|
2002
|
-
function setCodecPreferenceSDP(sdp, redOn) {
|
|
2001
|
+
function setCodecPreferenceSDP({ sdp, redOn, incrementAnalyticMetric }) {
|
|
2003
2002
|
var _a, _b;
|
|
2004
2003
|
try {
|
|
2005
2004
|
const sdpObject = sdpTransform.parse(sdp);
|
|
@@ -2037,7 +2036,10 @@ function setCodecPreferenceSDP(sdp, redOn) {
|
|
|
2037
2036
|
return newSdp;
|
|
2038
2037
|
}
|
|
2039
2038
|
catch (error) {
|
|
2039
|
+
incrementAnalyticMetric("P2PSetCodecPreferenceError");
|
|
2040
|
+
rtcStats.sendEvent("P2PSetCodecPreferenceError", { error });
|
|
2040
2041
|
logger$8.error("setCodecPreferenceSDP error:", error);
|
|
2042
|
+
return sdp;
|
|
2041
2043
|
}
|
|
2042
2044
|
}
|
|
2043
2045
|
function cleanSdp(sdp) {
|
|
@@ -2325,25 +2327,35 @@ class Session {
|
|
|
2325
2327
|
this.earlyIceCandidates = [];
|
|
2326
2328
|
});
|
|
2327
2329
|
}
|
|
2328
|
-
handleOffer(
|
|
2330
|
+
handleOffer(offer) {
|
|
2329
2331
|
if (!this.canModifyPeerConnection()) {
|
|
2330
2332
|
return new Promise((resolve) => {
|
|
2331
|
-
this.pending.push(() => this.handleOffer(
|
|
2333
|
+
this.pending.push(() => this.handleOffer(offer).then(resolve));
|
|
2332
2334
|
});
|
|
2333
2335
|
}
|
|
2334
2336
|
this.isOperationPending = true;
|
|
2335
|
-
let sdp =
|
|
2337
|
+
let sdp = offer.sdp;
|
|
2336
2338
|
sdp = filterMidExtension(sdp);
|
|
2337
2339
|
sdp = filterMsidSemantic(sdp);
|
|
2338
|
-
const desc = { type:
|
|
2340
|
+
const desc = { type: offer.type, sdp };
|
|
2339
2341
|
let answerToSignal;
|
|
2340
2342
|
return this._setRemoteDescription(desc)
|
|
2341
2343
|
.then(() => {
|
|
2342
2344
|
return this.pc.createAnswer();
|
|
2343
2345
|
})
|
|
2344
2346
|
.then((answer) => {
|
|
2345
|
-
|
|
2346
|
-
|
|
2347
|
+
if (!answer.sdp) {
|
|
2348
|
+
this._incrementAnalyticMetric("P2PCreateAnswerNoSDP");
|
|
2349
|
+
rtcStats.sendEvent("P2PCreateAnswerNoSDP", {});
|
|
2350
|
+
throw new Error("SDP undefined while creating answer");
|
|
2351
|
+
}
|
|
2352
|
+
else {
|
|
2353
|
+
answerToSignal = {
|
|
2354
|
+
sdp: answer.sdp,
|
|
2355
|
+
type: answer.type,
|
|
2356
|
+
};
|
|
2357
|
+
return this.pc.setLocalDescription(answer);
|
|
2358
|
+
}
|
|
2347
2359
|
})
|
|
2348
2360
|
.then(() => {
|
|
2349
2361
|
return setVideoBandwidthUsingSetParameters(this.pc, this.bandwidth);
|
|
@@ -2598,8 +2610,8 @@ if (browserName$1 === "chrome") {
|
|
|
2598
2610
|
});
|
|
2599
2611
|
}
|
|
2600
2612
|
class P2pRtcManager {
|
|
2601
|
-
constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features
|
|
2602
|
-
const { name, session, iceServers, turnServers,
|
|
2613
|
+
constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features }) {
|
|
2614
|
+
const { name, session, iceServers, turnServers, mediaserverConfigTtlSeconds } = room;
|
|
2603
2615
|
this._selfId = selfId;
|
|
2604
2616
|
this._roomName = name;
|
|
2605
2617
|
this._roomSessionId = session && session.id;
|
|
@@ -2629,7 +2641,6 @@ class P2pRtcManager {
|
|
|
2629
2641
|
this.analytics.camTrackEndedCount++;
|
|
2630
2642
|
};
|
|
2631
2643
|
this._updateAndScheduleMediaServersRefresh({
|
|
2632
|
-
sfuServer,
|
|
2633
2644
|
iceServers: (iceServers === null || iceServers === void 0 ? void 0 : iceServers.iceServers) || [],
|
|
2634
2645
|
turnServers: turnServers || [],
|
|
2635
2646
|
mediaserverConfigTtlSeconds,
|
|
@@ -2664,13 +2675,16 @@ class P2pRtcManager {
|
|
|
2664
2675
|
P2PReplaceTrackSourceKindNotFound: 0,
|
|
2665
2676
|
P2PRemoveStreamNoPC: 0,
|
|
2666
2677
|
P2POnTrackNoStream: 0,
|
|
2678
|
+
P2PSetCodecPreferenceError: 0,
|
|
2679
|
+
P2PCreateOfferNoSDP: 0,
|
|
2680
|
+
P2PCreateAnswerNoSDP: 0,
|
|
2667
2681
|
};
|
|
2668
2682
|
}
|
|
2669
2683
|
numberOfPeerconnections() {
|
|
2670
2684
|
return Object.keys(this.peerConnections).length;
|
|
2671
2685
|
}
|
|
2672
2686
|
isInitializedWith({ selfId, roomName, isSfu }) {
|
|
2673
|
-
return this._selfId === selfId && this._roomName === roomName && isSfu
|
|
2687
|
+
return this._selfId === selfId && this._roomName === roomName && !isSfu;
|
|
2674
2688
|
}
|
|
2675
2689
|
supportsScreenShareAudio() {
|
|
2676
2690
|
return true;
|
|
@@ -2784,13 +2798,12 @@ class P2pRtcManager {
|
|
|
2784
2798
|
logger$6.warn("No RTCPeerConnection on SDP_OFFER", data);
|
|
2785
2799
|
return;
|
|
2786
2800
|
}
|
|
2787
|
-
const offer = this._transformIncomingSdp(data.message);
|
|
2788
2801
|
(_b = (_a = session
|
|
2789
|
-
.handleOffer(
|
|
2802
|
+
.handleOffer(data.message)
|
|
2790
2803
|
.then((answer) => {
|
|
2791
2804
|
this._emitServerEvent(RELAY_MESSAGES.SDP_ANSWER, {
|
|
2792
2805
|
receiverId: data.clientId,
|
|
2793
|
-
message:
|
|
2806
|
+
message: answer,
|
|
2794
2807
|
});
|
|
2795
2808
|
})).catch) === null || _b === void 0 ? void 0 : _b.call(_a, (e) => {
|
|
2796
2809
|
this.analytics.numPcOnOfferFailure++;
|
|
@@ -2803,15 +2816,13 @@ class P2pRtcManager {
|
|
|
2803
2816
|
logger$6.warn("No RTCPeerConnection on SDP_ANSWER", data);
|
|
2804
2817
|
return;
|
|
2805
2818
|
}
|
|
2806
|
-
|
|
2807
|
-
(_b = (_a = session.handleAnswer(answer)) === null || _a === void 0 ? void 0 : _a.catch) === null || _b === void 0 ? void 0 : _b.call(_a, (e) => {
|
|
2819
|
+
(_b = (_a = session.handleAnswer(data.message)) === null || _a === void 0 ? void 0 : _a.catch) === null || _b === void 0 ? void 0 : _b.call(_a, (e) => {
|
|
2808
2820
|
logger$6.warn("Could not set remote description from remote answer: ", e);
|
|
2809
2821
|
this.analytics.numPcOnAnswerFailure++;
|
|
2810
2822
|
});
|
|
2811
2823
|
}),
|
|
2812
2824
|
this._serverSocket.on(PROTOCOL_RESPONSES.ROOM_JOINED, (payload) => {
|
|
2813
|
-
|
|
2814
|
-
if (error || !this._wasScreenSharing) {
|
|
2825
|
+
if ("error" in payload || !this._wasScreenSharing) {
|
|
2815
2826
|
return;
|
|
2816
2827
|
}
|
|
2817
2828
|
const screenShareStreamId = Object.keys(this.localStreams).find((id) => id !== CAMERA_STREAM_ID);
|
|
@@ -2886,9 +2897,6 @@ class P2pRtcManager {
|
|
|
2886
2897
|
if (previousStatus === newStatus) {
|
|
2887
2898
|
return;
|
|
2888
2899
|
}
|
|
2889
|
-
if (session.peerConnectionId === this._selfId) {
|
|
2890
|
-
return;
|
|
2891
|
-
}
|
|
2892
2900
|
if (previousStatus === TYPES.CONNECTION_DISCONNECTED &&
|
|
2893
2901
|
newStatus === TYPES.CONNECTING) {
|
|
2894
2902
|
return;
|
|
@@ -2987,13 +2995,6 @@ class P2pRtcManager {
|
|
|
2987
2995
|
const streamIds = this._getNonLocalCameraStreamIds();
|
|
2988
2996
|
return streamIds.length === 0 ? null : this.localStreams[streamIds[0]];
|
|
2989
2997
|
}
|
|
2990
|
-
_transformIncomingSdp(original) {
|
|
2991
|
-
const sdp = original.sdp ? original.sdp : original.sdpU;
|
|
2992
|
-
return { type: original.type, sdp };
|
|
2993
|
-
}
|
|
2994
|
-
_transformOutgoingSdp(original) {
|
|
2995
|
-
return { type: original.type, sdpU: original.sdp, sdp: original.sdp };
|
|
2996
|
-
}
|
|
2997
2998
|
_createSession({ clientId, initialBandwidth, isOfferer, peerConnectionId, }) {
|
|
2998
2999
|
if (!peerConnectionId) {
|
|
2999
3000
|
throw new Error("peerConnectionId is missing");
|
|
@@ -3228,10 +3229,9 @@ class P2pRtcManager {
|
|
|
3228
3229
|
delete this.localStreams[streamId];
|
|
3229
3230
|
this._deleteEnabledLocalStreamId(streamId);
|
|
3230
3231
|
}
|
|
3231
|
-
_updateAndScheduleMediaServersRefresh({ iceServers, turnServers,
|
|
3232
|
+
_updateAndScheduleMediaServersRefresh({ iceServers, turnServers, mediaserverConfigTtlSeconds, }) {
|
|
3232
3233
|
this._iceServers = iceServers;
|
|
3233
3234
|
this._turnServers = turnServers;
|
|
3234
|
-
this._sfuServer = sfuServer;
|
|
3235
3235
|
this._mediaserverConfigTtlSeconds = mediaserverConfigTtlSeconds;
|
|
3236
3236
|
this._clearMediaServersRefresh();
|
|
3237
3237
|
if (!mediaserverConfigTtlSeconds) {
|
|
@@ -3359,10 +3359,19 @@ class P2pRtcManager {
|
|
|
3359
3359
|
this._setCodecPreferences(pc).then(() => pc
|
|
3360
3360
|
.createOffer(constraints || this.offerOptions)
|
|
3361
3361
|
.then((offer) => {
|
|
3362
|
+
if (!offer.sdp) {
|
|
3363
|
+
this.analytics.P2PCreateOfferNoSDP++;
|
|
3364
|
+
rtcStats.sendEvent("P2PCreateOfferNoSDP", {});
|
|
3365
|
+
throw new Error("SDP undefined while creating offer");
|
|
3366
|
+
}
|
|
3362
3367
|
if (rtpAbsCaptureTimeOn)
|
|
3363
3368
|
offer.sdp = addAbsCaptureTimeExtMap(offer.sdp);
|
|
3364
3369
|
if (browserName$1 === "firefox") {
|
|
3365
|
-
offer.sdp = setCodecPreferenceSDP(
|
|
3370
|
+
offer.sdp = setCodecPreferenceSDP({
|
|
3371
|
+
sdp: offer.sdp,
|
|
3372
|
+
redOn,
|
|
3373
|
+
incrementAnalyticMetric: (metric) => this.analytics[metric]++,
|
|
3374
|
+
});
|
|
3366
3375
|
}
|
|
3367
3376
|
if (cleanSdpOn)
|
|
3368
3377
|
offer.sdp = cleanSdp(offer.sdp);
|
|
@@ -3375,7 +3384,7 @@ class P2pRtcManager {
|
|
|
3375
3384
|
.then(() => {
|
|
3376
3385
|
this._emitServerEvent(RELAY_MESSAGES.SDP_OFFER, {
|
|
3377
3386
|
receiverId: clientId,
|
|
3378
|
-
message:
|
|
3387
|
+
message: offer,
|
|
3379
3388
|
});
|
|
3380
3389
|
});
|
|
3381
3390
|
})
|
|
@@ -4500,8 +4509,8 @@ const OUTBOUND_SCREEN_OUTBOUND_STREAM_ID = v4$1();
|
|
|
4500
4509
|
if (browserName === "chrome")
|
|
4501
4510
|
window.document.addEventListener("beforeunload", () => (unloading = true));
|
|
4502
4511
|
class VegaRtcManager {
|
|
4503
|
-
constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features, eventClaim
|
|
4504
|
-
const { session, iceServers, turnServers, sfuServer,
|
|
4512
|
+
constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features, eventClaim }) {
|
|
4513
|
+
const { session, iceServers, turnServers, sfuServer, mediaserverConfigTtlSeconds } = room;
|
|
4505
4514
|
this._selfId = selfId;
|
|
4506
4515
|
this._room = room;
|
|
4507
4516
|
this._roomSessionId = session === null || session === void 0 ? void 0 : session.id;
|
|
@@ -4555,7 +4564,6 @@ class VegaRtcManager {
|
|
|
4555
4564
|
};
|
|
4556
4565
|
this._updateAndScheduleMediaServersRefresh({
|
|
4557
4566
|
sfuServer,
|
|
4558
|
-
sfuServers,
|
|
4559
4567
|
iceServers: (iceServers === null || iceServers === void 0 ? void 0 : iceServers.iceServers) || [],
|
|
4560
4568
|
turnServers: turnServers || [],
|
|
4561
4569
|
mediaserverConfigTtlSeconds,
|
|
@@ -4582,13 +4590,14 @@ class VegaRtcManager {
|
|
|
4582
4590
|
camTrackEndedCount: 0,
|
|
4583
4591
|
};
|
|
4584
4592
|
}
|
|
4585
|
-
_updateAndScheduleMediaServersRefresh({ iceServers, turnServers, sfuServer,
|
|
4586
|
-
var _a, _b, _c;
|
|
4593
|
+
_updateAndScheduleMediaServersRefresh({ iceServers, turnServers, sfuServer, mediaserverConfigTtlSeconds, }) {
|
|
4594
|
+
var _a, _b, _c, _d;
|
|
4587
4595
|
this._iceServers = iceServers;
|
|
4588
4596
|
this._turnServers = turnServers;
|
|
4589
|
-
|
|
4590
|
-
|
|
4591
|
-
|
|
4597
|
+
if (sfuServer) {
|
|
4598
|
+
this._sfuServer = sfuServer;
|
|
4599
|
+
}
|
|
4600
|
+
if (sfuServer === null || sfuServer === void 0 ? void 0 : sfuServer.fallbackServers) {
|
|
4592
4601
|
this._sfuServers = sfuServer.fallbackServers.map((entry) => ({
|
|
4593
4602
|
host: entry.host || entry.fqdn,
|
|
4594
4603
|
dc: entry.dc,
|
|
@@ -4598,14 +4607,14 @@ class VegaRtcManager {
|
|
|
4598
4607
|
(_a = this._vegaConnectionManager) === null || _a === void 0 ? void 0 : _a.updateHostList(this._features.sfuServersOverride ||
|
|
4599
4608
|
this._sfuServers ||
|
|
4600
4609
|
this._features.sfuServerOverrideHost ||
|
|
4601
|
-
|
|
4610
|
+
((_b = this._sfuServer) === null || _b === void 0 ? void 0 : _b.url));
|
|
4602
4611
|
const iceServersList = {
|
|
4603
4612
|
iceServers: this._features.turnServersOn ? this._turnServers : this._iceServers,
|
|
4604
4613
|
};
|
|
4605
4614
|
iceServersList.iceServers = turnServerOverride(iceServersList.iceServers, this._features.turnServerOverrideHost);
|
|
4606
4615
|
if (browserName !== "firefox") {
|
|
4607
|
-
(
|
|
4608
|
-
(
|
|
4616
|
+
(_c = this._sendTransport) === null || _c === void 0 ? void 0 : _c.updateIceServers(iceServersList);
|
|
4617
|
+
(_d = this._receiveTransport) === null || _d === void 0 ? void 0 : _d.updateIceServers(iceServersList);
|
|
4609
4618
|
}
|
|
4610
4619
|
this._clearMediaServersRefresh();
|
|
4611
4620
|
if (!mediaserverConfigTtlSeconds) {
|
|
@@ -4659,6 +4668,7 @@ class VegaRtcManager {
|
|
|
4659
4668
|
});
|
|
4660
4669
|
}
|
|
4661
4670
|
_connect() {
|
|
4671
|
+
var _a;
|
|
4662
4672
|
if (this._isConnectingOrConnected)
|
|
4663
4673
|
return;
|
|
4664
4674
|
if (!this._serverSocket.isConnected()) {
|
|
@@ -4674,7 +4684,7 @@ class VegaRtcManager {
|
|
|
4674
4684
|
const hostList = this._features.sfuServersOverride ||
|
|
4675
4685
|
this._sfuServers ||
|
|
4676
4686
|
this._features.sfuServerOverrideHost ||
|
|
4677
|
-
this._sfuServer.url;
|
|
4687
|
+
((_a = this._sfuServer) === null || _a === void 0 ? void 0 : _a.url);
|
|
4678
4688
|
this._vegaConnectionManager = createVegaConnectionManager({
|
|
4679
4689
|
initialHostList: hostList,
|
|
4680
4690
|
getUrlForHost: (host) => {
|
|
@@ -5984,9 +5994,10 @@ class RtcManagerDispatcher {
|
|
|
5984
5994
|
constructor({ emitter, serverSocket, webrtcProvider, features, }) {
|
|
5985
5995
|
this.emitter = emitter;
|
|
5986
5996
|
this.currentManager = null;
|
|
5987
|
-
serverSocket.on(PROTOCOL_RESPONSES.ROOM_JOINED, (
|
|
5988
|
-
if (error)
|
|
5997
|
+
serverSocket.on(PROTOCOL_RESPONSES.ROOM_JOINED, (payload) => {
|
|
5998
|
+
if ("error" in payload)
|
|
5989
5999
|
return;
|
|
6000
|
+
const { room, selfId, eventClaim } = payload;
|
|
5990
6001
|
const config = {
|
|
5991
6002
|
selfId,
|
|
5992
6003
|
room,
|