@whereby.com/media 1.33.0 → 2.0.0
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 +25 -716
- package/dist/index.d.cts +4 -4
- package/dist/index.d.mts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.mjs +26 -713
- package/dist/legacy-esm.js +26 -713
- package/package.json +4 -4
package/dist/index.cjs
CHANGED
|
@@ -9,17 +9,6 @@ var ipAddress = require('ip-address');
|
|
|
9
9
|
var checkIp = require('check-ip');
|
|
10
10
|
var validate = require('uuid-validate');
|
|
11
11
|
var mediasoupClient = require('mediasoup-client');
|
|
12
|
-
var uaParserJs = require('ua-parser-js');
|
|
13
|
-
var Logger_js = require('mediasoup-client/lib/Logger.js');
|
|
14
|
-
var utils = require('mediasoup-client/lib/utils.js');
|
|
15
|
-
var ortc = require('mediasoup-client/lib/ortc.js');
|
|
16
|
-
var sdpCommonUtils = require('mediasoup-client/lib/handlers/sdp/commonUtils.js');
|
|
17
|
-
var ortcUtils = require('mediasoup-client/lib/handlers/ortc/utils.js');
|
|
18
|
-
var errors_js = require('mediasoup-client/lib/errors.js');
|
|
19
|
-
var HandlerInterface_js = require('mediasoup-client/lib/handlers/HandlerInterface.js');
|
|
20
|
-
var RemoteSdp_js = require('mediasoup-client/lib/handlers/sdp/RemoteSdp.js');
|
|
21
|
-
var scalabilityModes_js = require('mediasoup-client/lib/scalabilityModes.js');
|
|
22
|
-
var Safari12_js = require('mediasoup-client/lib/handlers/Safari12.js');
|
|
23
12
|
var EventEmitter = require('events');
|
|
24
13
|
var socket_ioClient = require('socket.io-client');
|
|
25
14
|
|
|
@@ -41,10 +30,6 @@ function _interopNamespaceDefault(e) {
|
|
|
41
30
|
}
|
|
42
31
|
|
|
43
32
|
var sdpTransform__namespace = /*#__PURE__*/_interopNamespaceDefault(sdpTransform);
|
|
44
|
-
var utils__namespace = /*#__PURE__*/_interopNamespaceDefault(utils);
|
|
45
|
-
var ortc__namespace = /*#__PURE__*/_interopNamespaceDefault(ortc);
|
|
46
|
-
var sdpCommonUtils__namespace = /*#__PURE__*/_interopNamespaceDefault(sdpCommonUtils);
|
|
47
|
-
var ortcUtils__namespace = /*#__PURE__*/_interopNamespaceDefault(ortcUtils);
|
|
48
33
|
|
|
49
34
|
const debugOn = process.env.NODE_ENV === "development" || new URLSearchParams(window.location.search).has("debug");
|
|
50
35
|
class Logger {
|
|
@@ -867,7 +852,7 @@ function subscribeStats(subscription, options = OPTIONS, state = STATE) {
|
|
|
867
852
|
|
|
868
853
|
var _a$6;
|
|
869
854
|
const adapter$6 = (_a$6 = adapterRaw.default) !== null && _a$6 !== void 0 ? _a$6 : adapterRaw;
|
|
870
|
-
const logger$
|
|
855
|
+
const logger$a = new Logger();
|
|
871
856
|
const browserName$2 = adapter$6.browserDetails.browser;
|
|
872
857
|
const browserVersion$1 = adapter$6.browserDetails.version;
|
|
873
858
|
function setCodecPreferenceSDP(sdp, redOn) {
|
|
@@ -908,7 +893,7 @@ function setCodecPreferenceSDP(sdp, redOn) {
|
|
|
908
893
|
return newSdp;
|
|
909
894
|
}
|
|
910
895
|
catch (error) {
|
|
911
|
-
logger$
|
|
896
|
+
logger$a.error("setCodecPreferenceSDP error:", error);
|
|
912
897
|
}
|
|
913
898
|
}
|
|
914
899
|
function cleanSdp(sdp) {
|
|
@@ -1094,7 +1079,7 @@ function setVideoBandwidthUsingSetParameters(pc, bandwidth, logger = console) {
|
|
|
1094
1079
|
|
|
1095
1080
|
var _a$5;
|
|
1096
1081
|
const adapter$5 = (_a$5 = adapterRaw.default) !== null && _a$5 !== void 0 ? _a$5 : adapterRaw;
|
|
1097
|
-
const logger$
|
|
1082
|
+
const logger$9 = new Logger();
|
|
1098
1083
|
class Session {
|
|
1099
1084
|
constructor({ peerConnectionId, bandwidth, deprioritizeH264Encoding, }) {
|
|
1100
1085
|
this.peerConnectionId = peerConnectionId;
|
|
@@ -1238,7 +1223,7 @@ class Session {
|
|
|
1238
1223
|
return this._setRemoteDescription(desc).then(() => {
|
|
1239
1224
|
return setVideoBandwidthUsingSetParameters(this.pc, this.bandwidth);
|
|
1240
1225
|
}, (e) => {
|
|
1241
|
-
logger$
|
|
1226
|
+
logger$9.warn("Could not set remote description from remote answer: ", e);
|
|
1242
1227
|
});
|
|
1243
1228
|
}
|
|
1244
1229
|
addIceCandidate(candidate) {
|
|
@@ -1254,7 +1239,7 @@ class Session {
|
|
|
1254
1239
|
return;
|
|
1255
1240
|
}
|
|
1256
1241
|
this.pc.addIceCandidate(candidate).catch((e) => {
|
|
1257
|
-
logger$
|
|
1242
|
+
logger$9.warn("Failed to add ICE candidate ('%s'): %s", candidate ? candidate.candidate : null, e);
|
|
1258
1243
|
});
|
|
1259
1244
|
});
|
|
1260
1245
|
}
|
|
@@ -1273,7 +1258,7 @@ class Session {
|
|
|
1273
1258
|
pc.close();
|
|
1274
1259
|
}
|
|
1275
1260
|
catch (e) {
|
|
1276
|
-
logger$
|
|
1261
|
+
logger$9.warn("failures during close of session", e);
|
|
1277
1262
|
}
|
|
1278
1263
|
}
|
|
1279
1264
|
hasConnectedPeerConnection() {
|
|
@@ -1774,694 +1759,17 @@ const generateByteString = (count) => {
|
|
|
1774
1759
|
return result + result.substring(0, count - result.length);
|
|
1775
1760
|
};
|
|
1776
1761
|
|
|
1777
|
-
const
|
|
1778
|
-
const NAME = "Safari17";
|
|
1779
|
-
const SCTP_NUM_STREAMS = { OS: 1024, MIS: 1024 };
|
|
1780
|
-
class Safari17 extends HandlerInterface_js.HandlerInterface {
|
|
1781
|
-
static createFactory() {
|
|
1782
|
-
return () => new Safari17();
|
|
1783
|
-
}
|
|
1784
|
-
constructor() {
|
|
1785
|
-
super();
|
|
1786
|
-
this._closed = false;
|
|
1787
|
-
this._mapMidTransceiver = new Map();
|
|
1788
|
-
this._sendStream = new MediaStream();
|
|
1789
|
-
this._hasDataChannelMediaSection = false;
|
|
1790
|
-
this._nextSendSctpStreamId = 0;
|
|
1791
|
-
this._transportReady = false;
|
|
1792
|
-
}
|
|
1793
|
-
get name() {
|
|
1794
|
-
return NAME;
|
|
1795
|
-
}
|
|
1796
|
-
close() {
|
|
1797
|
-
logger$9.debug("close()");
|
|
1798
|
-
if (this._closed) {
|
|
1799
|
-
return;
|
|
1800
|
-
}
|
|
1801
|
-
this._closed = true;
|
|
1802
|
-
if (this._pc) {
|
|
1803
|
-
try {
|
|
1804
|
-
this._pc.close();
|
|
1805
|
-
}
|
|
1806
|
-
catch (error) { }
|
|
1807
|
-
}
|
|
1808
|
-
this.emit("@close");
|
|
1809
|
-
}
|
|
1810
|
-
getNativeRtpCapabilities() {
|
|
1811
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
1812
|
-
logger$9.debug("getNativeRtpCapabilities()");
|
|
1813
|
-
const pc = new RTCPeerConnection({
|
|
1814
|
-
iceServers: [],
|
|
1815
|
-
iceTransportPolicy: "all",
|
|
1816
|
-
bundlePolicy: "max-bundle",
|
|
1817
|
-
rtcpMuxPolicy: "require",
|
|
1818
|
-
});
|
|
1819
|
-
try {
|
|
1820
|
-
pc.addTransceiver("audio");
|
|
1821
|
-
pc.addTransceiver("video");
|
|
1822
|
-
const offer = yield pc.createOffer();
|
|
1823
|
-
try {
|
|
1824
|
-
pc.close();
|
|
1825
|
-
}
|
|
1826
|
-
catch (error) { }
|
|
1827
|
-
const sdpObject = sdpTransform__namespace.parse(offer.sdp);
|
|
1828
|
-
const nativeRtpCapabilities = sdpCommonUtils__namespace.extractRtpCapabilities({
|
|
1829
|
-
sdpObject,
|
|
1830
|
-
});
|
|
1831
|
-
ortcUtils__namespace.addNackSuppportForOpus(nativeRtpCapabilities);
|
|
1832
|
-
return nativeRtpCapabilities;
|
|
1833
|
-
}
|
|
1834
|
-
catch (error) {
|
|
1835
|
-
try {
|
|
1836
|
-
pc.close();
|
|
1837
|
-
}
|
|
1838
|
-
catch (error2) { }
|
|
1839
|
-
throw error;
|
|
1840
|
-
}
|
|
1841
|
-
});
|
|
1842
|
-
}
|
|
1843
|
-
getNativeSctpCapabilities() {
|
|
1844
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
1845
|
-
logger$9.debug("getNativeSctpCapabilities()");
|
|
1846
|
-
return {
|
|
1847
|
-
numStreams: SCTP_NUM_STREAMS,
|
|
1848
|
-
};
|
|
1849
|
-
});
|
|
1850
|
-
}
|
|
1851
|
-
run({ direction, iceParameters, iceCandidates, dtlsParameters, sctpParameters, iceServers, iceTransportPolicy, additionalSettings, proprietaryConstraints, extendedRtpCapabilities, }) {
|
|
1852
|
-
this.assertNotClosed();
|
|
1853
|
-
logger$9.debug("run()");
|
|
1854
|
-
this._direction = direction;
|
|
1855
|
-
this._remoteSdp = new RemoteSdp_js.RemoteSdp({
|
|
1856
|
-
iceParameters,
|
|
1857
|
-
iceCandidates,
|
|
1858
|
-
dtlsParameters,
|
|
1859
|
-
sctpParameters,
|
|
1860
|
-
});
|
|
1861
|
-
this._sendingRtpParametersByKind = {
|
|
1862
|
-
audio: ortc__namespace.getSendingRtpParameters("audio", extendedRtpCapabilities),
|
|
1863
|
-
video: ortc__namespace.getSendingRtpParameters("video", extendedRtpCapabilities),
|
|
1864
|
-
};
|
|
1865
|
-
this._sendingRemoteRtpParametersByKind = {
|
|
1866
|
-
audio: ortc__namespace.getSendingRemoteRtpParameters("audio", extendedRtpCapabilities),
|
|
1867
|
-
video: ortc__namespace.getSendingRemoteRtpParameters("video", extendedRtpCapabilities),
|
|
1868
|
-
};
|
|
1869
|
-
if (dtlsParameters.role && dtlsParameters.role !== "auto") {
|
|
1870
|
-
this._forcedLocalDtlsRole = dtlsParameters.role === "server" ? "client" : "server";
|
|
1871
|
-
}
|
|
1872
|
-
this._pc = new RTCPeerConnection(Object.assign({ iceServers: iceServers !== null && iceServers !== void 0 ? iceServers : [], iceTransportPolicy: iceTransportPolicy !== null && iceTransportPolicy !== void 0 ? iceTransportPolicy : "all", bundlePolicy: "max-bundle", rtcpMuxPolicy: "require" }, additionalSettings), proprietaryConstraints);
|
|
1873
|
-
this._pc.addEventListener("icegatheringstatechange", () => {
|
|
1874
|
-
this.emit("@icegatheringstatechange", this._pc.iceGatheringState);
|
|
1875
|
-
});
|
|
1876
|
-
if (this._pc.connectionState) {
|
|
1877
|
-
this._pc.addEventListener("connectionstatechange", () => {
|
|
1878
|
-
this.emit("@connectionstatechange", this._pc.connectionState);
|
|
1879
|
-
});
|
|
1880
|
-
}
|
|
1881
|
-
else {
|
|
1882
|
-
this._pc.addEventListener("iceconnectionstatechange", () => {
|
|
1883
|
-
logger$9.warn("run() | pc.connectionState not supported, using pc.iceConnectionState");
|
|
1884
|
-
switch (this._pc.iceConnectionState) {
|
|
1885
|
-
case "checking": {
|
|
1886
|
-
this.emit("@connectionstatechange", "connecting");
|
|
1887
|
-
break;
|
|
1888
|
-
}
|
|
1889
|
-
case "connected":
|
|
1890
|
-
case "completed": {
|
|
1891
|
-
this.emit("@connectionstatechange", "connected");
|
|
1892
|
-
break;
|
|
1893
|
-
}
|
|
1894
|
-
case "failed": {
|
|
1895
|
-
this.emit("@connectionstatechange", "failed");
|
|
1896
|
-
break;
|
|
1897
|
-
}
|
|
1898
|
-
case "disconnected": {
|
|
1899
|
-
this.emit("@connectionstatechange", "disconnected");
|
|
1900
|
-
break;
|
|
1901
|
-
}
|
|
1902
|
-
case "closed": {
|
|
1903
|
-
this.emit("@connectionstatechange", "closed");
|
|
1904
|
-
break;
|
|
1905
|
-
}
|
|
1906
|
-
}
|
|
1907
|
-
});
|
|
1908
|
-
}
|
|
1909
|
-
}
|
|
1910
|
-
updateIceServers(iceServers) {
|
|
1911
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
1912
|
-
this.assertNotClosed();
|
|
1913
|
-
logger$9.debug("updateIceServers()");
|
|
1914
|
-
const configuration = this._pc.getConfiguration();
|
|
1915
|
-
configuration.iceServers = iceServers;
|
|
1916
|
-
this._pc.setConfiguration(configuration);
|
|
1917
|
-
});
|
|
1918
|
-
}
|
|
1919
|
-
restartIce(iceParameters) {
|
|
1920
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
1921
|
-
this.assertNotClosed();
|
|
1922
|
-
logger$9.debug("restartIce()");
|
|
1923
|
-
this._remoteSdp.updateIceParameters(iceParameters);
|
|
1924
|
-
if (!this._transportReady) {
|
|
1925
|
-
return;
|
|
1926
|
-
}
|
|
1927
|
-
if (this._direction === "send") {
|
|
1928
|
-
const offer = yield this._pc.createOffer({ iceRestart: true });
|
|
1929
|
-
logger$9.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]", offer);
|
|
1930
|
-
yield this._pc.setLocalDescription(offer);
|
|
1931
|
-
const answer = { type: "answer", sdp: this._remoteSdp.getSdp() };
|
|
1932
|
-
logger$9.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]", answer);
|
|
1933
|
-
yield this._pc.setRemoteDescription(answer);
|
|
1934
|
-
}
|
|
1935
|
-
else {
|
|
1936
|
-
const offer = { type: "offer", sdp: this._remoteSdp.getSdp() };
|
|
1937
|
-
logger$9.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]", offer);
|
|
1938
|
-
yield this._pc.setRemoteDescription(offer);
|
|
1939
|
-
const answer = yield this._pc.createAnswer();
|
|
1940
|
-
logger$9.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]", answer);
|
|
1941
|
-
yield this._pc.setLocalDescription(answer);
|
|
1942
|
-
}
|
|
1943
|
-
});
|
|
1944
|
-
}
|
|
1945
|
-
getTransportStats() {
|
|
1946
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
1947
|
-
this.assertNotClosed();
|
|
1948
|
-
return this._pc.getStats();
|
|
1949
|
-
});
|
|
1950
|
-
}
|
|
1951
|
-
send(_a) {
|
|
1952
|
-
return __awaiter(this, arguments, void 0, function* ({ track, encodings, codecOptions, codec, onRtpSender }) {
|
|
1953
|
-
var _b;
|
|
1954
|
-
this.assertNotClosed();
|
|
1955
|
-
this.assertSendDirection();
|
|
1956
|
-
logger$9.debug("send() [kind:%s, track.id:%s]", track.kind, track.id);
|
|
1957
|
-
const sendingRtpParameters = utils__namespace.clone(this._sendingRtpParametersByKind[track.kind]);
|
|
1958
|
-
sendingRtpParameters.codecs = ortc__namespace.reduceCodecs(sendingRtpParameters.codecs, codec);
|
|
1959
|
-
if (encodings && encodings.length > 1 && encodings.every(({ rid }) => !rid)) {
|
|
1960
|
-
encodings = encodings.map((e, i) => {
|
|
1961
|
-
e.rid = `r${i}`;
|
|
1962
|
-
return e;
|
|
1963
|
-
});
|
|
1964
|
-
}
|
|
1965
|
-
if (encodings) {
|
|
1966
|
-
if (!sendingRtpParameters.encodings) {
|
|
1967
|
-
sendingRtpParameters.encodings = [];
|
|
1968
|
-
}
|
|
1969
|
-
Object.assign(sendingRtpParameters.encodings, encodings);
|
|
1970
|
-
}
|
|
1971
|
-
const layers = scalabilityModes_js.parse((encodings !== null && encodings !== void 0 ? encodings : [{}])[0].scalabilityMode);
|
|
1972
|
-
if (sendingRtpParameters.encodings &&
|
|
1973
|
-
sendingRtpParameters.encodings.length > 1 &&
|
|
1974
|
-
(sendingRtpParameters.codecs[0].mimeType.toLowerCase() === "video/vp8" ||
|
|
1975
|
-
sendingRtpParameters.codecs[0].mimeType.toLowerCase() === "video/h264")) {
|
|
1976
|
-
for (const encoding of sendingRtpParameters.encodings) {
|
|
1977
|
-
if (encoding.scalabilityMode) {
|
|
1978
|
-
encoding.scalabilityMode = `L1T${layers.temporalLayers}`;
|
|
1979
|
-
}
|
|
1980
|
-
else {
|
|
1981
|
-
encoding.scalabilityMode = "L1T3";
|
|
1982
|
-
}
|
|
1983
|
-
}
|
|
1984
|
-
}
|
|
1985
|
-
const sendingRemoteRtpParameters = utils__namespace.clone(this._sendingRemoteRtpParametersByKind[track.kind]);
|
|
1986
|
-
sendingRemoteRtpParameters.codecs = ortc__namespace.reduceCodecs(sendingRemoteRtpParameters.codecs, codec);
|
|
1987
|
-
const mediaSectionIdx = this._remoteSdp.getNextMediaSectionIdx();
|
|
1988
|
-
const transceiver = this._pc.addTransceiver(track, {
|
|
1989
|
-
direction: "sendonly",
|
|
1990
|
-
streams: [this._sendStream],
|
|
1991
|
-
sendEncodings: track.kind === "video" ? encodings : undefined,
|
|
1992
|
-
});
|
|
1993
|
-
if (onRtpSender) {
|
|
1994
|
-
onRtpSender(transceiver.sender);
|
|
1995
|
-
}
|
|
1996
|
-
const offer = yield this._pc.createOffer();
|
|
1997
|
-
const localSdpObject = sdpTransform__namespace.parse(offer.sdp);
|
|
1998
|
-
let offerMediaObject = localSdpObject.media[mediaSectionIdx.idx];
|
|
1999
|
-
if (!this._transportReady) {
|
|
2000
|
-
yield this.setupTransport({
|
|
2001
|
-
localDtlsRole: (_b = this._forcedLocalDtlsRole) !== null && _b !== void 0 ? _b : "client",
|
|
2002
|
-
localSdpObject,
|
|
2003
|
-
});
|
|
2004
|
-
}
|
|
2005
|
-
logger$9.debug("send() | calling pc.setLocalDescription() [offer:%o]", offer);
|
|
2006
|
-
yield this._pc.setLocalDescription(offer);
|
|
2007
|
-
const localId = transceiver.mid;
|
|
2008
|
-
sendingRtpParameters.mid = localId;
|
|
2009
|
-
offerMediaObject = localSdpObject.media[mediaSectionIdx.idx];
|
|
2010
|
-
sendingRtpParameters.rtcp.cname = sdpCommonUtils__namespace.getCname({
|
|
2011
|
-
offerMediaObject,
|
|
2012
|
-
});
|
|
2013
|
-
this._remoteSdp.send({
|
|
2014
|
-
offerMediaObject,
|
|
2015
|
-
reuseMid: mediaSectionIdx.reuseMid,
|
|
2016
|
-
offerRtpParameters: sendingRtpParameters,
|
|
2017
|
-
answerRtpParameters: sendingRemoteRtpParameters,
|
|
2018
|
-
codecOptions,
|
|
2019
|
-
});
|
|
2020
|
-
const answer = { type: "answer", sdp: this._remoteSdp.getSdp() };
|
|
2021
|
-
logger$9.debug("send() | calling pc.setRemoteDescription() [answer:%o]", answer);
|
|
2022
|
-
yield this._pc.setRemoteDescription(answer);
|
|
2023
|
-
this._mapMidTransceiver.set(localId, transceiver);
|
|
2024
|
-
return {
|
|
2025
|
-
localId,
|
|
2026
|
-
rtpParameters: sendingRtpParameters,
|
|
2027
|
-
rtpSender: transceiver.sender,
|
|
2028
|
-
};
|
|
2029
|
-
});
|
|
2030
|
-
}
|
|
2031
|
-
stopSending(localId) {
|
|
2032
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
2033
|
-
this.assertSendDirection();
|
|
2034
|
-
if (this._closed) {
|
|
2035
|
-
return;
|
|
2036
|
-
}
|
|
2037
|
-
logger$9.debug("stopSending() [localId:%s]", localId);
|
|
2038
|
-
const transceiver = this._mapMidTransceiver.get(localId);
|
|
2039
|
-
if (!transceiver) {
|
|
2040
|
-
throw new Error("associated RTCRtpTransceiver not found");
|
|
2041
|
-
}
|
|
2042
|
-
void transceiver.sender.replaceTrack(null);
|
|
2043
|
-
this._pc.removeTrack(transceiver.sender);
|
|
2044
|
-
const mediaSectionClosed = this._remoteSdp.closeMediaSection(transceiver.mid);
|
|
2045
|
-
if (mediaSectionClosed) {
|
|
2046
|
-
try {
|
|
2047
|
-
transceiver.stop();
|
|
2048
|
-
}
|
|
2049
|
-
catch (error) { }
|
|
2050
|
-
}
|
|
2051
|
-
const offer = yield this._pc.createOffer();
|
|
2052
|
-
logger$9.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]", offer);
|
|
2053
|
-
yield this._pc.setLocalDescription(offer);
|
|
2054
|
-
const answer = { type: "answer", sdp: this._remoteSdp.getSdp() };
|
|
2055
|
-
logger$9.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]", answer);
|
|
2056
|
-
yield this._pc.setRemoteDescription(answer);
|
|
2057
|
-
this._mapMidTransceiver.delete(localId);
|
|
2058
|
-
});
|
|
2059
|
-
}
|
|
2060
|
-
pauseSending(localId) {
|
|
2061
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
2062
|
-
this.assertNotClosed();
|
|
2063
|
-
this.assertSendDirection();
|
|
2064
|
-
logger$9.debug("pauseSending() [localId:%s]", localId);
|
|
2065
|
-
const transceiver = this._mapMidTransceiver.get(localId);
|
|
2066
|
-
if (!transceiver) {
|
|
2067
|
-
throw new Error("associated RTCRtpTransceiver not found");
|
|
2068
|
-
}
|
|
2069
|
-
transceiver.direction = "inactive";
|
|
2070
|
-
this._remoteSdp.pauseMediaSection(localId);
|
|
2071
|
-
const offer = yield this._pc.createOffer();
|
|
2072
|
-
logger$9.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]", offer);
|
|
2073
|
-
yield this._pc.setLocalDescription(offer);
|
|
2074
|
-
const answer = { type: "answer", sdp: this._remoteSdp.getSdp() };
|
|
2075
|
-
logger$9.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]", answer);
|
|
2076
|
-
yield this._pc.setRemoteDescription(answer);
|
|
2077
|
-
});
|
|
2078
|
-
}
|
|
2079
|
-
resumeSending(localId) {
|
|
2080
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
2081
|
-
this.assertNotClosed();
|
|
2082
|
-
this.assertSendDirection();
|
|
2083
|
-
logger$9.debug("resumeSending() [localId:%s]", localId);
|
|
2084
|
-
const transceiver = this._mapMidTransceiver.get(localId);
|
|
2085
|
-
if (!transceiver) {
|
|
2086
|
-
throw new Error("associated RTCRtpTransceiver not found");
|
|
2087
|
-
}
|
|
2088
|
-
transceiver.direction = "sendonly";
|
|
2089
|
-
this._remoteSdp.resumeSendingMediaSection(localId);
|
|
2090
|
-
const offer = yield this._pc.createOffer();
|
|
2091
|
-
logger$9.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]", offer);
|
|
2092
|
-
yield this._pc.setLocalDescription(offer);
|
|
2093
|
-
const answer = { type: "answer", sdp: this._remoteSdp.getSdp() };
|
|
2094
|
-
logger$9.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]", answer);
|
|
2095
|
-
yield this._pc.setRemoteDescription(answer);
|
|
2096
|
-
});
|
|
2097
|
-
}
|
|
2098
|
-
replaceTrack(localId, track) {
|
|
2099
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
2100
|
-
this.assertNotClosed();
|
|
2101
|
-
this.assertSendDirection();
|
|
2102
|
-
if (track) {
|
|
2103
|
-
logger$9.debug("replaceTrack() [localId:%s, track.id:%s]", localId, track.id);
|
|
2104
|
-
}
|
|
2105
|
-
else {
|
|
2106
|
-
logger$9.debug("replaceTrack() [localId:%s, no track]", localId);
|
|
2107
|
-
}
|
|
2108
|
-
const transceiver = this._mapMidTransceiver.get(localId);
|
|
2109
|
-
if (!transceiver) {
|
|
2110
|
-
throw new Error("associated RTCRtpTransceiver not found");
|
|
2111
|
-
}
|
|
2112
|
-
yield transceiver.sender.replaceTrack(track);
|
|
2113
|
-
});
|
|
2114
|
-
}
|
|
2115
|
-
setMaxSpatialLayer(localId, spatialLayer) {
|
|
2116
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
2117
|
-
this.assertNotClosed();
|
|
2118
|
-
this.assertSendDirection();
|
|
2119
|
-
logger$9.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]", localId, spatialLayer);
|
|
2120
|
-
const transceiver = this._mapMidTransceiver.get(localId);
|
|
2121
|
-
if (!transceiver) {
|
|
2122
|
-
throw new Error("associated RTCRtpTransceiver not found");
|
|
2123
|
-
}
|
|
2124
|
-
const parameters = transceiver.sender.getParameters();
|
|
2125
|
-
parameters.encodings.forEach((encoding, idx) => {
|
|
2126
|
-
if (idx <= spatialLayer) {
|
|
2127
|
-
encoding.active = true;
|
|
2128
|
-
}
|
|
2129
|
-
else {
|
|
2130
|
-
encoding.active = false;
|
|
2131
|
-
}
|
|
2132
|
-
});
|
|
2133
|
-
yield transceiver.sender.setParameters(parameters);
|
|
2134
|
-
this._remoteSdp.muxMediaSectionSimulcast(localId, parameters.encodings);
|
|
2135
|
-
const offer = yield this._pc.createOffer();
|
|
2136
|
-
logger$9.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]", offer);
|
|
2137
|
-
yield this._pc.setLocalDescription(offer);
|
|
2138
|
-
const answer = { type: "answer", sdp: this._remoteSdp.getSdp() };
|
|
2139
|
-
logger$9.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]", answer);
|
|
2140
|
-
yield this._pc.setRemoteDescription(answer);
|
|
2141
|
-
});
|
|
2142
|
-
}
|
|
2143
|
-
setRtpEncodingParameters(localId, params) {
|
|
2144
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
2145
|
-
this.assertNotClosed();
|
|
2146
|
-
this.assertSendDirection();
|
|
2147
|
-
logger$9.debug("setRtpEncodingParameters() [localId:%s, params:%o]", localId, params);
|
|
2148
|
-
const transceiver = this._mapMidTransceiver.get(localId);
|
|
2149
|
-
if (!transceiver) {
|
|
2150
|
-
throw new Error("associated RTCRtpTransceiver not found");
|
|
2151
|
-
}
|
|
2152
|
-
const parameters = transceiver.sender.getParameters();
|
|
2153
|
-
parameters.encodings.forEach((encoding, idx) => {
|
|
2154
|
-
parameters.encodings[idx] = Object.assign(Object.assign({}, encoding), params);
|
|
2155
|
-
});
|
|
2156
|
-
yield transceiver.sender.setParameters(parameters);
|
|
2157
|
-
this._remoteSdp.muxMediaSectionSimulcast(localId, parameters.encodings);
|
|
2158
|
-
const offer = yield this._pc.createOffer();
|
|
2159
|
-
logger$9.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]", offer);
|
|
2160
|
-
yield this._pc.setLocalDescription(offer);
|
|
2161
|
-
const answer = { type: "answer", sdp: this._remoteSdp.getSdp() };
|
|
2162
|
-
logger$9.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]", answer);
|
|
2163
|
-
yield this._pc.setRemoteDescription(answer);
|
|
2164
|
-
});
|
|
2165
|
-
}
|
|
2166
|
-
getSenderStats(localId) {
|
|
2167
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
2168
|
-
this.assertNotClosed();
|
|
2169
|
-
this.assertSendDirection();
|
|
2170
|
-
const transceiver = this._mapMidTransceiver.get(localId);
|
|
2171
|
-
if (!transceiver) {
|
|
2172
|
-
throw new Error("associated RTCRtpTransceiver not found");
|
|
2173
|
-
}
|
|
2174
|
-
return transceiver.sender.getStats();
|
|
2175
|
-
});
|
|
2176
|
-
}
|
|
2177
|
-
sendDataChannel(_a) {
|
|
2178
|
-
return __awaiter(this, arguments, void 0, function* ({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol, }) {
|
|
2179
|
-
var _b;
|
|
2180
|
-
this.assertNotClosed();
|
|
2181
|
-
this.assertSendDirection();
|
|
2182
|
-
const options = {
|
|
2183
|
-
negotiated: true,
|
|
2184
|
-
id: this._nextSendSctpStreamId,
|
|
2185
|
-
ordered,
|
|
2186
|
-
maxPacketLifeTime,
|
|
2187
|
-
maxRetransmits,
|
|
2188
|
-
protocol,
|
|
2189
|
-
};
|
|
2190
|
-
logger$9.debug("sendDataChannel() [options:%o]", options);
|
|
2191
|
-
const dataChannel = this._pc.createDataChannel(label, options);
|
|
2192
|
-
this._nextSendSctpStreamId = ++this._nextSendSctpStreamId % SCTP_NUM_STREAMS.MIS;
|
|
2193
|
-
if (!this._hasDataChannelMediaSection) {
|
|
2194
|
-
const offer = yield this._pc.createOffer();
|
|
2195
|
-
const localSdpObject = sdpTransform__namespace.parse(offer.sdp);
|
|
2196
|
-
const offerMediaObject = localSdpObject.media.find((m) => m.type === "application");
|
|
2197
|
-
if (!this._transportReady) {
|
|
2198
|
-
yield this.setupTransport({
|
|
2199
|
-
localDtlsRole: (_b = this._forcedLocalDtlsRole) !== null && _b !== void 0 ? _b : "client",
|
|
2200
|
-
localSdpObject,
|
|
2201
|
-
});
|
|
2202
|
-
}
|
|
2203
|
-
logger$9.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]", offer);
|
|
2204
|
-
yield this._pc.setLocalDescription(offer);
|
|
2205
|
-
this._remoteSdp.sendSctpAssociation({ offerMediaObject });
|
|
2206
|
-
const answer = { type: "answer", sdp: this._remoteSdp.getSdp() };
|
|
2207
|
-
logger$9.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]", answer);
|
|
2208
|
-
yield this._pc.setRemoteDescription(answer);
|
|
2209
|
-
this._hasDataChannelMediaSection = true;
|
|
2210
|
-
}
|
|
2211
|
-
const sctpStreamParameters = {
|
|
2212
|
-
streamId: options.id,
|
|
2213
|
-
ordered: options.ordered,
|
|
2214
|
-
maxPacketLifeTime: options.maxPacketLifeTime,
|
|
2215
|
-
maxRetransmits: options.maxRetransmits,
|
|
2216
|
-
};
|
|
2217
|
-
return { dataChannel, sctpStreamParameters };
|
|
2218
|
-
});
|
|
2219
|
-
}
|
|
2220
|
-
receive(optionsList) {
|
|
2221
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
2222
|
-
var _a, _b;
|
|
2223
|
-
this.assertNotClosed();
|
|
2224
|
-
this.assertRecvDirection();
|
|
2225
|
-
const results = [];
|
|
2226
|
-
const mapLocalId = new Map();
|
|
2227
|
-
for (const options of optionsList) {
|
|
2228
|
-
const { trackId, kind, rtpParameters, streamId } = options;
|
|
2229
|
-
logger$9.debug("receive() [trackId:%s, kind:%s]", trackId, kind);
|
|
2230
|
-
const localId = (_a = rtpParameters.mid) !== null && _a !== void 0 ? _a : String(this._mapMidTransceiver.size);
|
|
2231
|
-
mapLocalId.set(trackId, localId);
|
|
2232
|
-
this._remoteSdp.receive({
|
|
2233
|
-
mid: localId,
|
|
2234
|
-
kind,
|
|
2235
|
-
offerRtpParameters: rtpParameters,
|
|
2236
|
-
streamId: streamId !== null && streamId !== void 0 ? streamId : rtpParameters.rtcp.cname,
|
|
2237
|
-
trackId,
|
|
2238
|
-
});
|
|
2239
|
-
}
|
|
2240
|
-
const offer = { type: "offer", sdp: this._remoteSdp.getSdp() };
|
|
2241
|
-
logger$9.debug("receive() | calling pc.setRemoteDescription() [offer:%o]", offer);
|
|
2242
|
-
yield this._pc.setRemoteDescription(offer);
|
|
2243
|
-
for (const options of optionsList) {
|
|
2244
|
-
const { trackId, onRtpReceiver } = options;
|
|
2245
|
-
if (onRtpReceiver) {
|
|
2246
|
-
const localId = mapLocalId.get(trackId);
|
|
2247
|
-
const transceiver = this._pc.getTransceivers().find((t) => t.mid === localId);
|
|
2248
|
-
if (!transceiver) {
|
|
2249
|
-
throw new Error("transceiver not found");
|
|
2250
|
-
}
|
|
2251
|
-
onRtpReceiver(transceiver.receiver);
|
|
2252
|
-
}
|
|
2253
|
-
}
|
|
2254
|
-
let answer = yield this._pc.createAnswer();
|
|
2255
|
-
const localSdpObject = sdpTransform__namespace.parse(answer.sdp);
|
|
2256
|
-
for (const options of optionsList) {
|
|
2257
|
-
const { trackId, rtpParameters } = options;
|
|
2258
|
-
const localId = mapLocalId.get(trackId);
|
|
2259
|
-
const answerMediaObject = localSdpObject.media.find((m) => String(m.mid) === localId);
|
|
2260
|
-
sdpCommonUtils__namespace.applyCodecParameters({
|
|
2261
|
-
offerRtpParameters: rtpParameters,
|
|
2262
|
-
answerMediaObject,
|
|
2263
|
-
});
|
|
2264
|
-
}
|
|
2265
|
-
answer = { type: "answer", sdp: sdpTransform__namespace.write(localSdpObject) };
|
|
2266
|
-
if (!this._transportReady) {
|
|
2267
|
-
yield this.setupTransport({
|
|
2268
|
-
localDtlsRole: (_b = this._forcedLocalDtlsRole) !== null && _b !== void 0 ? _b : "client",
|
|
2269
|
-
localSdpObject,
|
|
2270
|
-
});
|
|
2271
|
-
}
|
|
2272
|
-
logger$9.debug("receive() | calling pc.setLocalDescription() [answer:%o]", answer);
|
|
2273
|
-
yield this._pc.setLocalDescription(answer);
|
|
2274
|
-
for (const options of optionsList) {
|
|
2275
|
-
const { trackId } = options;
|
|
2276
|
-
const localId = mapLocalId.get(trackId);
|
|
2277
|
-
const transceiver = this._pc.getTransceivers().find((t) => t.mid === localId);
|
|
2278
|
-
if (!transceiver) {
|
|
2279
|
-
throw new Error("new RTCRtpTransceiver not found");
|
|
2280
|
-
}
|
|
2281
|
-
this._mapMidTransceiver.set(localId, transceiver);
|
|
2282
|
-
results.push({
|
|
2283
|
-
localId,
|
|
2284
|
-
track: transceiver.receiver.track,
|
|
2285
|
-
rtpReceiver: transceiver.receiver,
|
|
2286
|
-
});
|
|
2287
|
-
}
|
|
2288
|
-
return results;
|
|
2289
|
-
});
|
|
2290
|
-
}
|
|
2291
|
-
stopReceiving(localIds) {
|
|
2292
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
2293
|
-
this.assertRecvDirection();
|
|
2294
|
-
if (this._closed) {
|
|
2295
|
-
return;
|
|
2296
|
-
}
|
|
2297
|
-
for (const localId of localIds) {
|
|
2298
|
-
logger$9.debug("stopReceiving() [localId:%s]", localId);
|
|
2299
|
-
const transceiver = this._mapMidTransceiver.get(localId);
|
|
2300
|
-
if (!transceiver) {
|
|
2301
|
-
throw new Error("associated RTCRtpTransceiver not found");
|
|
2302
|
-
}
|
|
2303
|
-
this._remoteSdp.closeMediaSection(transceiver.mid);
|
|
2304
|
-
}
|
|
2305
|
-
const offer = { type: "offer", sdp: this._remoteSdp.getSdp() };
|
|
2306
|
-
logger$9.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]", offer);
|
|
2307
|
-
yield this._pc.setRemoteDescription(offer);
|
|
2308
|
-
const answer = yield this._pc.createAnswer();
|
|
2309
|
-
logger$9.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]", answer);
|
|
2310
|
-
yield this._pc.setLocalDescription(answer);
|
|
2311
|
-
for (const localId of localIds) {
|
|
2312
|
-
this._mapMidTransceiver.delete(localId);
|
|
2313
|
-
}
|
|
2314
|
-
});
|
|
2315
|
-
}
|
|
2316
|
-
pauseReceiving(localIds) {
|
|
2317
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
2318
|
-
this.assertNotClosed();
|
|
2319
|
-
this.assertRecvDirection();
|
|
2320
|
-
for (const localId of localIds) {
|
|
2321
|
-
logger$9.debug("pauseReceiving() [localId:%s]", localId);
|
|
2322
|
-
const transceiver = this._mapMidTransceiver.get(localId);
|
|
2323
|
-
if (!transceiver) {
|
|
2324
|
-
throw new Error("associated RTCRtpTransceiver not found");
|
|
2325
|
-
}
|
|
2326
|
-
transceiver.direction = "inactive";
|
|
2327
|
-
this._remoteSdp.pauseMediaSection(localId);
|
|
2328
|
-
}
|
|
2329
|
-
const offer = { type: "offer", sdp: this._remoteSdp.getSdp() };
|
|
2330
|
-
logger$9.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]", offer);
|
|
2331
|
-
yield this._pc.setRemoteDescription(offer);
|
|
2332
|
-
const answer = yield this._pc.createAnswer();
|
|
2333
|
-
logger$9.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]", answer);
|
|
2334
|
-
yield this._pc.setLocalDescription(answer);
|
|
2335
|
-
});
|
|
2336
|
-
}
|
|
2337
|
-
resumeReceiving(localIds) {
|
|
2338
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
2339
|
-
this.assertNotClosed();
|
|
2340
|
-
this.assertRecvDirection();
|
|
2341
|
-
for (const localId of localIds) {
|
|
2342
|
-
logger$9.debug("resumeReceiving() [localId:%s]", localId);
|
|
2343
|
-
const transceiver = this._mapMidTransceiver.get(localId);
|
|
2344
|
-
if (!transceiver) {
|
|
2345
|
-
throw new Error("associated RTCRtpTransceiver not found");
|
|
2346
|
-
}
|
|
2347
|
-
transceiver.direction = "recvonly";
|
|
2348
|
-
this._remoteSdp.resumeReceivingMediaSection(localId);
|
|
2349
|
-
}
|
|
2350
|
-
const offer = { type: "offer", sdp: this._remoteSdp.getSdp() };
|
|
2351
|
-
logger$9.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]", offer);
|
|
2352
|
-
yield this._pc.setRemoteDescription(offer);
|
|
2353
|
-
const answer = yield this._pc.createAnswer();
|
|
2354
|
-
logger$9.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]", answer);
|
|
2355
|
-
yield this._pc.setLocalDescription(answer);
|
|
2356
|
-
});
|
|
2357
|
-
}
|
|
2358
|
-
getReceiverStats(localId) {
|
|
2359
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
2360
|
-
this.assertNotClosed();
|
|
2361
|
-
this.assertRecvDirection();
|
|
2362
|
-
const transceiver = this._mapMidTransceiver.get(localId);
|
|
2363
|
-
if (!transceiver) {
|
|
2364
|
-
throw new Error("associated RTCRtpTransceiver not found");
|
|
2365
|
-
}
|
|
2366
|
-
return transceiver.receiver.getStats();
|
|
2367
|
-
});
|
|
2368
|
-
}
|
|
2369
|
-
receiveDataChannel(_a) {
|
|
2370
|
-
return __awaiter(this, arguments, void 0, function* ({ sctpStreamParameters, label, protocol, }) {
|
|
2371
|
-
var _b;
|
|
2372
|
-
this.assertNotClosed();
|
|
2373
|
-
this.assertRecvDirection();
|
|
2374
|
-
const { streamId, ordered, maxPacketLifeTime, maxRetransmits } = sctpStreamParameters;
|
|
2375
|
-
const options = {
|
|
2376
|
-
negotiated: true,
|
|
2377
|
-
id: streamId,
|
|
2378
|
-
ordered,
|
|
2379
|
-
maxPacketLifeTime,
|
|
2380
|
-
maxRetransmits,
|
|
2381
|
-
protocol,
|
|
2382
|
-
};
|
|
2383
|
-
logger$9.debug("receiveDataChannel() [options:%o]", options);
|
|
2384
|
-
const dataChannel = this._pc.createDataChannel(label, options);
|
|
2385
|
-
if (!this._hasDataChannelMediaSection) {
|
|
2386
|
-
this._remoteSdp.receiveSctpAssociation();
|
|
2387
|
-
const offer = { type: "offer", sdp: this._remoteSdp.getSdp() };
|
|
2388
|
-
logger$9.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]", offer);
|
|
2389
|
-
yield this._pc.setRemoteDescription(offer);
|
|
2390
|
-
const answer = yield this._pc.createAnswer();
|
|
2391
|
-
if (!this._transportReady) {
|
|
2392
|
-
const localSdpObject = sdpTransform__namespace.parse(answer.sdp);
|
|
2393
|
-
yield this.setupTransport({
|
|
2394
|
-
localDtlsRole: (_b = this._forcedLocalDtlsRole) !== null && _b !== void 0 ? _b : "client",
|
|
2395
|
-
localSdpObject,
|
|
2396
|
-
});
|
|
2397
|
-
}
|
|
2398
|
-
logger$9.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]", answer);
|
|
2399
|
-
yield this._pc.setLocalDescription(answer);
|
|
2400
|
-
this._hasDataChannelMediaSection = true;
|
|
2401
|
-
}
|
|
2402
|
-
return { dataChannel };
|
|
2403
|
-
});
|
|
2404
|
-
}
|
|
2405
|
-
setupTransport(_a) {
|
|
2406
|
-
return __awaiter(this, arguments, void 0, function* ({ localDtlsRole, localSdpObject, }) {
|
|
2407
|
-
if (!localSdpObject) {
|
|
2408
|
-
localSdpObject = sdpTransform__namespace.parse(this._pc.localDescription.sdp);
|
|
2409
|
-
}
|
|
2410
|
-
const dtlsParameters = sdpCommonUtils__namespace.extractDtlsParameters({
|
|
2411
|
-
sdpObject: localSdpObject,
|
|
2412
|
-
});
|
|
2413
|
-
dtlsParameters.role = localDtlsRole;
|
|
2414
|
-
this._remoteSdp.updateDtlsRole(localDtlsRole === "client" ? "server" : "client");
|
|
2415
|
-
yield new Promise((resolve, reject) => {
|
|
2416
|
-
this.safeEmit("@connect", { dtlsParameters }, resolve, reject);
|
|
2417
|
-
});
|
|
2418
|
-
this._transportReady = true;
|
|
2419
|
-
});
|
|
2420
|
-
}
|
|
2421
|
-
assertNotClosed() {
|
|
2422
|
-
if (this._closed) {
|
|
2423
|
-
throw new errors_js.InvalidStateError("method called in a closed handler");
|
|
2424
|
-
}
|
|
2425
|
-
}
|
|
2426
|
-
assertSendDirection() {
|
|
2427
|
-
if (this._direction !== "send") {
|
|
2428
|
-
throw new Error('method can just be called for handlers with "send" direction');
|
|
2429
|
-
}
|
|
2430
|
-
}
|
|
2431
|
-
assertRecvDirection() {
|
|
2432
|
-
if (this._direction !== "recv") {
|
|
2433
|
-
throw new Error('method can just be called for handlers with "recv" direction');
|
|
2434
|
-
}
|
|
2435
|
-
}
|
|
2436
|
-
}
|
|
2437
|
-
|
|
2438
|
-
const getMediasoupDevice = (features) => {
|
|
2439
|
-
var _a;
|
|
1762
|
+
const getMediasoupDeviceAsync = (features) => __awaiter(void 0, void 0, void 0, function* () {
|
|
2440
1763
|
if (features.isNodeSdk) {
|
|
2441
|
-
return new mediasoupClient.Device({
|
|
2442
|
-
}
|
|
2443
|
-
let handlerName = mediasoupClient.detectDevice() || (/applecoremedia|applewebkit|safari/i.test(navigator.userAgent) ? "Safari12" : undefined);
|
|
2444
|
-
if (handlerName === "Safari12" && typeof navigator === "object" && typeof navigator.userAgent === "string") {
|
|
2445
|
-
const uaParser = new uaParserJs.UAParser(navigator.userAgent);
|
|
2446
|
-
const browser = uaParser.getBrowser();
|
|
2447
|
-
const browserVersion = parseInt((_a = browser.major) !== null && _a !== void 0 ? _a : "0");
|
|
2448
|
-
if (browserVersion >= 17 && features.safari17HandlerOn) {
|
|
2449
|
-
handlerName = "Safari17";
|
|
2450
|
-
}
|
|
1764
|
+
return new mediasoupClient.Device({ handlerName: "Safari12" });
|
|
2451
1765
|
}
|
|
1766
|
+
let handlerName = (yield mediasoupClient.detectDeviceAsync()) ||
|
|
1767
|
+
(/applecoremedia|applewebkit|safari/i.test(navigator.userAgent) ? "Safari12" : undefined);
|
|
2452
1768
|
if (/iphone|ipad/i.test(navigator.userAgent)) {
|
|
2453
|
-
|
|
2454
|
-
handlerName = "Safari17";
|
|
2455
|
-
}
|
|
2456
|
-
else {
|
|
2457
|
-
handlerName = "Safari12";
|
|
2458
|
-
}
|
|
2459
|
-
}
|
|
2460
|
-
if (handlerName === "Safari17") {
|
|
2461
|
-
return new mediasoupClient.Device({ handlerFactory: Safari17.createFactory() });
|
|
1769
|
+
handlerName = "Safari12";
|
|
2462
1770
|
}
|
|
2463
1771
|
return new mediasoupClient.Device({ handlerName });
|
|
2464
|
-
};
|
|
1772
|
+
});
|
|
2465
1773
|
|
|
2466
1774
|
const AUDIO_SETTINGS = {
|
|
2467
1775
|
codecOptions: {
|
|
@@ -2584,11 +1892,12 @@ function prioritizeRouterRtpCapabilitiesCodecs(codecs, preferredCodec) {
|
|
|
2584
1892
|
return codecs;
|
|
2585
1893
|
}
|
|
2586
1894
|
return [...codecs].sort((left, right) => {
|
|
1895
|
+
var _a;
|
|
2587
1896
|
if (left.mimeType.toLowerCase() === preferredCodec) {
|
|
2588
1897
|
return -1;
|
|
2589
1898
|
}
|
|
2590
1899
|
if (left.mimeType.toLowerCase() === "video/rtx" &&
|
|
2591
|
-
left.parameters.apt === preferredCodecEntry.preferredPayloadType) {
|
|
1900
|
+
((_a = left.parameters) === null || _a === void 0 ? void 0 : _a.apt) === preferredCodecEntry.preferredPayloadType) {
|
|
2592
1901
|
if (right.mimeType.toLowerCase() === preferredCodec) {
|
|
2593
1902
|
return 1;
|
|
2594
1903
|
}
|
|
@@ -4964,7 +4273,7 @@ class VegaRtcManager {
|
|
|
4964
4273
|
this._vegaConnection = null;
|
|
4965
4274
|
this._micAnalyser = null;
|
|
4966
4275
|
this._micAnalyserDebugger = null;
|
|
4967
|
-
this.
|
|
4276
|
+
this._mediasoupDeviceInitializedAsync = getMediasoupDeviceAsync(features);
|
|
4968
4277
|
this._routerRtpCapabilities = null;
|
|
4969
4278
|
this._sendTransport = null;
|
|
4970
4279
|
this._receiveTransport = null;
|
|
@@ -5166,10 +4475,10 @@ class VegaRtcManager {
|
|
|
5166
4475
|
if (!this._routerRtpCapabilities) {
|
|
5167
4476
|
const modifiedCapabilities = modifyMediaCapabilities(routerRtpCapabilities, Object.assign(Object.assign({}, this._features), { vp9On: this._features.sfuVp9On }));
|
|
5168
4477
|
this._routerRtpCapabilities = modifiedCapabilities;
|
|
5169
|
-
yield ((_a = this.
|
|
4478
|
+
yield ((_a = (yield this._mediasoupDeviceInitializedAsync)) === null || _a === void 0 ? void 0 : _a.load({ routerRtpCapabilities: modifiedCapabilities }));
|
|
5170
4479
|
}
|
|
5171
4480
|
this._vegaConnection.message("setCapabilities", {
|
|
5172
|
-
rtpCapabilities: (_b = this.
|
|
4481
|
+
rtpCapabilities: (_b = (yield this._mediasoupDeviceInitializedAsync)) === null || _b === void 0 ? void 0 : _b.rtpCapabilities,
|
|
5173
4482
|
});
|
|
5174
4483
|
if (this._colocation)
|
|
5175
4484
|
this._vegaConnection.message("setColocation", { colocation: this._colocation });
|
|
@@ -5212,7 +4521,7 @@ class VegaRtcManager {
|
|
|
5212
4521
|
});
|
|
5213
4522
|
transportOptions.iceServers = turnServerOverride(this._features.turnServersOn ? this._turnServers : this._iceServers, this._features.turnServerOverrideHost);
|
|
5214
4523
|
maybeTurnOnly(transportOptions, this._features);
|
|
5215
|
-
const transport = (_a = this.
|
|
4524
|
+
const transport = (_a = (yield this._mediasoupDeviceInitializedAsync)) === null || _a === void 0 ? void 0 : _a[creator](transportOptions);
|
|
5216
4525
|
const onConnectionStateListener = (connectionState) => __awaiter(this, void 0, void 0, function* () {
|
|
5217
4526
|
logger$3.info(`Transport ConnectionStateChanged ${connectionState}`);
|
|
5218
4527
|
if (connectionState !== "disconnected" && connectionState !== "failed") {
|
|
@@ -6028,7 +5337,7 @@ class VegaRtcManager {
|
|
|
6028
5337
|
this._screenVideoTrack = null;
|
|
6029
5338
|
this._screenAudioTrack = null;
|
|
6030
5339
|
this._streamIdToVideoConsumerId.clear();
|
|
6031
|
-
this.
|
|
5340
|
+
this._mediasoupDeviceInitializedAsync = Promise.resolve(null);
|
|
6032
5341
|
}
|
|
6033
5342
|
sendAudioMutedStats(muted) {
|
|
6034
5343
|
rtcStats.sendEvent("audio_muted", { muted });
|
|
@@ -7193,7 +6502,7 @@ class BandwidthTester extends EventEmitter {
|
|
|
7193
6502
|
this.closed = false;
|
|
7194
6503
|
this._features = features || {};
|
|
7195
6504
|
this._vegaConnection = null;
|
|
7196
|
-
this.
|
|
6505
|
+
this._mediasoupDeviceInitializedAsync = getMediasoupDeviceAsync(this._features);
|
|
7197
6506
|
this._routerRtpCapabilities = null;
|
|
7198
6507
|
this._sendTransport = null;
|
|
7199
6508
|
this._receiveTransport = null;
|
|
@@ -7253,7 +6562,7 @@ class BandwidthTester extends EventEmitter {
|
|
|
7253
6562
|
this._receiveTransport.close();
|
|
7254
6563
|
}
|
|
7255
6564
|
this._receiveTransport = null;
|
|
7256
|
-
this.
|
|
6565
|
+
this._mediasoupDeviceInitializedAsync = Promise.resolve(null);
|
|
7257
6566
|
if (this._vegaConnection) {
|
|
7258
6567
|
this._vegaConnection.removeAllListeners();
|
|
7259
6568
|
this._vegaConnection.close();
|
|
@@ -7281,10 +6590,10 @@ class BandwidthTester extends EventEmitter {
|
|
|
7281
6590
|
if (!this._routerRtpCapabilities) {
|
|
7282
6591
|
const modifiedCapabilities = modifyMediaCapabilities(routerRtpCapabilities, Object.assign(Object.assign({}, this._features), { vp9On: this._features.sfuVp9On }));
|
|
7283
6592
|
this._routerRtpCapabilities = modifiedCapabilities;
|
|
7284
|
-
yield ((_a = this.
|
|
6593
|
+
yield ((_a = (yield this._mediasoupDeviceInitializedAsync)) === null || _a === void 0 ? void 0 : _a.load({ routerRtpCapabilities: modifiedCapabilities }));
|
|
7285
6594
|
}
|
|
7286
6595
|
this._vegaConnection.message("setCapabilities", {
|
|
7287
|
-
rtpCapabilities: (_b = this.
|
|
6596
|
+
rtpCapabilities: (_b = (yield this._mediasoupDeviceInitializedAsync)) === null || _b === void 0 ? void 0 : _b.rtpCapabilities,
|
|
7288
6597
|
});
|
|
7289
6598
|
yield Promise.all([this._createTransport(true), this._createTransport(false)]);
|
|
7290
6599
|
yield this._createProducer();
|
|
@@ -7326,7 +6635,7 @@ class BandwidthTester extends EventEmitter {
|
|
|
7326
6635
|
preferUdp: true,
|
|
7327
6636
|
});
|
|
7328
6637
|
transportOptions.iceServers = [{ urls: "stun:any.turn.svc.whereby.com" }];
|
|
7329
|
-
const transport = (_a = this.
|
|
6638
|
+
const transport = (_a = (yield this._mediasoupDeviceInitializedAsync)) === null || _a === void 0 ? void 0 : _a[creator](transportOptions);
|
|
7330
6639
|
transport === null || transport === void 0 ? void 0 : transport.on("connect", ({ dtlsParameters }, callback) => {
|
|
7331
6640
|
this._vegaConnection.message("connectTransport", {
|
|
7332
6641
|
transportId: transport.id,
|
|
@@ -8005,7 +7314,7 @@ exports.getDisplayMedia = getDisplayMedia;
|
|
|
8005
7314
|
exports.getIssuesAndMetrics = getIssuesAndMetrics;
|
|
8006
7315
|
exports.getMediaConstraints = getMediaConstraints;
|
|
8007
7316
|
exports.getMediaSettings = getMediaSettings;
|
|
8008
|
-
exports.
|
|
7317
|
+
exports.getMediasoupDeviceAsync = getMediasoupDeviceAsync;
|
|
8009
7318
|
exports.getNumFailedStatsReports = getNumFailedStatsReports;
|
|
8010
7319
|
exports.getNumFailedTrackSsrcLookups = getNumFailedTrackSsrcLookups;
|
|
8011
7320
|
exports.getNumMissingTrackSsrcLookups = getNumMissingTrackSsrcLookups;
|