@webex/internal-media-core 2.7.4 → 2.9.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/cjs/index.js +2903 -119
- package/dist/esm/index.js +2903 -120
- package/dist/types/{MediaConnection/EventEmitter.d.ts → EventEmitter/index.d.ts} +2 -2
- package/dist/types/EventEmitter/index.d.ts.map +1 -0
- package/dist/types/Logger/index.d.ts +11 -14
- package/dist/types/Logger/index.d.ts.map +1 -1
- package/dist/types/Media/Logger/index.d.ts +16 -0
- package/dist/types/Media/Logger/index.d.ts.map +1 -0
- package/dist/types/Media/Track/Track.d.ts +3 -3
- package/dist/types/Media/Track/Track.d.ts.map +1 -1
- package/dist/types/Media/Track/eventTypes.d.ts +11 -0
- package/dist/types/Media/Track/eventTypes.d.ts.map +1 -0
- package/dist/types/{common/peerConnectionMock.d.ts → Media/testUtils/RTCPeerConnectionMock.d.ts} +1 -1
- package/dist/types/Media/testUtils/RTCPeerConnectionMock.d.ts.map +1 -0
- package/dist/types/MediaConnection/MediaConnection.d.ts +1 -1
- package/dist/types/MediaConnection/MediaConnection.d.ts.map +1 -1
- package/dist/types/MediaConnection/MultistreamRoapMediaConnection.d.ts +3 -4
- package/dist/types/MediaConnection/MultistreamRoapMediaConnection.d.ts.map +1 -1
- package/dist/types/MediaConnection/RoapMediaConnection.d.ts +3 -3
- package/dist/types/MediaConnection/RoapMediaConnection.d.ts.map +1 -1
- package/dist/types/MediaConnection/eventTypes.d.ts +19 -16
- package/dist/types/MediaConnection/eventTypes.d.ts.map +1 -1
- package/dist/types/MediaConnection/index.d.ts +2 -2
- package/dist/types/MediaConnection/index.d.ts.map +1 -1
- package/dist/types/MediaConnection/roap.d.ts +1 -1
- package/dist/types/MediaConnection/roap.d.ts.map +1 -1
- package/dist/types/MediaConnection/testUtils/EventListener.d.ts +6 -5
- package/dist/types/MediaConnection/testUtils/EventListener.d.ts.map +1 -1
- package/dist/types/MediaConnection/testUtils/RoapListener.d.ts +1 -1
- package/dist/types/MediaConnection/testUtils/RoapListener.d.ts.map +1 -1
- package/dist/types/StatsAnalyzer/StatsAnalyzer.d.ts +47 -0
- package/dist/types/StatsAnalyzer/StatsAnalyzer.d.ts.map +1 -0
- package/dist/types/StatsAnalyzer/StatsAnalyzer.test.d.ts +2 -0
- package/dist/types/StatsAnalyzer/StatsAnalyzer.test.d.ts.map +1 -0
- package/dist/types/StatsAnalyzer/constants.d.ts +282 -0
- package/dist/types/StatsAnalyzer/constants.d.ts.map +1 -0
- package/dist/types/StatsAnalyzer/eventTypes.d.ts +33 -0
- package/dist/types/StatsAnalyzer/eventTypes.d.ts.map +1 -0
- package/dist/types/StatsAnalyzer/index.d.ts +4 -0
- package/dist/types/StatsAnalyzer/index.d.ts.map +1 -0
- package/dist/types/StatsAnalyzer/types.d.ts +58 -0
- package/dist/types/StatsAnalyzer/types.d.ts.map +1 -0
- package/dist/types/StatsAnalyzer/utils.d.ts +55 -0
- package/dist/types/StatsAnalyzer/utils.d.ts.map +1 -0
- package/dist/types/common/testUtils/TestLogger.d.ts +13 -0
- package/dist/types/common/testUtils/TestLogger.d.ts.map +1 -0
- package/dist/types/{MediaConnection/testUtils/index.d.ts → common/testUtils/promiseUtils.d.ts} +1 -4
- package/dist/types/common/testUtils/promiseUtils.d.ts.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +4 -2
- package/dist/types/MediaConnection/EventEmitter.d.ts.map +0 -1
- package/dist/types/MediaConnection/logger.d.ts +0 -13
- package/dist/types/MediaConnection/logger.d.ts.map +0 -1
- package/dist/types/MediaConnection/testUtils/index.d.ts.map +0 -1
- package/dist/types/MediaConnection/testUtils/logger.d.ts +0 -3
- package/dist/types/MediaConnection/testUtils/logger.d.ts.map +0 -1
- package/dist/types/common/peerConnectionMock.d.ts.map +0 -1
package/dist/cjs/index.js
CHANGED
|
@@ -501,6 +501,8 @@ function unwrapListeners$3(arr) {
|
|
|
501
501
|
return ret;
|
|
502
502
|
}
|
|
503
503
|
|
|
504
|
+
class EventEmitter$5 extends EventEmitter$6 {}
|
|
505
|
+
|
|
504
506
|
var MEDIA = 'MEDIA';
|
|
505
507
|
var DEVICE = 'DEVICE';
|
|
506
508
|
var MEDIA_STREAM_TRACK = 'MEDIA_STREAM_TRACK';
|
|
@@ -613,6 +615,11 @@ function getTrackSettings(track) {
|
|
|
613
615
|
return {};
|
|
614
616
|
}
|
|
615
617
|
|
|
618
|
+
var TrackEventNames;
|
|
619
|
+
(function (TrackEventNames) {
|
|
620
|
+
TrackEventNames["TRACK_MUTE_STATE_CHANGED"] = "track:mute";
|
|
621
|
+
})(TrackEventNames || (TrackEventNames = {}));
|
|
622
|
+
|
|
616
623
|
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
|
|
617
624
|
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
|
|
618
625
|
var TrackStatus;
|
|
@@ -626,7 +633,7 @@ var TrackKind;
|
|
|
626
633
|
TrackKind["VIDEO"] = "video";
|
|
627
634
|
})(TrackKind || (TrackKind = {}));
|
|
628
635
|
var _mediaStreamTrack = /*#__PURE__*/new WeakMap();
|
|
629
|
-
class Track extends EventEmitter$
|
|
636
|
+
class Track extends EventEmitter$5 {
|
|
630
637
|
constructor(mediaStreamTrack) {
|
|
631
638
|
super();
|
|
632
639
|
_defineProperty__default["default"](this, "ID", void 0);
|
|
@@ -646,7 +653,7 @@ class Track extends EventEmitter$6 {
|
|
|
646
653
|
_classPrivateFieldSet__default["default"](this, _mediaStreamTrack, mediaStreamTrack);
|
|
647
654
|
_classPrivateFieldGet__default["default"](this, _mediaStreamTrack).onmute = () => {
|
|
648
655
|
var action = _classPrivateFieldGet__default["default"](this, _mediaStreamTrack).enabled ? 'muted' : 'unmuted';
|
|
649
|
-
this.emit(
|
|
656
|
+
this.emit(TrackEventNames.TRACK_MUTE_STATE_CHANGED, {
|
|
650
657
|
action
|
|
651
658
|
});
|
|
652
659
|
};
|
|
@@ -741,7 +748,7 @@ class Track extends EventEmitter$6 {
|
|
|
741
748
|
}
|
|
742
749
|
}
|
|
743
750
|
|
|
744
|
-
var eventEmitter = new EventEmitter$
|
|
751
|
+
var eventEmitter = new EventEmitter$5();
|
|
745
752
|
var deviceList = [];
|
|
746
753
|
var getDevices$1 = /*#__PURE__*/function () {
|
|
747
754
|
var _ref = _asyncToGenerator__default["default"](function* () {
|
|
@@ -1378,60 +1385,60 @@ class MediaConnectionError extends Error {
|
|
|
1378
1385
|
}
|
|
1379
1386
|
}
|
|
1380
1387
|
|
|
1381
|
-
function ownKeys$
|
|
1382
|
-
function _objectSpread$
|
|
1388
|
+
function ownKeys$9(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
1389
|
+
function _objectSpread$9(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$9(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$9(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
1383
1390
|
class SdpError extends MediaConnectionError {
|
|
1384
1391
|
constructor(message) {
|
|
1385
1392
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
1386
|
-
super(message, _objectSpread$
|
|
1393
|
+
super(message, _objectSpread$9({
|
|
1387
1394
|
code: ErrorCode.SdpError,
|
|
1388
1395
|
name: 'SdpError'
|
|
1389
1396
|
}, options));
|
|
1390
1397
|
}
|
|
1391
1398
|
}
|
|
1392
1399
|
|
|
1393
|
-
function ownKeys$
|
|
1394
|
-
function _objectSpread$
|
|
1400
|
+
function ownKeys$8(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
1401
|
+
function _objectSpread$8(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$8(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$8(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
1395
1402
|
class IceGatheringError extends SdpError {
|
|
1396
1403
|
constructor(message) {
|
|
1397
1404
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
1398
|
-
super(message, _objectSpread$
|
|
1405
|
+
super(message, _objectSpread$8({
|
|
1399
1406
|
code: ErrorCode.IceGatheringError,
|
|
1400
1407
|
name: 'IceGatheringError'
|
|
1401
1408
|
}, options));
|
|
1402
1409
|
}
|
|
1403
1410
|
}
|
|
1404
1411
|
|
|
1405
|
-
function ownKeys$
|
|
1406
|
-
function _objectSpread$
|
|
1412
|
+
function ownKeys$7(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
1413
|
+
function _objectSpread$7(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$7(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$7(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
1407
1414
|
class SdpAnswerHandlingError extends SdpError {
|
|
1408
1415
|
constructor(message) {
|
|
1409
1416
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
1410
|
-
super(message, _objectSpread$
|
|
1417
|
+
super(message, _objectSpread$7({
|
|
1411
1418
|
code: ErrorCode.SdpAnswerHandlingError,
|
|
1412
1419
|
name: 'SdpAnswerHandlingError'
|
|
1413
1420
|
}, options));
|
|
1414
1421
|
}
|
|
1415
1422
|
}
|
|
1416
1423
|
|
|
1417
|
-
function ownKeys$
|
|
1418
|
-
function _objectSpread$
|
|
1424
|
+
function ownKeys$6(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
1425
|
+
function _objectSpread$6(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$6(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$6(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
1419
1426
|
class SdpOfferCreationError extends SdpError {
|
|
1420
1427
|
constructor(message) {
|
|
1421
1428
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
1422
|
-
super(message, _objectSpread$
|
|
1429
|
+
super(message, _objectSpread$6({
|
|
1423
1430
|
code: ErrorCode.SdpOfferCreationError,
|
|
1424
1431
|
name: 'SdpOfferCreationError'
|
|
1425
1432
|
}, options));
|
|
1426
1433
|
}
|
|
1427
1434
|
}
|
|
1428
1435
|
|
|
1429
|
-
function ownKeys$
|
|
1430
|
-
function _objectSpread$
|
|
1436
|
+
function ownKeys$5(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
1437
|
+
function _objectSpread$5(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$5(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$5(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
1431
1438
|
class SdpOfferHandlingError extends SdpError {
|
|
1432
1439
|
constructor(message) {
|
|
1433
1440
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
1434
|
-
super(message, _objectSpread$
|
|
1441
|
+
super(message, _objectSpread$5({
|
|
1435
1442
|
code: ErrorCode.SdpOfferHandlingError,
|
|
1436
1443
|
name: 'SdpOfferHandlingError'
|
|
1437
1444
|
}, options));
|
|
@@ -1449,8 +1456,6 @@ var Error$1 = /*#__PURE__*/Object.freeze({
|
|
|
1449
1456
|
SdpOfferHandlingError: SdpOfferHandlingError
|
|
1450
1457
|
});
|
|
1451
1458
|
|
|
1452
|
-
class EventEmitter$5 extends EventEmitter$6 {}
|
|
1453
|
-
|
|
1454
1459
|
var global$1 = (typeof global !== "undefined" ? global :
|
|
1455
1460
|
typeof self !== "undefined" ? self :
|
|
1456
1461
|
typeof window !== "undefined" ? window : {});
|
|
@@ -2884,7 +2889,7 @@ opts=arguments[0];}else if(arguments.length===3&&typeof arguments[2]==='object')
|
|
|
2884
2889
|
opts=arguments[2];}trace("on".concat(method),makeEvent(opts||''));return nativeMethod.apply(this,opts?[opts]:undefined).then(function(description){trace("on".concat(method,"OnSuccess"),makeEvent(description.sdp));if(args.length>0&&typeof args[0]==='function'){args[0].apply(null,[description]);return undefined;}return description;},function(err){trace("on".concat(method,"OnFailure"),makeEvent(err.toString()));if(args.length>1&&typeof args[1]==='function'){args[1].apply(null,[err]);return;}throw err;});};}});['setLocalDescription','setRemoteDescription','addIceCandidate'].forEach(function(method){var nativeMethod=origPeerConnection.prototype[method];if(nativeMethod){origPeerConnection.prototype[method]=function(){var _this=this;var args=arguments;trace("on".concat(method),makeEvent(method==='addIceCandidate'?arguments[0]:arguments[0].sdp));return nativeMethod.apply(this,[arguments[0]]).then(function(){var _a;trace("on".concat(method,"OnSuccess"),makeEvent('success'));if(method.endsWith('Description')){if(!_this.transportEventsPreviouslyAdded){var senders=_this.getSenders();var _loop_1=function _loop_1(sender){if(sender.transport){sender.transport.addEventListener('statechange',function(){if(sender&&sender.transport){trace("ondtlsStateChange",makeEvent(sender.transport.state));}});sender.transport.addEventListener('error',function(error){var errorEvent=error;trace("ondtlsError",makeEvent(errorEvent.error.errorDetail));});if(sender.transport.iceTransport){sender.transport.iceTransport.addEventListener('selectedcandidatepairchange',function(){var _a,_b,_c,_d,_e,_f;if(sender.transport&&sender.transport.iceTransport){var pair=sender.transport.iceTransport.getSelectedCandidatePair();var localCandidate="".concat((_a=pair===null||pair===void 0?void 0:pair.local)===null||_a===void 0?void 0:_a.address,":").concat((_b=pair===null||pair===void 0?void 0:pair.local)===null||_b===void 0?void 0:_b.port,"/").concat((_c=pair===null||pair===void 0?void 0:pair.local)===null||_c===void 0?void 0:_c.protocol);var remoteCandidate="".concat((_d=pair===null||pair===void 0?void 0:pair.remote)===null||_d===void 0?void 0:_d.address,":").concat((_e=pair===null||pair===void 0?void 0:pair.remote)===null||_e===void 0?void 0:_e.port,"/").concat((_f=pair===null||pair===void 0?void 0:pair.remote)===null||_f===void 0?void 0:_f.protocol);var pairString="local: ".concat(localCandidate,", remote: ").concat(remoteCandidate);trace('onselectedCandidatePairChange',makeEvent(pairString));}});}_this.transportEventsPreviouslyAdded=true;if(pc.getConfiguration().bundlePolicy==='max-bundle'){return "break";}}};for(var _i=0,senders_1=senders;_i<senders_1.length;_i++){var sender=senders_1[_i];var state_1=_loop_1(sender);if(state_1==="break")break;}}if(!_this.sctpEventsPreviouslyAdded){// Some Firefox versions prior to 113 have sctp defined but not the events, so check both here.
|
|
2885
2890
|
if((_a=_this.sctp)===null||_a===void 0?void 0:_a.addEventListener){_this.sctp.addEventListener('statechange',function(){trace('onsctpStateChange',makeEvent(_this.sctp.state));});_this.sctpEventsPreviouslyAdded=true;}}}if(args.length>=2&&typeof args[1]==='function'){args[1].apply(null,[]);return undefined;}return undefined;},function(err){trace("on".concat(method,"OnFailure"),makeEvent(err.toString()));if(args.length>=3&&typeof args[2]==='function'){args[2].apply(null,[err]);return undefined;}throw err;});};}});if(navigator.mediaDevices&&navigator.mediaDevices.getUserMedia){var origGetUserMedia_1=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);var gum=function gum(){trace('onnavigator.mediaDevices.getUserMedia',makeEvent(JSON.stringify(arguments[0])));return origGetUserMedia_1.apply(navigator.mediaDevices,arguments).then(function(stream){trace('onnavigator.mediaDevices.getUserMediaOnSuccess',makeEvent(JSON.stringify(dumpStream(stream))));return stream;},function(err){trace('onnavigator.mediaDevices.getUserMediaOnFailure',makeEvent(err.name));return Promise.reject(err);});};navigator.mediaDevices.getUserMedia=gum.bind(navigator.mediaDevices);}if(navigator.mediaDevices&&navigator.mediaDevices.getDisplayMedia){var origGetDisplayMedia_1=navigator.mediaDevices.getDisplayMedia.bind(navigator.mediaDevices);var gdm=function gdm(){trace('onnavigator.mediaDevices.getDisplayMedia',makeEvent(JSON.stringify(arguments[0])));return origGetDisplayMedia_1.apply(navigator.mediaDevices,arguments).then(function(stream){trace('onnavigator.mediaDevices.getDisplayMediaOnSuccess',makeEvent(JSON.stringify(dumpStream(stream))));return stream;},function(err){trace('onnavigator.mediaDevices.getDisplayMediaOnFailure',makeEvent(err.name));return Promise.reject(err);});};navigator.mediaDevices.getDisplayMedia=gdm.bind(navigator.mediaDevices);}var getStatsReport=function getStatsReport(){return __awaiter(void 0,void 0,void 0,function(){return __generator(this,function(_a){return [2/*return*/,pc.getStats(null).then(function(res){// Convert from stats report to js Map in order to have values set in `statsPreProcessor`
|
|
2886
2891
|
var statsMap=new Map();res.forEach(function(stats,key){return statsMap.set(key,stats);});return statsPreProcessor(statsMap).then(function(){var now=map2obj(statsMap);var base=deepCopy$1(now);// our new prev
|
|
2887
|
-
var compressed=deltaCompression(prev,now);trace('stats-report',formatStatsReport(compressed),compressed.timestamp!==-Infinity?compressed.timestamp:undefined);prev=base;return Promise.resolve();});})];});});};var interval=window.setInterval(function(){if(pc.signalingState==='closed'){window.clearInterval(interval);return;}getStatsReport();},intervalTime);var forceStatsReport=function forceStatsReport(){return __awaiter(void 0,void 0,void 0,function(){return __generator(this,function(_a){return [2/*return*/,getStatsReport()];});});};return {forceStatsReport:forceStatsReport};};rtcStats_1=rtcstats.rtcStats=rtcStats;var NUM$1='\\d+';var SDP_TOKEN$1="[!#$%&'*+\\-.^_`{|}~a-zA-Z0-9]+";var ANY_NON_WS$1='\\S+';var SP$1='\\s';var REST$1='.+';class Line$1{}var _a$5$1;class BandwidthLine$1 extends Line$1{constructor(bandwidthType,bandwidth){super();this.bandwidthType=bandwidthType;this.bandwidth=bandwidth;}static fromSdpLine(line){if(!BandwidthLine$1.regex.test(line)){return undefined;}var tokens=line.match(BandwidthLine$1.regex);var bandwidthType=tokens[1];var bandwidth=parseInt(tokens[2],10);return new BandwidthLine$1(bandwidthType,bandwidth);}toSdpLine(){return "b=".concat(this.bandwidthType,":").concat(this.bandwidth);}}_a$5$1=BandwidthLine$1;BandwidthLine$1.BW_TYPE_REGEX='CT|AS|TIAS';BandwidthLine$1.regex=new RegExp("^(".concat(_a$5$1.BW_TYPE_REGEX,"):(").concat(NUM$1,")"));class BundleGroupLine$1 extends Line$1{constructor(mids){super();this.mids=mids;}static fromSdpLine(line){if(!BundleGroupLine$1.regex.test(line)){return undefined;}var tokens=line.match(BundleGroupLine$1.regex);var mids=tokens[1].split(' ');return new BundleGroupLine$1(mids);}toSdpLine(){return "a=group:BUNDLE ".concat(this.mids.join(' '));}}BundleGroupLine$1.regex=new RegExp("^group:BUNDLE (".concat(REST$1,")"));var _a$4$1;class CandidateLine$1 extends Line$1{constructor(foundation,componentId,transport,priority,connectionAddress,port,candidateType,relAddr,relPort,candidateExtensions){super();this.foundation=foundation;this.componentId=componentId;this.transport=transport;this.priority=priority;this.connectionAddress=connectionAddress;this.port=port;this.candidateType=candidateType;this.relAddr=relAddr;this.relPort=relPort;this.candidateExtensions=candidateExtensions;}static fromSdpLine(line){if(!CandidateLine$1.regex.test(line)){return undefined;}var tokens=line.match(CandidateLine$1.regex);var foundation=tokens[1];var componentId=parseInt(tokens[2],10);var transport=tokens[3];var priority=parseInt(tokens[4],10);var connectionAddress=tokens[5];var port=parseInt(tokens[6],10);var candidateType=tokens[7];var relAddr=tokens[8];var relPort=tokens[9]?parseInt(tokens[9],10):undefined;var candidateExtensions=tokens[10];return new CandidateLine$1(foundation,componentId,transport,priority,connectionAddress,port,candidateType,relAddr,relPort,candidateExtensions);}toSdpLine(){var str='';str+="a=candidate:".concat(this.foundation," ").concat(this.componentId," ").concat(this.transport," ").concat(this.priority," ").concat(this.connectionAddress," ").concat(this.port," typ ").concat(this.candidateType);if(this.relAddr){str+=" raddr ".concat(this.relAddr);}if(this.relPort){str+=" rport ".concat(this.relPort);}if(this.candidateExtensions){str+=" ".concat(this.candidateExtensions);}return str;}}_a$4$1=CandidateLine$1;CandidateLine$1.ICE_CHARS="[a-zA-Z0-9+/]+";CandidateLine$1.regex=new RegExp("^candidate:(".concat(_a$4$1.ICE_CHARS,") (").concat(NUM$1,") (").concat(ANY_NON_WS$1,") (").concat(NUM$1,") (").concat(ANY_NON_WS$1,") (").concat(NUM$1,") typ (").concat(ANY_NON_WS$1,")(?: raddr (").concat(ANY_NON_WS$1,"))?(?: rport (").concat(NUM$1,"))?(?: (").concat(REST$1,"))?"));class ConnectionLine$1 extends Line$1{constructor(netType,addrType,ipAddr){super();this.netType=netType;this.addrType=addrType;this.ipAddr=ipAddr;}static fromSdpLine(line){if(!ConnectionLine$1.regex.test(line)){return undefined;}var tokens=line.match(ConnectionLine$1.regex);var netType=tokens[1];var addrType=tokens[2];var ipAddr=tokens[3];return new ConnectionLine$1(netType,addrType,ipAddr);}toSdpLine(){return "c=".concat(this.netType," ").concat(this.addrType," ").concat(this.ipAddr);}}ConnectionLine$1.regex=new RegExp("^(".concat(ANY_NON_WS$1,") (").concat(ANY_NON_WS$1,") (").concat(ANY_NON_WS$1,")"));class ContentLine$1 extends Line$1{constructor(values){super();this.values=values;}static fromSdpLine(line){if(!ContentLine$1.regex.test(line)){return undefined;}var tokens=line.match(ContentLine$1.regex);var values=tokens[1].split(',');return new ContentLine$1(values);}toSdpLine(){return "a=content:".concat(this.values.join(','));}}ContentLine$1.regex=new RegExp("^content:(".concat(REST$1,")$"));class DirectionLine$1 extends Line$1{constructor(direction){super();this.direction=direction;}static fromSdpLine(line){if(!DirectionLine$1.regex.test(line)){return undefined;}var tokens=line.match(DirectionLine$1.regex);var direction=tokens[1];return new DirectionLine$1(direction);}toSdpLine(){return "a=".concat(this.direction);}}DirectionLine$1.regex=/^(sendrecv|sendonly|recvonly|inactive)$/;var _a$3$1;class ExtMapLine$1 extends Line$1{constructor(id,uri,direction,extensionAttributes){super();this.id=id;this.uri=uri;this.direction=direction;this.extensionAttributes=extensionAttributes;}static fromSdpLine(line){if(!ExtMapLine$1.regex.test(line)){return undefined;}var tokens=line.match(ExtMapLine$1.regex);var id=parseInt(tokens[1],10);var direction=tokens[2];var uri=tokens[3];var extensionAttributes=tokens[4];return new ExtMapLine$1(id,uri,direction,extensionAttributes);}toSdpLine(){var str='';str+="a=extmap:".concat(this.id);if(this.direction){str+="/".concat(this.direction);}str+=" ".concat(this.uri);if(this.extensionAttributes){str+=" ".concat(this.extensionAttributes);}return str;}}_a$3$1=ExtMapLine$1;ExtMapLine$1.EXTMAP_DIRECTION="sendonly|recvonly|sendrecv|inactive";ExtMapLine$1.regex=new RegExp("^extmap:(".concat(NUM$1,")(?:/(").concat(_a$3$1.EXTMAP_DIRECTION,"))? (").concat(ANY_NON_WS$1,")(?: (").concat(REST$1,"))?"));class FingerprintLine$1 extends Line$1{constructor(fingerprint){super();this.fingerprint=fingerprint;}static fromSdpLine(line){if(!FingerprintLine$1.regex.test(line)){return undefined;}var tokens=line.match(FingerprintLine$1.regex);var fingerprint=tokens[1];return new FingerprintLine$1(fingerprint);}toSdpLine(){return "a=fingerprint:".concat(this.fingerprint);}}FingerprintLine$1.regex=new RegExp("^fingerprint:(".concat(REST$1,")"));function parseFmtpParams$1(fmtpParams){fmtpParams=fmtpParams.replace(/^a=fmtp:\d+\x20/,'');var fmtpObj=new Map();if(/^\d+([,/-]\d+)+$/.test(fmtpParams)){fmtpObj.set(fmtpParams,undefined);return fmtpObj;}fmtpParams.split(';').forEach(param=>{var paramArr=param&¶m.split('=');if(paramArr.length!==2||!paramArr[0]||!paramArr[1]){throw new Error("Fmtp params is invalid with ".concat(fmtpParams));}fmtpObj.set(paramArr[0],paramArr[1]);});return fmtpObj;}class FmtpLine$1 extends Line$1{constructor(payloadType,params){super();this.payloadType=payloadType;this.params=params;}static fromSdpLine(line){if(!FmtpLine$1.regex.test(line)){return undefined;}var tokens=line.match(FmtpLine$1.regex);var payloadType=parseInt(tokens[1],10);var params=tokens[2];return new FmtpLine$1(payloadType,parseFmtpParams$1(params));}toSdpLine(){var fmtParams=Array.from(this.params.keys()).map(key=>{if(this.params.get(key)!==undefined){return "".concat(key,"=").concat(this.params.get(key));}return "".concat(key);}).join(';');return "a=fmtp:".concat(this.payloadType," ").concat(fmtParams);}}FmtpLine$1.regex=new RegExp("^fmtp:(".concat(NUM$1,") (").concat(REST$1,")"));class IceOptionsLine$1 extends Line$1{constructor(options){super();this.options=options;}static fromSdpLine(line){if(!IceOptionsLine$1.regex.test(line)){return undefined;}var tokens=line.match(IceOptionsLine$1.regex);var options=tokens[1].split(' ');return new IceOptionsLine$1(options);}toSdpLine(){return "a=ice-options:".concat(this.options.join(' '));}}IceOptionsLine$1.regex=new RegExp("^ice-options:(".concat(REST$1,")$"));class IcePwdLine$1 extends Line$1{constructor(pwd){super();this.pwd=pwd;}static fromSdpLine(line){if(!IcePwdLine$1.regex.test(line)){return undefined;}var tokens=line.match(IcePwdLine$1.regex);var pwd=tokens[1];return new IcePwdLine$1(pwd);}toSdpLine(){return "a=ice-pwd:".concat(this.pwd);}}IcePwdLine$1.regex=new RegExp("^ice-pwd:(".concat(ANY_NON_WS$1,")$"));class IceUfragLine$1 extends Line$1{constructor(ufrag){super();this.ufrag=ufrag;}static fromSdpLine(line){if(!IceUfragLine$1.regex.test(line)){return undefined;}var tokens=line.match(IceUfragLine$1.regex);var ufrag=tokens[1];return new IceUfragLine$1(ufrag);}toSdpLine(){return "a=ice-ufrag:".concat(this.ufrag);}}IceUfragLine$1.regex=new RegExp("^ice-ufrag:(".concat(ANY_NON_WS$1,")$"));class MaxMessageSizeLine$1 extends Line$1{constructor(maxMessageSize){super();this.maxMessageSize=maxMessageSize;}static fromSdpLine(line){if(!MaxMessageSizeLine$1.regex.test(line)){return undefined;}var tokens=line.match(MaxMessageSizeLine$1.regex);var maxMessageSize=parseInt(tokens[1],10);return new MaxMessageSizeLine$1(maxMessageSize);}toSdpLine(){return "a=max-message-size:".concat(this.maxMessageSize);}}MaxMessageSizeLine$1.regex=new RegExp("^max-message-size:(".concat(NUM$1,")"));var _a$2$2;class MediaLine$1 extends Line$1{constructor(type,port,protocol,formats){super();this.type=type;this.port=port;this.protocol=protocol;this.formats=formats;}static fromSdpLine(line){if(!MediaLine$1.regex.test(line)){return undefined;}var tokens=line.match(MediaLine$1.regex);var type=tokens[1];var port=parseInt(tokens[2],10);var protocol=tokens[3];var formats=tokens[4].split(' ');return new MediaLine$1(type,port,protocol,formats);}toSdpLine(){return "m=".concat(this.type," ").concat(this.port," ").concat(this.protocol," ").concat(this.formats.join(' '));}}_a$2$2=MediaLine$1;MediaLine$1.MEDIA_TYPE='audio|video|application';MediaLine$1.regex=new RegExp("^(".concat(_a$2$2.MEDIA_TYPE,") (").concat(NUM$1,") (").concat(ANY_NON_WS$1,") (").concat(REST$1,")"));class MidLine$1 extends Line$1{constructor(mid){super();this.mid=mid;}static fromSdpLine(line){if(!MidLine$1.regex.test(line)){return undefined;}var tokens=line.match(MidLine$1.regex);var mid=tokens[1];return new MidLine$1(mid);}toSdpLine(){return "a=mid:".concat(this.mid);}}MidLine$1.regex=new RegExp("^mid:(".concat(ANY_NON_WS$1,")$"));class OriginLine$1 extends Line$1{constructor(username,sessionId,sessionVersion,netType,addrType,ipAddr){super();this.username=username;this.sessionId=sessionId;this.sessionVersion=sessionVersion;this.netType=netType;this.addrType=addrType;this.ipAddr=ipAddr;}static fromSdpLine(line){if(!OriginLine$1.regex.test(line)){return undefined;}var tokens=line.match(OriginLine$1.regex);var username=tokens[1];var sessionId=tokens[2];var sessionVersion=parseInt(tokens[3],10);var netType=tokens[4];var addrType=tokens[5];var ipAddr=tokens[6];return new OriginLine$1(username,sessionId,sessionVersion,netType,addrType,ipAddr);}toSdpLine(){return "o=".concat(this.username," ").concat(this.sessionId," ").concat(this.sessionVersion," ").concat(this.netType," ").concat(this.addrType," ").concat(this.ipAddr);}}OriginLine$1.regex=new RegExp("^(".concat(ANY_NON_WS$1,") (").concat(ANY_NON_WS$1,") (").concat(NUM$1,") (").concat(ANY_NON_WS$1,") (").concat(ANY_NON_WS$1,") (").concat(ANY_NON_WS$1,")"));var _a$1$2;class RidLine$1 extends Line$1{constructor(id,direction,params){super();this.id=id;this.direction=direction;this.params=params;}static fromSdpLine(line){if(!RidLine$1.regex.test(line)){return undefined;}var tokens=line.match(RidLine$1.regex);var id=tokens[1];var direction=tokens[2];var params=tokens[3];return new RidLine$1(id,direction,params);}toSdpLine(){var str='';str+="a=rid:".concat(this.id," ").concat(this.direction);if(this.params){str+=" ".concat(this.params);}return str;}}_a$1$2=RidLine$1;RidLine$1.RID_ID="[\\w-]+";RidLine$1.RID_DIRECTION="\\bsend\\b|\\brecv\\b";RidLine$1.regex=new RegExp("^rid:(".concat(_a$1$2.RID_ID,") (").concat(_a$1$2.RID_DIRECTION,")(?:").concat(SP$1,"(").concat(REST$1,"))?"));class RtcpMuxLine$1 extends Line$1{static fromSdpLine(line){if(!RtcpMuxLine$1.regex.test(line)){return undefined;}return new RtcpMuxLine$1();}toSdpLine(){return "a=rtcp-mux";}}RtcpMuxLine$1.regex=/^rtcp-mux$/;class RtcpFbLine$1 extends Line$1{constructor(payloadType,feedback){super();this.payloadType=payloadType;this.feedback=feedback;}static fromSdpLine(line){if(!RtcpFbLine$1.regex.test(line)){return undefined;}var tokens=line.match(RtcpFbLine$1.regex);var payloadType=parseInt(tokens[1],10);var feedback=tokens[2];return new RtcpFbLine$1(payloadType,feedback);}toSdpLine(){return "a=rtcp-fb:".concat(this.payloadType," ").concat(this.feedback);}}RtcpFbLine$1.regex=new RegExp("^rtcp-fb:(".concat(NUM$1,") (").concat(REST$1,")"));var _a$7;class RtpMapLine$1 extends Line$1{constructor(payloadType,encodingName,clockRate,encodingParams){super();this.payloadType=payloadType;this.encodingName=encodingName;this.clockRate=clockRate;this.encodingParams=encodingParams;}static fromSdpLine(line){if(!RtpMapLine$1.regex.test(line)){return undefined;}var tokens=line.match(RtpMapLine$1.regex);var payloadType=parseInt(tokens[1],10);var encodingName=tokens[2];var clockRate=parseInt(tokens[3],10);var encodingParams=tokens[4];return new RtpMapLine$1(payloadType,encodingName,clockRate,encodingParams);}toSdpLine(){var str='';str+="a=rtpmap:".concat(this.payloadType," ").concat(this.encodingName,"/").concat(this.clockRate);if(this.encodingParams){str+="/".concat(this.encodingParams);}return str;}}_a$7=RtpMapLine$1;RtpMapLine$1.NON_SLASH_TOKEN='[^\\s/]+';RtpMapLine$1.regex=new RegExp("^rtpmap:(".concat(NUM$1,") (").concat(_a$7.NON_SLASH_TOKEN,")/(").concat(_a$7.NON_SLASH_TOKEN,")(?:/(").concat(_a$7.NON_SLASH_TOKEN,"))?"));class SctpPortLine$1 extends Line$1{constructor(port){super();this.port=port;}static fromSdpLine(line){if(!SctpPortLine$1.regex.test(line)){return undefined;}var tokens=line.match(SctpPortLine$1.regex);var port=parseInt(tokens[1],10);return new SctpPortLine$1(port);}toSdpLine(){return "a=sctp-port:".concat(this.port);}}SctpPortLine$1.regex=new RegExp("^sctp-port:(".concat(NUM$1,")"));class SessionInformationLine$1 extends Line$1{constructor(info){super();this.info=info;}static fromSdpLine(line){if(!SessionInformationLine$1.regex.test(line)){return undefined;}var tokens=line.match(SessionInformationLine$1.regex);var info=tokens[1];return new SessionInformationLine$1(info);}toSdpLine(){return "i=".concat(this.info);}}SessionInformationLine$1.regex=new RegExp("(".concat(REST$1,")"));class SessionNameLine$1 extends Line$1{constructor(name){super();this.name=name;}static fromSdpLine(line){if(!SessionNameLine$1.regex.test(line)){return undefined;}var tokens=line.match(SessionNameLine$1.regex);var name=tokens[1];return new SessionNameLine$1(name);}toSdpLine(){return "s=".concat(this.name);}}SessionNameLine$1.regex=new RegExp("^(".concat(REST$1,")"));class SetupLine$1 extends Line$1{constructor(setup){super();this.setup=setup;}static fromSdpLine(line){if(!SetupLine$1.regex.test(line)){return undefined;}var tokens=line.match(SetupLine$1.regex);var setup=tokens[1];return new SetupLine$1(setup);}toSdpLine(){return "a=setup:".concat(this.setup);}}SetupLine$1.regex=/^setup:(actpass|active|passive)$/;class SimulcastLayer$1{constructor(id,paused){this.id=id;this.paused=paused;}toString(){return this.paused?"~".concat(this.id):this.id;}}class SimulcastLayerList$1{constructor(){this.layers=[];}addLayer(layer){this.layers.push([layer]);}addLayerWithAlternatives(alternatives){this.layers.push(alternatives);}get length(){return this.layers.length;}get(index){return this.layers[index];}static fromString(str){var layerList=new SimulcastLayerList$1();var tokens=str.split(';');if(tokens.length===1&&!tokens[0].trim()){throw new Error('simulcast stream list empty');}tokens.forEach(token=>{if(!token){throw new Error('simulcast layer list empty');}var ridTokens=token.split(',');var layers=[];ridTokens.forEach(ridToken=>{if(!ridToken||ridToken==='~'){throw new Error('rid empty');}var paused=ridToken[0]==='~';var rid=paused?ridToken.substring(1):ridToken;layers.push(new SimulcastLayer$1(rid,paused));});layerList.addLayerWithAlternatives(layers);});return layerList;}toString(){return this.layers.map(altArray=>altArray.map(v=>v.toString()).join(',')).join(';');}}class SimulcastLine$1 extends Line$1{constructor(sendLayers,recvLayers){super();this.sendLayers=sendLayers;this.recvLayers=recvLayers;}static fromSdpLine(line){if(!SimulcastLine$1.regex.test(line)){return undefined;}var tokens=line.match(SimulcastLine$1.regex);var bidirectional=tokens[3]&&tokens[4];var firstDirection=tokens[1];var layerList1=SimulcastLayerList$1.fromString(tokens[2]);var layerList2=new SimulcastLayerList$1();if(bidirectional){var secondDirection=tokens[3];if(firstDirection===secondDirection){return undefined;}layerList2=SimulcastLayerList$1.fromString(tokens[4]);}var sendLayerList;var recvLayerList;if(firstDirection==='send'){sendLayerList=layerList1;recvLayerList=layerList2;}else {sendLayerList=layerList2;recvLayerList=layerList1;}return new SimulcastLine$1(sendLayerList,recvLayerList);}toSdpLine(){var str='a=simulcast:';if(this.sendLayers.length){str+="send ".concat(this.sendLayers.toString());if(this.recvLayers.length){str+=" ";}}if(this.recvLayers.length){str+="recv ".concat(this.recvLayers.toString());}return str;}}SimulcastLine$1.regex=new RegExp("^simulcast:(send|recv) (".concat(ANY_NON_WS$1,")(?: (send|recv) (").concat(ANY_NON_WS$1,"))?"));class SsrcLine$1 extends Line$1{constructor(ssrcId,attribute){var attributeValue=arguments.length>2&&arguments[2]!==undefined?arguments[2]:undefined;var attributeData=arguments.length>3&&arguments[3]!==undefined?arguments[3]:undefined;super();this.ssrcId=ssrcId;this.attribute=attribute;this.attributeValue=attributeValue;this.attributeData=attributeData;}static fromSdpLine(line){if(!SsrcLine$1.regex.test(line)){return undefined;}var tokens=line.match(SsrcLine$1.regex);var ssrcId=parseInt(tokens[1],10);var attribute=tokens[2];var attributeValue=tokens[3];var attributeData=tokens[4];return new SsrcLine$1(ssrcId,attribute,attributeValue,attributeData);}toSdpLine(){var str="a=ssrc:".concat(this.ssrcId," ").concat(this.attribute);if(this.attributeValue){str+=":".concat(this.attributeValue);}if(this.attributeData){str+=" ".concat(this.attributeData);}return str;}}SsrcLine$1.regex=new RegExp("^ssrc:(".concat(NUM$1,") (").concat(SDP_TOKEN$1,")(?::(").concat(SDP_TOKEN$1,")?(?: (").concat(ANY_NON_WS$1,"))?)?$"));class SsrcGroupLine$1 extends Line$1{constructor(semantics,ssrcs){super();this.semantics=semantics;this.ssrcs=ssrcs;}static fromSdpLine(line){if(!SsrcGroupLine$1.regex.test(line)){return undefined;}var tokens=line.match(SsrcGroupLine$1.regex);var semantics=tokens[1];var ssrcs=tokens[2].split(' ').map(ssrcStr=>parseInt(ssrcStr,10));return new SsrcGroupLine$1(semantics,ssrcs);}toSdpLine(){return "a=ssrc-group:".concat(this.semantics," ").concat(this.ssrcs.join(' '));}}SsrcGroupLine$1.regex=new RegExp("^ssrc-group:(SIM|FID|FEC) ((?:".concat(NUM$1).concat(SP$1,"*)+)"));class TimingLine$1 extends Line$1{constructor(startTime,stopTime){super();this.startTime=startTime;this.stopTime=stopTime;}static fromSdpLine(line){if(!TimingLine$1.regex.test(line)){return undefined;}var tokens=line.match(TimingLine$1.regex);var startTime=parseInt(tokens[1],10);var stopTime=parseInt(tokens[2],10);return new TimingLine$1(startTime,stopTime);}toSdpLine(){return "t=".concat(this.startTime," ").concat(this.stopTime);}}TimingLine$1.regex=new RegExp("^(".concat(NUM$1,") (").concat(NUM$1,")"));class VersionLine$1 extends Line$1{constructor(version){super();this.version=version;}static fromSdpLine(line){if(!VersionLine$1.regex.test(line)){return undefined;}var tokens=line.match(VersionLine$1.regex);var version=parseInt(tokens[1],10);return new VersionLine$1(version);}toSdpLine(){return "v=".concat(this.version);}}VersionLine$1.regex=new RegExp("^(".concat(NUM$1,")$"));class UnknownLine$1 extends Line$1{constructor(value){super();this.value=value;}static fromSdpLine(line){var tokens=line.match(UnknownLine$1.regex);var value=tokens[1];return new UnknownLine$1(value);}toSdpLine(){return "".concat(this.value);}}UnknownLine$1.regex=new RegExp("(".concat(REST$1,")"));class IceInfo$1{constructor(){this.candidates=[];}addLine(line){if(line instanceof IceUfragLine$1){this.ufrag=line;return true;}if(line instanceof IcePwdLine$1){this.pwd=line;return true;}if(line instanceof IceOptionsLine$1){this.options=line;return true;}if(line instanceof CandidateLine$1){this.candidates.push(line);return true;}return false;}toLines(){var lines=[];if(this.ufrag){lines.push(this.ufrag);}if(this.pwd){lines.push(this.pwd);}if(this.options){lines.push(this.options);}this.candidates.forEach(candidate=>lines.push(candidate));return lines;}}class MediaDescription$1{constructor(type,port,protocol){this.iceInfo=new IceInfo$1();this.otherLines=[];this.type=type;this.port=port;this.protocol=protocol;}findOtherLine(ty){return this.otherLines.find(line=>line instanceof ty);}addLine(line){if(line instanceof BundleGroupLine$1){throw new Error("Error: bundle group line not allowed in media description");}if(line instanceof BandwidthLine$1){this.bandwidth=line;return true;}if(line instanceof MidLine$1){this.mid=line.mid;return true;}if(line instanceof FingerprintLine$1){this.fingerprint=line.fingerprint;return true;}if(line instanceof SetupLine$1){this.setup=line.setup;return true;}if(line instanceof ConnectionLine$1){this.connection=line;return true;}if(line instanceof ContentLine$1){this.content=line;return true;}return this.iceInfo.addLine(line);}}class ApplicationMediaDescription$1 extends MediaDescription$1{constructor(mediaLine){super(mediaLine.type,mediaLine.port,mediaLine.protocol);this.fmts=[];this.fmts=mediaLine.formats;}toLines(){var lines=[];lines.push(new MediaLine$1(this.type,this.port,this.protocol,this.fmts));if(this.connection){lines.push(this.connection);}if(this.bandwidth){lines.push(this.bandwidth);}lines.push(...this.iceInfo.toLines());if(this.fingerprint){lines.push(new FingerprintLine$1(this.fingerprint));}if(this.setup){lines.push(new SetupLine$1(this.setup));}if(this.mid){lines.push(new MidLine$1(this.mid));}if(this.content){lines.push(this.content);}if(this.sctpPort){lines.push(new SctpPortLine$1(this.sctpPort));}if(this.maxMessageSize){lines.push(new MaxMessageSizeLine$1(this.maxMessageSize));}lines.push(...this.otherLines);return lines;}addLine(line){if(super.addLine(line)){return true;}if(line instanceof MediaLine$1){throw new Error('Error: tried passing a MediaLine to an existing MediaInfo');}if(line instanceof SctpPortLine$1){this.sctpPort=line.port;return true;}if(line instanceof MaxMessageSizeLine$1){this.maxMessageSize=line.maxMessageSize;return true;}this.otherLines.push(line);return true;}}class CodecInfo$2{constructor(pt){this.fmtParams=new Map();this.feedback=[];this.pt=pt;}addLine(line){if(line instanceof RtpMapLine$1){this.name=line.encodingName;this.clockRate=line.clockRate;this.encodingParams=line.encodingParams;return true;}if(line instanceof FmtpLine$1){this.fmtParams=new Map([...Array.from(this.fmtParams.entries()),...Array.from(line.params.entries())]);if(line.params.has('apt')){var apt=line.params.get('apt');this.primaryCodecPt=parseInt(apt,10);}return true;}if(line instanceof RtcpFbLine$1){this.feedback.push(line.feedback);return true;}return false;}toLines(){var lines=[];if(this.name&&this.clockRate){lines.push(new RtpMapLine$1(this.pt,this.name,this.clockRate,this.encodingParams));}this.feedback.forEach(fb=>{lines.push(new RtcpFbLine$1(this.pt,fb));});if(this.fmtParams.size>0){lines.push(new FmtpLine$1(this.pt,this.fmtParams));}return lines;}}class AvMediaDescription$1 extends MediaDescription$1{constructor(mediaLine){super(mediaLine.type,mediaLine.port,mediaLine.protocol);this.pts=[];this.extMaps=new Map();this.rids=[];this.codecs=new Map();this.rtcpMux=false;this.ssrcs=[];this.ssrcGroups=[];this.pts=mediaLine.formats.map(fmt=>{return parseInt(fmt,10);});this.pts.forEach(pt=>this.codecs.set(pt,new CodecInfo$2(pt)));}toLines(){var lines=[];lines.push(new MediaLine$1(this.type,this.port,this.protocol,this.pts.map(pt=>"".concat(pt))));if(this.connection){lines.push(this.connection);}if(this.bandwidth){lines.push(this.bandwidth);}lines.push(...this.iceInfo.toLines());if(this.fingerprint){lines.push(new FingerprintLine$1(this.fingerprint));}if(this.setup){lines.push(new SetupLine$1(this.setup));}if(this.mid){lines.push(new MidLine$1(this.mid));}if(this.rtcpMux){lines.push(new RtcpMuxLine$1());}if(this.content){lines.push(this.content);}this.extMaps.forEach(extMap=>lines.push(extMap));this.rids.forEach(rid=>lines.push(rid));if(this.simulcast){lines.push(this.simulcast);}if(this.direction){lines.push(new DirectionLine$1(this.direction));}this.codecs.forEach(codec=>lines.push(...codec.toLines()));lines.push(...this.ssrcs);lines.push(...this.ssrcGroups);lines.push(...this.otherLines);return lines;}addLine(line){if(super.addLine(line)){return true;}if(line instanceof MediaLine$1){throw new Error('Error: tried passing a MediaLine to an existing MediaInfo');}if(line instanceof DirectionLine$1){this.direction=line.direction;return true;}if(line instanceof ExtMapLine$1){if(this.extMaps.has(line.id)){throw new Error("Tried to extension with duplicate ID: an extension already exists with ID ".concat(line.id));}this.extMaps.set(line.id,line);return true;}if(line instanceof RidLine$1){this.rids.push(line);return true;}if(line instanceof RtcpMuxLine$1){this.rtcpMux=true;return true;}if(line instanceof SimulcastLine$1){this.simulcast=line;return true;}if(line instanceof RtpMapLine$1||line instanceof FmtpLine$1||line instanceof RtcpFbLine$1){var codec=this.codecs.get(line.payloadType);if(!codec){throw new Error("Error: got line for unknown codec: ".concat(line.toSdpLine()));}codec.addLine(line);return true;}if(line instanceof SsrcLine$1){this.ssrcs.push(line);return true;}if(line instanceof SsrcGroupLine$1){this.ssrcGroups.push(line);return true;}this.otherLines.push(line);return true;}getCodecByPt(pt){return this.codecs.get(pt);}removePt(pt){var associatedPts=[...this.codecs.values()].filter(ci=>ci.primaryCodecPt===pt).map(ci=>ci.pt);var allPtsToRemove=[pt,...associatedPts];allPtsToRemove.forEach(ptToRemove=>{this.codecs.delete(ptToRemove);});this.pts=this.pts.filter(existingPt=>allPtsToRemove.indexOf(existingPt)===-1);}addExtension(_ref){var{uri,direction,attributes,id}=_ref;var getFirstFreeId=()=>{var freeId=1;for(;;){if(!this.extMaps.has(freeId)){break;}freeId+=1;}return freeId;};var extId=id||getFirstFreeId();if(this.extMaps.has(extId)){throw new Error("Extension with ID ".concat(id," already exists"));}if(extId===0){throw new Error("Extension ID 0 is reserved");}this.extMaps.set(extId,new ExtMapLine$1(extId,uri,direction,attributes));}}class SessionDescription$1{constructor(){this.groups=[];this.otherLines=[];}addLine(line){if(line instanceof VersionLine$1){this.version=line;return true;}if(line instanceof OriginLine$1){this.origin=line;return true;}if(line instanceof SessionNameLine$1){this.sessionName=line;return true;}if(line instanceof SessionInformationLine$1){this.information=line;return true;}if(line instanceof TimingLine$1){this.timing=line;return true;}if(line instanceof ConnectionLine$1){this.connection=line;return true;}if(line instanceof BandwidthLine$1){this.bandwidth=line;return true;}if(line instanceof BundleGroupLine$1){this.groups.push(line);return true;}this.otherLines.push(line);return true;}toLines(){var lines=[];if(this.version){lines.push(this.version);}if(this.origin){lines.push(this.origin);}if(this.sessionName){lines.push(this.sessionName);}if(this.information){lines.push(this.information);}if(this.connection){lines.push(this.connection);}if(this.bandwidth){lines.push(this.bandwidth);}if(this.timing){lines.push(this.timing);}if(this.groups){lines.push(...this.groups);}lines.push(...this.otherLines);return lines;}}class Sdp$1{constructor(){this.session=new SessionDescription$1();this.media=[];}get avMedia(){return this.media.filter(mi=>mi instanceof AvMediaDescription$1);}toString(){var lines=[];lines.push(...this.session.toLines());this.media.forEach(m=>lines.push(...m.toLines()));return "".concat(lines.map(l=>l.toSdpLine()).join('\r\n'),"\r\n");}}class Grammar$1{constructor(){this.parsers=new Map();}addParser(lineType,parser){var parsers=this.parsers.get(lineType)||[];parsers.push(parser);this.parsers.set(lineType,parsers);}getParsers(lineType){return this.parsers.get(lineType)||[];}}class SdpGrammar$1 extends Grammar$1{constructor(){super();this.addParser('v',VersionLine$1.fromSdpLine);this.addParser('o',OriginLine$1.fromSdpLine);this.addParser('c',ConnectionLine$1.fromSdpLine);this.addParser('i',SessionInformationLine$1.fromSdpLine);this.addParser('m',MediaLine$1.fromSdpLine);this.addParser('s',SessionNameLine$1.fromSdpLine);this.addParser('t',TimingLine$1.fromSdpLine);this.addParser('b',BandwidthLine$1.fromSdpLine);this.addParser('a',RtpMapLine$1.fromSdpLine);this.addParser('a',RtcpFbLine$1.fromSdpLine);this.addParser('a',FmtpLine$1.fromSdpLine);this.addParser('a',DirectionLine$1.fromSdpLine);this.addParser('a',ExtMapLine$1.fromSdpLine);this.addParser('a',MidLine$1.fromSdpLine);this.addParser('a',IceUfragLine$1.fromSdpLine);this.addParser('a',IcePwdLine$1.fromSdpLine);this.addParser('a',IceOptionsLine$1.fromSdpLine);this.addParser('a',FingerprintLine$1.fromSdpLine);this.addParser('a',SetupLine$1.fromSdpLine);this.addParser('a',SctpPortLine$1.fromSdpLine);this.addParser('a',MaxMessageSizeLine$1.fromSdpLine);this.addParser('a',RtcpMuxLine$1.fromSdpLine);this.addParser('a',BundleGroupLine$1.fromSdpLine);this.addParser('a',ContentLine$1.fromSdpLine);this.addParser('a',RidLine$1.fromSdpLine);this.addParser('a',CandidateLine$1.fromSdpLine);this.addParser('a',SimulcastLine$1.fromSdpLine);this.addParser('a',SsrcLine$1.fromSdpLine);this.addParser('a',SsrcGroupLine$1.fromSdpLine);}}var DefaultSdpGrammar$1=new SdpGrammar$1();function isValidLine$1(line){return line.length>2;}function parseToModel$1(lines){var sdp=new Sdp$1();var currBlock=sdp.session;lines.forEach(l=>{if(l instanceof MediaLine$1){var mediaInfo;if(l.type==='audio'||l.type==='video'){mediaInfo=new AvMediaDescription$1(l);}else if(l.type==='application'){mediaInfo=new ApplicationMediaDescription$1(l);}else {throw new Error("Unhandled media type: ".concat(l.type));}sdp.media.push(mediaInfo);currBlock=mediaInfo;}else {currBlock.addLine(l);}});return sdp;}function parseToLines$1(sdp,grammar){var lines=[];sdp.split(/(\r\n|\r|\n)/).filter(isValidLine$1).forEach(l=>{var lineType=l[0];var lineValue=l.slice(2);var parsers=grammar.getParsers(lineType);for(var parser of parsers){var _result=parser(lineValue);if(_result){lines.push(_result);return;}}var result=UnknownLine$1.fromSdpLine(l);lines.push(result);});return lines;}function parse$1(sdp){var grammar=arguments.length>1&&arguments[1]!==undefined?arguments[1]:DefaultSdpGrammar$1;var lines=parseToLines$1(sdp,grammar);var parsed=parseToModel$1(lines);return parsed;}function disableRtcpFbValue(sdpOrAv,rtcpFbValue){var mediaDescriptions=sdpOrAv instanceof Sdp$1?sdpOrAv.avMedia:[sdpOrAv];mediaDescriptions.forEach(media=>{media.codecs.forEach(codec=>{codec.feedback=codec.feedback.filter(fb=>fb!==rtcpFbValue);});});}function disableTwcc(sdpOrAv){disableRtcpFbValue(sdpOrAv,'transport-cc');}function retainCodecs(av,predicate){var filtered=false;av.codecs.forEach(codecInfo=>{if(!predicate(codecInfo)){av.removePt(codecInfo.pt);filtered=true;}});return filtered;}function retainCodecsByCodecName(av,allowedCodecNames){var allowedLowerCase=allowedCodecNames.map(s=>s.toLowerCase());return retainCodecs(av,codecInfo=>!!codecInfo.name&&allowedLowerCase.includes(codecInfo.name.toLowerCase()));}function retainCandidates(sdpOrMedia,predicate){var mediaDescriptions=sdpOrMedia instanceof Sdp$1?sdpOrMedia.media:[sdpOrMedia];var filtered=false;mediaDescriptions.forEach(media=>{media.iceInfo.candidates=media.iceInfo.candidates.filter(candidate=>{if(predicate(candidate)){return true;}filtered=true;return false;});});return filtered;}function retainCandidatesByTransportType(sdpOrMedia,allowedTransportTypes){var allowedLowerCase=allowedTransportTypes.map(s=>s.toLowerCase());return retainCandidates(sdpOrMedia,candidate=>allowedLowerCase.includes(candidate.transport.toLowerCase()));}function hasCodec(codecName,mLine){return [...mLine.codecs.values()].some(ci=>{var _a;return ((_a=ci.name)===null||_a===void 0?void 0:_a.toLowerCase())===codecName.toLowerCase();});}var commonjsGlobal=typeof globalThis!=='undefined'?globalThis:typeof window!=='undefined'?window:typeof global$1!=='undefined'?global$1:typeof self!=='undefined'?self:{};function getDefaultExportFromCjs(x){return x&&x.__esModule&&Object.prototype.hasOwnProperty.call(x,'default')?x['default']:x;}var es5={exports:{}};(function(module,exports){!function(e,t){module.exports=t();}(commonjsGlobal,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports;}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n});},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0});},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e){r.d(n,i,function(t){return e[t];}.bind(null,i));}return n;},r.n=function(e){var t=e&&e.__esModule?function(){return e.default;}:function(){return e;};return r.d(t,"a",t),t;},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t);},r.p="",r(r.s=90);}({17:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n=r(18),i=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||"";},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||"";},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r;},e.getWindowsVersionName=function(e){switch(e){case"NT":return "NT";case"XP":return "XP";case"NT 5.0":return "2000";case"NT 5.1":return "XP";case"NT 5.2":return "2003";case"NT 6.0":return "Vista";case"NT 6.1":return "7";case"NT 6.2":return "8";case"NT 6.3":return "8.1";case"NT 10.0":return "10";default:return;}},e.getMacOSVersionName=function(e){var t=e.split(".").splice(0,2).map(function(e){return parseInt(e,10)||0;});if(t.push(0),10===t[0])switch(t[1]){case 5:return "Leopard";case 6:return "Snow Leopard";case 7:return "Lion";case 8:return "Mountain Lion";case 9:return "Mavericks";case 10:return "Yosemite";case 11:return "El Capitan";case 12:return "Sierra";case 13:return "High Sierra";case 14:return "Mojave";case 15:return "Catalina";default:return;}},e.getAndroidVersionName=function(e){var t=e.split(".").splice(0,2).map(function(e){return parseInt(e,10)||0;});if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?"Cupcake":1===t[0]&&t[1]>=6?"Donut":2===t[0]&&t[1]<2?"Eclair":2===t[0]&&2===t[1]?"Froyo":2===t[0]&&t[1]>2?"Gingerbread":3===t[0]?"Honeycomb":4===t[0]&&t[1]<1?"Ice Cream Sandwich":4===t[0]&&t[1]<4?"Jelly Bean":4===t[0]&&t[1]>=4?"KitKat":5===t[0]?"Lollipop":6===t[0]?"Marshmallow":7===t[0]?"Nougat":8===t[0]?"Oreo":9===t[0]?"Pie":void 0;},e.getVersionPrecision=function(e){return e.split(".").length;},e.compareVersions=function(t,r,n){void 0===n&&(n=!1);var i=e.getVersionPrecision(t),s=e.getVersionPrecision(r),a=Math.max(i,s),o=0,u=e.map([t,r],function(t){var r=a-e.getVersionPrecision(t),n=t+new Array(r+1).join(".0");return e.map(n.split("."),function(e){return new Array(20-e.length).join("0")+e;}).reverse();});for(n&&(o=a-Math.min(i,s)),a-=1;a>=o;){if(u[0][a]>u[1][a])return 1;if(u[0][a]===u[1][a]){if(a===o)return 0;a-=1;}else if(u[0][a]<u[1][a])return -1;}},e.map=function(e,t){var r,n=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(r=0;r<e.length;r+=1){n.push(t(e[r]));}return n;},e.find=function(e,t){var r,n;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(r=0,n=e.length;r<n;r+=1){var i=e[r];if(t(i,r))return i;}},e.assign=function(e){for(var t,r,n=e,i=arguments.length,s=new Array(i>1?i-1:0),a=1;a<i;a++){s[a-1]=arguments[a];}if(Object.assign)return Object.assign.apply(Object,[e].concat(s));var o=function o(){var e=s[t];"object"==typeof e&&null!==e&&Object.keys(e).forEach(function(t){n[t]=e[t];});};for(t=0,r=s.length;t<r;t+=1){o();}return e;},e.getBrowserAlias=function(e){return n.BROWSER_ALIASES_MAP[e];},e.getBrowserTypeByAlias=function(e){return n.BROWSER_MAP[e]||"";},e;}();t.default=i,e.exports=t.default;},18:function _(e,t,r){t.__esModule=!0,t.ENGINE_MAP=t.OS_MAP=t.PLATFORMS_MAP=t.BROWSER_MAP=t.BROWSER_ALIASES_MAP=void 0;t.BROWSER_ALIASES_MAP={"Amazon Silk":"amazon_silk","Android Browser":"android",Bada:"bada",BlackBerry:"blackberry",Chrome:"chrome",Chromium:"chromium",Electron:"electron",Epiphany:"epiphany",Firefox:"firefox",Focus:"focus",Generic:"generic","Google Search":"google_search",Googlebot:"googlebot","Internet Explorer":"ie","K-Meleon":"k_meleon",Maxthon:"maxthon","Microsoft Edge":"edge","MZ Browser":"mz","NAVER Whale Browser":"naver",Opera:"opera","Opera Coast":"opera_coast",PhantomJS:"phantomjs",Puffin:"puffin",QupZilla:"qupzilla",QQ:"qq",QQLite:"qqlite",Safari:"safari",Sailfish:"sailfish","Samsung Internet for Android":"samsung_internet",SeaMonkey:"seamonkey",Sleipnir:"sleipnir",Swing:"swing",Tizen:"tizen","UC Browser":"uc",Vivaldi:"vivaldi","WebOS Browser":"webos",WeChat:"wechat","Yandex Browser":"yandex",Roku:"roku"};t.BROWSER_MAP={amazon_silk:"Amazon Silk",android:"Android Browser",bada:"Bada",blackberry:"BlackBerry",chrome:"Chrome",chromium:"Chromium",electron:"Electron",epiphany:"Epiphany",firefox:"Firefox",focus:"Focus",generic:"Generic",googlebot:"Googlebot",google_search:"Google Search",ie:"Internet Explorer",k_meleon:"K-Meleon",maxthon:"Maxthon",edge:"Microsoft Edge",mz:"MZ Browser",naver:"NAVER Whale Browser",opera:"Opera",opera_coast:"Opera Coast",phantomjs:"PhantomJS",puffin:"Puffin",qupzilla:"QupZilla",qq:"QQ Browser",qqlite:"QQ Browser Lite",safari:"Safari",sailfish:"Sailfish",samsung_internet:"Samsung Internet for Android",seamonkey:"SeaMonkey",sleipnir:"Sleipnir",swing:"Swing",tizen:"Tizen",uc:"UC Browser",vivaldi:"Vivaldi",webos:"WebOS Browser",wechat:"WeChat",yandex:"Yandex Browser"};t.PLATFORMS_MAP={tablet:"tablet",mobile:"mobile",desktop:"desktop",tv:"tv"};t.OS_MAP={WindowsPhone:"Windows Phone",Windows:"Windows",MacOS:"macOS",iOS:"iOS",Android:"Android",WebOS:"WebOS",BlackBerry:"BlackBerry",Bada:"Bada",Tizen:"Tizen",Linux:"Linux",ChromeOS:"Chrome OS",PlayStation4:"PlayStation 4",Roku:"Roku"};t.ENGINE_MAP={EdgeHTML:"EdgeHTML",Blink:"Blink",Trident:"Trident",Presto:"Presto",Gecko:"Gecko",WebKit:"WebKit"};},90:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(91))&&n.__esModule?n:{default:n},s=r(18);function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n);}}var o=function(){function e(){}var t,r,n;return e.getParser=function(e,t){if(void 0===t&&(t=!1),"string"!=typeof e)throw new Error("UserAgent should be a string");return new i.default(e,t);},e.parse=function(e){return new i.default(e).getResult();},t=e,n=[{key:"BROWSER_MAP",get:function get(){return s.BROWSER_MAP;}},{key:"ENGINE_MAP",get:function get(){return s.ENGINE_MAP;}},{key:"OS_MAP",get:function get(){return s.OS_MAP;}},{key:"PLATFORMS_MAP",get:function get(){return s.PLATFORMS_MAP;}}],(r=null)&&a(t.prototype,r),n&&a(t,n),e;}();t.default=o,e.exports=t.default;},91:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n=u(r(92)),i=u(r(93)),s=u(r(94)),a=u(r(95)),o=u(r(17));function u(e){return e&&e.__esModule?e:{default:e};}var d=function(){function e(e,t){if(void 0===t&&(t=!1),null==e||""===e)throw new Error("UserAgent parameter can't be empty");this._ua=e,this.parsedResult={},!0!==t&&this.parse();}var t=e.prototype;return t.getUA=function(){return this._ua;},t.test=function(e){return e.test(this._ua);},t.parseBrowser=function(){var e=this;this.parsedResult.browser={};var t=o.default.find(n.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.browser=t.describe(this.getUA())),this.parsedResult.browser;},t.getBrowser=function(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser();},t.getBrowserName=function(e){return e?String(this.getBrowser().name).toLowerCase()||"":this.getBrowser().name||"";},t.getBrowserVersion=function(){return this.getBrowser().version;},t.getOS=function(){return this.parsedResult.os?this.parsedResult.os:this.parseOS();},t.parseOS=function(){var e=this;this.parsedResult.os={};var t=o.default.find(i.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.os=t.describe(this.getUA())),this.parsedResult.os;},t.getOSName=function(e){var t=this.getOS().name;return e?String(t).toLowerCase()||"":t||"";},t.getOSVersion=function(){return this.getOS().version;},t.getPlatform=function(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform();},t.getPlatformType=function(e){void 0===e&&(e=!1);var t=this.getPlatform().type;return e?String(t).toLowerCase()||"":t||"";},t.parsePlatform=function(){var e=this;this.parsedResult.platform={};var t=o.default.find(s.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.platform=t.describe(this.getUA())),this.parsedResult.platform;},t.getEngine=function(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine();},t.getEngineName=function(e){return e?String(this.getEngine().name).toLowerCase()||"":this.getEngine().name||"";},t.parseEngine=function(){var e=this;this.parsedResult.engine={};var t=o.default.find(a.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.engine=t.describe(this.getUA())),this.parsedResult.engine;},t.parse=function(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this;},t.getResult=function(){return o.default.assign({},this.parsedResult);},t.satisfies=function(e){var t=this,r={},n=0,i={},s=0;if(Object.keys(e).forEach(function(t){var a=e[t];"string"==typeof a?(i[t]=a,s+=1):"object"==typeof a&&(r[t]=a,n+=1);}),n>0){var a=Object.keys(r),u=o.default.find(a,function(e){return t.isOS(e);});if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d;}var c=o.default.find(a,function(e){return t.isPlatform(e);});if(c){var f=this.satisfies(r[c]);if(void 0!==f)return f;}}if(s>0){var l=Object.keys(i),h=o.default.find(l,function(e){return t.isBrowser(e,!0);});if(void 0!==h)return this.compareVersion(i[h]);}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),i=o.default.getBrowserTypeByAlias(n);return t&&i&&(n=i.toLowerCase()),n===r;},t.compareVersion=function(e){var t=[0],r=e,n=!1,i=this.getBrowserVersion();if("string"==typeof i)return ">"===e[0]||"<"===e[0]?(r=e.substr(1),"="===e[1]?(n=!0,r=e.substr(2)):t=[],">"===e[0]?t.push(1):t.push(-1)):"="===e[0]?r=e.substr(1):"~"===e[0]&&(n=!0,r=e.substr(1)),t.indexOf(o.default.compareVersions(i,r,n))>-1;},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase();},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase();},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase();},t.is=function(e,t){return void 0===t&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e);},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some(function(e){return t.is(e);});},e;}();t.default=d,e.exports=t.default;},92:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n};var s=/version\/(\d+(\.?_?\d+)+)/i,a=[{test:[/googlebot/i],describe:function describe(e){var t={name:"Googlebot"},r=i.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/opera/i],describe:function describe(e){var t={name:"Opera"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/opr\/|opios/i],describe:function describe(e){var t={name:"Opera"},r=i.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/SamsungBrowser/i],describe:function describe(e){var t={name:"Samsung Internet for Android"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/Whale/i],describe:function describe(e){var t={name:"NAVER Whale Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/MZBrowser/i],describe:function describe(e){var t={name:"MZ Browser"},r=i.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/focus/i],describe:function describe(e){var t={name:"Focus"},r=i.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/swing/i],describe:function describe(e){var t={name:"Swing"},r=i.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/coast/i],describe:function describe(e){var t={name:"Opera Coast"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe:function describe(e){var t={name:"Opera Touch"},r=i.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/yabrowser/i],describe:function describe(e){var t={name:"Yandex Browser"},r=i.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/ucbrowser/i],describe:function describe(e){var t={name:"UC Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/Maxthon|mxios/i],describe:function describe(e){var t={name:"Maxthon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/epiphany/i],describe:function describe(e){var t={name:"Epiphany"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/puffin/i],describe:function describe(e){var t={name:"Puffin"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/sleipnir/i],describe:function describe(e){var t={name:"Sleipnir"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/k-meleon/i],describe:function describe(e){var t={name:"K-Meleon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/micromessenger/i],describe:function describe(e){var t={name:"WeChat"},r=i.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/qqbrowser/i],describe:function describe(e){var t={name:/qqbrowserlite/i.test(e)?"QQ Browser Lite":"QQ Browser"},r=i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/msie|trident/i],describe:function describe(e){var t={name:"Internet Explorer"},r=i.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/\sedg\//i],describe:function describe(e){var t={name:"Microsoft Edge"},r=i.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/edg([ea]|ios)/i],describe:function describe(e){var t={name:"Microsoft Edge"},r=i.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/vivaldi/i],describe:function describe(e){var t={name:"Vivaldi"},r=i.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/seamonkey/i],describe:function describe(e){var t={name:"SeaMonkey"},r=i.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/sailfish/i],describe:function describe(e){var t={name:"Sailfish"},r=i.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,e);return r&&(t.version=r),t;}},{test:[/silk/i],describe:function describe(e){var t={name:"Amazon Silk"},r=i.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/phantom/i],describe:function describe(e){var t={name:"PhantomJS"},r=i.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/slimerjs/i],describe:function describe(e){var t={name:"SlimerJS"},r=i.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function describe(e){var t={name:"BlackBerry"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/(web|hpw)[o0]s/i],describe:function describe(e){var t={name:"WebOS Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/bada/i],describe:function describe(e){var t={name:"Bada"},r=i.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/tizen/i],describe:function describe(e){var t={name:"Tizen"},r=i.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/qupzilla/i],describe:function describe(e){var t={name:"QupZilla"},r=i.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/firefox|iceweasel|fxios/i],describe:function describe(e){var t={name:"Firefox"},r=i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/electron/i],describe:function describe(e){var t={name:"Electron"},r=i.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/MiuiBrowser/i],describe:function describe(e){var t={name:"Miui"},r=i.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/chromium/i],describe:function describe(e){var t={name:"Chromium"},r=i.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/chrome|crios|crmo/i],describe:function describe(e){var t={name:"Chrome"},r=i.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/GSA/i],describe:function describe(e){var t={name:"Google Search"},r=i.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r;},describe:function describe(e){var t={name:"Android Browser"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/playstation 4/i],describe:function describe(e){var t={name:"PlayStation 4"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/safari|applewebkit/i],describe:function describe(e){var t={name:"Safari"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/.*/i],describe:function describe(e){var t=-1!==e.search("\\(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return {name:i.default.getFirstMatch(t,e),version:i.default.getSecondMatch(t,e)};}}];t.default=a,e.exports=t.default;},93:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/Roku\/DVP/],describe:function describe(e){var t=i.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,e);return {name:s.OS_MAP.Roku,version:t};}},{test:[/windows phone/i],describe:function describe(e){var t=i.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.WindowsPhone,version:t};}},{test:[/windows /i],describe:function describe(e){var t=i.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,e),r=i.default.getWindowsVersionName(t);return {name:s.OS_MAP.Windows,version:t,versionName:r};}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function describe(e){var t={name:s.OS_MAP.iOS},r=i.default.getSecondMatch(/(Version\/)(\d[\d.]+)/,e);return r&&(t.version=r),t;}},{test:[/macintosh/i],describe:function describe(e){var t=i.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,e).replace(/[_\s]/g,"."),r=i.default.getMacOSVersionName(t),n={name:s.OS_MAP.MacOS,version:t};return r&&(n.versionName=r),n;}},{test:[/(ipod|iphone|ipad)/i],describe:function describe(e){var t=i.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,e).replace(/[_\s]/g,".");return {name:s.OS_MAP.iOS,version:t};}},{test:function test(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r;},describe:function describe(e){var t=i.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,e),r=i.default.getAndroidVersionName(t),n={name:s.OS_MAP.Android,version:t};return r&&(n.versionName=r),n;}},{test:[/(web|hpw)[o0]s/i],describe:function describe(e){var t=i.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,e),r={name:s.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r;}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function describe(e){var t=i.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,e)||i.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,e)||i.default.getFirstMatch(/\bbb(\d+)/i,e);return {name:s.OS_MAP.BlackBerry,version:t};}},{test:[/bada/i],describe:function describe(e){var t=i.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.Bada,version:t};}},{test:[/tizen/i],describe:function describe(e){var t=i.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.Tizen,version:t};}},{test:[/linux/i],describe:function describe(){return {name:s.OS_MAP.Linux};}},{test:[/CrOS/],describe:function describe(){return {name:s.OS_MAP.ChromeOS};}},{test:[/PlayStation 4/],describe:function describe(e){var t=i.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.PlayStation4,version:t};}}];t.default=a,e.exports=t.default;},94:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/googlebot/i],describe:function describe(){return {type:"bot",vendor:"Google"};}},{test:[/huawei/i],describe:function describe(e){var t=i.default.getFirstMatch(/(can-l01)/i,e)&&"Nova",r={type:s.PLATFORMS_MAP.mobile,vendor:"Huawei"};return t&&(r.model=t),r;}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Nexus"};}},{test:[/ipad/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"};}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"};}},{test:[/kftt build/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"};}},{test:[/silk/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Amazon"};}},{test:[/tablet(?! pc)/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet};}},{test:function test(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r;},describe:function describe(e){var t=i.default.getFirstMatch(/(ipod|iphone)/i,e);return {type:s.PLATFORMS_MAP.mobile,vendor:"Apple",model:t};}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"Nexus"};}},{test:[/[^-]mobi/i],describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "blackberry"===e.getBrowserName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"BlackBerry"};}},{test:function test(e){return "bada"===e.getBrowserName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "windows phone"===e.getBrowserName();},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"Microsoft"};}},{test:function test(e){var t=Number(String(e.getOSVersion()).split(".")[0]);return "android"===e.getOSName(!0)&&t>=3;},describe:function describe(){return {type:s.PLATFORMS_MAP.tablet};}},{test:function test(e){return "android"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "macos"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop,vendor:"Apple"};}},{test:function test(e){return "windows"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop};}},{test:function test(e){return "linux"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop};}},{test:function test(e){return "playstation 4"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.tv};}},{test:function test(e){return "roku"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.tv};}}];t.default=a,e.exports=t.default;},95:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:function test(e){return "microsoft edge"===e.getBrowserName(!0);},describe:function describe(e){if(/\sedg\//i.test(e))return {name:s.ENGINE_MAP.Blink};var t=i.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,e);return {name:s.ENGINE_MAP.EdgeHTML,version:t};}},{test:[/trident/i],describe:function describe(e){var t={name:s.ENGINE_MAP.Trident},r=i.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){return e.test(/presto/i);},describe:function describe(e){var t={name:s.ENGINE_MAP.Presto},r=i.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r;},describe:function describe(e){var t={name:s.ENGINE_MAP.Gecko},r=i.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/(apple)?webkit\/537\.36/i],describe:function describe(){return {name:s.ENGINE_MAP.Blink};}},{test:[/(apple)?webkit/i],describe:function describe(e){var t={name:s.ENGINE_MAP.WebKit},r=i.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}}];t.default=a,e.exports=t.default;}});});})(es5);var Bowser=/*@__PURE__*/getDefaultExportFromCjs(es5.exports);var BrowserName;(function(BrowserName){BrowserName["CHROME"]="Chrome";BrowserName["FIREFOX"]="Firefox";BrowserName["EDGE"]="Microsoft Edge";BrowserName["SAFARI"]="Safari";})(BrowserName||(BrowserName={}));var OSName;(function(OSName){OSName["WINDOWS"]="Windows";OSName["MAC"]="macOS";OSName["LINUX"]="Linux";})(OSName||(OSName={}));class BrowserInfo{static getBrowserDetails(){return this.browser.getBrowser();}static getOSDetails(){return this.browser.getOS();}static getPlatformDetails(){return this.browser.getPlatform();}static getEngineDetails(){return this.browser.getEngine();}static isChrome(){return this.browser.getBrowserName()===BrowserName.CHROME;}static isFirefox(){return this.browser.getBrowserName()===BrowserName.FIREFOX;}static isEdge(){return this.browser.getBrowserName()===BrowserName.EDGE;}static isSafari(){return this.browser.getBrowserName()===BrowserName.SAFARI;}static isWindows(){return this.browser.getOSName()===OSName.WINDOWS;}static isMac(){return this.browser.getOSName()===OSName.MAC;}static isLinux(){return this.browser.getOSName()===OSName.LINUX;}static isVersionGreaterThan(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:">".concat(version)};return this.browser.satisfies(checkTree);}static isVersionGreaterThanOrEqualTo(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:">=".concat(version)};return this.browser.satisfies(checkTree);}static isVersionLessThan(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:"<".concat(version)};return this.browser.satisfies(checkTree);}static isVersionLessThanOrEqualTo(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:"<=".concat(version)};return this.browser.satisfies(checkTree);}static isSubVersionOf(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:"~".concat(version)};return this.browser.satisfies(checkTree);}}BrowserInfo.browser=Bowser.getParser(window.navigator.userAgent);var CapabilityState;(function(CapabilityState){CapabilityState["NOT_CAPABLE"]="not capable";CapabilityState["CAPABLE"]="capable";CapabilityState["UNKNOWN"]="unknown";})(CapabilityState||(CapabilityState={}));var simulcastMaxFrameSizes={0:'240',1:'2304',2:'8160'};class JmpLine extends Line$1{static fromSdpLine(line){if(!JmpLine.regex.test(line)){return undefined;}var tokens=line.match(JmpLine.regex);var versions=tokens[1].split(',').filter(v=>v.length);return new JmpLine(versions);}constructor(versions){super();this.versions=versions;}toSdpLine(){return "a=jmp:".concat(this.versions.join(','));}}JmpLine.regex=/^jmp:((?:v\d+,?)+)/;class JmpStreamIdModeLine extends Line$1{constructor(streamIdMode){super();this.streamIdMode=streamIdMode;}static fromSdpLine(line){if(!JmpStreamIdModeLine.regex.test(line)){return undefined;}var tokens=line.match(JmpStreamIdModeLine.regex);var mode=tokens[1];return new JmpStreamIdModeLine(mode);}toSdpLine(){return "a=jmp-stream-id-mode:".concat(this.streamIdMode);}}JmpStreamIdModeLine.regex=/^jmp-stream-id-mode:(MID-RID|SSRC)$/;class JmpSourceLine extends Line$1{constructor(source,csi){super();this.source=source;this.csi=csi;}static fromSdpLine(line){if(!JmpSourceLine.regex.test(line)){return undefined;}var tokens=line.match(JmpSourceLine.regex);var source=tokens[1];var csi=tokens[2];return new JmpSourceLine(source,csi);}toSdpLine(){var line="a=jmp-source:".concat(this.source);if(this.csi){line+=" csi=".concat(this.csi);}return line;}}JmpSourceLine.regex=new RegExp("^jmp-source:(".concat(ANY_NON_WS$1,") (?:csi=(").concat(ANY_NON_WS$1,"))"));DefaultSdpGrammar$1.addParser('a',JmpLine.fromSdpLine);DefaultSdpGrammar$1.addParser('a',JmpSourceLine.fromSdpLine);DefaultSdpGrammar$1.addParser('a',JmpStreamIdModeLine.fromSdpLine);function deepCopy(source){return Array.isArray(source)?source.map(item=>deepCopy(item)):source instanceof Map?new Map(source):source instanceof Date?new Date(source.getTime()):source&&typeof source==='object'?Object.getOwnPropertyNames(source).reduce((o,prop)=>{Object.defineProperty(o,prop,Object.getOwnPropertyDescriptor(source,prop));o[prop]=deepCopy(source[prop]);return o;},Object.create(Object.getPrototypeOf(source))):source;}var ipv4Regex=/(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.)(\d{1,3}\b)/g;var ipv6Regex=/(\b[\da-fA-F]{1,4}(:[\da-fA-F]{1,4}){7}\b)/g;function matchMediaDescriptionsInAnswer(parsedOffer,parsedAnswer){parsedAnswer.session.groups=parsedOffer.session.groups;parsedAnswer.media=parsedOffer.media.map(offerMediaDescription=>{if(!offerMediaDescription.mid){logErrorAndThrow(exports.WcmeErrorType.OFFER_ANSWER_MISMATCH,"Named media groups can only be set for audio.");}var answerMediaDescription=parsedAnswer.media.find(m=>m.mid===offerMediaDescription.mid);if(answerMediaDescription){return answerMediaDescription;}if(!(offerMediaDescription instanceof AvMediaDescription$1)){logErrorAndThrow(exports.WcmeErrorType.OFFER_ANSWER_MISMATCH,"Answer is missing a non-AV media description for MID ".concat(offerMediaDescription.mid,"."));}var startingMediaDescription=parsedAnswer.avMedia.find(m=>m.type===offerMediaDescription.type);if(!startingMediaDescription){logErrorAndThrow(exports.WcmeErrorType.OFFER_ANSWER_MISMATCH,"Answer has no media description of type ".concat(offerMediaDescription.type,", can't generate synthetic answer media description for MID ").concat(offerMediaDescription.mid,"."));}var fakeCorrespondingDescription=deepCopy(startingMediaDescription);fakeCorrespondingDescription.mid=offerMediaDescription.mid;fakeCorrespondingDescription.simulcast=undefined;fakeCorrespondingDescription.bandwidth=undefined;if(offerMediaDescription.direction==='sendrecv'||offerMediaDescription.direction==='sendonly'){fakeCorrespondingDescription.direction='recvonly';}if(offerMediaDescription.direction==='recvonly'){fakeCorrespondingDescription.direction='sendonly';}return fakeCorrespondingDescription;});}function setupBundle(parsedSdp,bundlePolicy,midMap){if(bundlePolicy==='max-compat'){var audioMainMids=midMap.get(exports.MediaType.AudioMain);var videoMainMids=midMap.get(exports.MediaType.VideoMain);var audioContentMids=midMap.get(exports.MediaType.AudioSlides);var videoContentMids=midMap.get(exports.MediaType.VideoSlides);parsedSdp.session.groups.splice(0,parsedSdp.session.groups.length);if(audioMainMids){parsedSdp.session.groups.push(new BundleGroupLine$1(audioMainMids));}if(videoMainMids){parsedSdp.session.groups.push(new BundleGroupLine$1(videoMainMids));}if(audioContentMids){parsedSdp.session.groups.push(new BundleGroupLine$1(audioContentMids));}if(videoContentMids){parsedSdp.session.groups.push(new BundleGroupLine$1(videoContentMids));}}}function filterRecvOnlyMediaDescriptions(parsedSdp){var filteredMids=[];parsedSdp.media=parsedSdp.media.filter(media=>{if(media instanceof ApplicationMediaDescription$1||media instanceof AvMediaDescription$1&&media.direction!=='recvonly'){filteredMids.push(media.mid);return true;}return false;});parsedSdp.session.groups.forEach(g=>{g.mids=g.mids.filter(m=>filteredMids.includes(m));});}function injectContentType(mediaDescription,mediaContent){if(mediaContent===exports.MediaContent.Slides){mediaDescription.addLine(new ContentLine$1(['slides']));}}function injectJmpAttributes(mediaDescription,csi,streamSignalingMode){if(!mediaDescription.otherLines.find(line=>line instanceof JmpLine)){mediaDescription.addLine(new JmpLine(['v1']));}if(!mediaDescription.otherLines.find(line=>line instanceof JmpSourceLine)){mediaDescription.addLine(new JmpSourceLine(mediaDescription.mid,csi.toString()));}if(!mediaDescription.otherLines.find(line=>line instanceof JmpStreamIdModeLine)){mediaDescription.addLine(new JmpStreamIdModeLine(streamSignalingMode));}}function injectDummyCandidates(mediaDescription){mediaDescription.iceInfo.candidates=[];mediaDescription.addLine(new CandidateLine$1('dummy1',1,'udp',3,'0.0.0.0',9,'host'));mediaDescription.addLine(new CandidateLine$1('dummy2',1,'tcp',2,'0.0.0.0',9,'host'));mediaDescription.addLine(new CandidateLine$1('dummy3',1,'udp',1,'0.0.0.0',9,'relay'));}function maskIp(sdp){var maskedSdp=sdp.replace(ipv4Regex,(match,firstOctets)=>{return "".concat(firstOctets,"0");});maskedSdp=maskedSdp.replace(ipv6Regex,match=>{return match.replace(/:[\da-fA-F]{1,4}$/,':0');});return maskedSdp;}function removeMidRidExtensions(mediaDescription){mediaDescription.extMaps.forEach((extMapLine,extId,extMap)=>{if(/^urn:ietf:params:rtp-hdrext:sdes:(?:mid|rtp-stream-id|repaired-rtp-stream-id)$/.test(extMapLine.uri)){extMap.delete(extId);}});}function addVlaExtension(mediaDescription){var vlaExtensionUri='http://www.webrtc.org/experiments/rtp-hdrext/video-layers-allocation00';if(![...mediaDescription.extMaps.values()].some(extMapLine=>extMapLine.uri===vlaExtensionUri)){mediaDescription.addExtension({uri:vlaExtensionUri});}}function applyFormatParameters(mediaDescription,paramsMap){paramsMap.forEach((value,param)=>{[...mediaDescription.codecs.values()].filter(ci=>ci.name==='H264'||ci.name==='opus').forEach(ci=>{if(value===null){ci.fmtParams.delete(param);}else {ci.fmtParams.set(param,"".concat(value));}});});}function generateSsrc(){return Math.floor(Math.random()*0xffffffff)+1;}class EgressSdpMunger{constructor(options){this.streamIds=[];this.customCodecParameters=new Map();this.egressMungerOptions=options;}reset(){this.streamIds=[];}mungeLocalDescription(mediaDescription,options){var _a;retainCodecsByCodecName(mediaDescription,['h264','opus','rtx']);if(options.forceSoftwareEncoder){var isH264Cbp=codecInfo=>{var _a;if(((_a=codecInfo.name)===null||_a===void 0?void 0:_a.toLowerCase())==='h264'){var profileLevelId=codecInfo.fmtParams.get('profile-level-id');return !!profileLevelId&&/^42[^0]/.test(profileLevelId);}return false;};if([...mediaDescription.codecs.values()].some(isH264Cbp)){retainCodecs(mediaDescription,codecInfo=>{var _a;return ((_a=codecInfo.name)===null||_a===void 0?void 0:_a.toLowerCase())!=='h264'||isH264Cbp(codecInfo);});}else {logger.log("No H.264 CBP present in m-line with MID ".concat(mediaDescription.mid,", so all H.264 codecs have been retained."));}}if(mediaDescription.codecs.size===0){logErrorAndThrow(exports.WcmeErrorType.SDP_MUNGE_MISSING_CODECS,"No codecs present in m-line with MID ".concat(mediaDescription.mid," after filtering."));}mediaDescription.rids=[];mediaDescription.simulcast=undefined;removeMidRidExtensions(mediaDescription);if(options.simulcastEnabled){addVlaExtension(mediaDescription);}var numStreams=options.simulcastEnabled?3:1;if(!this.streamIds.length){if(mediaDescription.ssrcs.length){var ssrcs=[...new Set(mediaDescription.ssrcs.map(ssrcLine=>ssrcLine.ssrcId))];mediaDescription.ssrcGroups.forEach(sg=>{if(!sg.ssrcs.every(ssrc=>ssrcs.includes(ssrc))){logErrorAndThrow(exports.WcmeErrorType.SDP_MUNGE_FAILED,'SSRC present in SSRC groups is missing from SSRC lines.');}});var rtxSsrcGroups=mediaDescription.ssrcGroups.filter(sg=>sg.semantics==='FID');if(rtxSsrcGroups.length&&rtxSsrcGroups.length!==numStreams){logErrorAndThrow(exports.WcmeErrorType.SDP_MUNGE_FAILED,"Expected ".concat(numStreams," RTX SSRC groups, got ").concat(rtxSsrcGroups.length,"."));}rtxSsrcGroups.forEach(sg=>{this.streamIds.push({ssrc:sg.ssrcs[0],rtxSsrc:sg.ssrcs[1]});});var simulcastSsrcs=(_a=mediaDescription.ssrcGroups.find(sg=>sg.semantics==='SIM'))===null||_a===void 0?void 0:_a.ssrcs;if(simulcastSsrcs){if(simulcastSsrcs.length!==numStreams||!this.streamIds.every(streamId=>simulcastSsrcs.includes(streamId.ssrc))){logErrorAndThrow(exports.WcmeErrorType.SDP_MUNGE_FAILED,'SSRCs in simulcast SSRC group do not match primary SSRCs in RTX SSRC groups.');}this.streamIds.sort((a,b)=>simulcastSsrcs.indexOf(a.ssrc)-simulcastSsrcs.indexOf(b.ssrc));}else if(rtxSsrcGroups.length>1){logErrorAndThrow(exports.WcmeErrorType.SDP_MUNGE_FAILED,'Multiple RTX SSRC groups but no simulcast SSRC group found.');}if(!this.streamIds.length){this.streamIds.push({ssrc:ssrcs[0]});}}else {[...Array(numStreams).keys()].forEach(()=>{var newStreamId={ssrc:generateSsrc()};if(options.rtxEnabled){newStreamId.rtxSsrc=generateSsrc();}this.streamIds.push(newStreamId);});}}mediaDescription.ssrcs=[];mediaDescription.ssrcGroups=[];this.streamIds.forEach(streamId=>{var rtpSsrc=streamId.ssrc;mediaDescription.addLine(new SsrcLine$1(rtpSsrc,'cname',"".concat(rtpSsrc,"-cname")));mediaDescription.addLine(new SsrcLine$1(rtpSsrc,'msid','-',"".concat(mediaDescription.mid)));if(options.rtxEnabled){var rtxSsrc=streamId.rtxSsrc;mediaDescription.addLine(new SsrcLine$1(rtxSsrc,'cname',"".concat(rtpSsrc,"-cname")));mediaDescription.addLine(new SsrcLine$1(rtxSsrc,'msid','-',"".concat(mediaDescription.mid)));mediaDescription.addLine(new SsrcGroupLine$1('FID',[rtpSsrc,rtxSsrc]));}});if(options.simulcastEnabled){mediaDescription.addLine(new SsrcGroupLine$1('SIM',this.streamIds.map(streamId=>streamId.ssrc)));}applyFormatParameters(mediaDescription,this.customCodecParameters);if(options.twccDisabled){disableTwcc(mediaDescription);}}mungeLocalDescriptionForRemoteServer(mediaDescription,mediaContent,csi){injectContentType(mediaDescription,mediaContent);injectJmpAttributes(mediaDescription,csi,'SSRC');if(!this.egressMungerOptions.doFullIce){injectDummyCandidates(mediaDescription);}if(mediaDescription.type==='video'){var ssrcGroup=mediaDescription.ssrcGroups.find(sg=>sg.semantics==='SIM');if(ssrcGroup){ssrcGroup.ssrcs.forEach((ssrc,index)=>{mediaDescription.addLine(new SsrcLine$1(ssrc,'fmtp',"* max-fs=".concat(simulcastMaxFrameSizes[index])));});}}}mungeRemoteDescription(mediaDescription){if(retainCandidatesByTransportType(mediaDescription,['udp','tcp'])){logger.log("Some unsupported remote candidates have been removed from mid ".concat(mediaDescription.mid));}mediaDescription.bandwidth=undefined;[...mediaDescription.codecs.values()].forEach(ci=>{ci.fmtParams.set('x-google-start-bitrate','60000');});}getSenderIds(){return this.streamIds;}getEncodingIndexForStreamId(streamId){return this.streamIds.findIndex(currStreamId=>compareStreamIds(currStreamId,streamId));}setCodecParameters(parameters){Object.entries(parameters).forEach(_ref2=>{var[param,value]=_ref2;this.customCodecParameters.set(param,value);});}deleteCodecParameters(parameters){parameters.forEach(param=>{this.customCodecParameters.set(param,null);});}}var events$1={exports:{}};var R$1=typeof Reflect==='object'?Reflect:null;var ReflectApply$1=R$1&&typeof R$1.apply==='function'?R$1.apply:function ReflectApply(target,receiver,args){return Function.prototype.apply.call(target,receiver,args);};var ReflectOwnKeys$1;if(R$1&&typeof R$1.ownKeys==='function'){ReflectOwnKeys$1=R$1.ownKeys;}else if(Object.getOwnPropertySymbols){ReflectOwnKeys$1=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));};}else {ReflectOwnKeys$1=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target);};}function ProcessEmitWarning$1(warning){if(console&&console.warn)console.warn(warning);}var NumberIsNaN$1=Number.isNaN||function NumberIsNaN(value){return value!==value;};function EventEmitter$3(){EventEmitter$3.init.call(this);}events$1.exports=EventEmitter$3;events$1.exports.once=once$2;// Backwards-compat with node 0.10.x
|
|
2892
|
+
var compressed=deltaCompression(prev,now);trace('stats-report',formatStatsReport(compressed),compressed.timestamp!==-Infinity?compressed.timestamp:undefined);prev=base;return Promise.resolve();});})];});});};var interval=window.setInterval(function(){if(pc.signalingState==='closed'){window.clearInterval(interval);return;}getStatsReport();},intervalTime);var forceStatsReport=function forceStatsReport(){return __awaiter(void 0,void 0,void 0,function(){return __generator(this,function(_a){return [2/*return*/,getStatsReport()];});});};return {forceStatsReport:forceStatsReport};};rtcStats_1=rtcstats.rtcStats=rtcStats;var NUM$1='\\d+';var SDP_TOKEN$1="[!#$%&'*+\\-.^_`{|}~a-zA-Z0-9]+";var ANY_NON_WS$1='\\S+';var SP$1='\\s';var REST$1='.+';class Line$1{}var _a$5$1;class BandwidthLine$1 extends Line$1{constructor(bandwidthType,bandwidth){super();this.bandwidthType=bandwidthType;this.bandwidth=bandwidth;}static fromSdpLine(line){if(!BandwidthLine$1.regex.test(line)){return undefined;}var tokens=line.match(BandwidthLine$1.regex);var bandwidthType=tokens[1];var bandwidth=parseInt(tokens[2],10);return new BandwidthLine$1(bandwidthType,bandwidth);}toSdpLine(){return "b=".concat(this.bandwidthType,":").concat(this.bandwidth);}}_a$5$1=BandwidthLine$1;BandwidthLine$1.BW_TYPE_REGEX='CT|AS|TIAS';BandwidthLine$1.regex=new RegExp("^(".concat(_a$5$1.BW_TYPE_REGEX,"):(").concat(NUM$1,")"));class BundleGroupLine$1 extends Line$1{constructor(mids){super();this.mids=mids;}static fromSdpLine(line){if(!BundleGroupLine$1.regex.test(line)){return undefined;}var tokens=line.match(BundleGroupLine$1.regex);var mids=tokens[1].split(' ');return new BundleGroupLine$1(mids);}toSdpLine(){return "a=group:BUNDLE ".concat(this.mids.join(' '));}}BundleGroupLine$1.regex=new RegExp("^group:BUNDLE (".concat(REST$1,")"));var _a$4$1;class CandidateLine$1 extends Line$1{constructor(foundation,componentId,transport,priority,connectionAddress,port,candidateType,relAddr,relPort,candidateExtensions){super();this.foundation=foundation;this.componentId=componentId;this.transport=transport;this.priority=priority;this.connectionAddress=connectionAddress;this.port=port;this.candidateType=candidateType;this.relAddr=relAddr;this.relPort=relPort;this.candidateExtensions=candidateExtensions;}static fromSdpLine(line){if(!CandidateLine$1.regex.test(line)){return undefined;}var tokens=line.match(CandidateLine$1.regex);var foundation=tokens[1];var componentId=parseInt(tokens[2],10);var transport=tokens[3];var priority=parseInt(tokens[4],10);var connectionAddress=tokens[5];var port=parseInt(tokens[6],10);var candidateType=tokens[7];var relAddr=tokens[8];var relPort=tokens[9]?parseInt(tokens[9],10):undefined;var candidateExtensions=tokens[10];return new CandidateLine$1(foundation,componentId,transport,priority,connectionAddress,port,candidateType,relAddr,relPort,candidateExtensions);}toSdpLine(){var str='';str+="a=candidate:".concat(this.foundation," ").concat(this.componentId," ").concat(this.transport," ").concat(this.priority," ").concat(this.connectionAddress," ").concat(this.port," typ ").concat(this.candidateType);if(this.relAddr){str+=" raddr ".concat(this.relAddr);}if(this.relPort){str+=" rport ".concat(this.relPort);}if(this.candidateExtensions){str+=" ".concat(this.candidateExtensions);}return str;}}_a$4$1=CandidateLine$1;CandidateLine$1.ICE_CHARS="[a-zA-Z0-9+/]+";CandidateLine$1.regex=new RegExp("^candidate:(".concat(_a$4$1.ICE_CHARS,") (").concat(NUM$1,") (").concat(ANY_NON_WS$1,") (").concat(NUM$1,") (").concat(ANY_NON_WS$1,") (").concat(NUM$1,") typ (").concat(ANY_NON_WS$1,")(?: raddr (").concat(ANY_NON_WS$1,"))?(?: rport (").concat(NUM$1,"))?(?: (").concat(REST$1,"))?"));class ConnectionLine$1 extends Line$1{constructor(netType,addrType,ipAddr){super();this.netType=netType;this.addrType=addrType;this.ipAddr=ipAddr;}static fromSdpLine(line){if(!ConnectionLine$1.regex.test(line)){return undefined;}var tokens=line.match(ConnectionLine$1.regex);var netType=tokens[1];var addrType=tokens[2];var ipAddr=tokens[3];return new ConnectionLine$1(netType,addrType,ipAddr);}toSdpLine(){return "c=".concat(this.netType," ").concat(this.addrType," ").concat(this.ipAddr);}}ConnectionLine$1.regex=new RegExp("^(".concat(ANY_NON_WS$1,") (").concat(ANY_NON_WS$1,") (").concat(ANY_NON_WS$1,")"));class ContentLine$1 extends Line$1{constructor(values){super();this.values=values;}static fromSdpLine(line){if(!ContentLine$1.regex.test(line)){return undefined;}var tokens=line.match(ContentLine$1.regex);var values=tokens[1].split(',');return new ContentLine$1(values);}toSdpLine(){return "a=content:".concat(this.values.join(','));}}ContentLine$1.regex=new RegExp("^content:(".concat(REST$1,")$"));class DirectionLine$1 extends Line$1{constructor(direction){super();this.direction=direction;}static fromSdpLine(line){if(!DirectionLine$1.regex.test(line)){return undefined;}var tokens=line.match(DirectionLine$1.regex);var direction=tokens[1];return new DirectionLine$1(direction);}toSdpLine(){return "a=".concat(this.direction);}}DirectionLine$1.regex=/^(sendrecv|sendonly|recvonly|inactive)$/;var _a$3$1;class ExtMapLine$1 extends Line$1{constructor(id,uri,direction,extensionAttributes){super();this.id=id;this.uri=uri;this.direction=direction;this.extensionAttributes=extensionAttributes;}static fromSdpLine(line){if(!ExtMapLine$1.regex.test(line)){return undefined;}var tokens=line.match(ExtMapLine$1.regex);var id=parseInt(tokens[1],10);var direction=tokens[2];var uri=tokens[3];var extensionAttributes=tokens[4];return new ExtMapLine$1(id,uri,direction,extensionAttributes);}toSdpLine(){var str='';str+="a=extmap:".concat(this.id);if(this.direction){str+="/".concat(this.direction);}str+=" ".concat(this.uri);if(this.extensionAttributes){str+=" ".concat(this.extensionAttributes);}return str;}}_a$3$1=ExtMapLine$1;ExtMapLine$1.EXTMAP_DIRECTION="sendonly|recvonly|sendrecv|inactive";ExtMapLine$1.regex=new RegExp("^extmap:(".concat(NUM$1,")(?:/(").concat(_a$3$1.EXTMAP_DIRECTION,"))? (").concat(ANY_NON_WS$1,")(?: (").concat(REST$1,"))?"));class FingerprintLine$1 extends Line$1{constructor(fingerprint){super();this.fingerprint=fingerprint;}static fromSdpLine(line){if(!FingerprintLine$1.regex.test(line)){return undefined;}var tokens=line.match(FingerprintLine$1.regex);var fingerprint=tokens[1];return new FingerprintLine$1(fingerprint);}toSdpLine(){return "a=fingerprint:".concat(this.fingerprint);}}FingerprintLine$1.regex=new RegExp("^fingerprint:(".concat(REST$1,")"));function parseFmtpParams$1(fmtpParams){fmtpParams=fmtpParams.replace(/^a=fmtp:\d+\x20/,'');var fmtpObj=new Map();if(/^\d+([,/-]\d+)+$/.test(fmtpParams)){fmtpObj.set(fmtpParams,undefined);return fmtpObj;}fmtpParams.split(';').forEach(param=>{var paramArr=param&¶m.split('=');if(paramArr.length!==2||!paramArr[0]||!paramArr[1]){throw new Error("Fmtp params is invalid with ".concat(fmtpParams));}fmtpObj.set(paramArr[0],paramArr[1]);});return fmtpObj;}class FmtpLine$1 extends Line$1{constructor(payloadType,params){super();this.payloadType=payloadType;this.params=params;}static fromSdpLine(line){if(!FmtpLine$1.regex.test(line)){return undefined;}var tokens=line.match(FmtpLine$1.regex);var payloadType=parseInt(tokens[1],10);var params=tokens[2];return new FmtpLine$1(payloadType,parseFmtpParams$1(params));}toSdpLine(){var fmtParams=Array.from(this.params.keys()).map(key=>{if(this.params.get(key)!==undefined){return "".concat(key,"=").concat(this.params.get(key));}return "".concat(key);}).join(';');return "a=fmtp:".concat(this.payloadType," ").concat(fmtParams);}}FmtpLine$1.regex=new RegExp("^fmtp:(".concat(NUM$1,") (").concat(REST$1,")"));class IceOptionsLine$1 extends Line$1{constructor(options){super();this.options=options;}static fromSdpLine(line){if(!IceOptionsLine$1.regex.test(line)){return undefined;}var tokens=line.match(IceOptionsLine$1.regex);var options=tokens[1].split(' ');return new IceOptionsLine$1(options);}toSdpLine(){return "a=ice-options:".concat(this.options.join(' '));}}IceOptionsLine$1.regex=new RegExp("^ice-options:(".concat(REST$1,")$"));class IcePwdLine$1 extends Line$1{constructor(pwd){super();this.pwd=pwd;}static fromSdpLine(line){if(!IcePwdLine$1.regex.test(line)){return undefined;}var tokens=line.match(IcePwdLine$1.regex);var pwd=tokens[1];return new IcePwdLine$1(pwd);}toSdpLine(){return "a=ice-pwd:".concat(this.pwd);}}IcePwdLine$1.regex=new RegExp("^ice-pwd:(".concat(ANY_NON_WS$1,")$"));class IceUfragLine$1 extends Line$1{constructor(ufrag){super();this.ufrag=ufrag;}static fromSdpLine(line){if(!IceUfragLine$1.regex.test(line)){return undefined;}var tokens=line.match(IceUfragLine$1.regex);var ufrag=tokens[1];return new IceUfragLine$1(ufrag);}toSdpLine(){return "a=ice-ufrag:".concat(this.ufrag);}}IceUfragLine$1.regex=new RegExp("^ice-ufrag:(".concat(ANY_NON_WS$1,")$"));class MaxMessageSizeLine$1 extends Line$1{constructor(maxMessageSize){super();this.maxMessageSize=maxMessageSize;}static fromSdpLine(line){if(!MaxMessageSizeLine$1.regex.test(line)){return undefined;}var tokens=line.match(MaxMessageSizeLine$1.regex);var maxMessageSize=parseInt(tokens[1],10);return new MaxMessageSizeLine$1(maxMessageSize);}toSdpLine(){return "a=max-message-size:".concat(this.maxMessageSize);}}MaxMessageSizeLine$1.regex=new RegExp("^max-message-size:(".concat(NUM$1,")"));var _a$2$2;class MediaLine$1 extends Line$1{constructor(type,port,protocol,formats){super();this.type=type;this.port=port;this.protocol=protocol;this.formats=formats;}static fromSdpLine(line){if(!MediaLine$1.regex.test(line)){return undefined;}var tokens=line.match(MediaLine$1.regex);var type=tokens[1];var port=parseInt(tokens[2],10);var protocol=tokens[3];var formats=tokens[4].split(' ');return new MediaLine$1(type,port,protocol,formats);}toSdpLine(){return "m=".concat(this.type," ").concat(this.port," ").concat(this.protocol," ").concat(this.formats.join(' '));}}_a$2$2=MediaLine$1;MediaLine$1.MEDIA_TYPE='audio|video|application';MediaLine$1.regex=new RegExp("^(".concat(_a$2$2.MEDIA_TYPE,") (").concat(NUM$1,") (").concat(ANY_NON_WS$1,") (").concat(REST$1,")"));class MidLine$1 extends Line$1{constructor(mid){super();this.mid=mid;}static fromSdpLine(line){if(!MidLine$1.regex.test(line)){return undefined;}var tokens=line.match(MidLine$1.regex);var mid=tokens[1];return new MidLine$1(mid);}toSdpLine(){return "a=mid:".concat(this.mid);}}MidLine$1.regex=new RegExp("^mid:(".concat(ANY_NON_WS$1,")$"));class OriginLine$1 extends Line$1{constructor(username,sessionId,sessionVersion,netType,addrType,ipAddr){super();this.username=username;this.sessionId=sessionId;this.sessionVersion=sessionVersion;this.netType=netType;this.addrType=addrType;this.ipAddr=ipAddr;}static fromSdpLine(line){if(!OriginLine$1.regex.test(line)){return undefined;}var tokens=line.match(OriginLine$1.regex);var username=tokens[1];var sessionId=tokens[2];var sessionVersion=parseInt(tokens[3],10);var netType=tokens[4];var addrType=tokens[5];var ipAddr=tokens[6];return new OriginLine$1(username,sessionId,sessionVersion,netType,addrType,ipAddr);}toSdpLine(){return "o=".concat(this.username," ").concat(this.sessionId," ").concat(this.sessionVersion," ").concat(this.netType," ").concat(this.addrType," ").concat(this.ipAddr);}}OriginLine$1.regex=new RegExp("^(".concat(ANY_NON_WS$1,") (").concat(ANY_NON_WS$1,") (").concat(NUM$1,") (").concat(ANY_NON_WS$1,") (").concat(ANY_NON_WS$1,") (").concat(ANY_NON_WS$1,")"));var _a$1$2;class RidLine$1 extends Line$1{constructor(id,direction,params){super();this.id=id;this.direction=direction;this.params=params;}static fromSdpLine(line){if(!RidLine$1.regex.test(line)){return undefined;}var tokens=line.match(RidLine$1.regex);var id=tokens[1];var direction=tokens[2];var params=tokens[3];return new RidLine$1(id,direction,params);}toSdpLine(){var str='';str+="a=rid:".concat(this.id," ").concat(this.direction);if(this.params){str+=" ".concat(this.params);}return str;}}_a$1$2=RidLine$1;RidLine$1.RID_ID="[\\w-]+";RidLine$1.RID_DIRECTION="\\bsend\\b|\\brecv\\b";RidLine$1.regex=new RegExp("^rid:(".concat(_a$1$2.RID_ID,") (").concat(_a$1$2.RID_DIRECTION,")(?:").concat(SP$1,"(").concat(REST$1,"))?"));class RtcpMuxLine$1 extends Line$1{static fromSdpLine(line){if(!RtcpMuxLine$1.regex.test(line)){return undefined;}return new RtcpMuxLine$1();}toSdpLine(){return "a=rtcp-mux";}}RtcpMuxLine$1.regex=/^rtcp-mux$/;class RtcpFbLine$1 extends Line$1{constructor(payloadType,feedback){super();this.payloadType=payloadType;this.feedback=feedback;}static fromSdpLine(line){if(!RtcpFbLine$1.regex.test(line)){return undefined;}var tokens=line.match(RtcpFbLine$1.regex);var payloadType=parseInt(tokens[1],10);var feedback=tokens[2];return new RtcpFbLine$1(payloadType,feedback);}toSdpLine(){return "a=rtcp-fb:".concat(this.payloadType," ").concat(this.feedback);}}RtcpFbLine$1.regex=new RegExp("^rtcp-fb:(".concat(NUM$1,") (").concat(REST$1,")"));var _a$7;class RtpMapLine$1 extends Line$1{constructor(payloadType,encodingName,clockRate,encodingParams){super();this.payloadType=payloadType;this.encodingName=encodingName;this.clockRate=clockRate;this.encodingParams=encodingParams;}static fromSdpLine(line){if(!RtpMapLine$1.regex.test(line)){return undefined;}var tokens=line.match(RtpMapLine$1.regex);var payloadType=parseInt(tokens[1],10);var encodingName=tokens[2];var clockRate=parseInt(tokens[3],10);var encodingParams=tokens[4];return new RtpMapLine$1(payloadType,encodingName,clockRate,encodingParams);}toSdpLine(){var str='';str+="a=rtpmap:".concat(this.payloadType," ").concat(this.encodingName,"/").concat(this.clockRate);if(this.encodingParams){str+="/".concat(this.encodingParams);}return str;}}_a$7=RtpMapLine$1;RtpMapLine$1.NON_SLASH_TOKEN='[^\\s/]+';RtpMapLine$1.regex=new RegExp("^rtpmap:(".concat(NUM$1,") (").concat(_a$7.NON_SLASH_TOKEN,")/(").concat(_a$7.NON_SLASH_TOKEN,")(?:/(").concat(_a$7.NON_SLASH_TOKEN,"))?"));class SctpPortLine$1 extends Line$1{constructor(port){super();this.port=port;}static fromSdpLine(line){if(!SctpPortLine$1.regex.test(line)){return undefined;}var tokens=line.match(SctpPortLine$1.regex);var port=parseInt(tokens[1],10);return new SctpPortLine$1(port);}toSdpLine(){return "a=sctp-port:".concat(this.port);}}SctpPortLine$1.regex=new RegExp("^sctp-port:(".concat(NUM$1,")"));class SessionInformationLine$1 extends Line$1{constructor(info){super();this.info=info;}static fromSdpLine(line){if(!SessionInformationLine$1.regex.test(line)){return undefined;}var tokens=line.match(SessionInformationLine$1.regex);var info=tokens[1];return new SessionInformationLine$1(info);}toSdpLine(){return "i=".concat(this.info);}}SessionInformationLine$1.regex=new RegExp("(".concat(REST$1,")"));class SessionNameLine$1 extends Line$1{constructor(name){super();this.name=name;}static fromSdpLine(line){if(!SessionNameLine$1.regex.test(line)){return undefined;}var tokens=line.match(SessionNameLine$1.regex);var name=tokens[1];return new SessionNameLine$1(name);}toSdpLine(){return "s=".concat(this.name);}}SessionNameLine$1.regex=new RegExp("^(".concat(REST$1,")"));class SetupLine$1 extends Line$1{constructor(setup){super();this.setup=setup;}static fromSdpLine(line){if(!SetupLine$1.regex.test(line)){return undefined;}var tokens=line.match(SetupLine$1.regex);var setup=tokens[1];return new SetupLine$1(setup);}toSdpLine(){return "a=setup:".concat(this.setup);}}SetupLine$1.regex=/^setup:(actpass|active|passive)$/;class SimulcastLayer$1{constructor(id,paused){this.id=id;this.paused=paused;}toString(){return this.paused?"~".concat(this.id):this.id;}}class SimulcastLayerList$1{constructor(){this.layers=[];}addLayer(layer){this.layers.push([layer]);}addLayerWithAlternatives(alternatives){this.layers.push(alternatives);}get length(){return this.layers.length;}get(index){return this.layers[index];}static fromString(str){var layerList=new SimulcastLayerList$1();var tokens=str.split(';');if(tokens.length===1&&!tokens[0].trim()){throw new Error('simulcast stream list empty');}tokens.forEach(token=>{if(!token){throw new Error('simulcast layer list empty');}var ridTokens=token.split(',');var layers=[];ridTokens.forEach(ridToken=>{if(!ridToken||ridToken==='~'){throw new Error('rid empty');}var paused=ridToken[0]==='~';var rid=paused?ridToken.substring(1):ridToken;layers.push(new SimulcastLayer$1(rid,paused));});layerList.addLayerWithAlternatives(layers);});return layerList;}toString(){return this.layers.map(altArray=>altArray.map(v=>v.toString()).join(',')).join(';');}}class SimulcastLine$1 extends Line$1{constructor(sendLayers,recvLayers){super();this.sendLayers=sendLayers;this.recvLayers=recvLayers;}static fromSdpLine(line){if(!SimulcastLine$1.regex.test(line)){return undefined;}var tokens=line.match(SimulcastLine$1.regex);var bidirectional=tokens[3]&&tokens[4];var firstDirection=tokens[1];var layerList1=SimulcastLayerList$1.fromString(tokens[2]);var layerList2=new SimulcastLayerList$1();if(bidirectional){var secondDirection=tokens[3];if(firstDirection===secondDirection){return undefined;}layerList2=SimulcastLayerList$1.fromString(tokens[4]);}var sendLayerList;var recvLayerList;if(firstDirection==='send'){sendLayerList=layerList1;recvLayerList=layerList2;}else {sendLayerList=layerList2;recvLayerList=layerList1;}return new SimulcastLine$1(sendLayerList,recvLayerList);}toSdpLine(){var str='a=simulcast:';if(this.sendLayers.length){str+="send ".concat(this.sendLayers.toString());if(this.recvLayers.length){str+=" ";}}if(this.recvLayers.length){str+="recv ".concat(this.recvLayers.toString());}return str;}}SimulcastLine$1.regex=new RegExp("^simulcast:(send|recv) (".concat(ANY_NON_WS$1,")(?: (send|recv) (").concat(ANY_NON_WS$1,"))?"));class SsrcLine$1 extends Line$1{constructor(ssrcId,attribute){var attributeValue=arguments.length>2&&arguments[2]!==undefined?arguments[2]:undefined;var attributeData=arguments.length>3&&arguments[3]!==undefined?arguments[3]:undefined;super();this.ssrcId=ssrcId;this.attribute=attribute;this.attributeValue=attributeValue;this.attributeData=attributeData;}static fromSdpLine(line){if(!SsrcLine$1.regex.test(line)){return undefined;}var tokens=line.match(SsrcLine$1.regex);var ssrcId=parseInt(tokens[1],10);var attribute=tokens[2];var attributeValue=tokens[3];var attributeData=tokens[4];return new SsrcLine$1(ssrcId,attribute,attributeValue,attributeData);}toSdpLine(){var str="a=ssrc:".concat(this.ssrcId," ").concat(this.attribute);if(this.attributeValue){str+=":".concat(this.attributeValue);}if(this.attributeData){str+=" ".concat(this.attributeData);}return str;}}SsrcLine$1.regex=new RegExp("^ssrc:(".concat(NUM$1,") (").concat(SDP_TOKEN$1,")(?::(").concat(SDP_TOKEN$1,")?(?: (").concat(ANY_NON_WS$1,"))?)?$"));class SsrcGroupLine$1 extends Line$1{constructor(semantics,ssrcs){super();this.semantics=semantics;this.ssrcs=ssrcs;}static fromSdpLine(line){if(!SsrcGroupLine$1.regex.test(line)){return undefined;}var tokens=line.match(SsrcGroupLine$1.regex);var semantics=tokens[1];var ssrcs=tokens[2].split(' ').map(ssrcStr=>parseInt(ssrcStr,10));return new SsrcGroupLine$1(semantics,ssrcs);}toSdpLine(){return "a=ssrc-group:".concat(this.semantics," ").concat(this.ssrcs.join(' '));}}SsrcGroupLine$1.regex=new RegExp("^ssrc-group:(SIM|FID|FEC) ((?:".concat(NUM$1).concat(SP$1,"*)+)"));class TimingLine$1 extends Line$1{constructor(startTime,stopTime){super();this.startTime=startTime;this.stopTime=stopTime;}static fromSdpLine(line){if(!TimingLine$1.regex.test(line)){return undefined;}var tokens=line.match(TimingLine$1.regex);var startTime=parseInt(tokens[1],10);var stopTime=parseInt(tokens[2],10);return new TimingLine$1(startTime,stopTime);}toSdpLine(){return "t=".concat(this.startTime," ").concat(this.stopTime);}}TimingLine$1.regex=new RegExp("^(".concat(NUM$1,") (").concat(NUM$1,")"));class VersionLine$1 extends Line$1{constructor(version){super();this.version=version;}static fromSdpLine(line){if(!VersionLine$1.regex.test(line)){return undefined;}var tokens=line.match(VersionLine$1.regex);var version=parseInt(tokens[1],10);return new VersionLine$1(version);}toSdpLine(){return "v=".concat(this.version);}}VersionLine$1.regex=new RegExp("^(".concat(NUM$1,")$"));class UnknownLine$1 extends Line$1{constructor(value){super();this.value=value;}static fromSdpLine(line){var tokens=line.match(UnknownLine$1.regex);var value=tokens[1];return new UnknownLine$1(value);}toSdpLine(){return "".concat(this.value);}}UnknownLine$1.regex=new RegExp("(".concat(REST$1,")"));class IceInfo$1{constructor(){this.candidates=[];}addLine(line){if(line instanceof IceUfragLine$1){this.ufrag=line;return true;}if(line instanceof IcePwdLine$1){this.pwd=line;return true;}if(line instanceof IceOptionsLine$1){this.options=line;return true;}if(line instanceof CandidateLine$1){this.candidates.push(line);return true;}return false;}toLines(){var lines=[];if(this.ufrag){lines.push(this.ufrag);}if(this.pwd){lines.push(this.pwd);}if(this.options){lines.push(this.options);}this.candidates.forEach(candidate=>lines.push(candidate));return lines;}}class MediaDescription$1{constructor(type,port,protocol){this.iceInfo=new IceInfo$1();this.otherLines=[];this.type=type;this.port=port;this.protocol=protocol;}findOtherLine(ty){return this.otherLines.find(line=>line instanceof ty);}addLine(line){if(line instanceof BundleGroupLine$1){throw new Error("Error: bundle group line not allowed in media description");}if(line instanceof BandwidthLine$1){this.bandwidth=line;return true;}if(line instanceof MidLine$1){this.mid=line.mid;return true;}if(line instanceof FingerprintLine$1){this.fingerprint=line.fingerprint;return true;}if(line instanceof SetupLine$1){this.setup=line.setup;return true;}if(line instanceof ConnectionLine$1){this.connection=line;return true;}if(line instanceof ContentLine$1){this.content=line;return true;}return this.iceInfo.addLine(line);}}class ApplicationMediaDescription$1 extends MediaDescription$1{constructor(mediaLine){super(mediaLine.type,mediaLine.port,mediaLine.protocol);this.fmts=[];this.fmts=mediaLine.formats;}toLines(){var lines=[];lines.push(new MediaLine$1(this.type,this.port,this.protocol,this.fmts));if(this.connection){lines.push(this.connection);}if(this.bandwidth){lines.push(this.bandwidth);}lines.push(...this.iceInfo.toLines());if(this.fingerprint){lines.push(new FingerprintLine$1(this.fingerprint));}if(this.setup){lines.push(new SetupLine$1(this.setup));}if(this.mid){lines.push(new MidLine$1(this.mid));}if(this.content){lines.push(this.content);}if(this.sctpPort){lines.push(new SctpPortLine$1(this.sctpPort));}if(this.maxMessageSize){lines.push(new MaxMessageSizeLine$1(this.maxMessageSize));}lines.push(...this.otherLines);return lines;}addLine(line){if(super.addLine(line)){return true;}if(line instanceof MediaLine$1){throw new Error('Error: tried passing a MediaLine to an existing MediaInfo');}if(line instanceof SctpPortLine$1){this.sctpPort=line.port;return true;}if(line instanceof MaxMessageSizeLine$1){this.maxMessageSize=line.maxMessageSize;return true;}this.otherLines.push(line);return true;}}class CodecInfo$2{constructor(pt){this.fmtParams=new Map();this.feedback=[];this.pt=pt;}addLine(line){if(line instanceof RtpMapLine$1){this.name=line.encodingName;this.clockRate=line.clockRate;this.encodingParams=line.encodingParams;return true;}if(line instanceof FmtpLine$1){this.fmtParams=new Map([...Array.from(this.fmtParams.entries()),...Array.from(line.params.entries())]);if(line.params.has('apt')){var apt=line.params.get('apt');this.primaryCodecPt=parseInt(apt,10);}return true;}if(line instanceof RtcpFbLine$1){this.feedback.push(line.feedback);return true;}return false;}toLines(){var lines=[];if(this.name&&this.clockRate){lines.push(new RtpMapLine$1(this.pt,this.name,this.clockRate,this.encodingParams));}this.feedback.forEach(fb=>{lines.push(new RtcpFbLine$1(this.pt,fb));});if(this.fmtParams.size>0){lines.push(new FmtpLine$1(this.pt,this.fmtParams));}return lines;}}class AvMediaDescription$1 extends MediaDescription$1{constructor(mediaLine){super(mediaLine.type,mediaLine.port,mediaLine.protocol);this.pts=[];this.extMaps=new Map();this.rids=[];this.codecs=new Map();this.rtcpMux=false;this.ssrcs=[];this.ssrcGroups=[];this.pts=mediaLine.formats.map(fmt=>{return parseInt(fmt,10);});this.pts.forEach(pt=>this.codecs.set(pt,new CodecInfo$2(pt)));}toLines(){var lines=[];lines.push(new MediaLine$1(this.type,this.port,this.protocol,this.pts.map(pt=>"".concat(pt))));if(this.connection){lines.push(this.connection);}if(this.bandwidth){lines.push(this.bandwidth);}lines.push(...this.iceInfo.toLines());if(this.fingerprint){lines.push(new FingerprintLine$1(this.fingerprint));}if(this.setup){lines.push(new SetupLine$1(this.setup));}if(this.mid){lines.push(new MidLine$1(this.mid));}if(this.rtcpMux){lines.push(new RtcpMuxLine$1());}if(this.content){lines.push(this.content);}this.extMaps.forEach(extMap=>lines.push(extMap));this.rids.forEach(rid=>lines.push(rid));if(this.simulcast){lines.push(this.simulcast);}if(this.direction){lines.push(new DirectionLine$1(this.direction));}this.codecs.forEach(codec=>lines.push(...codec.toLines()));lines.push(...this.ssrcs);lines.push(...this.ssrcGroups);lines.push(...this.otherLines);return lines;}addLine(line){if(super.addLine(line)){return true;}if(line instanceof MediaLine$1){throw new Error('Error: tried passing a MediaLine to an existing MediaInfo');}if(line instanceof DirectionLine$1){this.direction=line.direction;return true;}if(line instanceof ExtMapLine$1){if(this.extMaps.has(line.id)){throw new Error("Tried to extension with duplicate ID: an extension already exists with ID ".concat(line.id));}this.extMaps.set(line.id,line);return true;}if(line instanceof RidLine$1){this.rids.push(line);return true;}if(line instanceof RtcpMuxLine$1){this.rtcpMux=true;return true;}if(line instanceof SimulcastLine$1){this.simulcast=line;return true;}if(line instanceof RtpMapLine$1||line instanceof FmtpLine$1||line instanceof RtcpFbLine$1){var codec=this.codecs.get(line.payloadType);if(!codec){throw new Error("Error: got line for unknown codec: ".concat(line.toSdpLine()));}codec.addLine(line);return true;}if(line instanceof SsrcLine$1){this.ssrcs.push(line);return true;}if(line instanceof SsrcGroupLine$1){this.ssrcGroups.push(line);return true;}this.otherLines.push(line);return true;}getCodecByPt(pt){return this.codecs.get(pt);}removePt(pt){var associatedPts=[...this.codecs.values()].filter(ci=>ci.primaryCodecPt===pt).map(ci=>ci.pt);var allPtsToRemove=[pt,...associatedPts];allPtsToRemove.forEach(ptToRemove=>{this.codecs.delete(ptToRemove);});this.pts=this.pts.filter(existingPt=>allPtsToRemove.indexOf(existingPt)===-1);}addExtension(_ref){var{uri,direction,attributes,id}=_ref;var getFirstFreeId=()=>{var freeId=1;for(;;){if(!this.extMaps.has(freeId)){break;}freeId+=1;}return freeId;};var extId=id||getFirstFreeId();if(this.extMaps.has(extId)){throw new Error("Extension with ID ".concat(id," already exists"));}if(extId===0){throw new Error("Extension ID 0 is reserved");}this.extMaps.set(extId,new ExtMapLine$1(extId,uri,direction,attributes));}}class SessionDescription$1{constructor(){this.groups=[];this.otherLines=[];}addLine(line){if(line instanceof VersionLine$1){this.version=line;return true;}if(line instanceof OriginLine$1){this.origin=line;return true;}if(line instanceof SessionNameLine$1){this.sessionName=line;return true;}if(line instanceof SessionInformationLine$1){this.information=line;return true;}if(line instanceof TimingLine$1){this.timing=line;return true;}if(line instanceof ConnectionLine$1){this.connection=line;return true;}if(line instanceof BandwidthLine$1){this.bandwidth=line;return true;}if(line instanceof BundleGroupLine$1){this.groups.push(line);return true;}this.otherLines.push(line);return true;}toLines(){var lines=[];if(this.version){lines.push(this.version);}if(this.origin){lines.push(this.origin);}if(this.sessionName){lines.push(this.sessionName);}if(this.information){lines.push(this.information);}if(this.connection){lines.push(this.connection);}if(this.bandwidth){lines.push(this.bandwidth);}if(this.timing){lines.push(this.timing);}if(this.groups){lines.push(...this.groups);}lines.push(...this.otherLines);return lines;}}class Sdp$1{constructor(){this.session=new SessionDescription$1();this.media=[];}get avMedia(){return this.media.filter(mi=>mi instanceof AvMediaDescription$1);}toString(){var lines=[];lines.push(...this.session.toLines());this.media.forEach(m=>lines.push(...m.toLines()));return "".concat(lines.map(l=>l.toSdpLine()).join('\r\n'),"\r\n");}}class Grammar$1{constructor(){this.parsers=new Map();}addParser(lineType,parser){var parsers=this.parsers.get(lineType)||[];parsers.push(parser);this.parsers.set(lineType,parsers);}getParsers(lineType){return this.parsers.get(lineType)||[];}}class SdpGrammar$1 extends Grammar$1{constructor(){super();this.addParser('v',VersionLine$1.fromSdpLine);this.addParser('o',OriginLine$1.fromSdpLine);this.addParser('c',ConnectionLine$1.fromSdpLine);this.addParser('i',SessionInformationLine$1.fromSdpLine);this.addParser('m',MediaLine$1.fromSdpLine);this.addParser('s',SessionNameLine$1.fromSdpLine);this.addParser('t',TimingLine$1.fromSdpLine);this.addParser('b',BandwidthLine$1.fromSdpLine);this.addParser('a',RtpMapLine$1.fromSdpLine);this.addParser('a',RtcpFbLine$1.fromSdpLine);this.addParser('a',FmtpLine$1.fromSdpLine);this.addParser('a',DirectionLine$1.fromSdpLine);this.addParser('a',ExtMapLine$1.fromSdpLine);this.addParser('a',MidLine$1.fromSdpLine);this.addParser('a',IceUfragLine$1.fromSdpLine);this.addParser('a',IcePwdLine$1.fromSdpLine);this.addParser('a',IceOptionsLine$1.fromSdpLine);this.addParser('a',FingerprintLine$1.fromSdpLine);this.addParser('a',SetupLine$1.fromSdpLine);this.addParser('a',SctpPortLine$1.fromSdpLine);this.addParser('a',MaxMessageSizeLine$1.fromSdpLine);this.addParser('a',RtcpMuxLine$1.fromSdpLine);this.addParser('a',BundleGroupLine$1.fromSdpLine);this.addParser('a',ContentLine$1.fromSdpLine);this.addParser('a',RidLine$1.fromSdpLine);this.addParser('a',CandidateLine$1.fromSdpLine);this.addParser('a',SimulcastLine$1.fromSdpLine);this.addParser('a',SsrcLine$1.fromSdpLine);this.addParser('a',SsrcGroupLine$1.fromSdpLine);}}var DefaultSdpGrammar$1=new SdpGrammar$1();function isValidLine$1(line){return line.length>2;}function parseToModel$1(lines){var sdp=new Sdp$1();var currBlock=sdp.session;lines.forEach(l=>{if(l instanceof MediaLine$1){var mediaInfo;if(l.type==='audio'||l.type==='video'){mediaInfo=new AvMediaDescription$1(l);}else if(l.type==='application'){mediaInfo=new ApplicationMediaDescription$1(l);}else {throw new Error("Unhandled media type: ".concat(l.type));}sdp.media.push(mediaInfo);currBlock=mediaInfo;}else {currBlock.addLine(l);}});return sdp;}function parseToLines$1(sdp,grammar){var lines=[];sdp.split(/(\r\n|\r|\n)/).filter(isValidLine$1).forEach(l=>{var lineType=l[0];var lineValue=l.slice(2);var parsers=grammar.getParsers(lineType);for(var parser of parsers){var _result=parser(lineValue);if(_result){lines.push(_result);return;}}var result=UnknownLine$1.fromSdpLine(l);lines.push(result);});return lines;}function parse$1(sdp){var grammar=arguments.length>1&&arguments[1]!==undefined?arguments[1]:DefaultSdpGrammar$1;var lines=parseToLines$1(sdp,grammar);var parsed=parseToModel$1(lines);return parsed;}function disableRtcpFbValue(sdpOrAv,rtcpFbValue){var mediaDescriptions=sdpOrAv instanceof Sdp$1?sdpOrAv.avMedia:[sdpOrAv];mediaDescriptions.forEach(media=>{media.codecs.forEach(codec=>{codec.feedback=codec.feedback.filter(fb=>fb!==rtcpFbValue);});});}function disableTwcc(sdpOrAv){disableRtcpFbValue(sdpOrAv,'transport-cc');}function retainCodecs(av,predicate){var filtered=false;av.codecs.forEach(codecInfo=>{if(!predicate(codecInfo)){av.removePt(codecInfo.pt);filtered=true;}});return filtered;}function retainCodecsByCodecName(av,allowedCodecNames){var allowedLowerCase=allowedCodecNames.map(s=>s.toLowerCase());return retainCodecs(av,codecInfo=>!!codecInfo.name&&allowedLowerCase.includes(codecInfo.name.toLowerCase()));}function retainCandidates(sdpOrMedia,predicate){var mediaDescriptions=sdpOrMedia instanceof Sdp$1?sdpOrMedia.media:[sdpOrMedia];var filtered=false;mediaDescriptions.forEach(media=>{media.iceInfo.candidates=media.iceInfo.candidates.filter(candidate=>{if(predicate(candidate)){return true;}filtered=true;return false;});});return filtered;}function retainCandidatesByTransportType(sdpOrMedia,allowedTransportTypes){var allowedLowerCase=allowedTransportTypes.map(s=>s.toLowerCase());return retainCandidates(sdpOrMedia,candidate=>allowedLowerCase.includes(candidate.transport.toLowerCase()));}function hasCodec(codecName,mLine){return [...mLine.codecs.values()].some(ci=>{var _a;return ((_a=ci.name)===null||_a===void 0?void 0:_a.toLowerCase())===codecName.toLowerCase();});}var commonjsGlobal$4=typeof globalThis!=='undefined'?globalThis:typeof window!=='undefined'?window:typeof global$1!=='undefined'?global$1:typeof self!=='undefined'?self:{};function getDefaultExportFromCjs$2(x){return x&&x.__esModule&&Object.prototype.hasOwnProperty.call(x,'default')?x['default']:x;}var es5$2={exports:{}};(function(module,exports){!function(e,t){module.exports=t();}(commonjsGlobal$4,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports;}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n});},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0});},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e){r.d(n,i,function(t){return e[t];}.bind(null,i));}return n;},r.n=function(e){var t=e&&e.__esModule?function(){return e.default;}:function(){return e;};return r.d(t,"a",t),t;},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t);},r.p="",r(r.s=90);}({17:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n=r(18),i=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||"";},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||"";},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r;},e.getWindowsVersionName=function(e){switch(e){case"NT":return "NT";case"XP":return "XP";case"NT 5.0":return "2000";case"NT 5.1":return "XP";case"NT 5.2":return "2003";case"NT 6.0":return "Vista";case"NT 6.1":return "7";case"NT 6.2":return "8";case"NT 6.3":return "8.1";case"NT 10.0":return "10";default:return;}},e.getMacOSVersionName=function(e){var t=e.split(".").splice(0,2).map(function(e){return parseInt(e,10)||0;});if(t.push(0),10===t[0])switch(t[1]){case 5:return "Leopard";case 6:return "Snow Leopard";case 7:return "Lion";case 8:return "Mountain Lion";case 9:return "Mavericks";case 10:return "Yosemite";case 11:return "El Capitan";case 12:return "Sierra";case 13:return "High Sierra";case 14:return "Mojave";case 15:return "Catalina";default:return;}},e.getAndroidVersionName=function(e){var t=e.split(".").splice(0,2).map(function(e){return parseInt(e,10)||0;});if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?"Cupcake":1===t[0]&&t[1]>=6?"Donut":2===t[0]&&t[1]<2?"Eclair":2===t[0]&&2===t[1]?"Froyo":2===t[0]&&t[1]>2?"Gingerbread":3===t[0]?"Honeycomb":4===t[0]&&t[1]<1?"Ice Cream Sandwich":4===t[0]&&t[1]<4?"Jelly Bean":4===t[0]&&t[1]>=4?"KitKat":5===t[0]?"Lollipop":6===t[0]?"Marshmallow":7===t[0]?"Nougat":8===t[0]?"Oreo":9===t[0]?"Pie":void 0;},e.getVersionPrecision=function(e){return e.split(".").length;},e.compareVersions=function(t,r,n){void 0===n&&(n=!1);var i=e.getVersionPrecision(t),s=e.getVersionPrecision(r),a=Math.max(i,s),o=0,u=e.map([t,r],function(t){var r=a-e.getVersionPrecision(t),n=t+new Array(r+1).join(".0");return e.map(n.split("."),function(e){return new Array(20-e.length).join("0")+e;}).reverse();});for(n&&(o=a-Math.min(i,s)),a-=1;a>=o;){if(u[0][a]>u[1][a])return 1;if(u[0][a]===u[1][a]){if(a===o)return 0;a-=1;}else if(u[0][a]<u[1][a])return -1;}},e.map=function(e,t){var r,n=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(r=0;r<e.length;r+=1){n.push(t(e[r]));}return n;},e.find=function(e,t){var r,n;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(r=0,n=e.length;r<n;r+=1){var i=e[r];if(t(i,r))return i;}},e.assign=function(e){for(var t,r,n=e,i=arguments.length,s=new Array(i>1?i-1:0),a=1;a<i;a++){s[a-1]=arguments[a];}if(Object.assign)return Object.assign.apply(Object,[e].concat(s));var o=function o(){var e=s[t];"object"==typeof e&&null!==e&&Object.keys(e).forEach(function(t){n[t]=e[t];});};for(t=0,r=s.length;t<r;t+=1){o();}return e;},e.getBrowserAlias=function(e){return n.BROWSER_ALIASES_MAP[e];},e.getBrowserTypeByAlias=function(e){return n.BROWSER_MAP[e]||"";},e;}();t.default=i,e.exports=t.default;},18:function _(e,t,r){t.__esModule=!0,t.ENGINE_MAP=t.OS_MAP=t.PLATFORMS_MAP=t.BROWSER_MAP=t.BROWSER_ALIASES_MAP=void 0;t.BROWSER_ALIASES_MAP={"Amazon Silk":"amazon_silk","Android Browser":"android",Bada:"bada",BlackBerry:"blackberry",Chrome:"chrome",Chromium:"chromium",Electron:"electron",Epiphany:"epiphany",Firefox:"firefox",Focus:"focus",Generic:"generic","Google Search":"google_search",Googlebot:"googlebot","Internet Explorer":"ie","K-Meleon":"k_meleon",Maxthon:"maxthon","Microsoft Edge":"edge","MZ Browser":"mz","NAVER Whale Browser":"naver",Opera:"opera","Opera Coast":"opera_coast",PhantomJS:"phantomjs",Puffin:"puffin",QupZilla:"qupzilla",QQ:"qq",QQLite:"qqlite",Safari:"safari",Sailfish:"sailfish","Samsung Internet for Android":"samsung_internet",SeaMonkey:"seamonkey",Sleipnir:"sleipnir",Swing:"swing",Tizen:"tizen","UC Browser":"uc",Vivaldi:"vivaldi","WebOS Browser":"webos",WeChat:"wechat","Yandex Browser":"yandex",Roku:"roku"};t.BROWSER_MAP={amazon_silk:"Amazon Silk",android:"Android Browser",bada:"Bada",blackberry:"BlackBerry",chrome:"Chrome",chromium:"Chromium",electron:"Electron",epiphany:"Epiphany",firefox:"Firefox",focus:"Focus",generic:"Generic",googlebot:"Googlebot",google_search:"Google Search",ie:"Internet Explorer",k_meleon:"K-Meleon",maxthon:"Maxthon",edge:"Microsoft Edge",mz:"MZ Browser",naver:"NAVER Whale Browser",opera:"Opera",opera_coast:"Opera Coast",phantomjs:"PhantomJS",puffin:"Puffin",qupzilla:"QupZilla",qq:"QQ Browser",qqlite:"QQ Browser Lite",safari:"Safari",sailfish:"Sailfish",samsung_internet:"Samsung Internet for Android",seamonkey:"SeaMonkey",sleipnir:"Sleipnir",swing:"Swing",tizen:"Tizen",uc:"UC Browser",vivaldi:"Vivaldi",webos:"WebOS Browser",wechat:"WeChat",yandex:"Yandex Browser"};t.PLATFORMS_MAP={tablet:"tablet",mobile:"mobile",desktop:"desktop",tv:"tv"};t.OS_MAP={WindowsPhone:"Windows Phone",Windows:"Windows",MacOS:"macOS",iOS:"iOS",Android:"Android",WebOS:"WebOS",BlackBerry:"BlackBerry",Bada:"Bada",Tizen:"Tizen",Linux:"Linux",ChromeOS:"Chrome OS",PlayStation4:"PlayStation 4",Roku:"Roku"};t.ENGINE_MAP={EdgeHTML:"EdgeHTML",Blink:"Blink",Trident:"Trident",Presto:"Presto",Gecko:"Gecko",WebKit:"WebKit"};},90:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(91))&&n.__esModule?n:{default:n},s=r(18);function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n);}}var o=function(){function e(){}var t,r,n;return e.getParser=function(e,t){if(void 0===t&&(t=!1),"string"!=typeof e)throw new Error("UserAgent should be a string");return new i.default(e,t);},e.parse=function(e){return new i.default(e).getResult();},t=e,n=[{key:"BROWSER_MAP",get:function get(){return s.BROWSER_MAP;}},{key:"ENGINE_MAP",get:function get(){return s.ENGINE_MAP;}},{key:"OS_MAP",get:function get(){return s.OS_MAP;}},{key:"PLATFORMS_MAP",get:function get(){return s.PLATFORMS_MAP;}}],(r=null)&&a(t.prototype,r),n&&a(t,n),e;}();t.default=o,e.exports=t.default;},91:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n=u(r(92)),i=u(r(93)),s=u(r(94)),a=u(r(95)),o=u(r(17));function u(e){return e&&e.__esModule?e:{default:e};}var d=function(){function e(e,t){if(void 0===t&&(t=!1),null==e||""===e)throw new Error("UserAgent parameter can't be empty");this._ua=e,this.parsedResult={},!0!==t&&this.parse();}var t=e.prototype;return t.getUA=function(){return this._ua;},t.test=function(e){return e.test(this._ua);},t.parseBrowser=function(){var e=this;this.parsedResult.browser={};var t=o.default.find(n.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.browser=t.describe(this.getUA())),this.parsedResult.browser;},t.getBrowser=function(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser();},t.getBrowserName=function(e){return e?String(this.getBrowser().name).toLowerCase()||"":this.getBrowser().name||"";},t.getBrowserVersion=function(){return this.getBrowser().version;},t.getOS=function(){return this.parsedResult.os?this.parsedResult.os:this.parseOS();},t.parseOS=function(){var e=this;this.parsedResult.os={};var t=o.default.find(i.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.os=t.describe(this.getUA())),this.parsedResult.os;},t.getOSName=function(e){var t=this.getOS().name;return e?String(t).toLowerCase()||"":t||"";},t.getOSVersion=function(){return this.getOS().version;},t.getPlatform=function(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform();},t.getPlatformType=function(e){void 0===e&&(e=!1);var t=this.getPlatform().type;return e?String(t).toLowerCase()||"":t||"";},t.parsePlatform=function(){var e=this;this.parsedResult.platform={};var t=o.default.find(s.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.platform=t.describe(this.getUA())),this.parsedResult.platform;},t.getEngine=function(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine();},t.getEngineName=function(e){return e?String(this.getEngine().name).toLowerCase()||"":this.getEngine().name||"";},t.parseEngine=function(){var e=this;this.parsedResult.engine={};var t=o.default.find(a.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.engine=t.describe(this.getUA())),this.parsedResult.engine;},t.parse=function(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this;},t.getResult=function(){return o.default.assign({},this.parsedResult);},t.satisfies=function(e){var t=this,r={},n=0,i={},s=0;if(Object.keys(e).forEach(function(t){var a=e[t];"string"==typeof a?(i[t]=a,s+=1):"object"==typeof a&&(r[t]=a,n+=1);}),n>0){var a=Object.keys(r),u=o.default.find(a,function(e){return t.isOS(e);});if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d;}var c=o.default.find(a,function(e){return t.isPlatform(e);});if(c){var f=this.satisfies(r[c]);if(void 0!==f)return f;}}if(s>0){var l=Object.keys(i),h=o.default.find(l,function(e){return t.isBrowser(e,!0);});if(void 0!==h)return this.compareVersion(i[h]);}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),i=o.default.getBrowserTypeByAlias(n);return t&&i&&(n=i.toLowerCase()),n===r;},t.compareVersion=function(e){var t=[0],r=e,n=!1,i=this.getBrowserVersion();if("string"==typeof i)return ">"===e[0]||"<"===e[0]?(r=e.substr(1),"="===e[1]?(n=!0,r=e.substr(2)):t=[],">"===e[0]?t.push(1):t.push(-1)):"="===e[0]?r=e.substr(1):"~"===e[0]&&(n=!0,r=e.substr(1)),t.indexOf(o.default.compareVersions(i,r,n))>-1;},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase();},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase();},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase();},t.is=function(e,t){return void 0===t&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e);},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some(function(e){return t.is(e);});},e;}();t.default=d,e.exports=t.default;},92:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n};var s=/version\/(\d+(\.?_?\d+)+)/i,a=[{test:[/googlebot/i],describe:function describe(e){var t={name:"Googlebot"},r=i.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/opera/i],describe:function describe(e){var t={name:"Opera"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/opr\/|opios/i],describe:function describe(e){var t={name:"Opera"},r=i.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/SamsungBrowser/i],describe:function describe(e){var t={name:"Samsung Internet for Android"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/Whale/i],describe:function describe(e){var t={name:"NAVER Whale Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/MZBrowser/i],describe:function describe(e){var t={name:"MZ Browser"},r=i.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/focus/i],describe:function describe(e){var t={name:"Focus"},r=i.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/swing/i],describe:function describe(e){var t={name:"Swing"},r=i.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/coast/i],describe:function describe(e){var t={name:"Opera Coast"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe:function describe(e){var t={name:"Opera Touch"},r=i.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/yabrowser/i],describe:function describe(e){var t={name:"Yandex Browser"},r=i.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/ucbrowser/i],describe:function describe(e){var t={name:"UC Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/Maxthon|mxios/i],describe:function describe(e){var t={name:"Maxthon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/epiphany/i],describe:function describe(e){var t={name:"Epiphany"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/puffin/i],describe:function describe(e){var t={name:"Puffin"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/sleipnir/i],describe:function describe(e){var t={name:"Sleipnir"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/k-meleon/i],describe:function describe(e){var t={name:"K-Meleon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/micromessenger/i],describe:function describe(e){var t={name:"WeChat"},r=i.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/qqbrowser/i],describe:function describe(e){var t={name:/qqbrowserlite/i.test(e)?"QQ Browser Lite":"QQ Browser"},r=i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/msie|trident/i],describe:function describe(e){var t={name:"Internet Explorer"},r=i.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/\sedg\//i],describe:function describe(e){var t={name:"Microsoft Edge"},r=i.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/edg([ea]|ios)/i],describe:function describe(e){var t={name:"Microsoft Edge"},r=i.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/vivaldi/i],describe:function describe(e){var t={name:"Vivaldi"},r=i.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/seamonkey/i],describe:function describe(e){var t={name:"SeaMonkey"},r=i.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/sailfish/i],describe:function describe(e){var t={name:"Sailfish"},r=i.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,e);return r&&(t.version=r),t;}},{test:[/silk/i],describe:function describe(e){var t={name:"Amazon Silk"},r=i.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/phantom/i],describe:function describe(e){var t={name:"PhantomJS"},r=i.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/slimerjs/i],describe:function describe(e){var t={name:"SlimerJS"},r=i.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function describe(e){var t={name:"BlackBerry"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/(web|hpw)[o0]s/i],describe:function describe(e){var t={name:"WebOS Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/bada/i],describe:function describe(e){var t={name:"Bada"},r=i.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/tizen/i],describe:function describe(e){var t={name:"Tizen"},r=i.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/qupzilla/i],describe:function describe(e){var t={name:"QupZilla"},r=i.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/firefox|iceweasel|fxios/i],describe:function describe(e){var t={name:"Firefox"},r=i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/electron/i],describe:function describe(e){var t={name:"Electron"},r=i.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/MiuiBrowser/i],describe:function describe(e){var t={name:"Miui"},r=i.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/chromium/i],describe:function describe(e){var t={name:"Chromium"},r=i.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/chrome|crios|crmo/i],describe:function describe(e){var t={name:"Chrome"},r=i.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/GSA/i],describe:function describe(e){var t={name:"Google Search"},r=i.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r;},describe:function describe(e){var t={name:"Android Browser"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/playstation 4/i],describe:function describe(e){var t={name:"PlayStation 4"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/safari|applewebkit/i],describe:function describe(e){var t={name:"Safari"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/.*/i],describe:function describe(e){var t=-1!==e.search("\\(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return {name:i.default.getFirstMatch(t,e),version:i.default.getSecondMatch(t,e)};}}];t.default=a,e.exports=t.default;},93:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/Roku\/DVP/],describe:function describe(e){var t=i.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,e);return {name:s.OS_MAP.Roku,version:t};}},{test:[/windows phone/i],describe:function describe(e){var t=i.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.WindowsPhone,version:t};}},{test:[/windows /i],describe:function describe(e){var t=i.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,e),r=i.default.getWindowsVersionName(t);return {name:s.OS_MAP.Windows,version:t,versionName:r};}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function describe(e){var t={name:s.OS_MAP.iOS},r=i.default.getSecondMatch(/(Version\/)(\d[\d.]+)/,e);return r&&(t.version=r),t;}},{test:[/macintosh/i],describe:function describe(e){var t=i.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,e).replace(/[_\s]/g,"."),r=i.default.getMacOSVersionName(t),n={name:s.OS_MAP.MacOS,version:t};return r&&(n.versionName=r),n;}},{test:[/(ipod|iphone|ipad)/i],describe:function describe(e){var t=i.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,e).replace(/[_\s]/g,".");return {name:s.OS_MAP.iOS,version:t};}},{test:function test(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r;},describe:function describe(e){var t=i.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,e),r=i.default.getAndroidVersionName(t),n={name:s.OS_MAP.Android,version:t};return r&&(n.versionName=r),n;}},{test:[/(web|hpw)[o0]s/i],describe:function describe(e){var t=i.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,e),r={name:s.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r;}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function describe(e){var t=i.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,e)||i.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,e)||i.default.getFirstMatch(/\bbb(\d+)/i,e);return {name:s.OS_MAP.BlackBerry,version:t};}},{test:[/bada/i],describe:function describe(e){var t=i.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.Bada,version:t};}},{test:[/tizen/i],describe:function describe(e){var t=i.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.Tizen,version:t};}},{test:[/linux/i],describe:function describe(){return {name:s.OS_MAP.Linux};}},{test:[/CrOS/],describe:function describe(){return {name:s.OS_MAP.ChromeOS};}},{test:[/PlayStation 4/],describe:function describe(e){var t=i.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.PlayStation4,version:t};}}];t.default=a,e.exports=t.default;},94:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/googlebot/i],describe:function describe(){return {type:"bot",vendor:"Google"};}},{test:[/huawei/i],describe:function describe(e){var t=i.default.getFirstMatch(/(can-l01)/i,e)&&"Nova",r={type:s.PLATFORMS_MAP.mobile,vendor:"Huawei"};return t&&(r.model=t),r;}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Nexus"};}},{test:[/ipad/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"};}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"};}},{test:[/kftt build/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"};}},{test:[/silk/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Amazon"};}},{test:[/tablet(?! pc)/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet};}},{test:function test(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r;},describe:function describe(e){var t=i.default.getFirstMatch(/(ipod|iphone)/i,e);return {type:s.PLATFORMS_MAP.mobile,vendor:"Apple",model:t};}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"Nexus"};}},{test:[/[^-]mobi/i],describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "blackberry"===e.getBrowserName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"BlackBerry"};}},{test:function test(e){return "bada"===e.getBrowserName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "windows phone"===e.getBrowserName();},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"Microsoft"};}},{test:function test(e){var t=Number(String(e.getOSVersion()).split(".")[0]);return "android"===e.getOSName(!0)&&t>=3;},describe:function describe(){return {type:s.PLATFORMS_MAP.tablet};}},{test:function test(e){return "android"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "macos"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop,vendor:"Apple"};}},{test:function test(e){return "windows"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop};}},{test:function test(e){return "linux"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop};}},{test:function test(e){return "playstation 4"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.tv};}},{test:function test(e){return "roku"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.tv};}}];t.default=a,e.exports=t.default;},95:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:function test(e){return "microsoft edge"===e.getBrowserName(!0);},describe:function describe(e){if(/\sedg\//i.test(e))return {name:s.ENGINE_MAP.Blink};var t=i.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,e);return {name:s.ENGINE_MAP.EdgeHTML,version:t};}},{test:[/trident/i],describe:function describe(e){var t={name:s.ENGINE_MAP.Trident},r=i.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){return e.test(/presto/i);},describe:function describe(e){var t={name:s.ENGINE_MAP.Presto},r=i.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r;},describe:function describe(e){var t={name:s.ENGINE_MAP.Gecko},r=i.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/(apple)?webkit\/537\.36/i],describe:function describe(){return {name:s.ENGINE_MAP.Blink};}},{test:[/(apple)?webkit/i],describe:function describe(e){var t={name:s.ENGINE_MAP.WebKit},r=i.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}}];t.default=a,e.exports=t.default;}});});})(es5$2);var Bowser$2=/*@__PURE__*/getDefaultExportFromCjs$2(es5$2.exports);var BrowserName$2;(function(BrowserName){BrowserName["CHROME"]="Chrome";BrowserName["FIREFOX"]="Firefox";BrowserName["EDGE"]="Microsoft Edge";BrowserName["SAFARI"]="Safari";})(BrowserName$2||(BrowserName$2={}));var OSName$1;(function(OSName){OSName["WINDOWS"]="Windows";OSName["MAC"]="macOS";OSName["LINUX"]="Linux";})(OSName$1||(OSName$1={}));class BrowserInfo{static getBrowserDetails(){return this.browser.getBrowser();}static getOSDetails(){return this.browser.getOS();}static getPlatformDetails(){return this.browser.getPlatform();}static getEngineDetails(){return this.browser.getEngine();}static isChrome(){return this.browser.getBrowserName()===BrowserName$2.CHROME;}static isFirefox(){return this.browser.getBrowserName()===BrowserName$2.FIREFOX;}static isEdge(){return this.browser.getBrowserName()===BrowserName$2.EDGE;}static isSafari(){return this.browser.getBrowserName()===BrowserName$2.SAFARI;}static isWindows(){return this.browser.getOSName()===OSName$1.WINDOWS;}static isMac(){return this.browser.getOSName()===OSName$1.MAC;}static isLinux(){return this.browser.getOSName()===OSName$1.LINUX;}static isVersionGreaterThan(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:">".concat(version)};return this.browser.satisfies(checkTree);}static isVersionGreaterThanOrEqualTo(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:">=".concat(version)};return this.browser.satisfies(checkTree);}static isVersionLessThan(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:"<".concat(version)};return this.browser.satisfies(checkTree);}static isVersionLessThanOrEqualTo(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:"<=".concat(version)};return this.browser.satisfies(checkTree);}static isSubVersionOf(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:"~".concat(version)};return this.browser.satisfies(checkTree);}}BrowserInfo.browser=Bowser$2.getParser(window.navigator.userAgent);var CapabilityState$2;(function(CapabilityState){CapabilityState["NOT_CAPABLE"]="not capable";CapabilityState["CAPABLE"]="capable";CapabilityState["UNKNOWN"]="unknown";})(CapabilityState$2||(CapabilityState$2={}));var simulcastMaxFrameSizes={0:'240',1:'2304',2:'8160'};class JmpLine extends Line$1{static fromSdpLine(line){if(!JmpLine.regex.test(line)){return undefined;}var tokens=line.match(JmpLine.regex);var versions=tokens[1].split(',').filter(v=>v.length);return new JmpLine(versions);}constructor(versions){super();this.versions=versions;}toSdpLine(){return "a=jmp:".concat(this.versions.join(','));}}JmpLine.regex=/^jmp:((?:v\d+,?)+)/;class JmpStreamIdModeLine extends Line$1{constructor(streamIdMode){super();this.streamIdMode=streamIdMode;}static fromSdpLine(line){if(!JmpStreamIdModeLine.regex.test(line)){return undefined;}var tokens=line.match(JmpStreamIdModeLine.regex);var mode=tokens[1];return new JmpStreamIdModeLine(mode);}toSdpLine(){return "a=jmp-stream-id-mode:".concat(this.streamIdMode);}}JmpStreamIdModeLine.regex=/^jmp-stream-id-mode:(MID-RID|SSRC)$/;class JmpSourceLine extends Line$1{constructor(source,csi){super();this.source=source;this.csi=csi;}static fromSdpLine(line){if(!JmpSourceLine.regex.test(line)){return undefined;}var tokens=line.match(JmpSourceLine.regex);var source=tokens[1];var csi=tokens[2];return new JmpSourceLine(source,csi);}toSdpLine(){var line="a=jmp-source:".concat(this.source);if(this.csi){line+=" csi=".concat(this.csi);}return line;}}JmpSourceLine.regex=new RegExp("^jmp-source:(".concat(ANY_NON_WS$1,") (?:csi=(").concat(ANY_NON_WS$1,"))"));DefaultSdpGrammar$1.addParser('a',JmpLine.fromSdpLine);DefaultSdpGrammar$1.addParser('a',JmpSourceLine.fromSdpLine);DefaultSdpGrammar$1.addParser('a',JmpStreamIdModeLine.fromSdpLine);function deepCopy(source){return Array.isArray(source)?source.map(item=>deepCopy(item)):source instanceof Map?new Map(source):source instanceof Date?new Date(source.getTime()):source&&typeof source==='object'?Object.getOwnPropertyNames(source).reduce((o,prop)=>{Object.defineProperty(o,prop,Object.getOwnPropertyDescriptor(source,prop));o[prop]=deepCopy(source[prop]);return o;},Object.create(Object.getPrototypeOf(source))):source;}var ipv4Regex=/(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.)(\d{1,3}\b)/g;var ipv6Regex=/(\b[\da-fA-F]{1,4}(:[\da-fA-F]{1,4}){7}\b)/g;function matchMediaDescriptionsInAnswer(parsedOffer,parsedAnswer){parsedAnswer.session.groups=parsedOffer.session.groups;parsedAnswer.media=parsedOffer.media.map(offerMediaDescription=>{if(!offerMediaDescription.mid){logErrorAndThrow(exports.WcmeErrorType.OFFER_ANSWER_MISMATCH,"Named media groups can only be set for audio.");}var answerMediaDescription=parsedAnswer.media.find(m=>m.mid===offerMediaDescription.mid);if(answerMediaDescription){return answerMediaDescription;}if(!(offerMediaDescription instanceof AvMediaDescription$1)){logErrorAndThrow(exports.WcmeErrorType.OFFER_ANSWER_MISMATCH,"Answer is missing a non-AV media description for MID ".concat(offerMediaDescription.mid,"."));}var startingMediaDescription=parsedAnswer.avMedia.find(m=>m.type===offerMediaDescription.type);if(!startingMediaDescription){logErrorAndThrow(exports.WcmeErrorType.OFFER_ANSWER_MISMATCH,"Answer has no media description of type ".concat(offerMediaDescription.type,", can't generate synthetic answer media description for MID ").concat(offerMediaDescription.mid,"."));}var fakeCorrespondingDescription=deepCopy(startingMediaDescription);fakeCorrespondingDescription.mid=offerMediaDescription.mid;fakeCorrespondingDescription.simulcast=undefined;fakeCorrespondingDescription.bandwidth=undefined;if(offerMediaDescription.direction==='sendrecv'||offerMediaDescription.direction==='sendonly'){fakeCorrespondingDescription.direction='recvonly';}if(offerMediaDescription.direction==='recvonly'){fakeCorrespondingDescription.direction='sendonly';}return fakeCorrespondingDescription;});}function setupBundle(parsedSdp,bundlePolicy,midMap){if(bundlePolicy==='max-compat'){var audioMainMids=midMap.get(exports.MediaType.AudioMain);var videoMainMids=midMap.get(exports.MediaType.VideoMain);var audioContentMids=midMap.get(exports.MediaType.AudioSlides);var videoContentMids=midMap.get(exports.MediaType.VideoSlides);parsedSdp.session.groups.splice(0,parsedSdp.session.groups.length);if(audioMainMids){parsedSdp.session.groups.push(new BundleGroupLine$1(audioMainMids));}if(videoMainMids){parsedSdp.session.groups.push(new BundleGroupLine$1(videoMainMids));}if(audioContentMids){parsedSdp.session.groups.push(new BundleGroupLine$1(audioContentMids));}if(videoContentMids){parsedSdp.session.groups.push(new BundleGroupLine$1(videoContentMids));}}}function filterRecvOnlyMediaDescriptions(parsedSdp){var filteredMids=[];parsedSdp.media=parsedSdp.media.filter(media=>{if(media instanceof ApplicationMediaDescription$1||media instanceof AvMediaDescription$1&&media.direction!=='recvonly'){filteredMids.push(media.mid);return true;}return false;});parsedSdp.session.groups.forEach(g=>{g.mids=g.mids.filter(m=>filteredMids.includes(m));});}function injectContentType(mediaDescription,mediaContent){if(mediaContent===exports.MediaContent.Slides){mediaDescription.addLine(new ContentLine$1(['slides']));}}function injectJmpAttributes(mediaDescription,csi,streamSignalingMode){if(!mediaDescription.otherLines.find(line=>line instanceof JmpLine)){mediaDescription.addLine(new JmpLine(['v1']));}if(!mediaDescription.otherLines.find(line=>line instanceof JmpSourceLine)){mediaDescription.addLine(new JmpSourceLine(mediaDescription.mid,csi.toString()));}if(!mediaDescription.otherLines.find(line=>line instanceof JmpStreamIdModeLine)){mediaDescription.addLine(new JmpStreamIdModeLine(streamSignalingMode));}}function injectDummyCandidates(mediaDescription){mediaDescription.iceInfo.candidates=[];mediaDescription.addLine(new CandidateLine$1('dummy1',1,'udp',3,'0.0.0.0',9,'host'));mediaDescription.addLine(new CandidateLine$1('dummy2',1,'tcp',2,'0.0.0.0',9,'host'));mediaDescription.addLine(new CandidateLine$1('dummy3',1,'udp',1,'0.0.0.0',9,'relay'));}function maskIp(sdp){var maskedSdp=sdp.replace(ipv4Regex,(match,firstOctets)=>{return "".concat(firstOctets,"0");});maskedSdp=maskedSdp.replace(ipv6Regex,match=>{return match.replace(/:[\da-fA-F]{1,4}$/,':0');});return maskedSdp;}function removeMidRidExtensions(mediaDescription){mediaDescription.extMaps.forEach((extMapLine,extId,extMap)=>{if(/^urn:ietf:params:rtp-hdrext:sdes:(?:mid|rtp-stream-id|repaired-rtp-stream-id)$/.test(extMapLine.uri)){extMap.delete(extId);}});}function addVlaExtension(mediaDescription){var vlaExtensionUri='http://www.webrtc.org/experiments/rtp-hdrext/video-layers-allocation00';if(![...mediaDescription.extMaps.values()].some(extMapLine=>extMapLine.uri===vlaExtensionUri)){mediaDescription.addExtension({uri:vlaExtensionUri});}}function applyFormatParameters(mediaDescription,paramsMap){paramsMap.forEach((value,param)=>{[...mediaDescription.codecs.values()].filter(ci=>ci.name==='H264'||ci.name==='opus').forEach(ci=>{if(value===null){ci.fmtParams.delete(param);}else {ci.fmtParams.set(param,"".concat(value));}});});}function generateSsrc(){return Math.floor(Math.random()*0xffffffff)+1;}class EgressSdpMunger{constructor(options){this.streamIds=[];this.customCodecParameters=new Map();this.egressMungerOptions=options;}reset(){this.streamIds=[];}mungeLocalDescription(mediaDescription,options){var _a;retainCodecsByCodecName(mediaDescription,['h264','opus','rtx']);if(options.forceSoftwareEncoder){var isH264Cbp=codecInfo=>{var _a;if(((_a=codecInfo.name)===null||_a===void 0?void 0:_a.toLowerCase())==='h264'){var profileLevelId=codecInfo.fmtParams.get('profile-level-id');return !!profileLevelId&&/^42[^0]/.test(profileLevelId);}return false;};if([...mediaDescription.codecs.values()].some(isH264Cbp)){retainCodecs(mediaDescription,codecInfo=>{var _a;return ((_a=codecInfo.name)===null||_a===void 0?void 0:_a.toLowerCase())!=='h264'||isH264Cbp(codecInfo);});}else {logger.log("No H.264 CBP present in m-line with MID ".concat(mediaDescription.mid,", so all H.264 codecs have been retained."));}}if(mediaDescription.codecs.size===0){logErrorAndThrow(exports.WcmeErrorType.SDP_MUNGE_MISSING_CODECS,"No codecs present in m-line with MID ".concat(mediaDescription.mid," after filtering."));}mediaDescription.rids=[];mediaDescription.simulcast=undefined;removeMidRidExtensions(mediaDescription);if(options.simulcastEnabled){addVlaExtension(mediaDescription);}var numStreams=options.simulcastEnabled?3:1;if(!this.streamIds.length){if(mediaDescription.ssrcs.length){var ssrcs=[...new Set(mediaDescription.ssrcs.map(ssrcLine=>ssrcLine.ssrcId))];mediaDescription.ssrcGroups.forEach(sg=>{if(!sg.ssrcs.every(ssrc=>ssrcs.includes(ssrc))){logErrorAndThrow(exports.WcmeErrorType.SDP_MUNGE_FAILED,'SSRC present in SSRC groups is missing from SSRC lines.');}});var rtxSsrcGroups=mediaDescription.ssrcGroups.filter(sg=>sg.semantics==='FID');if(rtxSsrcGroups.length&&rtxSsrcGroups.length!==numStreams){logErrorAndThrow(exports.WcmeErrorType.SDP_MUNGE_FAILED,"Expected ".concat(numStreams," RTX SSRC groups, got ").concat(rtxSsrcGroups.length,"."));}rtxSsrcGroups.forEach(sg=>{this.streamIds.push({ssrc:sg.ssrcs[0],rtxSsrc:sg.ssrcs[1]});});var simulcastSsrcs=(_a=mediaDescription.ssrcGroups.find(sg=>sg.semantics==='SIM'))===null||_a===void 0?void 0:_a.ssrcs;if(simulcastSsrcs){if(simulcastSsrcs.length!==numStreams||!this.streamIds.every(streamId=>simulcastSsrcs.includes(streamId.ssrc))){logErrorAndThrow(exports.WcmeErrorType.SDP_MUNGE_FAILED,'SSRCs in simulcast SSRC group do not match primary SSRCs in RTX SSRC groups.');}this.streamIds.sort((a,b)=>simulcastSsrcs.indexOf(a.ssrc)-simulcastSsrcs.indexOf(b.ssrc));}else if(rtxSsrcGroups.length>1){logErrorAndThrow(exports.WcmeErrorType.SDP_MUNGE_FAILED,'Multiple RTX SSRC groups but no simulcast SSRC group found.');}if(!this.streamIds.length){this.streamIds.push({ssrc:ssrcs[0]});}}else {[...Array(numStreams).keys()].forEach(()=>{var newStreamId={ssrc:generateSsrc()};if(options.rtxEnabled){newStreamId.rtxSsrc=generateSsrc();}this.streamIds.push(newStreamId);});}}mediaDescription.ssrcs=[];mediaDescription.ssrcGroups=[];this.streamIds.forEach(streamId=>{var rtpSsrc=streamId.ssrc;mediaDescription.addLine(new SsrcLine$1(rtpSsrc,'cname',"".concat(rtpSsrc,"-cname")));mediaDescription.addLine(new SsrcLine$1(rtpSsrc,'msid','-',"".concat(mediaDescription.mid)));if(options.rtxEnabled){var rtxSsrc=streamId.rtxSsrc;mediaDescription.addLine(new SsrcLine$1(rtxSsrc,'cname',"".concat(rtpSsrc,"-cname")));mediaDescription.addLine(new SsrcLine$1(rtxSsrc,'msid','-',"".concat(mediaDescription.mid)));mediaDescription.addLine(new SsrcGroupLine$1('FID',[rtpSsrc,rtxSsrc]));}});if(options.simulcastEnabled){mediaDescription.addLine(new SsrcGroupLine$1('SIM',this.streamIds.map(streamId=>streamId.ssrc)));}applyFormatParameters(mediaDescription,this.customCodecParameters);if(options.twccDisabled){disableTwcc(mediaDescription);}}mungeLocalDescriptionForRemoteServer(mediaDescription,mediaContent,csi){injectContentType(mediaDescription,mediaContent);injectJmpAttributes(mediaDescription,csi,'SSRC');if(!this.egressMungerOptions.doFullIce){injectDummyCandidates(mediaDescription);}if(mediaDescription.type==='video'){var ssrcGroup=mediaDescription.ssrcGroups.find(sg=>sg.semantics==='SIM');if(ssrcGroup){ssrcGroup.ssrcs.forEach((ssrc,index)=>{mediaDescription.addLine(new SsrcLine$1(ssrc,'fmtp',"* max-fs=".concat(simulcastMaxFrameSizes[index])));});}}}mungeRemoteDescription(mediaDescription){if(retainCandidatesByTransportType(mediaDescription,['udp','tcp'])){logger.log("Some unsupported remote candidates have been removed from mid ".concat(mediaDescription.mid));}mediaDescription.bandwidth=undefined;[...mediaDescription.codecs.values()].forEach(ci=>{ci.fmtParams.set('x-google-start-bitrate','60000');});}getSenderIds(){return this.streamIds;}getEncodingIndexForStreamId(streamId){return this.streamIds.findIndex(currStreamId=>compareStreamIds(currStreamId,streamId));}setCodecParameters(parameters){Object.entries(parameters).forEach(_ref2=>{var[param,value]=_ref2;this.customCodecParameters.set(param,value);});}deleteCodecParameters(parameters){parameters.forEach(param=>{this.customCodecParameters.set(param,null);});}}var events$1={exports:{}};var R$1=typeof Reflect==='object'?Reflect:null;var ReflectApply$1=R$1&&typeof R$1.apply==='function'?R$1.apply:function ReflectApply(target,receiver,args){return Function.prototype.apply.call(target,receiver,args);};var ReflectOwnKeys$1;if(R$1&&typeof R$1.ownKeys==='function'){ReflectOwnKeys$1=R$1.ownKeys;}else if(Object.getOwnPropertySymbols){ReflectOwnKeys$1=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));};}else {ReflectOwnKeys$1=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target);};}function ProcessEmitWarning$1(warning){if(console&&console.warn)console.warn(warning);}var NumberIsNaN$1=Number.isNaN||function NumberIsNaN(value){return value!==value;};function EventEmitter$3(){EventEmitter$3.init.call(this);}events$1.exports=EventEmitter$3;events$1.exports.once=once$2;// Backwards-compat with node 0.10.x
|
|
2888
2893
|
EventEmitter$3.EventEmitter=EventEmitter$3;EventEmitter$3.prototype._events=undefined;EventEmitter$3.prototype._eventsCount=0;EventEmitter$3.prototype._maxListeners=undefined;// By default EventEmitters will print a warning if more than 10 listeners are
|
|
2889
2894
|
// added to it. This is a useful default which helps finding memory leaks.
|
|
2890
2895
|
var defaultMaxListeners$1=10;function checkListener$1(listener){if(typeof listener!=='function'){throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof listener);}}Object.defineProperty(EventEmitter$3,'defaultMaxListeners',{enumerable:true,get:function get(){return defaultMaxListeners$1;},set:function set(arg){if(typeof arg!=='number'||arg<0||NumberIsNaN$1(arg)){throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+arg+'.');}defaultMaxListeners$1=arg;}});EventEmitter$3.init=function(){if(this._events===undefined||this._events===Object.getPrototypeOf(this)._events){this._events=Object.create(null);this._eventsCount=0;}this._maxListeners=this._maxListeners||undefined;};// Obviously not all Emitters should be limited to 10. This function allows
|
|
@@ -4907,7 +4912,7 @@ var{hasOwnProperty}=Object.prototype;for(var i=0;i<mapResults.length;i++){if(map
|
|
|
4907
4912
|
* // arg1 now equals 'three'
|
|
4908
4913
|
* callback(null, 'done');
|
|
4909
4914
|
* }
|
|
4910
|
-
*/function waterfall(tasks,callback){callback=once(callback);if(!Array.isArray(tasks))return callback(new Error('First argument to waterfall must be an array of functions'));if(!tasks.length)return callback();var taskIndex=0;function nextTask(args){var task=wrapAsync(tasks[taskIndex++]);task(...args,onlyOnce(next));}function next(err){if(err===false)return;for(var _len22=arguments.length,args=new Array(_len22>1?_len22-1:0),_key22=1;_key22<_len22;_key22++){args[_key22-1]=arguments[_key22];}if(err||taskIndex===tasks.length){return callback(err,...args);}nextTask(args);}nextTask([]);}awaitify(waterfall);function processTasks(task,finishedCallback){return __awaiter$1(this,void 0,void 0,function*(){try{yield task();finishedCallback();}catch(e){finishedCallback(e);}});}class AsyncQueue{constructor(){this.queue=queue$1(processTasks,1);}push(task){return this.queue.pushAsync(task);}empty(){return this.queue.empty();}}var NOISE_REDUCTION_KIND='noise-reduction-effect';var VIRTUAL_BACKGROUND_KIND='virtual-background-effect';var isNoiseReductionEffect=effect=>{return (effect===null||effect===void 0?void 0:effect.kind)===NOISE_REDUCTION_KIND;};var isVirtualBackgroundEffect=effect=>{return (effect===null||effect===void 0?void 0:effect.kind)===VIRTUAL_BACKGROUND_KIND;};var OfferAnswerType;(function(OfferAnswerType){OfferAnswerType[OfferAnswerType["LocalOnly"]=0]="LocalOnly";OfferAnswerType[OfferAnswerType["Remote"]=1]="Remote";})(OfferAnswerType||(OfferAnswerType={}));class SendOnlyTransceiver extends Transceiver{constructor(rtcRtpTransceiver,mid,csi,munger,mediaType){super(rtcRtpTransceiver,mid);this.rtxEnabled=false;this.streamMuteStateChange=new TypedEvent();this.streamPublishStateChange=new TypedEvent();this.negotiationNeeded=new TypedEvent();this.namedMediaGroupsChange=new TypedEvent();this.requestedIdEncodingParamsMap=new Map();this.updateSendParametersQueue=new AsyncQueue();this.metadata={lastRequestedUpdateTimestampsMap:new Map()};this.csi=csi;this.direction='sendrecv';this.handleTrackChange=this.handleTrackChange.bind(this);this.handleStreamConstraintsChange=this.handleStreamConstraintsChange.bind(this);this.handleStreamMuteStateChange=this.handleStreamMuteStateChange.bind(this);this.munger=munger;this.mediaType=mediaType;}replaceSenderSource(stream){var _a,_b;return __awaiter$1(this,void 0,void 0,function*(){var trackOrNull=(_a=stream===null||stream===void 0?void 0:stream.outputStream.getTracks()[0])!==null&&_a!==void 0?_a:null;if(((_b=this.sender.track)===null||_b===void 0?void 0:_b.id)!==(trackOrNull===null||trackOrNull===void 0?void 0:trackOrNull.id)){yield this.sender.replaceTrack(trackOrNull);if(trackOrNull){logger.log("Sender source for ".concat(this.mediaType," replaced with track ID ").concat(trackOrNull.id));}else {logger.log("Sender source for ".concat(this.mediaType," set to null, sender stopped"));}}});}handleTrackChange(){return __awaiter$1(this,void 0,void 0,function*(){if(this.requested){yield this.replaceSenderSource(this.publishedStream);}});}handleStreamConstraintsChange(){return __awaiter$1(this,void 0,void 0,function*(){yield this.updateSendParameters(this.requestedIdEncodingParamsMap);});}handleStreamMuteStateChange(){this.streamMuteStateChange.emit();}get requested(){return this.requestedIdEncodingParamsMap.size>0;}replaceTransceiver(newRtcRtpTransceiver){var _super=Object.create(null,{replaceTransceiver:{get:()=>super.replaceTransceiver}});return __awaiter$1(this,void 0,void 0,function*(){_super.replaceTransceiver.call(this,newRtcRtpTransceiver);newRtcRtpTransceiver.direction=this.direction;if(this.requested){yield this.replaceSenderSource(this.publishedStream);}});}replacePublishedStream(newStream){return __awaiter$1(this,void 0,void 0,function*(){var oldStream=this.publishedStream;oldStream===null||oldStream===void 0?void 0:oldStream.off(exports.LocalStreamEventNames.OutputTrackChange,this.handleTrackChange);oldStream===null||oldStream===void 0?void 0:oldStream.off(exports.LocalStreamEventNames.ConstraintsChange,this.handleStreamConstraintsChange);oldStream===null||oldStream===void 0?void 0:oldStream.off(exports.LocalStreamEventNames.UserMuteStateChange,this.handleStreamMuteStateChange);oldStream===null||oldStream===void 0?void 0:oldStream.off(exports.LocalStreamEventNames.SystemMuteStateChange,this.handleStreamMuteStateChange);if(this.requested){yield this.replaceSenderSource(newStream);}this.publishedStream=newStream;newStream===null||newStream===void 0?void 0:newStream.on(exports.LocalStreamEventNames.OutputTrackChange,this.handleTrackChange);newStream===null||newStream===void 0?void 0:newStream.on(exports.LocalStreamEventNames.ConstraintsChange,this.handleStreamConstraintsChange);newStream===null||newStream===void 0?void 0:newStream.on(exports.LocalStreamEventNames.UserMuteStateChange,this.handleStreamMuteStateChange);newStream===null||newStream===void 0?void 0:newStream.on(exports.LocalStreamEventNames.SystemMuteStateChange,this.handleStreamMuteStateChange);if(!oldStream&&newStream&&!newStream.muted||oldStream&&!newStream&&!oldStream.muted){this.streamPublishStateChange.emit();}else if((oldStream===null||oldStream===void 0?void 0:oldStream.muted)!==(newStream===null||newStream===void 0?void 0:newStream.muted)){this.streamMuteStateChange.emit();}});}setNamedMediaGroups(namedMediaGroups){if(this.mediaType!==exports.MediaType.AudioMain){logErrorAndThrow(exports.WcmeErrorType.SET_NMG_FAILED,"Named media groups can only be set for audio.");}this.namedMediaGroups=namedMediaGroups;this.namedMediaGroupsChange.emit();}publishStream(stream){return this.replacePublishedStream(stream);}unpublishStream(){return this.replacePublishedStream();}get active(){return this._rtcRtpTransceiver.direction==='sendrecv';}set active(enabled){this.direction=enabled?'sendrecv':'inactive';this._rtcRtpTransceiver.direction=this.direction;if(this._rtcRtpTransceiver.direction!==this._rtcRtpTransceiver.currentDirection){this.negotiationNeeded.emit(OfferAnswerType.Remote);}}getStats(){return __awaiter$1(this,void 0,void 0,function*(){var statsMap=new Map();var statsReport=yield this.sender.getStats();statsReport.forEach((stats,key)=>{var _a,_b,_c,_d;if(stats.type==='outbound-rtp'){stats.mid=this.mid;stats.csi=this.csi;stats.calliopeMediaType=this.mediaType;var senderId=this.munger.getSenderIds().find(id=>id.ssrc===stats.ssrc);if(senderId){var encodingIndex=this.getEncodingIndexForStreamId(senderId);var encodingParams=this.requestedIdEncodingParamsMap.get(encodingIndex);stats.requestedBitrate=encodingParams===null||encodingParams===void 0?void 0:encodingParams.maxPayloadBitsPerSecond;stats.requestedFrameSize=encodingParams===null||encodingParams===void 0?void 0:encodingParams.maxFs;stats.isRequested=!!encodingParams;stats.lastRequestedUpdateTimestamp=this.metadata.lastRequestedUpdateTimestampsMap.get(encodingIndex);}var effect=(_b=(_a=this.publishedStream)===null||_a===void 0?void 0:_a.getEffects())===null||_b===void 0?void 0:_b[0];if(effect===null||effect===void 0?void 0:effect.isEnabled){if(isNoiseReductionEffect(effect)){stats.effect={kind:effect.kind,noiseReductionMode:'LOW_POWER'};}else if(isVirtualBackgroundEffect(effect)){stats.effect={kind:effect.kind,virtualBackgroundMode:(_c=effect.options)===null||_c===void 0?void 0:_c.mode};}else {stats.effect={kind:effect.kind};}}var trackSettings=(_d=this.publishedStream)===null||_d===void 0?void 0:_d.getSettings();if(trackSettings===null||trackSettings===void 0?void 0:trackSettings.frameRate){stats.targetFrameRate=trackSettings===null||trackSettings===void 0?void 0:trackSettings.frameRate;}}else if(stats.type==='media-source'){stats.calliopeMediaType=this.mediaType;}statsMap.set(key,stats);});return statsMap;});}updateSendParameters(requestedIdEncodingParamsMap){return __awaiter$1(this,void 0,void 0,function*(){return this.updateSendParametersQueue.push(()=>__awaiter$1(this,void 0,void 0,function*(){var sendParameters=this.sender.getParameters();sendParameters.encodings.forEach((encoding,index)=>{var _a,_b;var encodingParams=requestedIdEncodingParamsMap.get(index);encoding.active=!!encodingParams;if(encodingParams){var{maxPayloadBitsPerSecond,maxFs,maxWidth,maxHeight}=encodingParams;var scaleDownRatio=getScaleDownRatio((_a=this.publishedStream)===null||_a===void 0?void 0:_a.getSettings().width,(_b=this.publishedStream)===null||_b===void 0?void 0:_b.getSettings().height,maxFs,maxWidth,maxHeight);if(maxPayloadBitsPerSecond!==undefined&&maxPayloadBitsPerSecond>=0){encoding.maxBitrate=maxPayloadBitsPerSecond;}if(scaleDownRatio!==undefined&&scaleDownRatio>=1.0){encoding.scaleResolutionDownBy=scaleDownRatio;}}});yield this.sender.setParameters(sendParameters);logger.log("Sender parameters for ".concat(this.mediaType," set to ").concat(JSON.stringify(sendParameters)));var timestamp=getCurrentTimestamp();requestedIdEncodingParamsMap.forEach((_,index)=>{if(!this.requestedIdEncodingParamsMap.has(index)){this.metadata.lastRequestedUpdateTimestampsMap.set(index,timestamp);}});this.requestedIdEncodingParamsMap.forEach((_,index)=>{if(!requestedIdEncodingParamsMap.has(index)){this.metadata.lastRequestedUpdateTimestampsMap.set(index,timestamp);}});var oldRequested=this.requested;var newRequested=requestedIdEncodingParamsMap.size>0;this.requestedIdEncodingParamsMap=requestedIdEncodingParamsMap;if(oldRequested!==newRequested){yield this.replaceSenderSource(newRequested?this.publishedStream:null);}}));});}isSimulcastEnabled(){var params=this.sender.getParameters();return params.encodings.length>1;}mungeLocalDescription(mediaDescription){this.munger.mungeLocalDescription(mediaDescription,{simulcastEnabled:this.isSimulcastEnabled(),rtxEnabled:this.rtxEnabled,twccDisabled:this.twccDisabled,forceSoftwareEncoder:this.mediaType===exports.MediaType.VideoSlides&&(BrowserInfo.isWindows()||BrowserInfo.isMac())&&(BrowserInfo.isChrome()||BrowserInfo.isEdge())});}mungeLocalDescriptionForRemoteServer(mediaDescription){this.munger.mungeLocalDescriptionForRemoteServer(mediaDescription,getMediaContent(this.mediaType),this.csi);}mungeRemoteDescription(mediaDescription){this.munger.mungeRemoteDescription(mediaDescription);}get senderIds(){return this.munger.getSenderIds();}get numActiveSimulcastLayers(){var _a;if(getMediaFamily(this.mediaType)===exports.MediaFamily.Video){return (_a=this.publishedStream)===null||_a===void 0?void 0:_a.getNumActiveSimulcastLayers();}return this.publishedStream?0:undefined;}getEncodingIndexForStreamId(id){return this.munger.getEncodingIndexForStreamId(id);}resetSdpMunger(){this.munger.reset();}setCodecParameters(parameters){this.munger.setCodecParameters(parameters);this.negotiationNeeded.emit(OfferAnswerType.LocalOnly);}deleteCodecParameters(parameters){this.munger.deleteCodecParameters(parameters);this.negotiationNeeded.emit(OfferAnswerType.LocalOnly);}}class SendSlot{constructor(sendTransceiver){this.sendTransceiver=sendTransceiver;}publishStream(stream){return __awaiter$1(this,void 0,void 0,function*(){if(stream===this.sendTransceiver.publishedStream){return Promise.resolve();}return this.sendTransceiver.publishStream(stream);});}unpublishStream(){return __awaiter$1(this,void 0,void 0,function*(){if(!this.sendTransceiver.publishedStream){return Promise.resolve();}return this.sendTransceiver.unpublishStream();});}setNamedMediaGroups(namedMediaGroups){this.sendTransceiver.setNamedMediaGroups(namedMediaGroups);}clearNamedMediaGroups(){this.setNamedMediaGroups([]);}get active(){return this.sendTransceiver.active;}set active(active){this.sendTransceiver.active=active;}setCodecParameters(parameters){return __awaiter$1(this,void 0,void 0,function*(){this.sendTransceiver.setCodecParameters(parameters);});}deleteCodecParameters(parameters){return __awaiter$1(this,void 0,void 0,function*(){this.sendTransceiver.deleteCodecParameters(parameters);});}}var organizeTransceiverStats=(sendTransceivers,recvTransceivers)=>__awaiter$1(void 0,void 0,void 0,function*(){var result={audio:{senders:[],receivers:[]},video:{senders:[],receivers:[]},screenShareAudio:{senders:[],receivers:[]},screenShareVideo:{senders:[],receivers:[]}};yield Promise.all([...sendTransceivers.entries()].map(_ref4=>{var[mediaType,transceiver]=_ref4;return __awaiter$1(void 0,void 0,void 0,function*(){var _a;var item={report:yield transceiver.getStats(),mid:transceiver.mid,csi:transceiver.csi,currentDirection:'sendonly',localTrackLabel:(_a=transceiver.publishedStream)===null||_a===void 0?void 0:_a.label};if(mediaType===exports.MediaType.AudioMain){result.audio.senders.push(item);}if(mediaType===exports.MediaType.VideoMain){result.video.senders.push(item);}if(mediaType===exports.MediaType.AudioSlides){result.screenShareAudio.senders.push(item);}if(mediaType===exports.MediaType.VideoSlides){result.screenShareVideo.senders.push(item);}});}));yield Promise.all([...recvTransceivers.entries()].map(_ref5=>{var[mediaType,transceivers]=_ref5;return __awaiter$1(void 0,void 0,void 0,function*(){return Promise.all(transceivers.map(t=>__awaiter$1(void 0,void 0,void 0,function*(){var _b,_c;var item={report:yield t.getStats(),mid:(_b=t.receiveSlot.id)===null||_b===void 0?void 0:_b.mid,csi:t.receiveSlot.currentRxCsi,currentDirection:'recvonly',localTrackLabel:(_c=t.receiveSlot.stream.getTracks()[0])===null||_c===void 0?void 0:_c.label};if(mediaType===exports.MediaType.AudioMain){result.audio.receivers.push(item);}if(mediaType===exports.MediaType.VideoMain){result.video.receivers.push(item);}if(mediaType===exports.MediaType.AudioSlides){result.screenShareAudio.receivers.push(item);}if(mediaType===exports.MediaType.VideoSlides){result.screenShareVideo.receivers.push(item);}})));});}));return result;});function toMediaStreamTrackKind(mediaType){return [exports.MediaType.VideoMain,exports.MediaType.VideoSlides].includes(mediaType)?exports.MediaStreamTrackKind.Video:exports.MediaStreamTrackKind.Audio;}function webRtcVideoContentHintToJmpVideoContentHint(hint){if(hint==='motion'){return 'motion';}if(hint==='detail'){return 'sharpness';}return undefined;}var MultistreamConnectionEventNames;(function(MultistreamConnectionEventNames){MultistreamConnectionEventNames["VideoSourceCountUpdate"]="video-source-count-update";MultistreamConnectionEventNames["AudioSourceCountUpdate"]="audio-source-count-update";MultistreamConnectionEventNames["ActiveSpeakerNotification"]="active-speaker-notification";MultistreamConnectionEventNames["PeerConnectionStateUpdate"]="peer-connection-state-update";MultistreamConnectionEventNames["IceConnectionStateUpdate"]="ice-connection-state-update";MultistreamConnectionEventNames["IceGatheringStateUpdate"]="ice-gathering-state-update";MultistreamConnectionEventNames["NegotiationNeeded"]="negotiation-needed";MultistreamConnectionEventNames["CreateOfferOnSuccess"]="createofferonsuccess";MultistreamConnectionEventNames["CreateAnswerOnSuccess"]="createansweronsuccess";MultistreamConnectionEventNames["SetLocalDescriptionOnSuccess"]="setlocaldescriptiononsuccess";MultistreamConnectionEventNames["SetRemoteDescriptionOnSuccess"]="setremotedescriptiononsuccess";MultistreamConnectionEventNames["IceCandidateError"]="icecandidateerror";})(MultistreamConnectionEventNames||(MultistreamConnectionEventNames={}));var defaultMultistreamConnectionOptions={disableSimulcast:BrowserInfo.isFirefox(),bundlePolicy:'max-compat',iceServers:undefined,disableContentSimulcast:true,disableAudioTwcc:true,doFullIce:BrowserInfo.isFirefox()};class MultistreamConnection extends EventEmitter$2{constructor(){var userOptions=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};super();this.sendTransceivers=new Map();this.recvTransceivers=new Map();this.jmpSessions=new Map();this.pendingJmpTasks=[];this.metricsCallback=()=>{};this.overuseUpdateCallback=()=>{};this.midPredictor=new MidPredictor();this.offerAnswerQueue=new AsyncQueue();this.currentCreateOfferId=0;this.options=Object.assign(Object.assign({},defaultMultistreamConnectionOptions),userOptions);logger.info("Creating multistream connection with options ".concat(JSON.stringify(this.options)));this.initializePeerConnection();this.overuseStateManager=new OveruseStateManager(overuseState=>this.overuseUpdateCallback(overuseState));this.overuseStateManager.start();this.statsManager=new StatsManager(()=>this.pc.getStats(),stats=>this.preProcessStats(stats));var mainSceneId=generateSceneId();var slidesSceneId=generateSceneId();var videoMainEncodingOptions=this.getVideoEncodingOptions(exports.MediaContent.Main);var videoSlidesEncodingOptions=this.getVideoEncodingOptions(exports.MediaContent.Slides);this.createSendTransceiver(exports.MediaType.VideoMain,mainSceneId,videoMainEncodingOptions);this.createSendTransceiver(exports.MediaType.AudioMain,mainSceneId);this.createSendTransceiver(exports.MediaType.VideoSlides,slidesSceneId,videoSlidesEncodingOptions);this.createSendTransceiver(exports.MediaType.AudioSlides,slidesSceneId);}initializePeerConnection(){var _a;(_a=this.pc)===null||_a===void 0?void 0:_a.close();this.pc=new PeerConnection({iceServers:this.options.iceServers,bundlePolicy:this.options.bundlePolicy});this.propagatePeerConnectionEvents();this.attachMetricsObserver();this.createDataChannel();}propagatePeerConnectionEvents(){this.pc.on(PeerConnection.Events.PeerConnectionStateChange,state=>{this.emit(MultistreamConnectionEventNames.PeerConnectionStateUpdate,state);});this.pc.on(PeerConnection.Events.IceConnectionStateChange,state=>{this.emit(MultistreamConnectionEventNames.IceConnectionStateUpdate,state);});this.pc.on(PeerConnection.Events.CreateOfferOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.CreateOfferOnSuccess,description);});this.pc.on(PeerConnection.Events.CreateAnswerOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.CreateAnswerOnSuccess,description);});this.pc.on(PeerConnection.Events.SetLocalDescriptionOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.SetLocalDescriptionOnSuccess,description);});this.pc.on(PeerConnection.Events.SetRemoteDescriptionOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.SetRemoteDescriptionOnSuccess,description);});this.pc.on(PeerConnection.Events.IceGatheringStateChange,()=>{this.emit(MultistreamConnectionEventNames.IceGatheringStateUpdate,this.getIceGatheringState());});this.pc.on(PeerConnection.Events.IceCandidateError,error=>{this.emit(MultistreamConnectionEventNames.IceCandidateError,error);});}getConnectionState(){return this.pc.getConnectionState();}getPeerConnectionState(){return this.pc.getPeerConnectionState();}getIceConnectionState(){return this.pc.getIceConnectionState();}getCurrentConnectionType(){return this.pc.getCurrentConnectionType();}getIceGatheringState(){return this.pc.iceGatheringState;}getVideoEncodingOptions(content){var enabledSimulcast=content===exports.MediaContent.Main?!this.options.disableSimulcast:!this.options.disableContentSimulcast;return enabledSimulcast?[{scaleResolutionDownBy:4,active:false},{scaleResolutionDownBy:2,active:false},{active:false}]:[{active:false}];}createSendTransceiver(mediaType,sceneId,sendEncodingsOptions){var rtcTransceiver;try{rtcTransceiver=this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'sendrecv',sendEncodings:sendEncodingsOptions});}catch(e){logger.error("addTransceiver failed due to : ".concat(e));throw e;}var mid=this.midPredictor.getNextMid(mediaType);var csi=generateCsi(getMediaFamily(mediaType),sceneId);var munger=new EgressSdpMunger({doFullIce:this.options.doFullIce});var transceiver=new SendOnlyTransceiver(rtcTransceiver,mid,csi,munger,mediaType);if(getMediaFamily(mediaType)===exports.MediaFamily.Video){transceiver.rtxEnabled=true;transceiver.setCodecParameters({'max-mbps':"".concat(defaultMaxVideoEncodeMbps),'max-fs':"".concat(defaultMaxVideoEncodeFrameSize)});}transceiver.twccDisabled=getMediaFamily(mediaType)===exports.MediaFamily.Audio?this.options.disableAudioTwcc:false;transceiver.active=false;transceiver.streamMuteStateChange.on(()=>{this.sendSourceAdvertisement(mediaType);this.sendMediaRequestStatus(mediaType);});transceiver.streamPublishStateChange.on(()=>{this.sendSourceAdvertisement(mediaType);this.sendMediaRequestStatus(mediaType);});transceiver.negotiationNeeded.on(offerAnswerType=>{if(offerAnswerType===OfferAnswerType.Remote){this.emit(MultistreamConnectionEventNames.NegotiationNeeded);}else if(this.pc.getRemoteDescription()){this.queueLocalOfferAnswer();}});transceiver.namedMediaGroupsChange.on(()=>{this.sendSourceAdvertisement(mediaType);});this.sendTransceivers.set(mediaType,transceiver);this.createJmpSession(mediaType);}createSendSlot(mediaType){var active=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;var transceiver=this.getSendTransceiverOrThrow(mediaType);transceiver.active=active;return new SendSlot(transceiver);}createJmpSession(mediaType){var jmpSession=new JmpSession(getMediaFamily(mediaType),getMediaContent(mediaType));jmpSession.setTxCallback(msg=>{var _a;if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)!=='open'){logger.error("DataChannel not created or not connected. Unable to send JMP message.");return;}try{logger.info("Sending JMP message (size: ".concat(msg.length,"): ").concat(msg));this.dataChannel.send(msg);}catch(err){var{bufferedAmount,readyState}=this.dataChannel;var{sctp}=this.pc.getUnderlyingRTCPeerConnection();var{maxMessageSize,state}=sctp||{};logErrorAndThrow(exports.WcmeErrorType.DATA_CHANNEL_SEND_FAILED,"Sending JMP message failed with error: ".concat(err,",\nMessage size: ").concat(msg.length,",\nData Channel State: ").concat(readyState,",\nData Channel Buffered amount: ").concat(bufferedAmount,",\nSCTP State: ").concat(state,",\nSCTP Max Message Size: ").concat(maxMessageSize));}});var prevNumTotalSources=0;var prevNumLiveSources=0;jmpSession.on(JmpSessionEvents.SourceAdvertisementReceived,data=>{logger.log("SourceAdvertisement received: ".concat(JSON.stringify(data)));if(data.numTotalSources!==prevNumTotalSources||data.numLiveSources!==prevNumLiveSources){prevNumTotalSources=data.numTotalSources;prevNumLiveSources=data.numLiveSources;var eventName=getMediaFamily(mediaType)===exports.MediaFamily.Video?MultistreamConnectionEventNames.VideoSourceCountUpdate:MultistreamConnectionEventNames.AudioSourceCountUpdate;this.emit(eventName,data.numTotalSources,data.numLiveSources,getMediaContent(mediaType));}else {logger.log('Number of sources was unchanged, ignoring message');}});jmpSession.on(JmpSessionEvents.MediaRequestStatusReceived,data=>{logger.log("MediaRequestStatus received: ".concat(JSON.stringify(data)));data.streamStates.forEach(s=>{var receiveSlot=this.getReceiveSlotById(s.id);if(!receiveSlot){logger.warn("Got MediaRequestStatus for unknown receive slot: ".concat(JSON.stringify(s.id)));return;}receiveSlot._updateSource(s.state,s.csi);});});jmpSession.on(JmpSessionEvents.MediaRequestReceived,data=>{logger.log("MediaRequest received: ".concat(JSON.stringify(data)));this.updateRequestedStreams(mediaType,data.requests).then(()=>{if(getMediaFamily(mediaType)===exports.MediaFamily.Video){this.sendMediaRequestStatus(mediaType);}});});jmpSession.on(JmpSessionEvents.ActiveSpeaker,data=>{this.emit(MultistreamConnectionEventNames.ActiveSpeakerNotification,data.csis);this.recvTransceivers.forEach(transceivers=>{transceivers.forEach(t=>{var{currentRxCsi}=t.receiveSlot;if(currentRxCsi!==undefined){var isActiveSpeaker=data.csis.some(activeCsi=>(activeCsi&0xfffffffe)===(currentRxCsi&0xfffffffe));t.handleActiveSpeakerUpdate(isActiveSpeaker);}});});});this.jmpSessions.set(mediaType,jmpSession);}updateRequestedStreams(mediaType,requests){var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);var mediaFamily=getMediaFamily(mediaType);var requestedIdEncodingParamsMap=new Map();var rsRequests=requests.filter(r=>isValidReceiverSelectedInfo(r.policySpecificInfo));if(rsRequests.length!==requests.length){logger.warn('Ignoring non-receiver-selected requests');}rsRequests.forEach(_ref6=>{var{ids,policySpecificInfo,codecInfos,maxPayloadBitsPerSecond}=_ref6;var _a,_b,_c;if(ids.length>1){logErrorAndThrow(exports.WcmeErrorType.INVALID_STREAM_REQUEST,"Stream request cannot have more than one ID.");}if(ids.length===0){return;}if(sendTransceiver.csi!==policySpecificInfo.csi){logger.warn('csi in the StreamRequest does not match');return;}var id=ids[0];var codecInfo=codecInfos[0];var streamIdsMatched=sendTransceiver.senderIds.some(validId=>compareStreamIds(id,validId));if(streamIdsMatched){var encodingIndex=sendTransceiver.getEncodingIndexForStreamId(id);if(encodingIndex!==-1){var encodingParams={maxPayloadBitsPerSecond};if(mediaFamily===exports.MediaFamily.Video){encodingParams.maxFs=(_a=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_a===void 0?void 0:_a.maxFs;encodingParams.maxWidth=(_b=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_b===void 0?void 0:_b.maxWidth;encodingParams.maxHeight=(_c=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_c===void 0?void 0:_c.maxHeight;}requestedIdEncodingParamsMap.set(encodingIndex,encodingParams);}else {logger.warn("".concat(mediaType,": Unable to get encoding index for stream ID: ").concat(JSON.stringify(id)));}}else {logger.warn("".concat(mediaType,": Unable to find matching stream ID for requested ID: ").concat(JSON.stringify(id)));}});return sendTransceiver.updateSendParameters(requestedIdEncodingParamsMap);}createDataChannel(){var dataChannel=this.pc.createDataChannel('datachannel',{ordered:false,maxRetransmits:0});dataChannel.onopen=event=>{logger.info('DataChannel opened:',JSON.stringify(event));[...this.sendTransceivers.keys()].forEach(mediaType=>{this.sendSourceAdvertisement(mediaType);});logger.info("Flushing pending JMP task queue");this.pendingJmpTasks.forEach(t=>t());this.pendingJmpTasks=[];};dataChannel.onmessage=e=>{var parsed;try{parsed=JSON.parse(e.data);}catch(err){logger.error("Error parsing datachannel JSON: ".concat(err));return;}logger.debug('DataChannel got msg:',e.data);var homerMsg=HomerMsg.fromJson(parsed);if(!homerMsg){logger.error("Received invalid datachannel message: ".concat(e));return;}var jmpMsg=homerMsg.payload;if(!isValidJmpMsg(jmpMsg)){logger.error("Received invalid JMP msg: ".concat(JSON.stringify(jmpMsg)));return;}var mediaType=getMediaType(jmpMsg.mediaFamily,jmpMsg.mediaContent);var jmpSession=this.jmpSessions.get(mediaType);if(!jmpSession){logger.error("Unable to find JMP session for media type ".concat(mediaType,"."));return;}jmpSession.receive(jmpMsg);};dataChannel.onclose=event=>{logger.info('DataChannel closed:',JSON.stringify(event));};dataChannel.onerror=event=>{logger.info('DataChannel error:',JSON.stringify(event));};this.dataChannel=dataChannel;}close(){this.sendTransceivers.forEach(t=>t.close());this.recvTransceivers.forEach(recvTransceivers=>{recvTransceivers.forEach(t=>t.close());});this.jmpSessions.forEach(jmpSession=>jmpSession.close());this.pc.close();}sendMediaRequestStatus(mediaType){var _a;if(getMediaFamily(mediaType)!==exports.MediaFamily.Video){return;}if(!this.getSendTransceiverOrThrow(mediaType).requested){return;}var streamStates=this.getVideoStreamStates(mediaType);var task=()=>{var _a;(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendMediaRequestStatus(streamStates);};if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}sendSourceAdvertisement(mediaType){var _a,_b;var transceiver=this.getSendTransceiverOrThrow(mediaType);var numLiveSources=((_a=transceiver.publishedStream)===null||_a===void 0?void 0:_a.muted)===false?1:0;var task;if(getMediaFamily(mediaType)===exports.MediaFamily.Video){var sources=this.getVideoStreamStates(mediaType);if(sources===null){return;}var contentHint;if(transceiver.publishedStream&&mediaType===exports.MediaType.VideoSlides){contentHint=transceiver.publishedStream.contentHint;}task=()=>{var _a;(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendSourceAdvertisement(1,numLiveSources,[],webRtcVideoContentHintToJmpVideoContentHint(contentHint));};}else {task=()=>{var _a;return (_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendSourceAdvertisement(1,numLiveSources,mediaType===exports.MediaType.AudioMain?transceiver.namedMediaGroups:[]);};}if(((_b=this.dataChannel)===null||_b===void 0?void 0:_b.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}getVideoStreamStates(mediaType){var _a;var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);var published=!!sendTransceiver.publishedStream;var muted=(_a=sendTransceiver.publishedStream)===null||_a===void 0?void 0:_a.muted;return sendTransceiver.senderIds.map(id=>{var state;if(!published){state='no source';}else if(muted){state='avatar';}else {state='live';}return {id,state,csi:sendTransceiver.csi};});}createReceiveTransceiver(mediaType){var rtcRtpTransceiver=this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'recvonly'});var transceiverMid=this.midPredictor.getNextMid(mediaType);var munger=new IngressSdpMunger();var recvOnlyTransceiver=new ReceiveOnlyTransceiver(rtcRtpTransceiver,transceiverMid,munger);recvOnlyTransceiver.metadata.mediaType=mediaType;recvOnlyTransceiver.twccDisabled=getMediaFamily(mediaType)===exports.MediaFamily.Audio?this.options.disableAudioTwcc:false;this.recvTransceivers.set(mediaType,[...(this.recvTransceivers.get(mediaType)||[]),recvOnlyTransceiver]);return recvOnlyTransceiver;}createReceiveSlot(mediaType){return __awaiter$1(this,void 0,void 0,function*(){return (yield this.createReceiveSlots(mediaType,1))[0];});}createReceiveSlots(mediaType){var count=arguments.length>1&&arguments[1]!==undefined?arguments[1]:1;return __awaiter$1(this,void 0,void 0,function*(){return new Promise(createReceiveSlotsResolve=>{this.offerAnswerQueue.push(()=>__awaiter$1(this,void 0,void 0,function*(){var createdReceiveOnlyTransceivers=[];for(var i=0;i<count;i++){var recvOnlyTransceiver=this.createReceiveTransceiver(mediaType);createdReceiveOnlyTransceivers.push(recvOnlyTransceiver);}if(this.pc.getRemoteDescription()){yield this.doLocalOfferAnswer();}var receiveSlots=createdReceiveOnlyTransceivers.map(transceiver=>transceiver.receiveSlot);createReceiveSlotsResolve(receiveSlots);}));});});}getIngressPayloadType(mediaType,mimeType){var _a,_b,_c;var requestedMediaCodecType=mimeType.split('/')[1];var requestedMid=(_a=this.sendTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.mid;var parsedOffer=parse$1((_b=this.pc.getLocalDescription())===null||_b===void 0?void 0:_b.sdp);var parsedAnswer=parse$1((_c=this.pc.getRemoteDescription())===null||_c===void 0?void 0:_c.sdp);var senderCodecs=parsedAnswer.avMedia.filter(media=>requestedMid===media.mid).map(media=>[...media.codecs.values()]).flat().filter(ci=>ci.name===requestedMediaCodecType);var receiverCodecs=parsedOffer.avMedia.filter(media=>requestedMid===media.mid).map(media=>[...media.codecs.values()]).flat().filter(ci=>ci.name===requestedMediaCodecType);if(!senderCodecs||!receiverCodecs||senderCodecs.length===0||receiverCodecs.length===0){logErrorAndThrow(exports.WcmeErrorType.GET_PAYLOAD_TYPE_FAILED,"Sender codecs or receiver codecs is undefined or empty.");}var senderCodec=senderCodecs[0];var targetCodec=receiverCodecs.find(receiverCodec=>{return areCodecsCompatible(senderCodec,receiverCodec);});if(!targetCodec||!targetCodec.pt){logErrorAndThrow(exports.WcmeErrorType.GET_PAYLOAD_TYPE_FAILED,"Cannot find matching receiver codec for the given mediaType/mimeType.");}return targetCodec.pt;}waitForIceGatheringComplete(){return __awaiter$1(this,void 0,void 0,function*(){return new Promise(resolve=>{if(this.pc.iceGatheringState==='complete'){resolve();}else {this.pc.on(PeerConnection.Events.IceGatheringStateChange,()=>{if(this.pc.iceGatheringState==='complete'){resolve();}});}});});}createOffer(){return __awaiter$1(this,void 0,void 0,function*(){if(!this.pc.getLocalDescription()){this.midPredictor.allocateMidForDatachannel();}if(this.setAnswerResolve){logger.info('Canceling previous offer since setAnswer was never called for it');this.setAnswerResolve();this.setAnswerResolve=undefined;}var createOfferId=++this.currentCreateOfferId;return new Promise((createOfferResolve,createOfferReject)=>{this.offerAnswerQueue.push(()=>__awaiter$1(this,void 0,void 0,function*(){var _a;try{var offer=yield this.pc.createOffer();if(!offer.sdp){logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED,'SDP not found in offer.');}offer.sdp=this.preProcessLocalOffer(offer.sdp);yield this.pc.setLocalDescription(offer).then(()=>__awaiter$1(this,void 0,void 0,function*(){logger.info('this.pc.setLocalDescription() resolved');})).catch(error=>{var _a;logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED,"Error: ".concat(error,". SDP: ").concat(maskIp((_a=offer.sdp)!==null&&_a!==void 0?_a:'')));});if(this.options.doFullIce){yield this.waitForIceGatheringComplete();}var sdpToSend=this.prepareLocalOfferForRemoteServer((_a=this.pc.getLocalDescription())===null||_a===void 0?void 0:_a.sdp);createOfferResolve({type:'offer',sdp:sdpToSend});if(this.currentCreateOfferId>createOfferId){logger.log('Canceling previous offer since createOffer was called while it was being created');}else {yield new Promise(setAnswerResolve=>{this.setAnswerResolve=setAnswerResolve;});}}catch(error){createOfferReject(error);}}));});});}setAnswer(answer){return __awaiter$1(this,void 0,void 0,function*(){var sdp=this.preProcessRemoteAnswer(answer);if(!this.setAnswerResolve){logErrorAndThrow(exports.WcmeErrorType.SET_ANSWER_FAILED,"Call to setAnswer without having previously called createOffer.");}logger.info('calling this.pc.setRemoteDescription()');return this.pc.setRemoteDescription({type:'answer',sdp}).then(()=>__awaiter$1(this,void 0,void 0,function*(){logger.info('this.pc.setRemoteDescription() resolved');if(this.setAnswerResolve){this.setAnswerResolve();this.setAnswerResolve=undefined;}else {logger.debug("setAnswerResolve function was cleared between setAnswer and result of setRemoteDescription");}})).catch(error=>{logErrorAndThrow(exports.WcmeErrorType.SET_ANSWER_FAILED,"Error: ".concat(error,". SDP: ").concat(maskIp(answer)));});});}doLocalOfferAnswer(){var _a;return __awaiter$1(this,void 0,void 0,function*(){var offer=yield this.pc.createOffer();if(!offer.sdp){logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED,'SDP not found in offer.');}offer.sdp=this.preProcessLocalOffer(offer.sdp);yield this.pc.setLocalDescription(offer).then(()=>__awaiter$1(this,void 0,void 0,function*(){logger.info('this.pc.setLocalDescription() resolved');})).catch(error=>{var _a;logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED,"Error: ".concat(error,". SDP: ").concat(maskIp((_a=offer.sdp)!==null&&_a!==void 0?_a:'')));});var answer=this.preProcessRemoteAnswer((_a=this.pc.getRemoteDescription())===null||_a===void 0?void 0:_a.sdp);return this.pc.setRemoteDescription({type:'answer',sdp:answer}).then(()=>__awaiter$1(this,void 0,void 0,function*(){logger.info('this.pc.setRemoteDescription() resolved');})).catch(error=>{logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED,"Error: ".concat(error,". SDP: ").concat(maskIp(answer)));});});}queueLocalOfferAnswer(){return __awaiter$1(this,void 0,void 0,function*(){return this.offerAnswerQueue.push(()=>__awaiter$1(this,void 0,void 0,function*(){yield this.doLocalOfferAnswer();}));});}preProcessLocalOffer(offer){var parsedOffer=parse$1(offer);parsedOffer.avMedia.filter(av=>av.direction==='recvonly').forEach(av=>{var recvTransceiver=this.getRecvTransceiverByMidOrThrow(av.mid);recvTransceiver.mungeLocalDescription(av);});parsedOffer.avMedia.filter(av=>av.direction==='sendrecv'||av.direction==='inactive').forEach(av=>{var sendTransceiver=this.getSendTransceiverByMidOrThrow(av.mid);sendTransceiver.mungeLocalDescription(av);});if(BrowserInfo.isFirefox()){setupBundle(parsedOffer,this.options.bundlePolicy,this.midPredictor.getMidMap());}return parsedOffer.toString();}prepareLocalOfferForRemoteServer(offer){var parsedOffer=parse$1(offer);parsedOffer.avMedia.filter(av=>av.direction==='sendrecv'||av.direction==='inactive').forEach(av=>{var sendTransceiver=this.getSendTransceiverByMidOrThrow(av.mid);sendTransceiver.mungeLocalDescriptionForRemoteServer(av);});if(!this.options.doFullIce){parsedOffer.media.filter(media=>media instanceof ApplicationMediaDescription$1).forEach(media=>{injectDummyCandidates(media);});}if(BrowserInfo.isFirefox()&&this.options.doFullIce){var{candidates}=parsedOffer.media[0].iceInfo;parsedOffer.media.forEach(media=>{media.iceInfo.candidates=candidates;});}if(BrowserInfo.isFirefox()){setupBundle(parsedOffer,this.options.bundlePolicy,this.midPredictor.getMidMap());if(this.options.bundlePolicy==='max-bundle'){parsedOffer.media.forEach((media,index)=>{if(index>0){media.port=parsedOffer.media[0].port;}});}}filterRecvOnlyMediaDescriptions(parsedOffer);return parsedOffer.toString();}preProcessRemoteAnswer(answer){var _a;var parsedAnswer=parse$1(answer);var parsedOffer=parse$1((_a=this.pc.getLocalDescription())===null||_a===void 0?void 0:_a.sdp);matchMediaDescriptionsInAnswer(parsedOffer,parsedAnswer);parsedAnswer.avMedia.filter(av=>av.direction==='sendonly').forEach(av=>{var recvTransceiver=this.getRecvTransceiverByMidOrThrow(av.mid);recvTransceiver.mungeRemoteDescription(av);});parsedAnswer.avMedia.filter(av=>av.direction==='sendrecv'||av.direction==='recvonly').forEach(av=>{var sendTransceiver=this.getSendTransceiverByMidOrThrow(av.mid);sendTransceiver.mungeRemoteDescription(av);});parsedAnswer.media.filter(media=>media instanceof ApplicationMediaDescription$1).forEach(media=>{if(retainCandidatesByTransportType(media,['udp','tcp'])){logger.log("Some unsupported remote candidates have been removed from mid ".concat(media.mid));}});if(BrowserInfo.isFirefox()){setupBundle(parsedAnswer,this.options.bundlePolicy,this.midPredictor.getMidMap());}return parsedAnswer.toString();}getSendTransceiverOrThrow(mediaType){var sendTransceiver=this.sendTransceivers.get(mediaType);if(!sendTransceiver){logErrorAndThrow(exports.WcmeErrorType.GET_TRANSCEIVER_FAILED,"Unable to find send transceiver for media type ".concat(mediaType,"."));}return sendTransceiver;}getSendTransceiverByMidOrThrow(mid){var transceiver=[...this.sendTransceivers.values()].find(t=>t.mid===mid);if(!transceiver){logErrorAndThrow(exports.WcmeErrorType.GET_TRANSCEIVER_FAILED,"Unable to find send transceiver with MID ".concat(mid,"."));}return transceiver;}getRecvTransceiverByMidOrThrow(mid){var transceiver=[...this.recvTransceivers.values()].flat().find(t=>t.mid===mid);if(!transceiver){logErrorAndThrow(exports.WcmeErrorType.GET_TRANSCEIVER_FAILED,"Unable to find recv transceiver with MID ".concat(mid,"."));}return transceiver;}requestMedia(mediaType,streamRequests){var _a;var task=()=>{var _a;var jmpSession=this.jmpSessions.get(mediaType);if(!jmpSession){logger.error("Unable to find jmp session for ".concat(mediaType));return;}var requestedReceiveSlotIds=[];streamRequests.forEach(request=>{if(request.receiveSlots.length===0){logger.error('Stream request ids cannot be empty.');return;}request.receiveSlots.forEach(slot=>{if(!slot.id){logger.error('Running stream request task, but ReceiveSlot ID is missing.');}if(!requestedReceiveSlotIds.some(id=>compareStreamIds(id,slot.id))){requestedReceiveSlotIds.push(slot.id);}else {logger.error("Stream id duplicate found ".concat(JSON.stringify(slot.id),"."));}});});jmpSession.sendRequests(streamRequests.map(sr=>sr._toJmpStreamRequest()));(_a=this.recvTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.forEach(transceiver=>{if(requestedReceiveSlotIds.some(id=>compareStreamIds(id,transceiver.receiveSlot.id))){var relevantRequest=streamRequests.find(request=>request.receiveSlots.some(slot=>compareStreamIds(slot.id,transceiver.receiveSlot.id)));transceiver.handleRequested(relevantRequest);}else {transceiver.handleUnrequested();}});};if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}renewPeerConnection(userOptions){if(userOptions){this.options=Object.assign(Object.assign({},this.options),userOptions);}logger.info("Renewing multistream connection with options ".concat(JSON.stringify(this.options)));this.midPredictor.reset();this.initializePeerConnection();var mainSceneId=generateSceneId();var slidesSceneId=generateSceneId();this.sendTransceivers.forEach((transceiver,mediaType)=>{var _a;var mediaContent=getMediaContent(mediaType);var sceneId=mediaContent===exports.MediaContent.Main?mainSceneId:slidesSceneId;var mid=this.midPredictor.getNextMid(mediaType);transceiver.replaceTransceiver(this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'sendrecv',sendEncodings:getMediaFamily(mediaType)===exports.MediaFamily.Video?this.getVideoEncodingOptions(mediaContent):undefined}));transceiver.mid=mid;transceiver.csi=generateCsi(getMediaFamily(mediaType),sceneId);transceiver.resetSdpMunger();(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.close();this.createJmpSession(mediaType);});this.recvTransceivers.forEach((transceivers,mediaType)=>{transceivers.forEach(t=>{var mid=this.midPredictor.getNextMid(mediaType);t.replaceTransceiver(this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'recvonly'}));t.mid=mid;});});}getReceiveSlotById(id){return [...this.recvTransceivers.values()].flat().map(transceiver=>transceiver.receiveSlot).find(receiveSlot=>{var receiveSlotId=receiveSlot.id||{};return Object.keys(receiveSlotId).length===Object.keys(id).length&&Object.keys(receiveSlotId).every(key=>Object.prototype.hasOwnProperty.call(id,key)&&receiveSlotId[key]===id[key]);});}getStats(){return this.statsManager.getStats();}getTransceiverStats(){return __awaiter$1(this,void 0,void 0,function*(){return organizeTransceiverStats(this.sendTransceivers,this.recvTransceivers);});}preProcessStats(stats){return __awaiter$1(this,void 0,void 0,function*(){yield Promise.all([...this.sendTransceivers.values()].map(transceiver=>__awaiter$1(this,void 0,void 0,function*(){(yield transceiver.getStats()).forEach(senderStats=>{if(senderStats.type==='outbound-rtp'||senderStats.type==='media-source'){stats.set(senderStats.id,senderStats);}});})));yield Promise.all([...this.recvTransceivers.values()].map(transceivers=>__awaiter$1(this,void 0,void 0,function*(){yield Promise.all(transceivers.map(transceiver=>__awaiter$1(this,void 0,void 0,function*(){(yield transceiver.getStats()).forEach(receiverStats=>{if(receiverStats.type==='inbound-rtp'){stats.set(receiverStats.id,receiverStats);}});})));})));});}attachMetricsObserver(){this.forceStatsReport=rtcStats_1(this.pc.getUnderlyingRTCPeerConnection(),data=>this.metricsCallback(data),5000,stats=>this.preProcessStats(stats)).forceStatsReport;}forceRtcMetricsCallback(){var _a;return (_a=this.forceStatsReport)===null||_a===void 0?void 0:_a.call(this);}setMetricsCallback(callback){this.metricsCallback=callback;}setOveruseUpdateCallback(callback){this.overuseUpdateCallback=callback;}getCsiByMediaType(mediaType){var _a;return (_a=this.sendTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.csi;}getAllCsis(){return {audioMain:this.getCsiByMediaType(exports.MediaType.AudioMain),audioSlides:this.getCsiByMediaType(exports.MediaType.AudioSlides),videoMain:this.getCsiByMediaType(exports.MediaType.VideoMain),videoSlides:this.getCsiByMediaType(exports.MediaType.VideoSlides)};}}class StreamRequest{constructor(policy,policySpecificInfo,receiveSlots,maxPayloadBitsPerSecond){var codecInfos=arguments.length>4&&arguments[4]!==undefined?arguments[4]:[];this.policy=policy;this.policySpecificInfo=policySpecificInfo;this.receiveSlots=receiveSlots;this.maxPayloadBitsPerSecond=maxPayloadBitsPerSecond;this.codecInfos=codecInfos;}_toJmpStreamRequest(){return new StreamRequest$1(this.policy,this.policySpecificInfo,this.receiveSlots.map(rs=>rs.id),this.maxPayloadBitsPerSecond,this.codecInfos);}}
|
|
4915
|
+
*/function waterfall(tasks,callback){callback=once(callback);if(!Array.isArray(tasks))return callback(new Error('First argument to waterfall must be an array of functions'));if(!tasks.length)return callback();var taskIndex=0;function nextTask(args){var task=wrapAsync(tasks[taskIndex++]);task(...args,onlyOnce(next));}function next(err){if(err===false)return;for(var _len22=arguments.length,args=new Array(_len22>1?_len22-1:0),_key22=1;_key22<_len22;_key22++){args[_key22-1]=arguments[_key22];}if(err||taskIndex===tasks.length){return callback(err,...args);}nextTask(args);}nextTask([]);}awaitify(waterfall);function processTasks(task,finishedCallback){return __awaiter$1(this,void 0,void 0,function*(){try{yield task();finishedCallback();}catch(e){finishedCallback(e);}});}class AsyncQueue{constructor(){this.queue=queue$1(processTasks,1);}push(task){return this.queue.pushAsync(task);}empty(){return this.queue.empty();}}var NOISE_REDUCTION_KIND='noise-reduction-effect';var VIRTUAL_BACKGROUND_KIND='virtual-background-effect';var isNoiseReductionEffect=effect=>{return (effect===null||effect===void 0?void 0:effect.kind)===NOISE_REDUCTION_KIND;};var isVirtualBackgroundEffect=effect=>{return (effect===null||effect===void 0?void 0:effect.kind)===VIRTUAL_BACKGROUND_KIND;};var OfferAnswerType;(function(OfferAnswerType){OfferAnswerType[OfferAnswerType["LocalOnly"]=0]="LocalOnly";OfferAnswerType[OfferAnswerType["Remote"]=1]="Remote";})(OfferAnswerType||(OfferAnswerType={}));class SendOnlyTransceiver extends Transceiver{constructor(rtcRtpTransceiver,mid,csi,munger,mediaType){super(rtcRtpTransceiver,mid);this.rtxEnabled=false;this.streamMuteStateChange=new TypedEvent();this.streamPublishStateChange=new TypedEvent();this.negotiationNeeded=new TypedEvent();this.namedMediaGroupsChange=new TypedEvent();this.requestedIdEncodingParamsMap=new Map();this.updateSendParametersQueue=new AsyncQueue();this.metadata={lastRequestedUpdateTimestampsMap:new Map()};this.csi=csi;this.direction='sendrecv';this.handleTrackChange=this.handleTrackChange.bind(this);this.handleStreamConstraintsChange=this.handleStreamConstraintsChange.bind(this);this.handleStreamMuteStateChange=this.handleStreamMuteStateChange.bind(this);this.munger=munger;this.mediaType=mediaType;}replaceSenderSource(stream){var _a,_b;return __awaiter$1(this,void 0,void 0,function*(){var trackOrNull=(_a=stream===null||stream===void 0?void 0:stream.outputStream.getTracks()[0])!==null&&_a!==void 0?_a:null;if(((_b=this.sender.track)===null||_b===void 0?void 0:_b.id)!==(trackOrNull===null||trackOrNull===void 0?void 0:trackOrNull.id)){yield this.sender.replaceTrack(trackOrNull);if(trackOrNull){logger.log("Sender source for ".concat(this.mediaType," replaced with track ID ").concat(trackOrNull.id));}else {logger.log("Sender source for ".concat(this.mediaType," set to null, sender stopped"));}}});}handleTrackChange(){return __awaiter$1(this,void 0,void 0,function*(){if(this.requested){yield this.replaceSenderSource(this.publishedStream);}});}handleStreamConstraintsChange(){return __awaiter$1(this,void 0,void 0,function*(){yield this.updateSendParameters(this.requestedIdEncodingParamsMap);});}handleStreamMuteStateChange(){this.streamMuteStateChange.emit();}get requested(){return this.requestedIdEncodingParamsMap.size>0;}replaceTransceiver(newRtcRtpTransceiver){var _super=Object.create(null,{replaceTransceiver:{get:()=>super.replaceTransceiver}});return __awaiter$1(this,void 0,void 0,function*(){_super.replaceTransceiver.call(this,newRtcRtpTransceiver);newRtcRtpTransceiver.direction=this.direction;if(this.requested){yield this.replaceSenderSource(this.publishedStream);}});}replacePublishedStream(newStream){return __awaiter$1(this,void 0,void 0,function*(){var oldStream=this.publishedStream;oldStream===null||oldStream===void 0?void 0:oldStream.off(exports.LocalStreamEventNames.OutputTrackChange,this.handleTrackChange);oldStream===null||oldStream===void 0?void 0:oldStream.off(exports.LocalStreamEventNames.ConstraintsChange,this.handleStreamConstraintsChange);oldStream===null||oldStream===void 0?void 0:oldStream.off(exports.LocalStreamEventNames.UserMuteStateChange,this.handleStreamMuteStateChange);oldStream===null||oldStream===void 0?void 0:oldStream.off(exports.LocalStreamEventNames.SystemMuteStateChange,this.handleStreamMuteStateChange);if(this.requested){yield this.replaceSenderSource(newStream);}this.publishedStream=newStream;newStream===null||newStream===void 0?void 0:newStream.on(exports.LocalStreamEventNames.OutputTrackChange,this.handleTrackChange);newStream===null||newStream===void 0?void 0:newStream.on(exports.LocalStreamEventNames.ConstraintsChange,this.handleStreamConstraintsChange);newStream===null||newStream===void 0?void 0:newStream.on(exports.LocalStreamEventNames.UserMuteStateChange,this.handleStreamMuteStateChange);newStream===null||newStream===void 0?void 0:newStream.on(exports.LocalStreamEventNames.SystemMuteStateChange,this.handleStreamMuteStateChange);if(!oldStream&&newStream&&!newStream.muted||oldStream&&!newStream&&!oldStream.muted){this.streamPublishStateChange.emit();}else if((oldStream===null||oldStream===void 0?void 0:oldStream.muted)!==(newStream===null||newStream===void 0?void 0:newStream.muted)){this.streamMuteStateChange.emit();}});}setNamedMediaGroups(namedMediaGroups){if(this.mediaType!==exports.MediaType.AudioMain){logErrorAndThrow(exports.WcmeErrorType.SET_NMG_FAILED,"Named media groups can only be set for audio.");}this.namedMediaGroups=namedMediaGroups;this.namedMediaGroupsChange.emit();}publishStream(stream){return this.replacePublishedStream(stream);}unpublishStream(){return this.replacePublishedStream();}get active(){return this._rtcRtpTransceiver.direction==='sendrecv';}set active(enabled){this.direction=enabled?'sendrecv':'inactive';this._rtcRtpTransceiver.direction=this.direction;if(this._rtcRtpTransceiver.direction!==this._rtcRtpTransceiver.currentDirection){this.negotiationNeeded.emit(OfferAnswerType.Remote);}}getStats(){return __awaiter$1(this,void 0,void 0,function*(){var statsMap=new Map();var statsReport=yield this.sender.getStats();statsReport.forEach((stats,key)=>{var _a,_b,_c,_d;if(stats.type==='outbound-rtp'){stats.mid=this.mid;stats.csi=this.csi;stats.calliopeMediaType=this.mediaType;var senderId=this.munger.getSenderIds().find(id=>id.ssrc===stats.ssrc);if(senderId){var encodingIndex=this.getEncodingIndexForStreamId(senderId);var encodingParams=this.requestedIdEncodingParamsMap.get(encodingIndex);stats.requestedBitrate=encodingParams===null||encodingParams===void 0?void 0:encodingParams.maxPayloadBitsPerSecond;stats.requestedFrameSize=encodingParams===null||encodingParams===void 0?void 0:encodingParams.maxFs;stats.isRequested=!!encodingParams;stats.lastRequestedUpdateTimestamp=this.metadata.lastRequestedUpdateTimestampsMap.get(encodingIndex);}var effect=(_b=(_a=this.publishedStream)===null||_a===void 0?void 0:_a.getEffects())===null||_b===void 0?void 0:_b[0];if(effect===null||effect===void 0?void 0:effect.isEnabled){if(isNoiseReductionEffect(effect)){stats.effect={kind:effect.kind,noiseReductionMode:'LOW_POWER'};}else if(isVirtualBackgroundEffect(effect)){stats.effect={kind:effect.kind,virtualBackgroundMode:(_c=effect.options)===null||_c===void 0?void 0:_c.mode};}else {stats.effect={kind:effect.kind};}}var trackSettings=(_d=this.publishedStream)===null||_d===void 0?void 0:_d.getSettings();if(trackSettings===null||trackSettings===void 0?void 0:trackSettings.frameRate){stats.targetFrameRate=trackSettings===null||trackSettings===void 0?void 0:trackSettings.frameRate;}}else if(stats.type==='media-source'){stats.calliopeMediaType=this.mediaType;}statsMap.set(key,stats);});return statsMap;});}updateSendParameters(requestedIdEncodingParamsMap){return __awaiter$1(this,void 0,void 0,function*(){return this.updateSendParametersQueue.push(()=>__awaiter$1(this,void 0,void 0,function*(){var sendParameters=this.sender.getParameters();sendParameters.encodings.forEach((encoding,index)=>{var _a,_b;var encodingParams=requestedIdEncodingParamsMap.get(index);encoding.active=!!encodingParams;if(encodingParams){var{maxPayloadBitsPerSecond,maxFs,maxWidth,maxHeight}=encodingParams;var scaleDownRatio=getScaleDownRatio((_a=this.publishedStream)===null||_a===void 0?void 0:_a.getSettings().width,(_b=this.publishedStream)===null||_b===void 0?void 0:_b.getSettings().height,maxFs,maxWidth,maxHeight);if(maxPayloadBitsPerSecond!==undefined&&maxPayloadBitsPerSecond>=0){encoding.maxBitrate=maxPayloadBitsPerSecond;}if(scaleDownRatio!==undefined&&scaleDownRatio>=1.0){encoding.scaleResolutionDownBy=scaleDownRatio;}}});yield this.sender.setParameters(sendParameters);logger.log("Sender parameters for ".concat(this.mediaType," set to ").concat(JSON.stringify(sendParameters)));var timestamp=getCurrentTimestamp();requestedIdEncodingParamsMap.forEach((_,index)=>{if(!this.requestedIdEncodingParamsMap.has(index)){this.metadata.lastRequestedUpdateTimestampsMap.set(index,timestamp);}});this.requestedIdEncodingParamsMap.forEach((_,index)=>{if(!requestedIdEncodingParamsMap.has(index)){this.metadata.lastRequestedUpdateTimestampsMap.set(index,timestamp);}});var oldRequested=this.requested;var newRequested=requestedIdEncodingParamsMap.size>0;this.requestedIdEncodingParamsMap=requestedIdEncodingParamsMap;if(oldRequested!==newRequested){yield this.replaceSenderSource(newRequested?this.publishedStream:null);}}));});}isSimulcastEnabled(){var params=this.sender.getParameters();return params.encodings.length>1;}mungeLocalDescription(mediaDescription){this.munger.mungeLocalDescription(mediaDescription,{simulcastEnabled:this.isSimulcastEnabled(),rtxEnabled:this.rtxEnabled,twccDisabled:this.twccDisabled,forceSoftwareEncoder:this.mediaType===exports.MediaType.VideoSlides&&(BrowserInfo.isWindows()||BrowserInfo.isMac())&&(BrowserInfo.isChrome()||BrowserInfo.isEdge())});}mungeLocalDescriptionForRemoteServer(mediaDescription){this.munger.mungeLocalDescriptionForRemoteServer(mediaDescription,getMediaContent(this.mediaType),this.csi);}mungeRemoteDescription(mediaDescription){this.munger.mungeRemoteDescription(mediaDescription);}get senderIds(){return this.munger.getSenderIds();}get numActiveSimulcastLayers(){var _a;if(getMediaFamily(this.mediaType)===exports.MediaFamily.Video){return (_a=this.publishedStream)===null||_a===void 0?void 0:_a.getNumActiveSimulcastLayers();}return this.publishedStream?0:undefined;}getEncodingIndexForStreamId(id){return this.munger.getEncodingIndexForStreamId(id);}resetSdpMunger(){this.munger.reset();}setCodecParameters(parameters){this.munger.setCodecParameters(parameters);this.negotiationNeeded.emit(OfferAnswerType.LocalOnly);}deleteCodecParameters(parameters){this.munger.deleteCodecParameters(parameters);this.negotiationNeeded.emit(OfferAnswerType.LocalOnly);}}class SendSlot{constructor(sendTransceiver){this.sendTransceiver=sendTransceiver;}publishStream(stream){return __awaiter$1(this,void 0,void 0,function*(){if(stream===this.sendTransceiver.publishedStream){return Promise.resolve();}return this.sendTransceiver.publishStream(stream);});}unpublishStream(){return __awaiter$1(this,void 0,void 0,function*(){if(!this.sendTransceiver.publishedStream){return Promise.resolve();}return this.sendTransceiver.unpublishStream();});}setNamedMediaGroups(namedMediaGroups){this.sendTransceiver.setNamedMediaGroups(namedMediaGroups);}clearNamedMediaGroups(){this.setNamedMediaGroups([]);}get active(){return this.sendTransceiver.active;}set active(active){this.sendTransceiver.active=active;}setCodecParameters(parameters){return __awaiter$1(this,void 0,void 0,function*(){this.sendTransceiver.setCodecParameters(parameters);});}deleteCodecParameters(parameters){return __awaiter$1(this,void 0,void 0,function*(){this.sendTransceiver.deleteCodecParameters(parameters);});}}var organizeTransceiverStats=(sendTransceivers,recvTransceivers)=>__awaiter$1(void 0,void 0,void 0,function*(){var result={audio:{senders:[],receivers:[]},video:{senders:[],receivers:[]},screenShareAudio:{senders:[],receivers:[]},screenShareVideo:{senders:[],receivers:[]}};yield Promise.all([...sendTransceivers.entries()].map(_ref4=>{var[mediaType,transceiver]=_ref4;return __awaiter$1(void 0,void 0,void 0,function*(){var _a;var item={report:yield transceiver.getStats(),mid:transceiver.mid,csi:transceiver.csi,currentDirection:'sendonly',localTrackLabel:(_a=transceiver.publishedStream)===null||_a===void 0?void 0:_a.label};if(mediaType===exports.MediaType.AudioMain){result.audio.senders.push(item);}if(mediaType===exports.MediaType.VideoMain){result.video.senders.push(item);}if(mediaType===exports.MediaType.AudioSlides){result.screenShareAudio.senders.push(item);}if(mediaType===exports.MediaType.VideoSlides){result.screenShareVideo.senders.push(item);}});}));yield Promise.all([...recvTransceivers.entries()].map(_ref5=>{var[mediaType,transceivers]=_ref5;return __awaiter$1(void 0,void 0,void 0,function*(){return Promise.all(transceivers.map(t=>__awaiter$1(void 0,void 0,void 0,function*(){var _b,_c;var item={report:yield t.getStats(),mid:(_b=t.receiveSlot.id)===null||_b===void 0?void 0:_b.mid,csi:t.receiveSlot.currentRxCsi,currentDirection:'recvonly',localTrackLabel:(_c=t.receiveSlot.stream.getTracks()[0])===null||_c===void 0?void 0:_c.label};if(mediaType===exports.MediaType.AudioMain){result.audio.receivers.push(item);}if(mediaType===exports.MediaType.VideoMain){result.video.receivers.push(item);}if(mediaType===exports.MediaType.AudioSlides){result.screenShareAudio.receivers.push(item);}if(mediaType===exports.MediaType.VideoSlides){result.screenShareVideo.receivers.push(item);}})));});}));return result;});function toMediaStreamTrackKind(mediaType){return [exports.MediaType.VideoMain,exports.MediaType.VideoSlides].includes(mediaType)?exports.MediaStreamTrackKind.Video:exports.MediaStreamTrackKind.Audio;}function webRtcVideoContentHintToJmpVideoContentHint(hint){if(hint==='motion'){return 'motion';}if(hint==='detail'){return 'sharpness';}return undefined;}var MultistreamConnectionEventNames;(function(MultistreamConnectionEventNames){MultistreamConnectionEventNames["VideoSourceCountUpdate"]="video-source-count-update";MultistreamConnectionEventNames["AudioSourceCountUpdate"]="audio-source-count-update";MultistreamConnectionEventNames["ActiveSpeakerNotification"]="active-speaker-notification";MultistreamConnectionEventNames["PeerConnectionStateUpdate"]="peer-connection-state-update";MultistreamConnectionEventNames["IceConnectionStateUpdate"]="ice-connection-state-update";MultistreamConnectionEventNames["IceGatheringStateUpdate"]="ice-gathering-state-update";MultistreamConnectionEventNames["NegotiationNeeded"]="negotiation-needed";MultistreamConnectionEventNames["CreateOfferOnSuccess"]="createofferonsuccess";MultistreamConnectionEventNames["CreateAnswerOnSuccess"]="createansweronsuccess";MultistreamConnectionEventNames["SetLocalDescriptionOnSuccess"]="setlocaldescriptiononsuccess";MultistreamConnectionEventNames["SetRemoteDescriptionOnSuccess"]="setremotedescriptiononsuccess";MultistreamConnectionEventNames["IceCandidate"]="icecandidate";MultistreamConnectionEventNames["IceCandidateError"]="icecandidateerror";})(MultistreamConnectionEventNames||(MultistreamConnectionEventNames={}));var defaultMultistreamConnectionOptions={disableSimulcast:BrowserInfo.isFirefox(),bundlePolicy:'max-compat',iceServers:undefined,disableContentSimulcast:true,disableAudioTwcc:true,doFullIce:BrowserInfo.isFirefox()};class MultistreamConnection extends EventEmitter$2{constructor(){var userOptions=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};super();this.sendTransceivers=new Map();this.recvTransceivers=new Map();this.jmpSessions=new Map();this.pendingJmpTasks=[];this.metricsCallback=()=>{};this.overuseUpdateCallback=()=>{};this.midPredictor=new MidPredictor();this.offerAnswerQueue=new AsyncQueue();this.currentCreateOfferId=0;this.options=Object.assign(Object.assign({},defaultMultistreamConnectionOptions),userOptions);logger.info("Creating multistream connection with options ".concat(JSON.stringify(this.options)));this.initializePeerConnection();this.overuseStateManager=new OveruseStateManager(overuseState=>this.overuseUpdateCallback(overuseState));this.overuseStateManager.start();this.statsManager=new StatsManager(()=>this.pc.getStats(),stats=>this.preProcessStats(stats));var mainSceneId=generateSceneId();var slidesSceneId=generateSceneId();var videoMainEncodingOptions=this.getVideoEncodingOptions(exports.MediaContent.Main);var videoSlidesEncodingOptions=this.getVideoEncodingOptions(exports.MediaContent.Slides);this.createSendTransceiver(exports.MediaType.VideoMain,mainSceneId,videoMainEncodingOptions);this.createSendTransceiver(exports.MediaType.AudioMain,mainSceneId);this.createSendTransceiver(exports.MediaType.VideoSlides,slidesSceneId,videoSlidesEncodingOptions);this.createSendTransceiver(exports.MediaType.AudioSlides,slidesSceneId);}initializePeerConnection(){var _a;(_a=this.pc)===null||_a===void 0?void 0:_a.close();this.pc=new PeerConnection({iceServers:this.options.iceServers,bundlePolicy:this.options.bundlePolicy});this.propagatePeerConnectionEvents();this.attachMetricsObserver();this.createDataChannel();}propagatePeerConnectionEvents(){this.pc.on(PeerConnection.Events.PeerConnectionStateChange,state=>{this.emit(MultistreamConnectionEventNames.PeerConnectionStateUpdate,state);});this.pc.on(PeerConnection.Events.IceConnectionStateChange,state=>{this.emit(MultistreamConnectionEventNames.IceConnectionStateUpdate,state);});this.pc.on(PeerConnection.Events.CreateOfferOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.CreateOfferOnSuccess,description);});this.pc.on(PeerConnection.Events.CreateAnswerOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.CreateAnswerOnSuccess,description);});this.pc.on(PeerConnection.Events.SetLocalDescriptionOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.SetLocalDescriptionOnSuccess,description);});this.pc.on(PeerConnection.Events.SetRemoteDescriptionOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.SetRemoteDescriptionOnSuccess,description);});this.pc.on(PeerConnection.Events.IceGatheringStateChange,()=>{this.emit(MultistreamConnectionEventNames.IceGatheringStateUpdate,this.getIceGatheringState());});this.pc.on(PeerConnection.Events.IceCandidate,candidate=>{this.emit(MultistreamConnectionEventNames.IceCandidate,candidate);});this.pc.on(PeerConnection.Events.IceCandidateError,error=>{this.emit(MultistreamConnectionEventNames.IceCandidateError,error);});}getConnectionState(){return this.pc.getConnectionState();}getPeerConnectionState(){return this.pc.getPeerConnectionState();}getIceConnectionState(){return this.pc.getIceConnectionState();}getCurrentConnectionType(){return this.pc.getCurrentConnectionType();}getIceGatheringState(){return this.pc.iceGatheringState;}getVideoEncodingOptions(content){var enabledSimulcast=content===exports.MediaContent.Main?!this.options.disableSimulcast:!this.options.disableContentSimulcast;return enabledSimulcast?[{scaleResolutionDownBy:4,active:false},{scaleResolutionDownBy:2,active:false},{active:false}]:[{active:false}];}createSendTransceiver(mediaType,sceneId,sendEncodingsOptions){var rtcTransceiver;try{rtcTransceiver=this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'sendrecv',sendEncodings:sendEncodingsOptions});}catch(e){logger.error("addTransceiver failed due to : ".concat(e));throw e;}var mid=this.midPredictor.getNextMid(mediaType);var csi=generateCsi(getMediaFamily(mediaType),sceneId);var munger=new EgressSdpMunger({doFullIce:this.options.doFullIce});var transceiver=new SendOnlyTransceiver(rtcTransceiver,mid,csi,munger,mediaType);if(getMediaFamily(mediaType)===exports.MediaFamily.Video){transceiver.rtxEnabled=true;transceiver.setCodecParameters({'max-mbps':"".concat(defaultMaxVideoEncodeMbps),'max-fs':"".concat(defaultMaxVideoEncodeFrameSize)});}transceiver.twccDisabled=getMediaFamily(mediaType)===exports.MediaFamily.Audio?this.options.disableAudioTwcc:false;transceiver.active=false;transceiver.streamMuteStateChange.on(()=>{this.sendSourceAdvertisement(mediaType);this.sendMediaRequestStatus(mediaType);});transceiver.streamPublishStateChange.on(()=>{this.sendSourceAdvertisement(mediaType);this.sendMediaRequestStatus(mediaType);});transceiver.negotiationNeeded.on(offerAnswerType=>{if(offerAnswerType===OfferAnswerType.Remote){this.emit(MultistreamConnectionEventNames.NegotiationNeeded);}else if(this.pc.getRemoteDescription()){this.queueLocalOfferAnswer();}});transceiver.namedMediaGroupsChange.on(()=>{this.sendSourceAdvertisement(mediaType);});this.sendTransceivers.set(mediaType,transceiver);this.createJmpSession(mediaType);}createSendSlot(mediaType){var active=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;var transceiver=this.getSendTransceiverOrThrow(mediaType);transceiver.active=active;return new SendSlot(transceiver);}createJmpSession(mediaType){var jmpSession=new JmpSession(getMediaFamily(mediaType),getMediaContent(mediaType));jmpSession.setTxCallback(msg=>{var _a;if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)!=='open'){logger.error("DataChannel not created or not connected. Unable to send JMP message.");return;}try{logger.info("Sending JMP message (size: ".concat(msg.length,"): ").concat(msg));this.dataChannel.send(msg);}catch(err){var{bufferedAmount,readyState}=this.dataChannel;var{sctp}=this.pc.getUnderlyingRTCPeerConnection();var{maxMessageSize,state}=sctp||{};logErrorAndThrow(exports.WcmeErrorType.DATA_CHANNEL_SEND_FAILED,"Sending JMP message failed with error: ".concat(err,",\nMessage size: ").concat(msg.length,",\nData Channel State: ").concat(readyState,",\nData Channel Buffered amount: ").concat(bufferedAmount,",\nSCTP State: ").concat(state,",\nSCTP Max Message Size: ").concat(maxMessageSize));}});var prevNumTotalSources=0;var prevNumLiveSources=0;jmpSession.on(JmpSessionEvents.SourceAdvertisementReceived,data=>{logger.log("SourceAdvertisement received: ".concat(JSON.stringify(data)));if(data.numTotalSources!==prevNumTotalSources||data.numLiveSources!==prevNumLiveSources){prevNumTotalSources=data.numTotalSources;prevNumLiveSources=data.numLiveSources;var eventName=getMediaFamily(mediaType)===exports.MediaFamily.Video?MultistreamConnectionEventNames.VideoSourceCountUpdate:MultistreamConnectionEventNames.AudioSourceCountUpdate;this.emit(eventName,data.numTotalSources,data.numLiveSources,getMediaContent(mediaType));}else {logger.log('Number of sources was unchanged, ignoring message');}});jmpSession.on(JmpSessionEvents.MediaRequestStatusReceived,data=>{logger.log("MediaRequestStatus received: ".concat(JSON.stringify(data)));data.streamStates.forEach(s=>{var receiveSlot=this.getReceiveSlotById(s.id);if(!receiveSlot){logger.warn("Got MediaRequestStatus for unknown receive slot: ".concat(JSON.stringify(s.id)));return;}receiveSlot._updateSource(s.state,s.csi);});});jmpSession.on(JmpSessionEvents.MediaRequestReceived,data=>{logger.log("MediaRequest received: ".concat(JSON.stringify(data)));this.updateRequestedStreams(mediaType,data.requests).then(()=>{if(getMediaFamily(mediaType)===exports.MediaFamily.Video){this.sendMediaRequestStatus(mediaType);}});});jmpSession.on(JmpSessionEvents.ActiveSpeaker,data=>{this.emit(MultistreamConnectionEventNames.ActiveSpeakerNotification,data.csis);this.recvTransceivers.forEach(transceivers=>{transceivers.forEach(t=>{var{currentRxCsi}=t.receiveSlot;if(currentRxCsi!==undefined){var isActiveSpeaker=data.csis.some(activeCsi=>(activeCsi&0xfffffffe)===(currentRxCsi&0xfffffffe));t.handleActiveSpeakerUpdate(isActiveSpeaker);}});});});this.jmpSessions.set(mediaType,jmpSession);}updateRequestedStreams(mediaType,requests){var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);var mediaFamily=getMediaFamily(mediaType);var requestedIdEncodingParamsMap=new Map();var rsRequests=requests.filter(r=>isValidReceiverSelectedInfo(r.policySpecificInfo));if(rsRequests.length!==requests.length){logger.warn('Ignoring non-receiver-selected requests');}rsRequests.forEach(_ref6=>{var{ids,policySpecificInfo,codecInfos,maxPayloadBitsPerSecond}=_ref6;var _a,_b,_c;if(ids.length>1){logErrorAndThrow(exports.WcmeErrorType.INVALID_STREAM_REQUEST,"Stream request cannot have more than one ID.");}if(ids.length===0){return;}if(sendTransceiver.csi!==policySpecificInfo.csi){logger.warn('csi in the StreamRequest does not match');return;}var id=ids[0];var codecInfo=codecInfos[0];var streamIdsMatched=sendTransceiver.senderIds.some(validId=>compareStreamIds(id,validId));if(streamIdsMatched){var encodingIndex=sendTransceiver.getEncodingIndexForStreamId(id);if(encodingIndex!==-1){var encodingParams={maxPayloadBitsPerSecond};if(mediaFamily===exports.MediaFamily.Video){encodingParams.maxFs=(_a=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_a===void 0?void 0:_a.maxFs;encodingParams.maxWidth=(_b=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_b===void 0?void 0:_b.maxWidth;encodingParams.maxHeight=(_c=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_c===void 0?void 0:_c.maxHeight;}requestedIdEncodingParamsMap.set(encodingIndex,encodingParams);}else {logger.warn("".concat(mediaType,": Unable to get encoding index for stream ID: ").concat(JSON.stringify(id)));}}else {logger.warn("".concat(mediaType,": Unable to find matching stream ID for requested ID: ").concat(JSON.stringify(id)));}});return sendTransceiver.updateSendParameters(requestedIdEncodingParamsMap);}createDataChannel(){var dataChannel=this.pc.createDataChannel('datachannel',{ordered:false,maxRetransmits:0});dataChannel.onopen=event=>{logger.info('DataChannel opened:',JSON.stringify(event));[...this.sendTransceivers.keys()].forEach(mediaType=>{this.sendSourceAdvertisement(mediaType);});logger.info("Flushing pending JMP task queue");this.pendingJmpTasks.forEach(t=>t());this.pendingJmpTasks=[];};dataChannel.onmessage=e=>{var parsed;try{parsed=JSON.parse(e.data);}catch(err){logger.error("Error parsing datachannel JSON: ".concat(err));return;}logger.debug('DataChannel got msg:',e.data);var homerMsg=HomerMsg.fromJson(parsed);if(!homerMsg){logger.error("Received invalid datachannel message: ".concat(e));return;}var jmpMsg=homerMsg.payload;if(!isValidJmpMsg(jmpMsg)){logger.error("Received invalid JMP msg: ".concat(JSON.stringify(jmpMsg)));return;}var mediaType=getMediaType(jmpMsg.mediaFamily,jmpMsg.mediaContent);var jmpSession=this.jmpSessions.get(mediaType);if(!jmpSession){logger.error("Unable to find JMP session for media type ".concat(mediaType,"."));return;}jmpSession.receive(jmpMsg);};dataChannel.onclose=event=>{logger.info('DataChannel closed:',JSON.stringify(event));};dataChannel.onerror=event=>{logger.info('DataChannel error:',JSON.stringify(event));};this.dataChannel=dataChannel;}close(){this.sendTransceivers.forEach(t=>t.close());this.recvTransceivers.forEach(recvTransceivers=>{recvTransceivers.forEach(t=>t.close());});this.jmpSessions.forEach(jmpSession=>jmpSession.close());this.pc.close();}sendMediaRequestStatus(mediaType){var _a;if(getMediaFamily(mediaType)!==exports.MediaFamily.Video){return;}if(!this.getSendTransceiverOrThrow(mediaType).requested){return;}var streamStates=this.getVideoStreamStates(mediaType);var task=()=>{var _a;(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendMediaRequestStatus(streamStates);};if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}sendSourceAdvertisement(mediaType){var _a,_b;var transceiver=this.getSendTransceiverOrThrow(mediaType);var numLiveSources=((_a=transceiver.publishedStream)===null||_a===void 0?void 0:_a.muted)===false?1:0;var task;if(getMediaFamily(mediaType)===exports.MediaFamily.Video){var sources=this.getVideoStreamStates(mediaType);if(sources===null){return;}var contentHint;if(transceiver.publishedStream&&mediaType===exports.MediaType.VideoSlides){contentHint=transceiver.publishedStream.contentHint;}task=()=>{var _a;(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendSourceAdvertisement(1,numLiveSources,[],webRtcVideoContentHintToJmpVideoContentHint(contentHint));};}else {task=()=>{var _a;return (_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendSourceAdvertisement(1,numLiveSources,mediaType===exports.MediaType.AudioMain?transceiver.namedMediaGroups:[]);};}if(((_b=this.dataChannel)===null||_b===void 0?void 0:_b.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}getVideoStreamStates(mediaType){var _a;var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);var published=!!sendTransceiver.publishedStream;var muted=(_a=sendTransceiver.publishedStream)===null||_a===void 0?void 0:_a.muted;return sendTransceiver.senderIds.map(id=>{var state;if(!published){state='no source';}else if(muted){state='avatar';}else {state='live';}return {id,state,csi:sendTransceiver.csi};});}createReceiveTransceiver(mediaType){var rtcRtpTransceiver=this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'recvonly'});var transceiverMid=this.midPredictor.getNextMid(mediaType);var munger=new IngressSdpMunger();var recvOnlyTransceiver=new ReceiveOnlyTransceiver(rtcRtpTransceiver,transceiverMid,munger);recvOnlyTransceiver.metadata.mediaType=mediaType;recvOnlyTransceiver.twccDisabled=getMediaFamily(mediaType)===exports.MediaFamily.Audio?this.options.disableAudioTwcc:false;this.recvTransceivers.set(mediaType,[...(this.recvTransceivers.get(mediaType)||[]),recvOnlyTransceiver]);return recvOnlyTransceiver;}createReceiveSlot(mediaType){return __awaiter$1(this,void 0,void 0,function*(){return (yield this.createReceiveSlots(mediaType,1))[0];});}createReceiveSlots(mediaType){var count=arguments.length>1&&arguments[1]!==undefined?arguments[1]:1;return __awaiter$1(this,void 0,void 0,function*(){return new Promise(createReceiveSlotsResolve=>{this.offerAnswerQueue.push(()=>__awaiter$1(this,void 0,void 0,function*(){var createdReceiveOnlyTransceivers=[];for(var i=0;i<count;i++){var recvOnlyTransceiver=this.createReceiveTransceiver(mediaType);createdReceiveOnlyTransceivers.push(recvOnlyTransceiver);}if(this.pc.getRemoteDescription()){yield this.doLocalOfferAnswer();}var receiveSlots=createdReceiveOnlyTransceivers.map(transceiver=>transceiver.receiveSlot);createReceiveSlotsResolve(receiveSlots);}));});});}getIngressPayloadType(mediaType,mimeType){var _a,_b,_c;var requestedMediaCodecType=mimeType.split('/')[1];var requestedMid=(_a=this.sendTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.mid;var parsedOffer=parse$1((_b=this.pc.getLocalDescription())===null||_b===void 0?void 0:_b.sdp);var parsedAnswer=parse$1((_c=this.pc.getRemoteDescription())===null||_c===void 0?void 0:_c.sdp);var senderCodecs=parsedAnswer.avMedia.filter(media=>requestedMid===media.mid).map(media=>[...media.codecs.values()]).flat().filter(ci=>ci.name===requestedMediaCodecType);var receiverCodecs=parsedOffer.avMedia.filter(media=>requestedMid===media.mid).map(media=>[...media.codecs.values()]).flat().filter(ci=>ci.name===requestedMediaCodecType);if(!senderCodecs||!receiverCodecs||senderCodecs.length===0||receiverCodecs.length===0){logErrorAndThrow(exports.WcmeErrorType.GET_PAYLOAD_TYPE_FAILED,"Sender codecs or receiver codecs is undefined or empty.");}var senderCodec=senderCodecs[0];var targetCodec=receiverCodecs.find(receiverCodec=>{return areCodecsCompatible(senderCodec,receiverCodec);});if(!targetCodec||!targetCodec.pt){logErrorAndThrow(exports.WcmeErrorType.GET_PAYLOAD_TYPE_FAILED,"Cannot find matching receiver codec for the given mediaType/mimeType.");}return targetCodec.pt;}waitForIceGatheringComplete(){return __awaiter$1(this,void 0,void 0,function*(){return new Promise(resolve=>{if(this.pc.iceGatheringState==='complete'){resolve();}else {this.pc.on(PeerConnection.Events.IceGatheringStateChange,()=>{if(this.pc.iceGatheringState==='complete'){resolve();}});}});});}createOffer(){return __awaiter$1(this,void 0,void 0,function*(){if(!this.pc.getLocalDescription()){this.midPredictor.allocateMidForDatachannel();}if(this.setAnswerResolve){logger.info('Canceling previous offer since setAnswer was never called for it');this.setAnswerResolve();this.setAnswerResolve=undefined;}var createOfferId=++this.currentCreateOfferId;return new Promise((createOfferResolve,createOfferReject)=>{this.offerAnswerQueue.push(()=>__awaiter$1(this,void 0,void 0,function*(){var _a;try{var offer=yield this.pc.createOffer();if(!offer.sdp){logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED,'SDP not found in offer.');}offer.sdp=this.preProcessLocalOffer(offer.sdp);yield this.pc.setLocalDescription(offer).then(()=>__awaiter$1(this,void 0,void 0,function*(){logger.info('this.pc.setLocalDescription() resolved');})).catch(error=>{var _a;logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED,"Error: ".concat(error,". SDP: ").concat(maskIp((_a=offer.sdp)!==null&&_a!==void 0?_a:'')));});if(this.options.doFullIce){yield this.waitForIceGatheringComplete();}var sdpToSend=this.prepareLocalOfferForRemoteServer((_a=this.pc.getLocalDescription())===null||_a===void 0?void 0:_a.sdp);createOfferResolve({type:'offer',sdp:sdpToSend});if(this.currentCreateOfferId>createOfferId){logger.log('Canceling previous offer since createOffer was called while it was being created');}else {yield new Promise(setAnswerResolve=>{this.setAnswerResolve=setAnswerResolve;});}}catch(error){createOfferReject(error);}}));});});}setAnswer(answer){return __awaiter$1(this,void 0,void 0,function*(){var sdp=this.preProcessRemoteAnswer(answer);if(!this.setAnswerResolve){logErrorAndThrow(exports.WcmeErrorType.SET_ANSWER_FAILED,"Call to setAnswer without having previously called createOffer.");}logger.info('calling this.pc.setRemoteDescription()');return this.pc.setRemoteDescription({type:'answer',sdp}).then(()=>__awaiter$1(this,void 0,void 0,function*(){logger.info('this.pc.setRemoteDescription() resolved');if(this.setAnswerResolve){this.setAnswerResolve();this.setAnswerResolve=undefined;}else {logger.debug("setAnswerResolve function was cleared between setAnswer and result of setRemoteDescription");}})).catch(error=>{logErrorAndThrow(exports.WcmeErrorType.SET_ANSWER_FAILED,"Error: ".concat(error,". SDP: ").concat(maskIp(answer)));});});}doLocalOfferAnswer(){var _a;return __awaiter$1(this,void 0,void 0,function*(){var offer=yield this.pc.createOffer();if(!offer.sdp){logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED,'SDP not found in offer.');}offer.sdp=this.preProcessLocalOffer(offer.sdp);yield this.pc.setLocalDescription(offer).then(()=>__awaiter$1(this,void 0,void 0,function*(){logger.info('this.pc.setLocalDescription() resolved');})).catch(error=>{var _a;logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED,"Error: ".concat(error,". SDP: ").concat(maskIp((_a=offer.sdp)!==null&&_a!==void 0?_a:'')));});var answer=this.preProcessRemoteAnswer((_a=this.pc.getRemoteDescription())===null||_a===void 0?void 0:_a.sdp);return this.pc.setRemoteDescription({type:'answer',sdp:answer}).then(()=>__awaiter$1(this,void 0,void 0,function*(){logger.info('this.pc.setRemoteDescription() resolved');})).catch(error=>{logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED,"Error: ".concat(error,". SDP: ").concat(maskIp(answer)));});});}queueLocalOfferAnswer(){return __awaiter$1(this,void 0,void 0,function*(){return this.offerAnswerQueue.push(()=>__awaiter$1(this,void 0,void 0,function*(){yield this.doLocalOfferAnswer();}));});}preProcessLocalOffer(offer){var parsedOffer=parse$1(offer);parsedOffer.avMedia.filter(av=>av.direction==='recvonly').forEach(av=>{var recvTransceiver=this.getRecvTransceiverByMidOrThrow(av.mid);recvTransceiver.mungeLocalDescription(av);});parsedOffer.avMedia.filter(av=>av.direction==='sendrecv'||av.direction==='inactive').forEach(av=>{var sendTransceiver=this.getSendTransceiverByMidOrThrow(av.mid);sendTransceiver.mungeLocalDescription(av);});if(BrowserInfo.isFirefox()){setupBundle(parsedOffer,this.options.bundlePolicy,this.midPredictor.getMidMap());}return parsedOffer.toString();}prepareLocalOfferForRemoteServer(offer){var parsedOffer=parse$1(offer);parsedOffer.avMedia.filter(av=>av.direction==='sendrecv'||av.direction==='inactive').forEach(av=>{var sendTransceiver=this.getSendTransceiverByMidOrThrow(av.mid);sendTransceiver.mungeLocalDescriptionForRemoteServer(av);});if(!this.options.doFullIce){parsedOffer.media.filter(media=>media instanceof ApplicationMediaDescription$1).forEach(media=>{injectDummyCandidates(media);});}if(BrowserInfo.isFirefox()&&this.options.doFullIce){var{candidates}=parsedOffer.media[0].iceInfo;parsedOffer.media.forEach(media=>{media.iceInfo.candidates=candidates;});}if(BrowserInfo.isFirefox()){setupBundle(parsedOffer,this.options.bundlePolicy,this.midPredictor.getMidMap());if(this.options.bundlePolicy==='max-bundle'){parsedOffer.media.forEach((media,index)=>{if(index>0){media.port=parsedOffer.media[0].port;}});}}filterRecvOnlyMediaDescriptions(parsedOffer);return parsedOffer.toString();}preProcessRemoteAnswer(answer){var _a;var parsedAnswer=parse$1(answer);var parsedOffer=parse$1((_a=this.pc.getLocalDescription())===null||_a===void 0?void 0:_a.sdp);matchMediaDescriptionsInAnswer(parsedOffer,parsedAnswer);parsedAnswer.avMedia.filter(av=>av.direction==='sendonly').forEach(av=>{var recvTransceiver=this.getRecvTransceiverByMidOrThrow(av.mid);recvTransceiver.mungeRemoteDescription(av);});parsedAnswer.avMedia.filter(av=>av.direction==='sendrecv'||av.direction==='recvonly').forEach(av=>{var sendTransceiver=this.getSendTransceiverByMidOrThrow(av.mid);sendTransceiver.mungeRemoteDescription(av);});parsedAnswer.media.filter(media=>media instanceof ApplicationMediaDescription$1).forEach(media=>{if(retainCandidatesByTransportType(media,['udp','tcp'])){logger.log("Some unsupported remote candidates have been removed from mid ".concat(media.mid));}});if(BrowserInfo.isFirefox()){setupBundle(parsedAnswer,this.options.bundlePolicy,this.midPredictor.getMidMap());}return parsedAnswer.toString();}getSendTransceiverOrThrow(mediaType){var sendTransceiver=this.sendTransceivers.get(mediaType);if(!sendTransceiver){logErrorAndThrow(exports.WcmeErrorType.GET_TRANSCEIVER_FAILED,"Unable to find send transceiver for media type ".concat(mediaType,"."));}return sendTransceiver;}getSendTransceiverByMidOrThrow(mid){var transceiver=[...this.sendTransceivers.values()].find(t=>t.mid===mid);if(!transceiver){logErrorAndThrow(exports.WcmeErrorType.GET_TRANSCEIVER_FAILED,"Unable to find send transceiver with MID ".concat(mid,"."));}return transceiver;}getRecvTransceiverByMidOrThrow(mid){var transceiver=[...this.recvTransceivers.values()].flat().find(t=>t.mid===mid);if(!transceiver){logErrorAndThrow(exports.WcmeErrorType.GET_TRANSCEIVER_FAILED,"Unable to find recv transceiver with MID ".concat(mid,"."));}return transceiver;}requestMedia(mediaType,streamRequests){var _a;var task=()=>{var _a;var jmpSession=this.jmpSessions.get(mediaType);if(!jmpSession){logger.error("Unable to find jmp session for ".concat(mediaType));return;}var requestedReceiveSlotIds=[];streamRequests.forEach(request=>{if(request.receiveSlots.length===0){logger.error('Stream request ids cannot be empty.');return;}request.receiveSlots.forEach(slot=>{if(!slot.id){logger.error('Running stream request task, but ReceiveSlot ID is missing.');}if(!requestedReceiveSlotIds.some(id=>compareStreamIds(id,slot.id))){requestedReceiveSlotIds.push(slot.id);}else {logger.error("Stream id duplicate found ".concat(JSON.stringify(slot.id),"."));}});});jmpSession.sendRequests(streamRequests.map(sr=>sr._toJmpStreamRequest()));(_a=this.recvTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.forEach(transceiver=>{if(requestedReceiveSlotIds.some(id=>compareStreamIds(id,transceiver.receiveSlot.id))){var relevantRequest=streamRequests.find(request=>request.receiveSlots.some(slot=>compareStreamIds(slot.id,transceiver.receiveSlot.id)));transceiver.handleRequested(relevantRequest);}else {transceiver.handleUnrequested();}});};if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}renewPeerConnection(userOptions){if(userOptions){this.options=Object.assign(Object.assign({},this.options),userOptions);}logger.info("Renewing multistream connection with options ".concat(JSON.stringify(this.options)));this.midPredictor.reset();this.initializePeerConnection();var mainSceneId=generateSceneId();var slidesSceneId=generateSceneId();this.sendTransceivers.forEach((transceiver,mediaType)=>{var _a;var mediaContent=getMediaContent(mediaType);var sceneId=mediaContent===exports.MediaContent.Main?mainSceneId:slidesSceneId;var mid=this.midPredictor.getNextMid(mediaType);transceiver.replaceTransceiver(this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'sendrecv',sendEncodings:getMediaFamily(mediaType)===exports.MediaFamily.Video?this.getVideoEncodingOptions(mediaContent):undefined}));transceiver.mid=mid;transceiver.csi=generateCsi(getMediaFamily(mediaType),sceneId);transceiver.resetSdpMunger();(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.close();this.createJmpSession(mediaType);});this.recvTransceivers.forEach((transceivers,mediaType)=>{transceivers.forEach(t=>{var mid=this.midPredictor.getNextMid(mediaType);t.replaceTransceiver(this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'recvonly'}));t.mid=mid;});});}getReceiveSlotById(id){return [...this.recvTransceivers.values()].flat().map(transceiver=>transceiver.receiveSlot).find(receiveSlot=>{var receiveSlotId=receiveSlot.id||{};return Object.keys(receiveSlotId).length===Object.keys(id).length&&Object.keys(receiveSlotId).every(key=>Object.prototype.hasOwnProperty.call(id,key)&&receiveSlotId[key]===id[key]);});}getStats(){return this.statsManager.getStats();}getTransceiverStats(){return __awaiter$1(this,void 0,void 0,function*(){return organizeTransceiverStats(this.sendTransceivers,this.recvTransceivers);});}preProcessStats(stats){return __awaiter$1(this,void 0,void 0,function*(){yield Promise.all([...this.sendTransceivers.values()].map(transceiver=>__awaiter$1(this,void 0,void 0,function*(){(yield transceiver.getStats()).forEach(senderStats=>{if(senderStats.type==='outbound-rtp'||senderStats.type==='media-source'){stats.set(senderStats.id,senderStats);}});})));yield Promise.all([...this.recvTransceivers.values()].map(transceivers=>__awaiter$1(this,void 0,void 0,function*(){yield Promise.all(transceivers.map(transceiver=>__awaiter$1(this,void 0,void 0,function*(){(yield transceiver.getStats()).forEach(receiverStats=>{if(receiverStats.type==='inbound-rtp'){stats.set(receiverStats.id,receiverStats);}});})));})));});}attachMetricsObserver(){this.forceStatsReport=rtcStats_1(this.pc.getUnderlyingRTCPeerConnection(),data=>this.metricsCallback(data),5000,stats=>this.preProcessStats(stats)).forceStatsReport;}forceRtcMetricsCallback(){var _a;return (_a=this.forceStatsReport)===null||_a===void 0?void 0:_a.call(this);}setMetricsCallback(callback){this.metricsCallback=callback;}setOveruseUpdateCallback(callback){this.overuseUpdateCallback=callback;}getCsiByMediaType(mediaType){var _a;return (_a=this.sendTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.csi;}getAllCsis(){return {audioMain:this.getCsiByMediaType(exports.MediaType.AudioMain),audioSlides:this.getCsiByMediaType(exports.MediaType.AudioSlides),videoMain:this.getCsiByMediaType(exports.MediaType.VideoMain),videoSlides:this.getCsiByMediaType(exports.MediaType.VideoSlides)};}}class StreamRequest{constructor(policy,policySpecificInfo,receiveSlots,maxPayloadBitsPerSecond){var codecInfos=arguments.length>4&&arguments[4]!==undefined?arguments[4]:[];this.policy=policy;this.policySpecificInfo=policySpecificInfo;this.receiveSlots=receiveSlots;this.maxPayloadBitsPerSecond=maxPayloadBitsPerSecond;this.codecInfos=codecInfos;}_toJmpStreamRequest(){return new StreamRequest$1(this.policy,this.policySpecificInfo,this.receiveSlots.map(rs=>rs.id),this.maxPayloadBitsPerSecond,this.codecInfos);}}
|
|
4911
4916
|
|
|
4912
4917
|
var defaultLogger = {
|
|
4913
4918
|
info: function info() {
|
|
@@ -6466,26 +6471,27 @@ function mungeRemoteSdp(config, sdp) {
|
|
|
6466
6471
|
return parsedSdp.toString();
|
|
6467
6472
|
}
|
|
6468
6473
|
|
|
6469
|
-
exports.
|
|
6470
|
-
(function (
|
|
6471
|
-
|
|
6472
|
-
|
|
6473
|
-
|
|
6474
|
-
|
|
6475
|
-
|
|
6476
|
-
|
|
6477
|
-
|
|
6478
|
-
|
|
6479
|
-
|
|
6480
|
-
|
|
6481
|
-
|
|
6482
|
-
|
|
6483
|
-
|
|
6484
|
-
|
|
6485
|
-
|
|
6486
|
-
|
|
6487
|
-
|
|
6488
|
-
|
|
6474
|
+
exports.MediaConnectionEventNames = void 0;
|
|
6475
|
+
(function (MediaConnectionEventNames) {
|
|
6476
|
+
MediaConnectionEventNames["ICE_GATHERING_STATE_CHANGED"] = "iceGatheringState:changed";
|
|
6477
|
+
MediaConnectionEventNames["PEER_CONNECTION_STATE_CHANGED"] = "peerConnectionState:changed";
|
|
6478
|
+
MediaConnectionEventNames["ICE_CONNECTION_STATE_CHANGED"] = "iceConnectionState:changed";
|
|
6479
|
+
MediaConnectionEventNames["REMOTE_TRACK_ADDED"] = "remoteTrack:added";
|
|
6480
|
+
MediaConnectionEventNames["ROAP_MESSAGE_TO_SEND"] = "roap:messageToSend";
|
|
6481
|
+
MediaConnectionEventNames["ROAP_STARTED"] = "roap:started";
|
|
6482
|
+
MediaConnectionEventNames["ROAP_FAILURE"] = "roap:failure";
|
|
6483
|
+
MediaConnectionEventNames["ROAP_DONE"] = "roap:done";
|
|
6484
|
+
MediaConnectionEventNames["DTMF_TONE_CHANGED"] = "dtmfTone:changed";
|
|
6485
|
+
MediaConnectionEventNames["ACTIVE_SPEAKERS_CHANGED"] = "activeSpeakers:changed";
|
|
6486
|
+
MediaConnectionEventNames["VIDEO_SOURCES_COUNT_CHANGED"] = "videoSourcesCount:changed";
|
|
6487
|
+
MediaConnectionEventNames["AUDIO_SOURCES_COUNT_CHANGED"] = "audioSourcesCount:changed";
|
|
6488
|
+
MediaConnectionEventNames["REMOTE_SDP_ANSWER_PROCESSED"] = "remoteSdpAnswer:processed";
|
|
6489
|
+
MediaConnectionEventNames["REMOTE_SDP_OFFER_PROCESSED"] = "remoteSdpOffer:processed";
|
|
6490
|
+
MediaConnectionEventNames["LOCAL_SDP_OFFER_GENERATED"] = "localSdpOffer:processed";
|
|
6491
|
+
MediaConnectionEventNames["LOCAL_SDP_ANSWER_GENERATED"] = "localSdpAnswer:processed";
|
|
6492
|
+
MediaConnectionEventNames["ICE_CANDIDATE"] = "iceCandidate";
|
|
6493
|
+
MediaConnectionEventNames["ICE_CANDIDATE_ERROR"] = "iceCandidate:error";
|
|
6494
|
+
})(exports.MediaConnectionEventNames || (exports.MediaConnectionEventNames = {}));
|
|
6489
6495
|
exports.RemoteTrackType = void 0;
|
|
6490
6496
|
(function (RemoteTrackType) {
|
|
6491
6497
|
RemoteTrackType["AUDIO"] = "audio";
|
|
@@ -6505,8 +6511,8 @@ exports.ErrorType = void 0;
|
|
|
6505
6511
|
ErrorType["TIMEOUT"] = "TIMEOUT";
|
|
6506
6512
|
})(exports.ErrorType || (exports.ErrorType = {}));
|
|
6507
6513
|
|
|
6508
|
-
function ownKeys$
|
|
6509
|
-
function _objectSpread$
|
|
6514
|
+
function ownKeys$4(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
6515
|
+
function _objectSpread$4(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$4(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$4(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
6510
6516
|
var localTrackTypes = [{
|
|
6511
6517
|
type: 'audio',
|
|
6512
6518
|
kind: 'audio'
|
|
@@ -6528,8 +6534,8 @@ class MediaConnection extends EventEmitter$5 {
|
|
|
6528
6534
|
_defineProperty__default["default"](this, "mediaDirection", void 0);
|
|
6529
6535
|
_defineProperty__default["default"](this, "remoteQualityLevel", void 0);
|
|
6530
6536
|
this.config = mediaConnectionConfig;
|
|
6531
|
-
this.mediaDirection = _objectSpread$
|
|
6532
|
-
this.localTracks = _objectSpread$
|
|
6537
|
+
this.mediaDirection = _objectSpread$4({}, options.direction);
|
|
6538
|
+
this.localTracks = _objectSpread$4({}, options.localTracks);
|
|
6533
6539
|
this.remoteQualityLevel = options.remoteQualityLevel;
|
|
6534
6540
|
this.id = debugId || 'MediaConnection';
|
|
6535
6541
|
this.transceivers = {};
|
|
@@ -6540,9 +6546,13 @@ class MediaConnection extends EventEmitter$5 {
|
|
|
6540
6546
|
this.pc.ontrack = this.onTrack.bind(this);
|
|
6541
6547
|
this.pc.oniceconnectionstatechange = this.onIceConnectionStateChange.bind(this);
|
|
6542
6548
|
this.pc.onconnectionstatechange = this.onPeerConnectionStateChange.bind(this);
|
|
6543
|
-
this.pc.addEventListener('
|
|
6544
|
-
|
|
6545
|
-
|
|
6549
|
+
this.pc.addEventListener('icecandidate', event => {
|
|
6550
|
+
this.emit(exports.MediaConnectionEventNames.ICE_CANDIDATE, {
|
|
6551
|
+
candidate: event.candidate
|
|
6552
|
+
});
|
|
6553
|
+
});
|
|
6554
|
+
this.pc.addEventListener('icecandidateerror', event => {
|
|
6555
|
+
this.emit(exports.MediaConnectionEventNames.ICE_CANDIDATE_ERROR, {
|
|
6546
6556
|
error: event
|
|
6547
6557
|
});
|
|
6548
6558
|
});
|
|
@@ -6646,7 +6656,7 @@ class MediaConnection extends EventEmitter$5 {
|
|
|
6646
6656
|
updateLocalTracks(tracks) {
|
|
6647
6657
|
return this.updateTransceivers({
|
|
6648
6658
|
localTracks: tracks,
|
|
6649
|
-
direction: _objectSpread$
|
|
6659
|
+
direction: _objectSpread$4({}, this.mediaDirection)
|
|
6650
6660
|
});
|
|
6651
6661
|
}
|
|
6652
6662
|
updateDirection(direction) {
|
|
@@ -6752,7 +6762,7 @@ class MediaConnection extends EventEmitter$5 {
|
|
|
6752
6762
|
}
|
|
6753
6763
|
onToneChange(event) {
|
|
6754
6764
|
this.log('onToneChange()', "emitting Event.DTMF_TONE_CHANGED with tone=\"".concat(event.tone, "\""));
|
|
6755
|
-
this.emit(exports.
|
|
6765
|
+
this.emit(exports.MediaConnectionEventNames.DTMF_TONE_CHANGED, {
|
|
6756
6766
|
tone: event.tone
|
|
6757
6767
|
});
|
|
6758
6768
|
}
|
|
@@ -6796,21 +6806,21 @@ class MediaConnection extends EventEmitter$5 {
|
|
|
6796
6806
|
switch (trackMediaID) {
|
|
6797
6807
|
case MEDIA_ID.AUDIO_TRACK:
|
|
6798
6808
|
this.log('onTrack()', 'emitting Event.REMOTE_TRACK_ADDED with type=AUDIO');
|
|
6799
|
-
this.emit(exports.
|
|
6809
|
+
this.emit(exports.MediaConnectionEventNames.REMOTE_TRACK_ADDED, {
|
|
6800
6810
|
type: exports.RemoteTrackType.AUDIO,
|
|
6801
6811
|
track
|
|
6802
6812
|
});
|
|
6803
6813
|
break;
|
|
6804
6814
|
case MEDIA_ID.VIDEO_TRACK:
|
|
6805
6815
|
this.log('onTrack()', 'emitting Event.REMOTE_TRACK_ADDED with type=VIDEO');
|
|
6806
|
-
this.emit(exports.
|
|
6816
|
+
this.emit(exports.MediaConnectionEventNames.REMOTE_TRACK_ADDED, {
|
|
6807
6817
|
type: exports.RemoteTrackType.VIDEO,
|
|
6808
6818
|
track
|
|
6809
6819
|
});
|
|
6810
6820
|
break;
|
|
6811
6821
|
case MEDIA_ID.SHARE_TRACK:
|
|
6812
6822
|
this.log('onTrack()', 'emitting Event.REMOTE_TRACK_ADDED with type=SCREENSHARE_VIDEO');
|
|
6813
|
-
this.emit(exports.
|
|
6823
|
+
this.emit(exports.MediaConnectionEventNames.REMOTE_TRACK_ADDED, {
|
|
6814
6824
|
type: exports.RemoteTrackType.SCREENSHARE_VIDEO,
|
|
6815
6825
|
track
|
|
6816
6826
|
});
|
|
@@ -6835,13 +6845,13 @@ class MediaConnection extends EventEmitter$5 {
|
|
|
6835
6845
|
}
|
|
6836
6846
|
onPeerConnectionStateChange() {
|
|
6837
6847
|
this.log('onPeerConnectionStateChange()', "callback called: peerConnectionState=".concat(this.pc.connectionState));
|
|
6838
|
-
this.emit(exports.
|
|
6848
|
+
this.emit(exports.MediaConnectionEventNames.PEER_CONNECTION_STATE_CHANGED, {
|
|
6839
6849
|
state: this.pc.connectionState
|
|
6840
6850
|
});
|
|
6841
6851
|
}
|
|
6842
6852
|
onIceConnectionStateChange() {
|
|
6843
6853
|
this.log('onIceConnectionStateChange()', "callback called: iceConnectionState=".concat(this.pc.iceConnectionState));
|
|
6844
|
-
this.emit(exports.
|
|
6854
|
+
this.emit(exports.MediaConnectionEventNames.ICE_CONNECTION_STATE_CHANGED, {
|
|
6845
6855
|
state: this.pc.iceConnectionState
|
|
6846
6856
|
});
|
|
6847
6857
|
}
|
|
@@ -6879,7 +6889,7 @@ class MediaConnection extends EventEmitter$5 {
|
|
|
6879
6889
|
if (this.config.sdpMunging.h264MaxFs) {
|
|
6880
6890
|
this.warn('createSdpMungingConfig', 'conflict: both config.sdpMunging.h264MaxFs and receiveOptions.remoteQualityLevel are set, remoteQualityLevel will override the config');
|
|
6881
6891
|
}
|
|
6882
|
-
return _objectSpread$
|
|
6892
|
+
return _objectSpread$4(_objectSpread$4({}, this.config.sdpMunging), {}, {
|
|
6883
6893
|
h264MaxFs: maxFsValues[this.remoteQualityLevel]
|
|
6884
6894
|
});
|
|
6885
6895
|
}
|
|
@@ -6897,7 +6907,7 @@ class MediaConnection extends EventEmitter$5 {
|
|
|
6897
6907
|
}).then(() => this.waitForIceCandidates()).then(() => {
|
|
6898
6908
|
var _this$pc$localDescrip;
|
|
6899
6909
|
var mungedSdp = mungeLocalSdp(sdpMungingConfig, ((_this$pc$localDescrip = this.pc.localDescription) === null || _this$pc$localDescrip === void 0 ? void 0 : _this$pc$localDescrip.sdp) || '');
|
|
6900
|
-
this.emit(exports.
|
|
6910
|
+
this.emit(exports.MediaConnectionEventNames.LOCAL_SDP_OFFER_GENERATED);
|
|
6901
6911
|
return {
|
|
6902
6912
|
sdp: mungedSdp
|
|
6903
6913
|
};
|
|
@@ -6921,7 +6931,7 @@ class MediaConnection extends EventEmitter$5 {
|
|
|
6921
6931
|
return this.pc.setRemoteDescription(new window.RTCSessionDescription({
|
|
6922
6932
|
type: 'offer',
|
|
6923
6933
|
sdp: mungedRemoteSdp
|
|
6924
|
-
})).then(() => this.emit(exports.
|
|
6934
|
+
})).then(() => this.emit(exports.MediaConnectionEventNames.REMOTE_SDP_OFFER_PROCESSED)).then(() => this.pc.createAnswer()).then(answer => {
|
|
6925
6935
|
var mungedAnswer = {
|
|
6926
6936
|
type: answer.type,
|
|
6927
6937
|
sdp: mungeLocalSdpForBrowser(sdpMungingConfig, (answer === null || answer === void 0 ? void 0 : answer.sdp) || '')
|
|
@@ -6930,7 +6940,7 @@ class MediaConnection extends EventEmitter$5 {
|
|
|
6930
6940
|
}).then(() => this.waitForIceCandidates()).then(() => {
|
|
6931
6941
|
var _this$pc$localDescrip2;
|
|
6932
6942
|
var mungedLocalSdp = mungeLocalSdp(sdpMungingConfig, ((_this$pc$localDescrip2 = this.pc.localDescription) === null || _this$pc$localDescrip2 === void 0 ? void 0 : _this$pc$localDescrip2.sdp) || '');
|
|
6933
|
-
this.emit(exports.
|
|
6943
|
+
this.emit(exports.MediaConnectionEventNames.LOCAL_SDP_ANSWER_GENERATED);
|
|
6934
6944
|
return {
|
|
6935
6945
|
sdp: mungedLocalSdp
|
|
6936
6946
|
};
|
|
@@ -6954,7 +6964,7 @@ class MediaConnection extends EventEmitter$5 {
|
|
|
6954
6964
|
type: 'answer',
|
|
6955
6965
|
sdp: mungedRemoteSdp
|
|
6956
6966
|
})).then(result => {
|
|
6957
|
-
this.emit(exports.
|
|
6967
|
+
this.emit(exports.MediaConnectionEventNames.REMOTE_SDP_ANSWER_PROCESSED);
|
|
6958
6968
|
return result;
|
|
6959
6969
|
}).catch(error => {
|
|
6960
6970
|
throw new SdpAnswerHandlingError("handleRemoteAnswer() failure: ".concat(error.message), {
|
|
@@ -7011,7 +7021,7 @@ class MediaConnection extends EventEmitter$5 {
|
|
|
7011
7021
|
}
|
|
7012
7022
|
this.pc.onicegatheringstatechange = () => {
|
|
7013
7023
|
this.log('waitForIceCandidates()', "iceGatheringState changed to ".concat(this.pc.iceGatheringState));
|
|
7014
|
-
this.emit(exports.
|
|
7024
|
+
this.emit(exports.MediaConnectionEventNames.ICE_GATHERING_STATE_CHANGED, {
|
|
7015
7025
|
state: this.pc.iceGatheringState
|
|
7016
7026
|
});
|
|
7017
7027
|
if (this.pc.iceGatheringState === 'complete') {
|
|
@@ -14425,8 +14435,8 @@ function createMachine(config, options) {
|
|
|
14425
14435
|
|
|
14426
14436
|
var assign = assign$1;
|
|
14427
14437
|
|
|
14428
|
-
function ownKeys$
|
|
14429
|
-
function _objectSpread$
|
|
14438
|
+
function ownKeys$3(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
14439
|
+
function _objectSpread$3(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$3(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$3(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
14430
14440
|
var WEB_TIEBREAKER_VALUE = 0xfffffffe;
|
|
14431
14441
|
var MAX_RETRIES = 2;
|
|
14432
14442
|
var DEFAULT_IS_OK_IN_TRANSACTION = true;
|
|
@@ -14466,13 +14476,13 @@ class Roap extends EventEmitter$5 {
|
|
|
14466
14476
|
browserError: {
|
|
14467
14477
|
onEntry: (context, event) => {
|
|
14468
14478
|
this.error('FSM', "browserError state onEntry: context=".concat(JSON.stringify(context), ":"), event.data);
|
|
14469
|
-
this.emit(exports.
|
|
14479
|
+
this.emit(exports.MediaConnectionEventNames.ROAP_FAILURE, event.data);
|
|
14470
14480
|
}
|
|
14471
14481
|
},
|
|
14472
14482
|
remoteError: {
|
|
14473
14483
|
onEntry: (_, event) => {
|
|
14474
|
-
this.log('FSM', 'remoteError state onEntry called, emitting
|
|
14475
|
-
this.emit(exports.
|
|
14484
|
+
this.log('FSM', 'remoteError state onEntry called, emitting MediaConnectionEventNames.ROAP_FAILURE');
|
|
14485
|
+
this.emit(exports.MediaConnectionEventNames.ROAP_FAILURE, event.data);
|
|
14476
14486
|
}
|
|
14477
14487
|
},
|
|
14478
14488
|
idle: {
|
|
@@ -14688,28 +14698,28 @@ class Roap extends EventEmitter$5 {
|
|
|
14688
14698
|
handleRemoteOffer: (_context, event) => this.handleRemoteOfferCallback(event.sdp)
|
|
14689
14699
|
},
|
|
14690
14700
|
actions: {
|
|
14691
|
-
enqueueNewOfferCreation: assign(context => _objectSpread$
|
|
14701
|
+
enqueueNewOfferCreation: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {
|
|
14692
14702
|
pendingLocalOffer: true
|
|
14693
14703
|
})),
|
|
14694
|
-
resetPendingLocalOffer: assign(context => _objectSpread$
|
|
14704
|
+
resetPendingLocalOffer: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {
|
|
14695
14705
|
pendingLocalOffer: false
|
|
14696
14706
|
})),
|
|
14697
|
-
increaseSeq: assign(context => _objectSpread$
|
|
14707
|
+
increaseSeq: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {
|
|
14698
14708
|
seq: context.seq + 1
|
|
14699
14709
|
})),
|
|
14700
|
-
updateSeq: assign((context, event) => _objectSpread$
|
|
14710
|
+
updateSeq: assign((context, event) => _objectSpread$3(_objectSpread$3({}, context), {}, {
|
|
14701
14711
|
seq: event.seq
|
|
14702
14712
|
})),
|
|
14703
|
-
increaseRetryCounter: assign(context => _objectSpread$
|
|
14713
|
+
increaseRetryCounter: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {
|
|
14704
14714
|
retryCounter: context.retryCounter + 1
|
|
14705
14715
|
})),
|
|
14706
|
-
resetRetryCounter: assign(context => _objectSpread$
|
|
14716
|
+
resetRetryCounter: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {
|
|
14707
14717
|
retryCounter: 0
|
|
14708
14718
|
})),
|
|
14709
|
-
setOfferRequestFlag: assign(context => _objectSpread$
|
|
14719
|
+
setOfferRequestFlag: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {
|
|
14710
14720
|
isHandlingOfferRequest: true
|
|
14711
14721
|
})),
|
|
14712
|
-
resetOfferRequestFlag: assign(context => _objectSpread$
|
|
14722
|
+
resetOfferRequestFlag: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {
|
|
14713
14723
|
isHandlingOfferRequest: false
|
|
14714
14724
|
})),
|
|
14715
14725
|
handleGlare: (_context, event) => {
|
|
@@ -14736,11 +14746,11 @@ class Roap extends EventEmitter$5 {
|
|
|
14736
14746
|
rejectPendingInitiateOfferPromises: (_context, event) => this.rejectPendingInitiateOfferPromises(event.data),
|
|
14737
14747
|
updateIsOkInTransaction: assign((context, event) => {
|
|
14738
14748
|
var _event$headers;
|
|
14739
|
-
return _objectSpread$
|
|
14749
|
+
return _objectSpread$3(_objectSpread$3({}, context), {}, {
|
|
14740
14750
|
isOkInTransaction: !((_event$headers = event.headers) !== null && _event$headers !== void 0 && _event$headers.includes(HEADER_NO_OK_IN_TRANSACTION))
|
|
14741
14751
|
});
|
|
14742
14752
|
}),
|
|
14743
|
-
resetOkInTransaction: assign(context => _objectSpread$
|
|
14753
|
+
resetOkInTransaction: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {
|
|
14744
14754
|
isOkInTransaction: DEFAULT_IS_OK_IN_TRANSACTION
|
|
14745
14755
|
}))
|
|
14746
14756
|
},
|
|
@@ -14782,7 +14792,7 @@ class Roap extends EventEmitter$5 {
|
|
|
14782
14792
|
}
|
|
14783
14793
|
sendRoapOfferMessage(seq, sdp) {
|
|
14784
14794
|
this.log('sendRoapOfferMessage', 'emitting ROAP OFFER');
|
|
14785
|
-
this.emit(exports.
|
|
14795
|
+
this.emit(exports.MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, {
|
|
14786
14796
|
roapMessage: {
|
|
14787
14797
|
seq,
|
|
14788
14798
|
messageType: 'OFFER',
|
|
@@ -14793,7 +14803,7 @@ class Roap extends EventEmitter$5 {
|
|
|
14793
14803
|
}
|
|
14794
14804
|
sendRoapOfferResponseMessage(seq, sdp) {
|
|
14795
14805
|
this.log('sendRoapOfferResponseMessage', 'emitting ROAP OFFER RESPONSE');
|
|
14796
|
-
this.emit(exports.
|
|
14806
|
+
this.emit(exports.MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, {
|
|
14797
14807
|
roapMessage: {
|
|
14798
14808
|
seq,
|
|
14799
14809
|
messageType: 'OFFER_RESPONSE',
|
|
@@ -14803,7 +14813,7 @@ class Roap extends EventEmitter$5 {
|
|
|
14803
14813
|
}
|
|
14804
14814
|
sendRoapOkMessage(seq) {
|
|
14805
14815
|
this.log('sendRoapOkMessage', 'emitting ROAP OK');
|
|
14806
|
-
this.emit(exports.
|
|
14816
|
+
this.emit(exports.MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, {
|
|
14807
14817
|
roapMessage: {
|
|
14808
14818
|
seq,
|
|
14809
14819
|
messageType: 'OK'
|
|
@@ -14812,7 +14822,7 @@ class Roap extends EventEmitter$5 {
|
|
|
14812
14822
|
}
|
|
14813
14823
|
sendRoapAnswerMessage(seq, sdp) {
|
|
14814
14824
|
this.log('sendRoapAnswerMessage', 'emitting ROAP ANSWER');
|
|
14815
|
-
this.emit(exports.
|
|
14825
|
+
this.emit(exports.MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, {
|
|
14816
14826
|
roapMessage: {
|
|
14817
14827
|
seq,
|
|
14818
14828
|
messageType: 'ANSWER',
|
|
@@ -14822,11 +14832,11 @@ class Roap extends EventEmitter$5 {
|
|
|
14822
14832
|
}
|
|
14823
14833
|
sendDoneEvent() {
|
|
14824
14834
|
this.log('sendDoneEvent', 'emitting ROAP DONE');
|
|
14825
|
-
this.emit(exports.
|
|
14835
|
+
this.emit(exports.MediaConnectionEventNames.ROAP_DONE);
|
|
14826
14836
|
}
|
|
14827
14837
|
sendStartedEvent() {
|
|
14828
14838
|
this.log('sendStartedEvent', 'emitting ROAP STARTED');
|
|
14829
|
-
this.emit(exports.
|
|
14839
|
+
this.emit(exports.MediaConnectionEventNames.ROAP_STARTED);
|
|
14830
14840
|
}
|
|
14831
14841
|
sendErrorMessage(seq, errorType) {
|
|
14832
14842
|
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
@@ -14834,7 +14844,7 @@ class Roap extends EventEmitter$5 {
|
|
|
14834
14844
|
retryAfter
|
|
14835
14845
|
} = options;
|
|
14836
14846
|
this.log('sendErrorMessage', "emitting ROAP ERROR (".concat(errorType, ")"));
|
|
14837
|
-
this.emit(exports.
|
|
14847
|
+
this.emit(exports.MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, {
|
|
14838
14848
|
roapMessage: {
|
|
14839
14849
|
seq,
|
|
14840
14850
|
messageType: 'ERROR',
|
|
@@ -14962,8 +14972,8 @@ class Roap extends EventEmitter$5 {
|
|
|
14962
14972
|
}
|
|
14963
14973
|
}
|
|
14964
14974
|
|
|
14965
|
-
function ownKeys$
|
|
14966
|
-
function _objectSpread$
|
|
14975
|
+
function ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
14976
|
+
function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$2(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
14967
14977
|
class RoapMediaConnection extends EventEmitter$5 {
|
|
14968
14978
|
constructor(mediaConnectionConfig, options, debugId) {
|
|
14969
14979
|
super();
|
|
@@ -14997,24 +15007,25 @@ class RoapMediaConnection extends EventEmitter$5 {
|
|
|
14997
15007
|
}
|
|
14998
15008
|
createMediaConnection(mediaConnectionConfig, options, debugId) {
|
|
14999
15009
|
var mediaConnection = new MediaConnection(mediaConnectionConfig, options, debugId);
|
|
15000
|
-
mediaConnection.on(exports.
|
|
15001
|
-
this.forwardEvent(mediaConnection, exports.
|
|
15002
|
-
this.forwardEvent(mediaConnection, exports.
|
|
15003
|
-
this.forwardEvent(mediaConnection, exports.
|
|
15004
|
-
this.forwardEvent(mediaConnection, exports.
|
|
15005
|
-
this.forwardEvent(mediaConnection, exports.
|
|
15006
|
-
this.forwardEvent(mediaConnection, exports.
|
|
15007
|
-
this.forwardEvent(mediaConnection, exports.
|
|
15008
|
-
this.forwardEvent(mediaConnection, exports.
|
|
15009
|
-
this.forwardEvent(mediaConnection, exports.
|
|
15010
|
+
mediaConnection.on(exports.MediaConnectionEventNames.REMOTE_TRACK_ADDED, this.onRemoteTrack.bind(this));
|
|
15011
|
+
this.forwardEvent(mediaConnection, exports.MediaConnectionEventNames.PEER_CONNECTION_STATE_CHANGED);
|
|
15012
|
+
this.forwardEvent(mediaConnection, exports.MediaConnectionEventNames.ICE_CONNECTION_STATE_CHANGED);
|
|
15013
|
+
this.forwardEvent(mediaConnection, exports.MediaConnectionEventNames.REMOTE_SDP_ANSWER_PROCESSED);
|
|
15014
|
+
this.forwardEvent(mediaConnection, exports.MediaConnectionEventNames.REMOTE_SDP_OFFER_PROCESSED);
|
|
15015
|
+
this.forwardEvent(mediaConnection, exports.MediaConnectionEventNames.LOCAL_SDP_ANSWER_GENERATED);
|
|
15016
|
+
this.forwardEvent(mediaConnection, exports.MediaConnectionEventNames.LOCAL_SDP_OFFER_GENERATED);
|
|
15017
|
+
this.forwardEvent(mediaConnection, exports.MediaConnectionEventNames.DTMF_TONE_CHANGED);
|
|
15018
|
+
this.forwardEvent(mediaConnection, exports.MediaConnectionEventNames.ICE_GATHERING_STATE_CHANGED);
|
|
15019
|
+
this.forwardEvent(mediaConnection, exports.MediaConnectionEventNames.ICE_CANDIDATE);
|
|
15020
|
+
this.forwardEvent(mediaConnection, exports.MediaConnectionEventNames.ICE_CANDIDATE_ERROR);
|
|
15010
15021
|
return mediaConnection;
|
|
15011
15022
|
}
|
|
15012
15023
|
createRoap(debugId, seq) {
|
|
15013
15024
|
var roap = new Roap(this.createLocalOffer.bind(this), this.handleRemoteOffer.bind(this), this.handleRemoteAnswer.bind(this), debugId, seq);
|
|
15014
|
-
roap.on(exports.
|
|
15015
|
-
roap.on(exports.
|
|
15016
|
-
roap.on(exports.
|
|
15017
|
-
roap.on(exports.
|
|
15025
|
+
roap.on(exports.MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, event => this.emit(exports.MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, event));
|
|
15026
|
+
roap.on(exports.MediaConnectionEventNames.ROAP_STARTED, () => this.emit(exports.MediaConnectionEventNames.ROAP_STARTED));
|
|
15027
|
+
roap.on(exports.MediaConnectionEventNames.ROAP_DONE, () => this.emit(exports.MediaConnectionEventNames.ROAP_DONE));
|
|
15028
|
+
roap.on(exports.MediaConnectionEventNames.ROAP_FAILURE, error => this.emit(exports.MediaConnectionEventNames.ROAP_FAILURE, error));
|
|
15018
15029
|
return roap;
|
|
15019
15030
|
}
|
|
15020
15031
|
initiateOffer() {
|
|
@@ -15043,7 +15054,7 @@ class RoapMediaConnection extends EventEmitter$5 {
|
|
|
15043
15054
|
reconnect(iceServers) {
|
|
15044
15055
|
var initiateOffer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
15045
15056
|
this.log('reconnect()', "iceServers: ".concat(JSON.stringify(iceServers)));
|
|
15046
|
-
var config = _objectSpread$
|
|
15057
|
+
var config = _objectSpread$2(_objectSpread$2({}, this.mediaConnection.getConfig()), {}, {
|
|
15047
15058
|
iceServers
|
|
15048
15059
|
});
|
|
15049
15060
|
var options = this.mediaConnection.getSendReceiveOptions();
|
|
@@ -15131,7 +15142,7 @@ class RoapMediaConnection extends EventEmitter$5 {
|
|
|
15131
15142
|
this.roap.roapMessageReceived(roapMessage);
|
|
15132
15143
|
}
|
|
15133
15144
|
onRemoteTrack(event) {
|
|
15134
|
-
this.emit(exports.
|
|
15145
|
+
this.emit(exports.MediaConnectionEventNames.REMOTE_TRACK_ADDED, event);
|
|
15135
15146
|
}
|
|
15136
15147
|
createLocalOffer() {
|
|
15137
15148
|
return this.mediaConnection.createLocalOffer();
|
|
@@ -15144,9 +15155,9 @@ class RoapMediaConnection extends EventEmitter$5 {
|
|
|
15144
15155
|
}
|
|
15145
15156
|
}
|
|
15146
15157
|
|
|
15147
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
15148
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
15149
|
-
class MultistreamRoapMediaConnection extends EventEmitter$
|
|
15158
|
+
function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
15159
|
+
function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
15160
|
+
class MultistreamRoapMediaConnection extends EventEmitter$5 {
|
|
15150
15161
|
constructor(mediaConnectionConfig, debugId) {
|
|
15151
15162
|
var metricsCallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : () => {};
|
|
15152
15163
|
var closeCallback = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : () => {};
|
|
@@ -15176,36 +15187,41 @@ class MultistreamRoapMediaConnection extends EventEmitter$6 {
|
|
|
15176
15187
|
}
|
|
15177
15188
|
createMultistreamConnection(mediaConnectionConfig, metricsCallback) {
|
|
15178
15189
|
this.log('createMultistreamConnection()', 'called');
|
|
15179
|
-
var multistreamConnection = new MultistreamConnection(_objectSpread({}, mediaConnectionConfig));
|
|
15190
|
+
var multistreamConnection = new MultistreamConnection(_objectSpread$1({}, mediaConnectionConfig));
|
|
15180
15191
|
multistreamConnection.on(MultistreamConnectionEventNames.ActiveSpeakerNotification, csis => {
|
|
15181
|
-
this.emit(exports.
|
|
15192
|
+
this.emit(exports.MediaConnectionEventNames.ACTIVE_SPEAKERS_CHANGED, csis);
|
|
15182
15193
|
});
|
|
15183
15194
|
multistreamConnection.on(MultistreamConnectionEventNames.AudioSourceCountUpdate, (numTotalSources, numLiveSources, mediaContent) => {
|
|
15184
|
-
this.emit(exports.
|
|
15195
|
+
this.emit(exports.MediaConnectionEventNames.AUDIO_SOURCES_COUNT_CHANGED, numTotalSources, numLiveSources, mediaContent);
|
|
15185
15196
|
});
|
|
15186
15197
|
multistreamConnection.on(MultistreamConnectionEventNames.VideoSourceCountUpdate, (numTotalSources, numLiveSources, mediaContent) => {
|
|
15187
|
-
this.emit(exports.
|
|
15198
|
+
this.emit(exports.MediaConnectionEventNames.VIDEO_SOURCES_COUNT_CHANGED, numTotalSources, numLiveSources, mediaContent);
|
|
15188
15199
|
});
|
|
15189
15200
|
multistreamConnection.on(MultistreamConnectionEventNames.PeerConnectionStateUpdate, state => {
|
|
15190
|
-
this.emit(exports.
|
|
15201
|
+
this.emit(exports.MediaConnectionEventNames.PEER_CONNECTION_STATE_CHANGED, {
|
|
15191
15202
|
state
|
|
15192
15203
|
});
|
|
15193
15204
|
});
|
|
15194
15205
|
multistreamConnection.on(MultistreamConnectionEventNames.IceConnectionStateUpdate, state => {
|
|
15195
|
-
this.emit(exports.
|
|
15206
|
+
this.emit(exports.MediaConnectionEventNames.ICE_CONNECTION_STATE_CHANGED, {
|
|
15196
15207
|
state
|
|
15197
15208
|
});
|
|
15198
15209
|
});
|
|
15199
15210
|
multistreamConnection.on(MultistreamConnectionEventNames.IceGatheringStateUpdate, state => {
|
|
15200
|
-
this.emit(exports.
|
|
15211
|
+
this.emit(exports.MediaConnectionEventNames.ICE_GATHERING_STATE_CHANGED, {
|
|
15201
15212
|
state
|
|
15202
15213
|
});
|
|
15203
15214
|
});
|
|
15204
15215
|
multistreamConnection.on(MultistreamConnectionEventNames.NegotiationNeeded, () => {
|
|
15205
15216
|
this.onNegotiationNeeded();
|
|
15206
15217
|
});
|
|
15218
|
+
multistreamConnection.on(MultistreamConnectionEventNames.IceCandidate, event => {
|
|
15219
|
+
this.emit(exports.MediaConnectionEventNames.ICE_CANDIDATE, {
|
|
15220
|
+
candidate: event.candidate
|
|
15221
|
+
});
|
|
15222
|
+
});
|
|
15207
15223
|
multistreamConnection.on(MultistreamConnectionEventNames.IceCandidateError, event => {
|
|
15208
|
-
this.emit(exports.
|
|
15224
|
+
this.emit(exports.MediaConnectionEventNames.ICE_CANDIDATE_ERROR, {
|
|
15209
15225
|
error: event
|
|
15210
15226
|
});
|
|
15211
15227
|
});
|
|
@@ -15214,10 +15230,10 @@ class MultistreamRoapMediaConnection extends EventEmitter$6 {
|
|
|
15214
15230
|
}
|
|
15215
15231
|
createRoap(debugId, seq) {
|
|
15216
15232
|
var roap = new Roap(this.createLocalOffer.bind(this), this.handleRemoteOffer.bind(this), this.handleRemoteAnswer.bind(this), debugId, seq);
|
|
15217
|
-
roap.on(exports.
|
|
15218
|
-
roap.on(exports.
|
|
15219
|
-
roap.on(exports.
|
|
15220
|
-
roap.on(exports.
|
|
15233
|
+
roap.on(exports.MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, event => this.emit(exports.MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, event));
|
|
15234
|
+
roap.on(exports.MediaConnectionEventNames.ROAP_STARTED, () => this.emit(exports.MediaConnectionEventNames.ROAP_STARTED));
|
|
15235
|
+
roap.on(exports.MediaConnectionEventNames.ROAP_DONE, () => this.emit(exports.MediaConnectionEventNames.ROAP_DONE));
|
|
15236
|
+
roap.on(exports.MediaConnectionEventNames.ROAP_FAILURE, error => this.emit(exports.MediaConnectionEventNames.ROAP_FAILURE, error));
|
|
15221
15237
|
return roap;
|
|
15222
15238
|
}
|
|
15223
15239
|
onNegotiationNeeded() {
|
|
@@ -15314,7 +15330,7 @@ class MultistreamRoapMediaConnection extends EventEmitter$6 {
|
|
|
15314
15330
|
this.log('createLocalOffer()', 'calling this.multistreamConnection.createOffer');
|
|
15315
15331
|
return this.multistreamConnection.createOffer().then(result => {
|
|
15316
15332
|
if (result.sdp) {
|
|
15317
|
-
this.emit(exports.
|
|
15333
|
+
this.emit(exports.MediaConnectionEventNames.LOCAL_SDP_OFFER_GENERATED);
|
|
15318
15334
|
return {
|
|
15319
15335
|
sdp: result.sdp
|
|
15320
15336
|
};
|
|
@@ -15336,7 +15352,7 @@ class MultistreamRoapMediaConnection extends EventEmitter$6 {
|
|
|
15336
15352
|
this.log('handleRemoteAnswer()', 'calling this.multistreamConnection.setAnswer');
|
|
15337
15353
|
return this.multistreamConnection.setAnswer(mungedSdp).then(result => {
|
|
15338
15354
|
this.log('handleRemoteAnswer()', 'this.multistreamConnection.setAnswer resolved');
|
|
15339
|
-
this.emit(exports.
|
|
15355
|
+
this.emit(exports.MediaConnectionEventNames.REMOTE_SDP_ANSWER_PROCESSED);
|
|
15340
15356
|
return result;
|
|
15341
15357
|
}).catch(error => {
|
|
15342
15358
|
this.log('handleRemoteAnswer()', "this.multistreamConnection.setAnswer failed");
|
|
@@ -15354,6 +15370,2773 @@ class MultistreamRoapMediaConnection extends EventEmitter$6 {
|
|
|
15354
15370
|
|
|
15355
15371
|
var Errors = Error$1;
|
|
15356
15372
|
|
|
15373
|
+
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global$1 !== 'undefined' ? global$1 : typeof self !== 'undefined' ? self : {};
|
|
15374
|
+
function getDefaultExportFromCjs(x) {
|
|
15375
|
+
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
|
|
15376
|
+
}
|
|
15377
|
+
var es5 = {
|
|
15378
|
+
exports: {}
|
|
15379
|
+
};
|
|
15380
|
+
(function (module, exports) {
|
|
15381
|
+
!function (e, t) {
|
|
15382
|
+
module.exports = t();
|
|
15383
|
+
}(commonjsGlobal, function () {
|
|
15384
|
+
return function (e) {
|
|
15385
|
+
var t = {};
|
|
15386
|
+
function r(n) {
|
|
15387
|
+
if (t[n]) return t[n].exports;
|
|
15388
|
+
var i = t[n] = {
|
|
15389
|
+
i: n,
|
|
15390
|
+
l: !1,
|
|
15391
|
+
exports: {}
|
|
15392
|
+
};
|
|
15393
|
+
return e[n].call(i.exports, i, i.exports, r), i.l = !0, i.exports;
|
|
15394
|
+
}
|
|
15395
|
+
return r.m = e, r.c = t, r.d = function (e, t, n) {
|
|
15396
|
+
r.o(e, t) || Object.defineProperty(e, t, {
|
|
15397
|
+
enumerable: !0,
|
|
15398
|
+
get: n
|
|
15399
|
+
});
|
|
15400
|
+
}, r.r = function (e) {
|
|
15401
|
+
"undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {
|
|
15402
|
+
value: "Module"
|
|
15403
|
+
}), Object.defineProperty(e, "__esModule", {
|
|
15404
|
+
value: !0
|
|
15405
|
+
});
|
|
15406
|
+
}, r.t = function (e, t) {
|
|
15407
|
+
if (1 & t && (e = r(e)), 8 & t) return e;
|
|
15408
|
+
if (4 & t && "object" == typeof e && e && e.__esModule) return e;
|
|
15409
|
+
var n = Object.create(null);
|
|
15410
|
+
if (r.r(n), Object.defineProperty(n, "default", {
|
|
15411
|
+
enumerable: !0,
|
|
15412
|
+
value: e
|
|
15413
|
+
}), 2 & t && "string" != typeof e) for (var i in e) {
|
|
15414
|
+
r.d(n, i, function (t) {
|
|
15415
|
+
return e[t];
|
|
15416
|
+
}.bind(null, i));
|
|
15417
|
+
}
|
|
15418
|
+
return n;
|
|
15419
|
+
}, r.n = function (e) {
|
|
15420
|
+
var t = e && e.__esModule ? function () {
|
|
15421
|
+
return e.default;
|
|
15422
|
+
} : function () {
|
|
15423
|
+
return e;
|
|
15424
|
+
};
|
|
15425
|
+
return r.d(t, "a", t), t;
|
|
15426
|
+
}, r.o = function (e, t) {
|
|
15427
|
+
return Object.prototype.hasOwnProperty.call(e, t);
|
|
15428
|
+
}, r.p = "", r(r.s = 90);
|
|
15429
|
+
}({
|
|
15430
|
+
17: function _(e, t, r) {
|
|
15431
|
+
t.__esModule = !0, t.default = void 0;
|
|
15432
|
+
var n = r(18),
|
|
15433
|
+
i = function () {
|
|
15434
|
+
function e() {}
|
|
15435
|
+
return e.getFirstMatch = function (e, t) {
|
|
15436
|
+
var r = t.match(e);
|
|
15437
|
+
return r && r.length > 0 && r[1] || "";
|
|
15438
|
+
}, e.getSecondMatch = function (e, t) {
|
|
15439
|
+
var r = t.match(e);
|
|
15440
|
+
return r && r.length > 1 && r[2] || "";
|
|
15441
|
+
}, e.matchAndReturnConst = function (e, t, r) {
|
|
15442
|
+
if (e.test(t)) return r;
|
|
15443
|
+
}, e.getWindowsVersionName = function (e) {
|
|
15444
|
+
switch (e) {
|
|
15445
|
+
case "NT":
|
|
15446
|
+
return "NT";
|
|
15447
|
+
case "XP":
|
|
15448
|
+
return "XP";
|
|
15449
|
+
case "NT 5.0":
|
|
15450
|
+
return "2000";
|
|
15451
|
+
case "NT 5.1":
|
|
15452
|
+
return "XP";
|
|
15453
|
+
case "NT 5.2":
|
|
15454
|
+
return "2003";
|
|
15455
|
+
case "NT 6.0":
|
|
15456
|
+
return "Vista";
|
|
15457
|
+
case "NT 6.1":
|
|
15458
|
+
return "7";
|
|
15459
|
+
case "NT 6.2":
|
|
15460
|
+
return "8";
|
|
15461
|
+
case "NT 6.3":
|
|
15462
|
+
return "8.1";
|
|
15463
|
+
case "NT 10.0":
|
|
15464
|
+
return "10";
|
|
15465
|
+
default:
|
|
15466
|
+
return;
|
|
15467
|
+
}
|
|
15468
|
+
}, e.getMacOSVersionName = function (e) {
|
|
15469
|
+
var t = e.split(".").splice(0, 2).map(function (e) {
|
|
15470
|
+
return parseInt(e, 10) || 0;
|
|
15471
|
+
});
|
|
15472
|
+
if (t.push(0), 10 === t[0]) switch (t[1]) {
|
|
15473
|
+
case 5:
|
|
15474
|
+
return "Leopard";
|
|
15475
|
+
case 6:
|
|
15476
|
+
return "Snow Leopard";
|
|
15477
|
+
case 7:
|
|
15478
|
+
return "Lion";
|
|
15479
|
+
case 8:
|
|
15480
|
+
return "Mountain Lion";
|
|
15481
|
+
case 9:
|
|
15482
|
+
return "Mavericks";
|
|
15483
|
+
case 10:
|
|
15484
|
+
return "Yosemite";
|
|
15485
|
+
case 11:
|
|
15486
|
+
return "El Capitan";
|
|
15487
|
+
case 12:
|
|
15488
|
+
return "Sierra";
|
|
15489
|
+
case 13:
|
|
15490
|
+
return "High Sierra";
|
|
15491
|
+
case 14:
|
|
15492
|
+
return "Mojave";
|
|
15493
|
+
case 15:
|
|
15494
|
+
return "Catalina";
|
|
15495
|
+
default:
|
|
15496
|
+
return;
|
|
15497
|
+
}
|
|
15498
|
+
}, e.getAndroidVersionName = function (e) {
|
|
15499
|
+
var t = e.split(".").splice(0, 2).map(function (e) {
|
|
15500
|
+
return parseInt(e, 10) || 0;
|
|
15501
|
+
});
|
|
15502
|
+
if (t.push(0), !(1 === t[0] && t[1] < 5)) return 1 === t[0] && t[1] < 6 ? "Cupcake" : 1 === t[0] && t[1] >= 6 ? "Donut" : 2 === t[0] && t[1] < 2 ? "Eclair" : 2 === t[0] && 2 === t[1] ? "Froyo" : 2 === t[0] && t[1] > 2 ? "Gingerbread" : 3 === t[0] ? "Honeycomb" : 4 === t[0] && t[1] < 1 ? "Ice Cream Sandwich" : 4 === t[0] && t[1] < 4 ? "Jelly Bean" : 4 === t[0] && t[1] >= 4 ? "KitKat" : 5 === t[0] ? "Lollipop" : 6 === t[0] ? "Marshmallow" : 7 === t[0] ? "Nougat" : 8 === t[0] ? "Oreo" : 9 === t[0] ? "Pie" : void 0;
|
|
15503
|
+
}, e.getVersionPrecision = function (e) {
|
|
15504
|
+
return e.split(".").length;
|
|
15505
|
+
}, e.compareVersions = function (t, r, n) {
|
|
15506
|
+
void 0 === n && (n = !1);
|
|
15507
|
+
var i = e.getVersionPrecision(t),
|
|
15508
|
+
s = e.getVersionPrecision(r),
|
|
15509
|
+
a = Math.max(i, s),
|
|
15510
|
+
o = 0,
|
|
15511
|
+
u = e.map([t, r], function (t) {
|
|
15512
|
+
var r = a - e.getVersionPrecision(t),
|
|
15513
|
+
n = t + new Array(r + 1).join(".0");
|
|
15514
|
+
return e.map(n.split("."), function (e) {
|
|
15515
|
+
return new Array(20 - e.length).join("0") + e;
|
|
15516
|
+
}).reverse();
|
|
15517
|
+
});
|
|
15518
|
+
for (n && (o = a - Math.min(i, s)), a -= 1; a >= o;) {
|
|
15519
|
+
if (u[0][a] > u[1][a]) return 1;
|
|
15520
|
+
if (u[0][a] === u[1][a]) {
|
|
15521
|
+
if (a === o) return 0;
|
|
15522
|
+
a -= 1;
|
|
15523
|
+
} else if (u[0][a] < u[1][a]) return -1;
|
|
15524
|
+
}
|
|
15525
|
+
}, e.map = function (e, t) {
|
|
15526
|
+
var r,
|
|
15527
|
+
n = [];
|
|
15528
|
+
if (Array.prototype.map) return Array.prototype.map.call(e, t);
|
|
15529
|
+
for (r = 0; r < e.length; r += 1) {
|
|
15530
|
+
n.push(t(e[r]));
|
|
15531
|
+
}
|
|
15532
|
+
return n;
|
|
15533
|
+
}, e.find = function (e, t) {
|
|
15534
|
+
var r, n;
|
|
15535
|
+
if (Array.prototype.find) return Array.prototype.find.call(e, t);
|
|
15536
|
+
for (r = 0, n = e.length; r < n; r += 1) {
|
|
15537
|
+
var i = e[r];
|
|
15538
|
+
if (t(i, r)) return i;
|
|
15539
|
+
}
|
|
15540
|
+
}, e.assign = function (e) {
|
|
15541
|
+
for (var t, r, n = e, i = arguments.length, s = new Array(i > 1 ? i - 1 : 0), a = 1; a < i; a++) {
|
|
15542
|
+
s[a - 1] = arguments[a];
|
|
15543
|
+
}
|
|
15544
|
+
if (Object.assign) return Object.assign.apply(Object, [e].concat(s));
|
|
15545
|
+
var o = function o() {
|
|
15546
|
+
var e = s[t];
|
|
15547
|
+
"object" == typeof e && null !== e && Object.keys(e).forEach(function (t) {
|
|
15548
|
+
n[t] = e[t];
|
|
15549
|
+
});
|
|
15550
|
+
};
|
|
15551
|
+
for (t = 0, r = s.length; t < r; t += 1) {
|
|
15552
|
+
o();
|
|
15553
|
+
}
|
|
15554
|
+
return e;
|
|
15555
|
+
}, e.getBrowserAlias = function (e) {
|
|
15556
|
+
return n.BROWSER_ALIASES_MAP[e];
|
|
15557
|
+
}, e.getBrowserTypeByAlias = function (e) {
|
|
15558
|
+
return n.BROWSER_MAP[e] || "";
|
|
15559
|
+
}, e;
|
|
15560
|
+
}();
|
|
15561
|
+
t.default = i, e.exports = t.default;
|
|
15562
|
+
},
|
|
15563
|
+
18: function _(e, t, r) {
|
|
15564
|
+
t.__esModule = !0, t.ENGINE_MAP = t.OS_MAP = t.PLATFORMS_MAP = t.BROWSER_MAP = t.BROWSER_ALIASES_MAP = void 0;
|
|
15565
|
+
t.BROWSER_ALIASES_MAP = {
|
|
15566
|
+
"Amazon Silk": "amazon_silk",
|
|
15567
|
+
"Android Browser": "android",
|
|
15568
|
+
Bada: "bada",
|
|
15569
|
+
BlackBerry: "blackberry",
|
|
15570
|
+
Chrome: "chrome",
|
|
15571
|
+
Chromium: "chromium",
|
|
15572
|
+
Electron: "electron",
|
|
15573
|
+
Epiphany: "epiphany",
|
|
15574
|
+
Firefox: "firefox",
|
|
15575
|
+
Focus: "focus",
|
|
15576
|
+
Generic: "generic",
|
|
15577
|
+
"Google Search": "google_search",
|
|
15578
|
+
Googlebot: "googlebot",
|
|
15579
|
+
"Internet Explorer": "ie",
|
|
15580
|
+
"K-Meleon": "k_meleon",
|
|
15581
|
+
Maxthon: "maxthon",
|
|
15582
|
+
"Microsoft Edge": "edge",
|
|
15583
|
+
"MZ Browser": "mz",
|
|
15584
|
+
"NAVER Whale Browser": "naver",
|
|
15585
|
+
Opera: "opera",
|
|
15586
|
+
"Opera Coast": "opera_coast",
|
|
15587
|
+
PhantomJS: "phantomjs",
|
|
15588
|
+
Puffin: "puffin",
|
|
15589
|
+
QupZilla: "qupzilla",
|
|
15590
|
+
QQ: "qq",
|
|
15591
|
+
QQLite: "qqlite",
|
|
15592
|
+
Safari: "safari",
|
|
15593
|
+
Sailfish: "sailfish",
|
|
15594
|
+
"Samsung Internet for Android": "samsung_internet",
|
|
15595
|
+
SeaMonkey: "seamonkey",
|
|
15596
|
+
Sleipnir: "sleipnir",
|
|
15597
|
+
Swing: "swing",
|
|
15598
|
+
Tizen: "tizen",
|
|
15599
|
+
"UC Browser": "uc",
|
|
15600
|
+
Vivaldi: "vivaldi",
|
|
15601
|
+
"WebOS Browser": "webos",
|
|
15602
|
+
WeChat: "wechat",
|
|
15603
|
+
"Yandex Browser": "yandex",
|
|
15604
|
+
Roku: "roku"
|
|
15605
|
+
};
|
|
15606
|
+
t.BROWSER_MAP = {
|
|
15607
|
+
amazon_silk: "Amazon Silk",
|
|
15608
|
+
android: "Android Browser",
|
|
15609
|
+
bada: "Bada",
|
|
15610
|
+
blackberry: "BlackBerry",
|
|
15611
|
+
chrome: "Chrome",
|
|
15612
|
+
chromium: "Chromium",
|
|
15613
|
+
electron: "Electron",
|
|
15614
|
+
epiphany: "Epiphany",
|
|
15615
|
+
firefox: "Firefox",
|
|
15616
|
+
focus: "Focus",
|
|
15617
|
+
generic: "Generic",
|
|
15618
|
+
googlebot: "Googlebot",
|
|
15619
|
+
google_search: "Google Search",
|
|
15620
|
+
ie: "Internet Explorer",
|
|
15621
|
+
k_meleon: "K-Meleon",
|
|
15622
|
+
maxthon: "Maxthon",
|
|
15623
|
+
edge: "Microsoft Edge",
|
|
15624
|
+
mz: "MZ Browser",
|
|
15625
|
+
naver: "NAVER Whale Browser",
|
|
15626
|
+
opera: "Opera",
|
|
15627
|
+
opera_coast: "Opera Coast",
|
|
15628
|
+
phantomjs: "PhantomJS",
|
|
15629
|
+
puffin: "Puffin",
|
|
15630
|
+
qupzilla: "QupZilla",
|
|
15631
|
+
qq: "QQ Browser",
|
|
15632
|
+
qqlite: "QQ Browser Lite",
|
|
15633
|
+
safari: "Safari",
|
|
15634
|
+
sailfish: "Sailfish",
|
|
15635
|
+
samsung_internet: "Samsung Internet for Android",
|
|
15636
|
+
seamonkey: "SeaMonkey",
|
|
15637
|
+
sleipnir: "Sleipnir",
|
|
15638
|
+
swing: "Swing",
|
|
15639
|
+
tizen: "Tizen",
|
|
15640
|
+
uc: "UC Browser",
|
|
15641
|
+
vivaldi: "Vivaldi",
|
|
15642
|
+
webos: "WebOS Browser",
|
|
15643
|
+
wechat: "WeChat",
|
|
15644
|
+
yandex: "Yandex Browser"
|
|
15645
|
+
};
|
|
15646
|
+
t.PLATFORMS_MAP = {
|
|
15647
|
+
tablet: "tablet",
|
|
15648
|
+
mobile: "mobile",
|
|
15649
|
+
desktop: "desktop",
|
|
15650
|
+
tv: "tv"
|
|
15651
|
+
};
|
|
15652
|
+
t.OS_MAP = {
|
|
15653
|
+
WindowsPhone: "Windows Phone",
|
|
15654
|
+
Windows: "Windows",
|
|
15655
|
+
MacOS: "macOS",
|
|
15656
|
+
iOS: "iOS",
|
|
15657
|
+
Android: "Android",
|
|
15658
|
+
WebOS: "WebOS",
|
|
15659
|
+
BlackBerry: "BlackBerry",
|
|
15660
|
+
Bada: "Bada",
|
|
15661
|
+
Tizen: "Tizen",
|
|
15662
|
+
Linux: "Linux",
|
|
15663
|
+
ChromeOS: "Chrome OS",
|
|
15664
|
+
PlayStation4: "PlayStation 4",
|
|
15665
|
+
Roku: "Roku"
|
|
15666
|
+
};
|
|
15667
|
+
t.ENGINE_MAP = {
|
|
15668
|
+
EdgeHTML: "EdgeHTML",
|
|
15669
|
+
Blink: "Blink",
|
|
15670
|
+
Trident: "Trident",
|
|
15671
|
+
Presto: "Presto",
|
|
15672
|
+
Gecko: "Gecko",
|
|
15673
|
+
WebKit: "WebKit"
|
|
15674
|
+
};
|
|
15675
|
+
},
|
|
15676
|
+
90: function _(e, t, r) {
|
|
15677
|
+
t.__esModule = !0, t.default = void 0;
|
|
15678
|
+
var n,
|
|
15679
|
+
i = (n = r(91)) && n.__esModule ? n : {
|
|
15680
|
+
default: n
|
|
15681
|
+
},
|
|
15682
|
+
s = r(18);
|
|
15683
|
+
function a(e, t) {
|
|
15684
|
+
for (var r = 0; r < t.length; r++) {
|
|
15685
|
+
var n = t[r];
|
|
15686
|
+
n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(e, n.key, n);
|
|
15687
|
+
}
|
|
15688
|
+
}
|
|
15689
|
+
var o = function () {
|
|
15690
|
+
function e() {}
|
|
15691
|
+
var t, r, n;
|
|
15692
|
+
return e.getParser = function (e, t) {
|
|
15693
|
+
if (void 0 === t && (t = !1), "string" != typeof e) throw new Error("UserAgent should be a string");
|
|
15694
|
+
return new i.default(e, t);
|
|
15695
|
+
}, e.parse = function (e) {
|
|
15696
|
+
return new i.default(e).getResult();
|
|
15697
|
+
}, t = e, n = [{
|
|
15698
|
+
key: "BROWSER_MAP",
|
|
15699
|
+
get: function get() {
|
|
15700
|
+
return s.BROWSER_MAP;
|
|
15701
|
+
}
|
|
15702
|
+
}, {
|
|
15703
|
+
key: "ENGINE_MAP",
|
|
15704
|
+
get: function get() {
|
|
15705
|
+
return s.ENGINE_MAP;
|
|
15706
|
+
}
|
|
15707
|
+
}, {
|
|
15708
|
+
key: "OS_MAP",
|
|
15709
|
+
get: function get() {
|
|
15710
|
+
return s.OS_MAP;
|
|
15711
|
+
}
|
|
15712
|
+
}, {
|
|
15713
|
+
key: "PLATFORMS_MAP",
|
|
15714
|
+
get: function get() {
|
|
15715
|
+
return s.PLATFORMS_MAP;
|
|
15716
|
+
}
|
|
15717
|
+
}], (r = null) && a(t.prototype, r), n && a(t, n), e;
|
|
15718
|
+
}();
|
|
15719
|
+
t.default = o, e.exports = t.default;
|
|
15720
|
+
},
|
|
15721
|
+
91: function _(e, t, r) {
|
|
15722
|
+
t.__esModule = !0, t.default = void 0;
|
|
15723
|
+
var n = u(r(92)),
|
|
15724
|
+
i = u(r(93)),
|
|
15725
|
+
s = u(r(94)),
|
|
15726
|
+
a = u(r(95)),
|
|
15727
|
+
o = u(r(17));
|
|
15728
|
+
function u(e) {
|
|
15729
|
+
return e && e.__esModule ? e : {
|
|
15730
|
+
default: e
|
|
15731
|
+
};
|
|
15732
|
+
}
|
|
15733
|
+
var d = function () {
|
|
15734
|
+
function e(e, t) {
|
|
15735
|
+
if (void 0 === t && (t = !1), null == e || "" === e) throw new Error("UserAgent parameter can't be empty");
|
|
15736
|
+
this._ua = e, this.parsedResult = {}, !0 !== t && this.parse();
|
|
15737
|
+
}
|
|
15738
|
+
var t = e.prototype;
|
|
15739
|
+
return t.getUA = function () {
|
|
15740
|
+
return this._ua;
|
|
15741
|
+
}, t.test = function (e) {
|
|
15742
|
+
return e.test(this._ua);
|
|
15743
|
+
}, t.parseBrowser = function () {
|
|
15744
|
+
var e = this;
|
|
15745
|
+
this.parsedResult.browser = {};
|
|
15746
|
+
var t = o.default.find(n.default, function (t) {
|
|
15747
|
+
if ("function" == typeof t.test) return t.test(e);
|
|
15748
|
+
if (t.test instanceof Array) return t.test.some(function (t) {
|
|
15749
|
+
return e.test(t);
|
|
15750
|
+
});
|
|
15751
|
+
throw new Error("Browser's test function is not valid");
|
|
15752
|
+
});
|
|
15753
|
+
return t && (this.parsedResult.browser = t.describe(this.getUA())), this.parsedResult.browser;
|
|
15754
|
+
}, t.getBrowser = function () {
|
|
15755
|
+
return this.parsedResult.browser ? this.parsedResult.browser : this.parseBrowser();
|
|
15756
|
+
}, t.getBrowserName = function (e) {
|
|
15757
|
+
return e ? String(this.getBrowser().name).toLowerCase() || "" : this.getBrowser().name || "";
|
|
15758
|
+
}, t.getBrowserVersion = function () {
|
|
15759
|
+
return this.getBrowser().version;
|
|
15760
|
+
}, t.getOS = function () {
|
|
15761
|
+
return this.parsedResult.os ? this.parsedResult.os : this.parseOS();
|
|
15762
|
+
}, t.parseOS = function () {
|
|
15763
|
+
var e = this;
|
|
15764
|
+
this.parsedResult.os = {};
|
|
15765
|
+
var t = o.default.find(i.default, function (t) {
|
|
15766
|
+
if ("function" == typeof t.test) return t.test(e);
|
|
15767
|
+
if (t.test instanceof Array) return t.test.some(function (t) {
|
|
15768
|
+
return e.test(t);
|
|
15769
|
+
});
|
|
15770
|
+
throw new Error("Browser's test function is not valid");
|
|
15771
|
+
});
|
|
15772
|
+
return t && (this.parsedResult.os = t.describe(this.getUA())), this.parsedResult.os;
|
|
15773
|
+
}, t.getOSName = function (e) {
|
|
15774
|
+
var t = this.getOS().name;
|
|
15775
|
+
return e ? String(t).toLowerCase() || "" : t || "";
|
|
15776
|
+
}, t.getOSVersion = function () {
|
|
15777
|
+
return this.getOS().version;
|
|
15778
|
+
}, t.getPlatform = function () {
|
|
15779
|
+
return this.parsedResult.platform ? this.parsedResult.platform : this.parsePlatform();
|
|
15780
|
+
}, t.getPlatformType = function (e) {
|
|
15781
|
+
void 0 === e && (e = !1);
|
|
15782
|
+
var t = this.getPlatform().type;
|
|
15783
|
+
return e ? String(t).toLowerCase() || "" : t || "";
|
|
15784
|
+
}, t.parsePlatform = function () {
|
|
15785
|
+
var e = this;
|
|
15786
|
+
this.parsedResult.platform = {};
|
|
15787
|
+
var t = o.default.find(s.default, function (t) {
|
|
15788
|
+
if ("function" == typeof t.test) return t.test(e);
|
|
15789
|
+
if (t.test instanceof Array) return t.test.some(function (t) {
|
|
15790
|
+
return e.test(t);
|
|
15791
|
+
});
|
|
15792
|
+
throw new Error("Browser's test function is not valid");
|
|
15793
|
+
});
|
|
15794
|
+
return t && (this.parsedResult.platform = t.describe(this.getUA())), this.parsedResult.platform;
|
|
15795
|
+
}, t.getEngine = function () {
|
|
15796
|
+
return this.parsedResult.engine ? this.parsedResult.engine : this.parseEngine();
|
|
15797
|
+
}, t.getEngineName = function (e) {
|
|
15798
|
+
return e ? String(this.getEngine().name).toLowerCase() || "" : this.getEngine().name || "";
|
|
15799
|
+
}, t.parseEngine = function () {
|
|
15800
|
+
var e = this;
|
|
15801
|
+
this.parsedResult.engine = {};
|
|
15802
|
+
var t = o.default.find(a.default, function (t) {
|
|
15803
|
+
if ("function" == typeof t.test) return t.test(e);
|
|
15804
|
+
if (t.test instanceof Array) return t.test.some(function (t) {
|
|
15805
|
+
return e.test(t);
|
|
15806
|
+
});
|
|
15807
|
+
throw new Error("Browser's test function is not valid");
|
|
15808
|
+
});
|
|
15809
|
+
return t && (this.parsedResult.engine = t.describe(this.getUA())), this.parsedResult.engine;
|
|
15810
|
+
}, t.parse = function () {
|
|
15811
|
+
return this.parseBrowser(), this.parseOS(), this.parsePlatform(), this.parseEngine(), this;
|
|
15812
|
+
}, t.getResult = function () {
|
|
15813
|
+
return o.default.assign({}, this.parsedResult);
|
|
15814
|
+
}, t.satisfies = function (e) {
|
|
15815
|
+
var t = this,
|
|
15816
|
+
r = {},
|
|
15817
|
+
n = 0,
|
|
15818
|
+
i = {},
|
|
15819
|
+
s = 0;
|
|
15820
|
+
if (Object.keys(e).forEach(function (t) {
|
|
15821
|
+
var a = e[t];
|
|
15822
|
+
"string" == typeof a ? (i[t] = a, s += 1) : "object" == typeof a && (r[t] = a, n += 1);
|
|
15823
|
+
}), n > 0) {
|
|
15824
|
+
var a = Object.keys(r),
|
|
15825
|
+
u = o.default.find(a, function (e) {
|
|
15826
|
+
return t.isOS(e);
|
|
15827
|
+
});
|
|
15828
|
+
if (u) {
|
|
15829
|
+
var d = this.satisfies(r[u]);
|
|
15830
|
+
if (void 0 !== d) return d;
|
|
15831
|
+
}
|
|
15832
|
+
var c = o.default.find(a, function (e) {
|
|
15833
|
+
return t.isPlatform(e);
|
|
15834
|
+
});
|
|
15835
|
+
if (c) {
|
|
15836
|
+
var f = this.satisfies(r[c]);
|
|
15837
|
+
if (void 0 !== f) return f;
|
|
15838
|
+
}
|
|
15839
|
+
}
|
|
15840
|
+
if (s > 0) {
|
|
15841
|
+
var l = Object.keys(i),
|
|
15842
|
+
h = o.default.find(l, function (e) {
|
|
15843
|
+
return t.isBrowser(e, !0);
|
|
15844
|
+
});
|
|
15845
|
+
if (void 0 !== h) return this.compareVersion(i[h]);
|
|
15846
|
+
}
|
|
15847
|
+
}, t.isBrowser = function (e, t) {
|
|
15848
|
+
void 0 === t && (t = !1);
|
|
15849
|
+
var r = this.getBrowserName().toLowerCase(),
|
|
15850
|
+
n = e.toLowerCase(),
|
|
15851
|
+
i = o.default.getBrowserTypeByAlias(n);
|
|
15852
|
+
return t && i && (n = i.toLowerCase()), n === r;
|
|
15853
|
+
}, t.compareVersion = function (e) {
|
|
15854
|
+
var t = [0],
|
|
15855
|
+
r = e,
|
|
15856
|
+
n = !1,
|
|
15857
|
+
i = this.getBrowserVersion();
|
|
15858
|
+
if ("string" == typeof i) return ">" === e[0] || "<" === e[0] ? (r = e.substr(1), "=" === e[1] ? (n = !0, r = e.substr(2)) : t = [], ">" === e[0] ? t.push(1) : t.push(-1)) : "=" === e[0] ? r = e.substr(1) : "~" === e[0] && (n = !0, r = e.substr(1)), t.indexOf(o.default.compareVersions(i, r, n)) > -1;
|
|
15859
|
+
}, t.isOS = function (e) {
|
|
15860
|
+
return this.getOSName(!0) === String(e).toLowerCase();
|
|
15861
|
+
}, t.isPlatform = function (e) {
|
|
15862
|
+
return this.getPlatformType(!0) === String(e).toLowerCase();
|
|
15863
|
+
}, t.isEngine = function (e) {
|
|
15864
|
+
return this.getEngineName(!0) === String(e).toLowerCase();
|
|
15865
|
+
}, t.is = function (e, t) {
|
|
15866
|
+
return void 0 === t && (t = !1), this.isBrowser(e, t) || this.isOS(e) || this.isPlatform(e);
|
|
15867
|
+
}, t.some = function (e) {
|
|
15868
|
+
var t = this;
|
|
15869
|
+
return void 0 === e && (e = []), e.some(function (e) {
|
|
15870
|
+
return t.is(e);
|
|
15871
|
+
});
|
|
15872
|
+
}, e;
|
|
15873
|
+
}();
|
|
15874
|
+
t.default = d, e.exports = t.default;
|
|
15875
|
+
},
|
|
15876
|
+
92: function _(e, t, r) {
|
|
15877
|
+
t.__esModule = !0, t.default = void 0;
|
|
15878
|
+
var n,
|
|
15879
|
+
i = (n = r(17)) && n.__esModule ? n : {
|
|
15880
|
+
default: n
|
|
15881
|
+
};
|
|
15882
|
+
var s = /version\/(\d+(\.?_?\d+)+)/i,
|
|
15883
|
+
a = [{
|
|
15884
|
+
test: [/googlebot/i],
|
|
15885
|
+
describe: function describe(e) {
|
|
15886
|
+
var t = {
|
|
15887
|
+
name: "Googlebot"
|
|
15888
|
+
},
|
|
15889
|
+
r = i.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i, e) || i.default.getFirstMatch(s, e);
|
|
15890
|
+
return r && (t.version = r), t;
|
|
15891
|
+
}
|
|
15892
|
+
}, {
|
|
15893
|
+
test: [/opera/i],
|
|
15894
|
+
describe: function describe(e) {
|
|
15895
|
+
var t = {
|
|
15896
|
+
name: "Opera"
|
|
15897
|
+
},
|
|
15898
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
15899
|
+
return r && (t.version = r), t;
|
|
15900
|
+
}
|
|
15901
|
+
}, {
|
|
15902
|
+
test: [/opr\/|opios/i],
|
|
15903
|
+
describe: function describe(e) {
|
|
15904
|
+
var t = {
|
|
15905
|
+
name: "Opera"
|
|
15906
|
+
},
|
|
15907
|
+
r = i.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i, e) || i.default.getFirstMatch(s, e);
|
|
15908
|
+
return r && (t.version = r), t;
|
|
15909
|
+
}
|
|
15910
|
+
}, {
|
|
15911
|
+
test: [/SamsungBrowser/i],
|
|
15912
|
+
describe: function describe(e) {
|
|
15913
|
+
var t = {
|
|
15914
|
+
name: "Samsung Internet for Android"
|
|
15915
|
+
},
|
|
15916
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
15917
|
+
return r && (t.version = r), t;
|
|
15918
|
+
}
|
|
15919
|
+
}, {
|
|
15920
|
+
test: [/Whale/i],
|
|
15921
|
+
describe: function describe(e) {
|
|
15922
|
+
var t = {
|
|
15923
|
+
name: "NAVER Whale Browser"
|
|
15924
|
+
},
|
|
15925
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i, e);
|
|
15926
|
+
return r && (t.version = r), t;
|
|
15927
|
+
}
|
|
15928
|
+
}, {
|
|
15929
|
+
test: [/MZBrowser/i],
|
|
15930
|
+
describe: function describe(e) {
|
|
15931
|
+
var t = {
|
|
15932
|
+
name: "MZ Browser"
|
|
15933
|
+
},
|
|
15934
|
+
r = i.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
15935
|
+
return r && (t.version = r), t;
|
|
15936
|
+
}
|
|
15937
|
+
}, {
|
|
15938
|
+
test: [/focus/i],
|
|
15939
|
+
describe: function describe(e) {
|
|
15940
|
+
var t = {
|
|
15941
|
+
name: "Focus"
|
|
15942
|
+
},
|
|
15943
|
+
r = i.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
15944
|
+
return r && (t.version = r), t;
|
|
15945
|
+
}
|
|
15946
|
+
}, {
|
|
15947
|
+
test: [/swing/i],
|
|
15948
|
+
describe: function describe(e) {
|
|
15949
|
+
var t = {
|
|
15950
|
+
name: "Swing"
|
|
15951
|
+
},
|
|
15952
|
+
r = i.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
15953
|
+
return r && (t.version = r), t;
|
|
15954
|
+
}
|
|
15955
|
+
}, {
|
|
15956
|
+
test: [/coast/i],
|
|
15957
|
+
describe: function describe(e) {
|
|
15958
|
+
var t = {
|
|
15959
|
+
name: "Opera Coast"
|
|
15960
|
+
},
|
|
15961
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
15962
|
+
return r && (t.version = r), t;
|
|
15963
|
+
}
|
|
15964
|
+
}, {
|
|
15965
|
+
test: [/opt\/\d+(?:.?_?\d+)+/i],
|
|
15966
|
+
describe: function describe(e) {
|
|
15967
|
+
var t = {
|
|
15968
|
+
name: "Opera Touch"
|
|
15969
|
+
},
|
|
15970
|
+
r = i.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
15971
|
+
return r && (t.version = r), t;
|
|
15972
|
+
}
|
|
15973
|
+
}, {
|
|
15974
|
+
test: [/yabrowser/i],
|
|
15975
|
+
describe: function describe(e) {
|
|
15976
|
+
var t = {
|
|
15977
|
+
name: "Yandex Browser"
|
|
15978
|
+
},
|
|
15979
|
+
r = i.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
15980
|
+
return r && (t.version = r), t;
|
|
15981
|
+
}
|
|
15982
|
+
}, {
|
|
15983
|
+
test: [/ucbrowser/i],
|
|
15984
|
+
describe: function describe(e) {
|
|
15985
|
+
var t = {
|
|
15986
|
+
name: "UC Browser"
|
|
15987
|
+
},
|
|
15988
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
15989
|
+
return r && (t.version = r), t;
|
|
15990
|
+
}
|
|
15991
|
+
}, {
|
|
15992
|
+
test: [/Maxthon|mxios/i],
|
|
15993
|
+
describe: function describe(e) {
|
|
15994
|
+
var t = {
|
|
15995
|
+
name: "Maxthon"
|
|
15996
|
+
},
|
|
15997
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
15998
|
+
return r && (t.version = r), t;
|
|
15999
|
+
}
|
|
16000
|
+
}, {
|
|
16001
|
+
test: [/epiphany/i],
|
|
16002
|
+
describe: function describe(e) {
|
|
16003
|
+
var t = {
|
|
16004
|
+
name: "Epiphany"
|
|
16005
|
+
},
|
|
16006
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
16007
|
+
return r && (t.version = r), t;
|
|
16008
|
+
}
|
|
16009
|
+
}, {
|
|
16010
|
+
test: [/puffin/i],
|
|
16011
|
+
describe: function describe(e) {
|
|
16012
|
+
var t = {
|
|
16013
|
+
name: "Puffin"
|
|
16014
|
+
},
|
|
16015
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
16016
|
+
return r && (t.version = r), t;
|
|
16017
|
+
}
|
|
16018
|
+
}, {
|
|
16019
|
+
test: [/sleipnir/i],
|
|
16020
|
+
describe: function describe(e) {
|
|
16021
|
+
var t = {
|
|
16022
|
+
name: "Sleipnir"
|
|
16023
|
+
},
|
|
16024
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
16025
|
+
return r && (t.version = r), t;
|
|
16026
|
+
}
|
|
16027
|
+
}, {
|
|
16028
|
+
test: [/k-meleon/i],
|
|
16029
|
+
describe: function describe(e) {
|
|
16030
|
+
var t = {
|
|
16031
|
+
name: "K-Meleon"
|
|
16032
|
+
},
|
|
16033
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
16034
|
+
return r && (t.version = r), t;
|
|
16035
|
+
}
|
|
16036
|
+
}, {
|
|
16037
|
+
test: [/micromessenger/i],
|
|
16038
|
+
describe: function describe(e) {
|
|
16039
|
+
var t = {
|
|
16040
|
+
name: "WeChat"
|
|
16041
|
+
},
|
|
16042
|
+
r = i.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
16043
|
+
return r && (t.version = r), t;
|
|
16044
|
+
}
|
|
16045
|
+
}, {
|
|
16046
|
+
test: [/qqbrowser/i],
|
|
16047
|
+
describe: function describe(e) {
|
|
16048
|
+
var t = {
|
|
16049
|
+
name: /qqbrowserlite/i.test(e) ? "QQ Browser Lite" : "QQ Browser"
|
|
16050
|
+
},
|
|
16051
|
+
r = i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
16052
|
+
return r && (t.version = r), t;
|
|
16053
|
+
}
|
|
16054
|
+
}, {
|
|
16055
|
+
test: [/msie|trident/i],
|
|
16056
|
+
describe: function describe(e) {
|
|
16057
|
+
var t = {
|
|
16058
|
+
name: "Internet Explorer"
|
|
16059
|
+
},
|
|
16060
|
+
r = i.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i, e);
|
|
16061
|
+
return r && (t.version = r), t;
|
|
16062
|
+
}
|
|
16063
|
+
}, {
|
|
16064
|
+
test: [/\sedg\//i],
|
|
16065
|
+
describe: function describe(e) {
|
|
16066
|
+
var t = {
|
|
16067
|
+
name: "Microsoft Edge"
|
|
16068
|
+
},
|
|
16069
|
+
r = i.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i, e);
|
|
16070
|
+
return r && (t.version = r), t;
|
|
16071
|
+
}
|
|
16072
|
+
}, {
|
|
16073
|
+
test: [/edg([ea]|ios)/i],
|
|
16074
|
+
describe: function describe(e) {
|
|
16075
|
+
var t = {
|
|
16076
|
+
name: "Microsoft Edge"
|
|
16077
|
+
},
|
|
16078
|
+
r = i.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i, e);
|
|
16079
|
+
return r && (t.version = r), t;
|
|
16080
|
+
}
|
|
16081
|
+
}, {
|
|
16082
|
+
test: [/vivaldi/i],
|
|
16083
|
+
describe: function describe(e) {
|
|
16084
|
+
var t = {
|
|
16085
|
+
name: "Vivaldi"
|
|
16086
|
+
},
|
|
16087
|
+
r = i.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i, e);
|
|
16088
|
+
return r && (t.version = r), t;
|
|
16089
|
+
}
|
|
16090
|
+
}, {
|
|
16091
|
+
test: [/seamonkey/i],
|
|
16092
|
+
describe: function describe(e) {
|
|
16093
|
+
var t = {
|
|
16094
|
+
name: "SeaMonkey"
|
|
16095
|
+
},
|
|
16096
|
+
r = i.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i, e);
|
|
16097
|
+
return r && (t.version = r), t;
|
|
16098
|
+
}
|
|
16099
|
+
}, {
|
|
16100
|
+
test: [/sailfish/i],
|
|
16101
|
+
describe: function describe(e) {
|
|
16102
|
+
var t = {
|
|
16103
|
+
name: "Sailfish"
|
|
16104
|
+
},
|
|
16105
|
+
r = i.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i, e);
|
|
16106
|
+
return r && (t.version = r), t;
|
|
16107
|
+
}
|
|
16108
|
+
}, {
|
|
16109
|
+
test: [/silk/i],
|
|
16110
|
+
describe: function describe(e) {
|
|
16111
|
+
var t = {
|
|
16112
|
+
name: "Amazon Silk"
|
|
16113
|
+
},
|
|
16114
|
+
r = i.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i, e);
|
|
16115
|
+
return r && (t.version = r), t;
|
|
16116
|
+
}
|
|
16117
|
+
}, {
|
|
16118
|
+
test: [/phantom/i],
|
|
16119
|
+
describe: function describe(e) {
|
|
16120
|
+
var t = {
|
|
16121
|
+
name: "PhantomJS"
|
|
16122
|
+
},
|
|
16123
|
+
r = i.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i, e);
|
|
16124
|
+
return r && (t.version = r), t;
|
|
16125
|
+
}
|
|
16126
|
+
}, {
|
|
16127
|
+
test: [/slimerjs/i],
|
|
16128
|
+
describe: function describe(e) {
|
|
16129
|
+
var t = {
|
|
16130
|
+
name: "SlimerJS"
|
|
16131
|
+
},
|
|
16132
|
+
r = i.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i, e);
|
|
16133
|
+
return r && (t.version = r), t;
|
|
16134
|
+
}
|
|
16135
|
+
}, {
|
|
16136
|
+
test: [/blackberry|\bbb\d+/i, /rim\stablet/i],
|
|
16137
|
+
describe: function describe(e) {
|
|
16138
|
+
var t = {
|
|
16139
|
+
name: "BlackBerry"
|
|
16140
|
+
},
|
|
16141
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i, e);
|
|
16142
|
+
return r && (t.version = r), t;
|
|
16143
|
+
}
|
|
16144
|
+
}, {
|
|
16145
|
+
test: [/(web|hpw)[o0]s/i],
|
|
16146
|
+
describe: function describe(e) {
|
|
16147
|
+
var t = {
|
|
16148
|
+
name: "WebOS Browser"
|
|
16149
|
+
},
|
|
16150
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i, e);
|
|
16151
|
+
return r && (t.version = r), t;
|
|
16152
|
+
}
|
|
16153
|
+
}, {
|
|
16154
|
+
test: [/bada/i],
|
|
16155
|
+
describe: function describe(e) {
|
|
16156
|
+
var t = {
|
|
16157
|
+
name: "Bada"
|
|
16158
|
+
},
|
|
16159
|
+
r = i.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i, e);
|
|
16160
|
+
return r && (t.version = r), t;
|
|
16161
|
+
}
|
|
16162
|
+
}, {
|
|
16163
|
+
test: [/tizen/i],
|
|
16164
|
+
describe: function describe(e) {
|
|
16165
|
+
var t = {
|
|
16166
|
+
name: "Tizen"
|
|
16167
|
+
},
|
|
16168
|
+
r = i.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
16169
|
+
return r && (t.version = r), t;
|
|
16170
|
+
}
|
|
16171
|
+
}, {
|
|
16172
|
+
test: [/qupzilla/i],
|
|
16173
|
+
describe: function describe(e) {
|
|
16174
|
+
var t = {
|
|
16175
|
+
name: "QupZilla"
|
|
16176
|
+
},
|
|
16177
|
+
r = i.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
16178
|
+
return r && (t.version = r), t;
|
|
16179
|
+
}
|
|
16180
|
+
}, {
|
|
16181
|
+
test: [/firefox|iceweasel|fxios/i],
|
|
16182
|
+
describe: function describe(e) {
|
|
16183
|
+
var t = {
|
|
16184
|
+
name: "Firefox"
|
|
16185
|
+
},
|
|
16186
|
+
r = i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
16187
|
+
return r && (t.version = r), t;
|
|
16188
|
+
}
|
|
16189
|
+
}, {
|
|
16190
|
+
test: [/electron/i],
|
|
16191
|
+
describe: function describe(e) {
|
|
16192
|
+
var t = {
|
|
16193
|
+
name: "Electron"
|
|
16194
|
+
},
|
|
16195
|
+
r = i.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i, e);
|
|
16196
|
+
return r && (t.version = r), t;
|
|
16197
|
+
}
|
|
16198
|
+
}, {
|
|
16199
|
+
test: [/MiuiBrowser/i],
|
|
16200
|
+
describe: function describe(e) {
|
|
16201
|
+
var t = {
|
|
16202
|
+
name: "Miui"
|
|
16203
|
+
},
|
|
16204
|
+
r = i.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
16205
|
+
return r && (t.version = r), t;
|
|
16206
|
+
}
|
|
16207
|
+
}, {
|
|
16208
|
+
test: [/chromium/i],
|
|
16209
|
+
describe: function describe(e) {
|
|
16210
|
+
var t = {
|
|
16211
|
+
name: "Chromium"
|
|
16212
|
+
},
|
|
16213
|
+
r = i.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
16214
|
+
return r && (t.version = r), t;
|
|
16215
|
+
}
|
|
16216
|
+
}, {
|
|
16217
|
+
test: [/chrome|crios|crmo/i],
|
|
16218
|
+
describe: function describe(e) {
|
|
16219
|
+
var t = {
|
|
16220
|
+
name: "Chrome"
|
|
16221
|
+
},
|
|
16222
|
+
r = i.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i, e);
|
|
16223
|
+
return r && (t.version = r), t;
|
|
16224
|
+
}
|
|
16225
|
+
}, {
|
|
16226
|
+
test: [/GSA/i],
|
|
16227
|
+
describe: function describe(e) {
|
|
16228
|
+
var t = {
|
|
16229
|
+
name: "Google Search"
|
|
16230
|
+
},
|
|
16231
|
+
r = i.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i, e);
|
|
16232
|
+
return r && (t.version = r), t;
|
|
16233
|
+
}
|
|
16234
|
+
}, {
|
|
16235
|
+
test: function test(e) {
|
|
16236
|
+
var t = !e.test(/like android/i),
|
|
16237
|
+
r = e.test(/android/i);
|
|
16238
|
+
return t && r;
|
|
16239
|
+
},
|
|
16240
|
+
describe: function describe(e) {
|
|
16241
|
+
var t = {
|
|
16242
|
+
name: "Android Browser"
|
|
16243
|
+
},
|
|
16244
|
+
r = i.default.getFirstMatch(s, e);
|
|
16245
|
+
return r && (t.version = r), t;
|
|
16246
|
+
}
|
|
16247
|
+
}, {
|
|
16248
|
+
test: [/playstation 4/i],
|
|
16249
|
+
describe: function describe(e) {
|
|
16250
|
+
var t = {
|
|
16251
|
+
name: "PlayStation 4"
|
|
16252
|
+
},
|
|
16253
|
+
r = i.default.getFirstMatch(s, e);
|
|
16254
|
+
return r && (t.version = r), t;
|
|
16255
|
+
}
|
|
16256
|
+
}, {
|
|
16257
|
+
test: [/safari|applewebkit/i],
|
|
16258
|
+
describe: function describe(e) {
|
|
16259
|
+
var t = {
|
|
16260
|
+
name: "Safari"
|
|
16261
|
+
},
|
|
16262
|
+
r = i.default.getFirstMatch(s, e);
|
|
16263
|
+
return r && (t.version = r), t;
|
|
16264
|
+
}
|
|
16265
|
+
}, {
|
|
16266
|
+
test: [/.*/i],
|
|
16267
|
+
describe: function describe(e) {
|
|
16268
|
+
var t = -1 !== e.search("\\(") ? /^(.*)\/(.*)[ \t]\((.*)/ : /^(.*)\/(.*) /;
|
|
16269
|
+
return {
|
|
16270
|
+
name: i.default.getFirstMatch(t, e),
|
|
16271
|
+
version: i.default.getSecondMatch(t, e)
|
|
16272
|
+
};
|
|
16273
|
+
}
|
|
16274
|
+
}];
|
|
16275
|
+
t.default = a, e.exports = t.default;
|
|
16276
|
+
},
|
|
16277
|
+
93: function _(e, t, r) {
|
|
16278
|
+
t.__esModule = !0, t.default = void 0;
|
|
16279
|
+
var n,
|
|
16280
|
+
i = (n = r(17)) && n.__esModule ? n : {
|
|
16281
|
+
default: n
|
|
16282
|
+
},
|
|
16283
|
+
s = r(18);
|
|
16284
|
+
var a = [{
|
|
16285
|
+
test: [/Roku\/DVP/],
|
|
16286
|
+
describe: function describe(e) {
|
|
16287
|
+
var t = i.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i, e);
|
|
16288
|
+
return {
|
|
16289
|
+
name: s.OS_MAP.Roku,
|
|
16290
|
+
version: t
|
|
16291
|
+
};
|
|
16292
|
+
}
|
|
16293
|
+
}, {
|
|
16294
|
+
test: [/windows phone/i],
|
|
16295
|
+
describe: function describe(e) {
|
|
16296
|
+
var t = i.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i, e);
|
|
16297
|
+
return {
|
|
16298
|
+
name: s.OS_MAP.WindowsPhone,
|
|
16299
|
+
version: t
|
|
16300
|
+
};
|
|
16301
|
+
}
|
|
16302
|
+
}, {
|
|
16303
|
+
test: [/windows /i],
|
|
16304
|
+
describe: function describe(e) {
|
|
16305
|
+
var t = i.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i, e),
|
|
16306
|
+
r = i.default.getWindowsVersionName(t);
|
|
16307
|
+
return {
|
|
16308
|
+
name: s.OS_MAP.Windows,
|
|
16309
|
+
version: t,
|
|
16310
|
+
versionName: r
|
|
16311
|
+
};
|
|
16312
|
+
}
|
|
16313
|
+
}, {
|
|
16314
|
+
test: [/Macintosh(.*?) FxiOS(.*?)\//],
|
|
16315
|
+
describe: function describe(e) {
|
|
16316
|
+
var t = {
|
|
16317
|
+
name: s.OS_MAP.iOS
|
|
16318
|
+
},
|
|
16319
|
+
r = i.default.getSecondMatch(/(Version\/)(\d[\d.]+)/, e);
|
|
16320
|
+
return r && (t.version = r), t;
|
|
16321
|
+
}
|
|
16322
|
+
}, {
|
|
16323
|
+
test: [/macintosh/i],
|
|
16324
|
+
describe: function describe(e) {
|
|
16325
|
+
var t = i.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i, e).replace(/[_\s]/g, "."),
|
|
16326
|
+
r = i.default.getMacOSVersionName(t),
|
|
16327
|
+
n = {
|
|
16328
|
+
name: s.OS_MAP.MacOS,
|
|
16329
|
+
version: t
|
|
16330
|
+
};
|
|
16331
|
+
return r && (n.versionName = r), n;
|
|
16332
|
+
}
|
|
16333
|
+
}, {
|
|
16334
|
+
test: [/(ipod|iphone|ipad)/i],
|
|
16335
|
+
describe: function describe(e) {
|
|
16336
|
+
var t = i.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i, e).replace(/[_\s]/g, ".");
|
|
16337
|
+
return {
|
|
16338
|
+
name: s.OS_MAP.iOS,
|
|
16339
|
+
version: t
|
|
16340
|
+
};
|
|
16341
|
+
}
|
|
16342
|
+
}, {
|
|
16343
|
+
test: function test(e) {
|
|
16344
|
+
var t = !e.test(/like android/i),
|
|
16345
|
+
r = e.test(/android/i);
|
|
16346
|
+
return t && r;
|
|
16347
|
+
},
|
|
16348
|
+
describe: function describe(e) {
|
|
16349
|
+
var t = i.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i, e),
|
|
16350
|
+
r = i.default.getAndroidVersionName(t),
|
|
16351
|
+
n = {
|
|
16352
|
+
name: s.OS_MAP.Android,
|
|
16353
|
+
version: t
|
|
16354
|
+
};
|
|
16355
|
+
return r && (n.versionName = r), n;
|
|
16356
|
+
}
|
|
16357
|
+
}, {
|
|
16358
|
+
test: [/(web|hpw)[o0]s/i],
|
|
16359
|
+
describe: function describe(e) {
|
|
16360
|
+
var t = i.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i, e),
|
|
16361
|
+
r = {
|
|
16362
|
+
name: s.OS_MAP.WebOS
|
|
16363
|
+
};
|
|
16364
|
+
return t && t.length && (r.version = t), r;
|
|
16365
|
+
}
|
|
16366
|
+
}, {
|
|
16367
|
+
test: [/blackberry|\bbb\d+/i, /rim\stablet/i],
|
|
16368
|
+
describe: function describe(e) {
|
|
16369
|
+
var t = i.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i, e) || i.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i, e) || i.default.getFirstMatch(/\bbb(\d+)/i, e);
|
|
16370
|
+
return {
|
|
16371
|
+
name: s.OS_MAP.BlackBerry,
|
|
16372
|
+
version: t
|
|
16373
|
+
};
|
|
16374
|
+
}
|
|
16375
|
+
}, {
|
|
16376
|
+
test: [/bada/i],
|
|
16377
|
+
describe: function describe(e) {
|
|
16378
|
+
var t = i.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i, e);
|
|
16379
|
+
return {
|
|
16380
|
+
name: s.OS_MAP.Bada,
|
|
16381
|
+
version: t
|
|
16382
|
+
};
|
|
16383
|
+
}
|
|
16384
|
+
}, {
|
|
16385
|
+
test: [/tizen/i],
|
|
16386
|
+
describe: function describe(e) {
|
|
16387
|
+
var t = i.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i, e);
|
|
16388
|
+
return {
|
|
16389
|
+
name: s.OS_MAP.Tizen,
|
|
16390
|
+
version: t
|
|
16391
|
+
};
|
|
16392
|
+
}
|
|
16393
|
+
}, {
|
|
16394
|
+
test: [/linux/i],
|
|
16395
|
+
describe: function describe() {
|
|
16396
|
+
return {
|
|
16397
|
+
name: s.OS_MAP.Linux
|
|
16398
|
+
};
|
|
16399
|
+
}
|
|
16400
|
+
}, {
|
|
16401
|
+
test: [/CrOS/],
|
|
16402
|
+
describe: function describe() {
|
|
16403
|
+
return {
|
|
16404
|
+
name: s.OS_MAP.ChromeOS
|
|
16405
|
+
};
|
|
16406
|
+
}
|
|
16407
|
+
}, {
|
|
16408
|
+
test: [/PlayStation 4/],
|
|
16409
|
+
describe: function describe(e) {
|
|
16410
|
+
var t = i.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i, e);
|
|
16411
|
+
return {
|
|
16412
|
+
name: s.OS_MAP.PlayStation4,
|
|
16413
|
+
version: t
|
|
16414
|
+
};
|
|
16415
|
+
}
|
|
16416
|
+
}];
|
|
16417
|
+
t.default = a, e.exports = t.default;
|
|
16418
|
+
},
|
|
16419
|
+
94: function _(e, t, r) {
|
|
16420
|
+
t.__esModule = !0, t.default = void 0;
|
|
16421
|
+
var n,
|
|
16422
|
+
i = (n = r(17)) && n.__esModule ? n : {
|
|
16423
|
+
default: n
|
|
16424
|
+
},
|
|
16425
|
+
s = r(18);
|
|
16426
|
+
var a = [{
|
|
16427
|
+
test: [/googlebot/i],
|
|
16428
|
+
describe: function describe() {
|
|
16429
|
+
return {
|
|
16430
|
+
type: "bot",
|
|
16431
|
+
vendor: "Google"
|
|
16432
|
+
};
|
|
16433
|
+
}
|
|
16434
|
+
}, {
|
|
16435
|
+
test: [/huawei/i],
|
|
16436
|
+
describe: function describe(e) {
|
|
16437
|
+
var t = i.default.getFirstMatch(/(can-l01)/i, e) && "Nova",
|
|
16438
|
+
r = {
|
|
16439
|
+
type: s.PLATFORMS_MAP.mobile,
|
|
16440
|
+
vendor: "Huawei"
|
|
16441
|
+
};
|
|
16442
|
+
return t && (r.model = t), r;
|
|
16443
|
+
}
|
|
16444
|
+
}, {
|
|
16445
|
+
test: [/nexus\s*(?:7|8|9|10).*/i],
|
|
16446
|
+
describe: function describe() {
|
|
16447
|
+
return {
|
|
16448
|
+
type: s.PLATFORMS_MAP.tablet,
|
|
16449
|
+
vendor: "Nexus"
|
|
16450
|
+
};
|
|
16451
|
+
}
|
|
16452
|
+
}, {
|
|
16453
|
+
test: [/ipad/i],
|
|
16454
|
+
describe: function describe() {
|
|
16455
|
+
return {
|
|
16456
|
+
type: s.PLATFORMS_MAP.tablet,
|
|
16457
|
+
vendor: "Apple",
|
|
16458
|
+
model: "iPad"
|
|
16459
|
+
};
|
|
16460
|
+
}
|
|
16461
|
+
}, {
|
|
16462
|
+
test: [/Macintosh(.*?) FxiOS(.*?)\//],
|
|
16463
|
+
describe: function describe() {
|
|
16464
|
+
return {
|
|
16465
|
+
type: s.PLATFORMS_MAP.tablet,
|
|
16466
|
+
vendor: "Apple",
|
|
16467
|
+
model: "iPad"
|
|
16468
|
+
};
|
|
16469
|
+
}
|
|
16470
|
+
}, {
|
|
16471
|
+
test: [/kftt build/i],
|
|
16472
|
+
describe: function describe() {
|
|
16473
|
+
return {
|
|
16474
|
+
type: s.PLATFORMS_MAP.tablet,
|
|
16475
|
+
vendor: "Amazon",
|
|
16476
|
+
model: "Kindle Fire HD 7"
|
|
16477
|
+
};
|
|
16478
|
+
}
|
|
16479
|
+
}, {
|
|
16480
|
+
test: [/silk/i],
|
|
16481
|
+
describe: function describe() {
|
|
16482
|
+
return {
|
|
16483
|
+
type: s.PLATFORMS_MAP.tablet,
|
|
16484
|
+
vendor: "Amazon"
|
|
16485
|
+
};
|
|
16486
|
+
}
|
|
16487
|
+
}, {
|
|
16488
|
+
test: [/tablet(?! pc)/i],
|
|
16489
|
+
describe: function describe() {
|
|
16490
|
+
return {
|
|
16491
|
+
type: s.PLATFORMS_MAP.tablet
|
|
16492
|
+
};
|
|
16493
|
+
}
|
|
16494
|
+
}, {
|
|
16495
|
+
test: function test(e) {
|
|
16496
|
+
var t = e.test(/ipod|iphone/i),
|
|
16497
|
+
r = e.test(/like (ipod|iphone)/i);
|
|
16498
|
+
return t && !r;
|
|
16499
|
+
},
|
|
16500
|
+
describe: function describe(e) {
|
|
16501
|
+
var t = i.default.getFirstMatch(/(ipod|iphone)/i, e);
|
|
16502
|
+
return {
|
|
16503
|
+
type: s.PLATFORMS_MAP.mobile,
|
|
16504
|
+
vendor: "Apple",
|
|
16505
|
+
model: t
|
|
16506
|
+
};
|
|
16507
|
+
}
|
|
16508
|
+
}, {
|
|
16509
|
+
test: [/nexus\s*[0-6].*/i, /galaxy nexus/i],
|
|
16510
|
+
describe: function describe() {
|
|
16511
|
+
return {
|
|
16512
|
+
type: s.PLATFORMS_MAP.mobile,
|
|
16513
|
+
vendor: "Nexus"
|
|
16514
|
+
};
|
|
16515
|
+
}
|
|
16516
|
+
}, {
|
|
16517
|
+
test: [/[^-]mobi/i],
|
|
16518
|
+
describe: function describe() {
|
|
16519
|
+
return {
|
|
16520
|
+
type: s.PLATFORMS_MAP.mobile
|
|
16521
|
+
};
|
|
16522
|
+
}
|
|
16523
|
+
}, {
|
|
16524
|
+
test: function test(e) {
|
|
16525
|
+
return "blackberry" === e.getBrowserName(!0);
|
|
16526
|
+
},
|
|
16527
|
+
describe: function describe() {
|
|
16528
|
+
return {
|
|
16529
|
+
type: s.PLATFORMS_MAP.mobile,
|
|
16530
|
+
vendor: "BlackBerry"
|
|
16531
|
+
};
|
|
16532
|
+
}
|
|
16533
|
+
}, {
|
|
16534
|
+
test: function test(e) {
|
|
16535
|
+
return "bada" === e.getBrowserName(!0);
|
|
16536
|
+
},
|
|
16537
|
+
describe: function describe() {
|
|
16538
|
+
return {
|
|
16539
|
+
type: s.PLATFORMS_MAP.mobile
|
|
16540
|
+
};
|
|
16541
|
+
}
|
|
16542
|
+
}, {
|
|
16543
|
+
test: function test(e) {
|
|
16544
|
+
return "windows phone" === e.getBrowserName();
|
|
16545
|
+
},
|
|
16546
|
+
describe: function describe() {
|
|
16547
|
+
return {
|
|
16548
|
+
type: s.PLATFORMS_MAP.mobile,
|
|
16549
|
+
vendor: "Microsoft"
|
|
16550
|
+
};
|
|
16551
|
+
}
|
|
16552
|
+
}, {
|
|
16553
|
+
test: function test(e) {
|
|
16554
|
+
var t = Number(String(e.getOSVersion()).split(".")[0]);
|
|
16555
|
+
return "android" === e.getOSName(!0) && t >= 3;
|
|
16556
|
+
},
|
|
16557
|
+
describe: function describe() {
|
|
16558
|
+
return {
|
|
16559
|
+
type: s.PLATFORMS_MAP.tablet
|
|
16560
|
+
};
|
|
16561
|
+
}
|
|
16562
|
+
}, {
|
|
16563
|
+
test: function test(e) {
|
|
16564
|
+
return "android" === e.getOSName(!0);
|
|
16565
|
+
},
|
|
16566
|
+
describe: function describe() {
|
|
16567
|
+
return {
|
|
16568
|
+
type: s.PLATFORMS_MAP.mobile
|
|
16569
|
+
};
|
|
16570
|
+
}
|
|
16571
|
+
}, {
|
|
16572
|
+
test: function test(e) {
|
|
16573
|
+
return "macos" === e.getOSName(!0);
|
|
16574
|
+
},
|
|
16575
|
+
describe: function describe() {
|
|
16576
|
+
return {
|
|
16577
|
+
type: s.PLATFORMS_MAP.desktop,
|
|
16578
|
+
vendor: "Apple"
|
|
16579
|
+
};
|
|
16580
|
+
}
|
|
16581
|
+
}, {
|
|
16582
|
+
test: function test(e) {
|
|
16583
|
+
return "windows" === e.getOSName(!0);
|
|
16584
|
+
},
|
|
16585
|
+
describe: function describe() {
|
|
16586
|
+
return {
|
|
16587
|
+
type: s.PLATFORMS_MAP.desktop
|
|
16588
|
+
};
|
|
16589
|
+
}
|
|
16590
|
+
}, {
|
|
16591
|
+
test: function test(e) {
|
|
16592
|
+
return "linux" === e.getOSName(!0);
|
|
16593
|
+
},
|
|
16594
|
+
describe: function describe() {
|
|
16595
|
+
return {
|
|
16596
|
+
type: s.PLATFORMS_MAP.desktop
|
|
16597
|
+
};
|
|
16598
|
+
}
|
|
16599
|
+
}, {
|
|
16600
|
+
test: function test(e) {
|
|
16601
|
+
return "playstation 4" === e.getOSName(!0);
|
|
16602
|
+
},
|
|
16603
|
+
describe: function describe() {
|
|
16604
|
+
return {
|
|
16605
|
+
type: s.PLATFORMS_MAP.tv
|
|
16606
|
+
};
|
|
16607
|
+
}
|
|
16608
|
+
}, {
|
|
16609
|
+
test: function test(e) {
|
|
16610
|
+
return "roku" === e.getOSName(!0);
|
|
16611
|
+
},
|
|
16612
|
+
describe: function describe() {
|
|
16613
|
+
return {
|
|
16614
|
+
type: s.PLATFORMS_MAP.tv
|
|
16615
|
+
};
|
|
16616
|
+
}
|
|
16617
|
+
}];
|
|
16618
|
+
t.default = a, e.exports = t.default;
|
|
16619
|
+
},
|
|
16620
|
+
95: function _(e, t, r) {
|
|
16621
|
+
t.__esModule = !0, t.default = void 0;
|
|
16622
|
+
var n,
|
|
16623
|
+
i = (n = r(17)) && n.__esModule ? n : {
|
|
16624
|
+
default: n
|
|
16625
|
+
},
|
|
16626
|
+
s = r(18);
|
|
16627
|
+
var a = [{
|
|
16628
|
+
test: function test(e) {
|
|
16629
|
+
return "microsoft edge" === e.getBrowserName(!0);
|
|
16630
|
+
},
|
|
16631
|
+
describe: function describe(e) {
|
|
16632
|
+
if (/\sedg\//i.test(e)) return {
|
|
16633
|
+
name: s.ENGINE_MAP.Blink
|
|
16634
|
+
};
|
|
16635
|
+
var t = i.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i, e);
|
|
16636
|
+
return {
|
|
16637
|
+
name: s.ENGINE_MAP.EdgeHTML,
|
|
16638
|
+
version: t
|
|
16639
|
+
};
|
|
16640
|
+
}
|
|
16641
|
+
}, {
|
|
16642
|
+
test: [/trident/i],
|
|
16643
|
+
describe: function describe(e) {
|
|
16644
|
+
var t = {
|
|
16645
|
+
name: s.ENGINE_MAP.Trident
|
|
16646
|
+
},
|
|
16647
|
+
r = i.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i, e);
|
|
16648
|
+
return r && (t.version = r), t;
|
|
16649
|
+
}
|
|
16650
|
+
}, {
|
|
16651
|
+
test: function test(e) {
|
|
16652
|
+
return e.test(/presto/i);
|
|
16653
|
+
},
|
|
16654
|
+
describe: function describe(e) {
|
|
16655
|
+
var t = {
|
|
16656
|
+
name: s.ENGINE_MAP.Presto
|
|
16657
|
+
},
|
|
16658
|
+
r = i.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i, e);
|
|
16659
|
+
return r && (t.version = r), t;
|
|
16660
|
+
}
|
|
16661
|
+
}, {
|
|
16662
|
+
test: function test(e) {
|
|
16663
|
+
var t = e.test(/gecko/i),
|
|
16664
|
+
r = e.test(/like gecko/i);
|
|
16665
|
+
return t && !r;
|
|
16666
|
+
},
|
|
16667
|
+
describe: function describe(e) {
|
|
16668
|
+
var t = {
|
|
16669
|
+
name: s.ENGINE_MAP.Gecko
|
|
16670
|
+
},
|
|
16671
|
+
r = i.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i, e);
|
|
16672
|
+
return r && (t.version = r), t;
|
|
16673
|
+
}
|
|
16674
|
+
}, {
|
|
16675
|
+
test: [/(apple)?webkit\/537\.36/i],
|
|
16676
|
+
describe: function describe() {
|
|
16677
|
+
return {
|
|
16678
|
+
name: s.ENGINE_MAP.Blink
|
|
16679
|
+
};
|
|
16680
|
+
}
|
|
16681
|
+
}, {
|
|
16682
|
+
test: [/(apple)?webkit/i],
|
|
16683
|
+
describe: function describe(e) {
|
|
16684
|
+
var t = {
|
|
16685
|
+
name: s.ENGINE_MAP.WebKit
|
|
16686
|
+
},
|
|
16687
|
+
r = i.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i, e);
|
|
16688
|
+
return r && (t.version = r), t;
|
|
16689
|
+
}
|
|
16690
|
+
}];
|
|
16691
|
+
t.default = a, e.exports = t.default;
|
|
16692
|
+
}
|
|
16693
|
+
});
|
|
16694
|
+
});
|
|
16695
|
+
})(es5);
|
|
16696
|
+
var Bowser = /*@__PURE__*/getDefaultExportFromCjs(es5.exports);
|
|
16697
|
+
var BrowserName;
|
|
16698
|
+
(function (BrowserName) {
|
|
16699
|
+
BrowserName["CHROME"] = "Chrome";
|
|
16700
|
+
BrowserName["FIREFOX"] = "Firefox";
|
|
16701
|
+
BrowserName["EDGE"] = "Microsoft Edge";
|
|
16702
|
+
BrowserName["SAFARI"] = "Safari";
|
|
16703
|
+
})(BrowserName || (BrowserName = {}));
|
|
16704
|
+
var OSName;
|
|
16705
|
+
(function (OSName) {
|
|
16706
|
+
OSName["WINDOWS"] = "Windows";
|
|
16707
|
+
OSName["MAC"] = "macOS";
|
|
16708
|
+
OSName["LINUX"] = "Linux";
|
|
16709
|
+
})(OSName || (OSName = {}));
|
|
16710
|
+
Bowser.getParser(window.navigator.userAgent);
|
|
16711
|
+
class CpuInfo {
|
|
16712
|
+
static getNumLogicalCores() {
|
|
16713
|
+
return navigator.hardwareConcurrency;
|
|
16714
|
+
}
|
|
16715
|
+
}
|
|
16716
|
+
var CapabilityState;
|
|
16717
|
+
(function (CapabilityState) {
|
|
16718
|
+
CapabilityState["NOT_CAPABLE"] = "not capable";
|
|
16719
|
+
CapabilityState["CAPABLE"] = "capable";
|
|
16720
|
+
CapabilityState["UNKNOWN"] = "unknown";
|
|
16721
|
+
})(CapabilityState || (CapabilityState = {}));
|
|
16722
|
+
|
|
16723
|
+
var NetworkType;
|
|
16724
|
+
(function (NetworkType) {
|
|
16725
|
+
NetworkType["VPN"] = "vpn";
|
|
16726
|
+
NetworkType["UNKNOWN"] = "unknown";
|
|
16727
|
+
NetworkType["WIFI"] = "wifi";
|
|
16728
|
+
NetworkType["ETHERNET"] = "ethernet";
|
|
16729
|
+
})(NetworkType || (NetworkType = {}));
|
|
16730
|
+
var MediaDevices;
|
|
16731
|
+
(function (MediaDevices) {
|
|
16732
|
+
MediaDevices["MICROPHONE"] = "microphone";
|
|
16733
|
+
MediaDevices["SPEAKER"] = "speaker";
|
|
16734
|
+
MediaDevices["CAMERA"] = "camera";
|
|
16735
|
+
})(MediaDevices || (MediaDevices = {}));
|
|
16736
|
+
var MediaDirection;
|
|
16737
|
+
(function (MediaDirection) {
|
|
16738
|
+
MediaDirection["SEND"] = "send";
|
|
16739
|
+
MediaDirection["RECEIVE"] = "recv";
|
|
16740
|
+
})(MediaDirection || (MediaDirection = {}));
|
|
16741
|
+
var IpType;
|
|
16742
|
+
(function (IpType) {
|
|
16743
|
+
IpType["REMOTE"] = "remote";
|
|
16744
|
+
IpType["LOCAL"] = "local";
|
|
16745
|
+
})(IpType || (IpType = {}));
|
|
16746
|
+
|
|
16747
|
+
var STATS_DEFAULT = {
|
|
16748
|
+
encryption: 'sha-256',
|
|
16749
|
+
bandwidth: {
|
|
16750
|
+
systemBandwidth: 0,
|
|
16751
|
+
sentPerSecond: 0,
|
|
16752
|
+
encodedPerSecond: 0,
|
|
16753
|
+
helper: {
|
|
16754
|
+
audioBytesSent: 0,
|
|
16755
|
+
videoBytesSent: 0
|
|
16756
|
+
},
|
|
16757
|
+
speed: 0
|
|
16758
|
+
},
|
|
16759
|
+
results: {},
|
|
16760
|
+
connectionType: {
|
|
16761
|
+
systemNetworkType: 'unknown',
|
|
16762
|
+
systemIpAddress: '0.0.0.0',
|
|
16763
|
+
local: {
|
|
16764
|
+
candidateType: 'host',
|
|
16765
|
+
transport: 'UDP',
|
|
16766
|
+
networkType: NetworkType.UNKNOWN
|
|
16767
|
+
},
|
|
16768
|
+
remote: {
|
|
16769
|
+
candidateType: 'host',
|
|
16770
|
+
transport: 'UDP',
|
|
16771
|
+
networkType: NetworkType.UNKNOWN
|
|
16772
|
+
}
|
|
16773
|
+
},
|
|
16774
|
+
resolutions: {},
|
|
16775
|
+
internal: {
|
|
16776
|
+
remote: {},
|
|
16777
|
+
candidates: {}
|
|
16778
|
+
}
|
|
16779
|
+
};
|
|
16780
|
+
var DEFAULT_GET_STATS_FILTER = {
|
|
16781
|
+
types: ['track', 'transport', 'candidate-pair', 'outbound-rtp', 'outboundrtp', 'inbound-rtp', 'inboundrtp', 'remote-inbound-rtp', 'remote-outbound-rtp', 'remote-candidate', 'local-candidate', 'media-source']
|
|
16782
|
+
};
|
|
16783
|
+
var MQA_INTERVAL = 60000;
|
|
16784
|
+
var _UNKNOWN_ = 'UNKNOWN';
|
|
16785
|
+
var emptyMqaInterval = {
|
|
16786
|
+
audioReceive: [],
|
|
16787
|
+
audioTransmit: [],
|
|
16788
|
+
intervalMetadata: {
|
|
16789
|
+
peerReflexiveIP: '0.0.0.0',
|
|
16790
|
+
peripherals: [],
|
|
16791
|
+
cpuInfo: {
|
|
16792
|
+
numberOfCores: 1,
|
|
16793
|
+
description: 'NA',
|
|
16794
|
+
architecture: 'unknown'
|
|
16795
|
+
},
|
|
16796
|
+
processAverageCPU: 0,
|
|
16797
|
+
processMaximumCPU: 0,
|
|
16798
|
+
systemAverageCPU: 0,
|
|
16799
|
+
systemMaximumCPU: 0,
|
|
16800
|
+
screenWidth: 0,
|
|
16801
|
+
screenHeight: 0,
|
|
16802
|
+
screenResolution: 0,
|
|
16803
|
+
appWindowWidth: 0,
|
|
16804
|
+
appWindowHeight: 0,
|
|
16805
|
+
appWindowSize: 0
|
|
16806
|
+
},
|
|
16807
|
+
networkType: '',
|
|
16808
|
+
intervalNumber: 0,
|
|
16809
|
+
videoReceive: [],
|
|
16810
|
+
videoTransmit: []
|
|
16811
|
+
};
|
|
16812
|
+
var emptyAudioReceive = {
|
|
16813
|
+
common: {
|
|
16814
|
+
common: {
|
|
16815
|
+
direction: 'inactive',
|
|
16816
|
+
isMain: true,
|
|
16817
|
+
mariFecEnabled: false,
|
|
16818
|
+
mariRtxEnabled: false,
|
|
16819
|
+
mariQosEnabled: false,
|
|
16820
|
+
mariLiteEnabled: false,
|
|
16821
|
+
multistreamEnabled: false
|
|
16822
|
+
},
|
|
16823
|
+
dtlsBitrate: 0,
|
|
16824
|
+
dtlsPackets: 0,
|
|
16825
|
+
fecBitrate: 0,
|
|
16826
|
+
fecPackets: 0,
|
|
16827
|
+
maxBitrate: 0,
|
|
16828
|
+
mediaHopByHopLost: 0,
|
|
16829
|
+
rtcpBitrate: 0,
|
|
16830
|
+
rtcpPackets: 0,
|
|
16831
|
+
rtpBitrate: 0,
|
|
16832
|
+
rtpHopByHopLost: 0,
|
|
16833
|
+
rtpPackets: 0,
|
|
16834
|
+
rtpRecovered: 0,
|
|
16835
|
+
rtxBitrate: 0,
|
|
16836
|
+
rtxPackets: 0,
|
|
16837
|
+
srtcpUnprotectErrors: 0,
|
|
16838
|
+
srtpUnprotectErrors: 0,
|
|
16839
|
+
stunBitrate: 0,
|
|
16840
|
+
stunPackets: 0,
|
|
16841
|
+
transportType: 'UDP'
|
|
16842
|
+
},
|
|
16843
|
+
streams: []
|
|
16844
|
+
};
|
|
16845
|
+
var emptyAudioReceiveStream = {
|
|
16846
|
+
common: {
|
|
16847
|
+
codec: 'opus',
|
|
16848
|
+
concealedFrames: 0,
|
|
16849
|
+
csi: [],
|
|
16850
|
+
maxConcealRunLength: 0,
|
|
16851
|
+
optimalBitrate: 0,
|
|
16852
|
+
optimalFrameRate: 0,
|
|
16853
|
+
receivedBitrate: 0,
|
|
16854
|
+
receivedFrameRate: 0,
|
|
16855
|
+
renderedFrameRate: 0,
|
|
16856
|
+
requestedBitrate: 0,
|
|
16857
|
+
requestedFrameRate: 0,
|
|
16858
|
+
rtpEndToEndLost: 0,
|
|
16859
|
+
maxRtpJitter: 0,
|
|
16860
|
+
meanRtpJitter: 0,
|
|
16861
|
+
rtpPackets: 0,
|
|
16862
|
+
ssci: 0
|
|
16863
|
+
}
|
|
16864
|
+
};
|
|
16865
|
+
var emptyAudioTransmit = {
|
|
16866
|
+
common: {
|
|
16867
|
+
availableBitrate: 0,
|
|
16868
|
+
common: {
|
|
16869
|
+
direction: 'inactive',
|
|
16870
|
+
isMain: true,
|
|
16871
|
+
mariFecEnabled: false,
|
|
16872
|
+
mariRtxEnabled: false,
|
|
16873
|
+
mariQosEnabled: false,
|
|
16874
|
+
mariLiteEnabled: false,
|
|
16875
|
+
multistreamEnabled: false
|
|
16876
|
+
},
|
|
16877
|
+
dtlsBitrate: 0,
|
|
16878
|
+
dtlsPackets: 0,
|
|
16879
|
+
fecBitrate: 0,
|
|
16880
|
+
fecPackets: 0,
|
|
16881
|
+
maxBitrate: 0,
|
|
16882
|
+
queueDelay: 0,
|
|
16883
|
+
remoteJitter: 0,
|
|
16884
|
+
remoteLossRate: 0,
|
|
16885
|
+
roundTripTime: 0,
|
|
16886
|
+
rtcpBitrate: 0,
|
|
16887
|
+
rtcpPackets: 0,
|
|
16888
|
+
rtpBitrate: 0,
|
|
16889
|
+
rtpPackets: 0,
|
|
16890
|
+
rtxBitrate: 0,
|
|
16891
|
+
rtxPackets: 0,
|
|
16892
|
+
stunBitrate: 0,
|
|
16893
|
+
stunPackets: 0,
|
|
16894
|
+
transportType: 'UDP'
|
|
16895
|
+
},
|
|
16896
|
+
streams: []
|
|
16897
|
+
};
|
|
16898
|
+
var emptyAudioTransmitStream = {
|
|
16899
|
+
common: {
|
|
16900
|
+
codec: 'opus',
|
|
16901
|
+
csi: [],
|
|
16902
|
+
requestedBitrate: 0,
|
|
16903
|
+
requestedFrames: 0,
|
|
16904
|
+
rtpPackets: 0,
|
|
16905
|
+
ssci: 0,
|
|
16906
|
+
transmittedBitrate: 0,
|
|
16907
|
+
transmittedFrameRate: 0
|
|
16908
|
+
}
|
|
16909
|
+
};
|
|
16910
|
+
var emptyVideoReceive = {
|
|
16911
|
+
common: {
|
|
16912
|
+
common: {
|
|
16913
|
+
direction: 'inactive',
|
|
16914
|
+
isMain: true,
|
|
16915
|
+
mariFecEnabled: false,
|
|
16916
|
+
mariRtxEnabled: false,
|
|
16917
|
+
mariQosEnabled: false,
|
|
16918
|
+
mariLiteEnabled: false,
|
|
16919
|
+
multistreamEnabled: false
|
|
16920
|
+
},
|
|
16921
|
+
dtlsBitrate: 0,
|
|
16922
|
+
dtlsPackets: 0,
|
|
16923
|
+
fecBitrate: 0,
|
|
16924
|
+
fecPackets: 0,
|
|
16925
|
+
maxBitrate: 0,
|
|
16926
|
+
mediaHopByHopLost: 0,
|
|
16927
|
+
rtcpBitrate: 0,
|
|
16928
|
+
rtcpPackets: 0,
|
|
16929
|
+
rtpBitrate: 0,
|
|
16930
|
+
rtpHopByHopLost: 0,
|
|
16931
|
+
rtpPackets: 0,
|
|
16932
|
+
rtpRecovered: 0,
|
|
16933
|
+
rtxBitrate: 0,
|
|
16934
|
+
rtxPackets: 0,
|
|
16935
|
+
srtcpUnprotectErrors: 0,
|
|
16936
|
+
srtpUnprotectErrors: 0,
|
|
16937
|
+
stunBitrate: 0,
|
|
16938
|
+
stunPackets: 0,
|
|
16939
|
+
transportType: 'UDP'
|
|
16940
|
+
},
|
|
16941
|
+
streams: []
|
|
16942
|
+
};
|
|
16943
|
+
var emptyVideoReceiveStream = {
|
|
16944
|
+
common: {
|
|
16945
|
+
codec: 'H264',
|
|
16946
|
+
concealedFrames: 0,
|
|
16947
|
+
csi: [],
|
|
16948
|
+
maxConcealRunLength: 0,
|
|
16949
|
+
optimalBitrate: 0,
|
|
16950
|
+
optimalFrameRate: 0,
|
|
16951
|
+
receivedBitrate: 0,
|
|
16952
|
+
receivedFrameRate: 0,
|
|
16953
|
+
renderedFrameRate: 0,
|
|
16954
|
+
requestedBitrate: 0,
|
|
16955
|
+
requestedFrameRate: 0,
|
|
16956
|
+
rtpEndToEndLost: 0,
|
|
16957
|
+
maxRtpJitter: 0,
|
|
16958
|
+
meanRtpJitter: 0,
|
|
16959
|
+
rtpPackets: 0,
|
|
16960
|
+
ssci: 0
|
|
16961
|
+
},
|
|
16962
|
+
h264CodecProfile: 'BP',
|
|
16963
|
+
isActiveSpeaker: false,
|
|
16964
|
+
optimalFrameSize: 0,
|
|
16965
|
+
receivedFrameSize: 0,
|
|
16966
|
+
receivedHeight: 0,
|
|
16967
|
+
receivedKeyFrames: 0,
|
|
16968
|
+
receivedKeyFramesForRequest: 0,
|
|
16969
|
+
receivedKeyFramesSourceChange: 0,
|
|
16970
|
+
receivedKeyFramesUnknown: 0,
|
|
16971
|
+
receivedWidth: 0,
|
|
16972
|
+
requestedFrameSize: 0,
|
|
16973
|
+
requestedKeyFrames: 0
|
|
16974
|
+
};
|
|
16975
|
+
var emptyVideoTransmit = {
|
|
16976
|
+
common: {
|
|
16977
|
+
availableBitrate: 0,
|
|
16978
|
+
common: {
|
|
16979
|
+
direction: 'inactive',
|
|
16980
|
+
isMain: true,
|
|
16981
|
+
mariFecEnabled: false,
|
|
16982
|
+
mariRtxEnabled: false,
|
|
16983
|
+
mariQosEnabled: false,
|
|
16984
|
+
mariLiteEnabled: false,
|
|
16985
|
+
multistreamEnabled: false
|
|
16986
|
+
},
|
|
16987
|
+
dtlsBitrate: 0,
|
|
16988
|
+
dtlsPackets: 0,
|
|
16989
|
+
fecBitrate: 0,
|
|
16990
|
+
fecPackets: 0,
|
|
16991
|
+
maxBitrate: 0,
|
|
16992
|
+
queueDelay: 0,
|
|
16993
|
+
remoteJitter: 0,
|
|
16994
|
+
remoteLossRate: 0,
|
|
16995
|
+
roundTripTime: 0,
|
|
16996
|
+
rtcpBitrate: 0,
|
|
16997
|
+
rtcpPackets: 0,
|
|
16998
|
+
rtpBitrate: 0,
|
|
16999
|
+
rtpPackets: 0,
|
|
17000
|
+
rtxBitrate: 0,
|
|
17001
|
+
rtxPackets: 0,
|
|
17002
|
+
stunBitrate: 0,
|
|
17003
|
+
stunPackets: 0,
|
|
17004
|
+
transportType: 'UDP'
|
|
17005
|
+
},
|
|
17006
|
+
streams: []
|
|
17007
|
+
};
|
|
17008
|
+
var emptyVideoTransmitStream = {
|
|
17009
|
+
common: {
|
|
17010
|
+
codec: 'H264',
|
|
17011
|
+
csi: [],
|
|
17012
|
+
duplicateSsci: 0,
|
|
17013
|
+
requestedBitrate: 0,
|
|
17014
|
+
requestedFrames: 0,
|
|
17015
|
+
rtpPackets: 0,
|
|
17016
|
+
ssci: 0,
|
|
17017
|
+
transmittedBitrate: 0,
|
|
17018
|
+
transmittedFrameRate: 0
|
|
17019
|
+
},
|
|
17020
|
+
h264CodecProfile: 'BP',
|
|
17021
|
+
isAvatar: false,
|
|
17022
|
+
isHardwareEncoded: false,
|
|
17023
|
+
localConfigurationChanges: 2,
|
|
17024
|
+
maxFrameQp: 0,
|
|
17025
|
+
maxNoiseLevel: 0,
|
|
17026
|
+
minRegionQp: 0,
|
|
17027
|
+
remoteConfigurationChanges: 0,
|
|
17028
|
+
requestedFrameSize: 0,
|
|
17029
|
+
requestedKeyFrames: 0,
|
|
17030
|
+
transmittedFrameSize: 0,
|
|
17031
|
+
transmittedHeight: 0,
|
|
17032
|
+
transmittedKeyFrames: 0,
|
|
17033
|
+
transmittedKeyFramesClient: 0,
|
|
17034
|
+
transmittedKeyFramesConfigurationChange: 0,
|
|
17035
|
+
transmittedKeyFramesFeedback: 0,
|
|
17036
|
+
transmittedKeyFramesLocalDrop: 0,
|
|
17037
|
+
transmittedKeyFramesOtherLayer: 0,
|
|
17038
|
+
transmittedKeyFramesPeriodic: 0,
|
|
17039
|
+
transmittedKeyFramesSceneChange: 0,
|
|
17040
|
+
transmittedKeyFramesStartup: 0,
|
|
17041
|
+
transmittedKeyFramesUnknown: 0,
|
|
17042
|
+
transmittedWidth: 0
|
|
17043
|
+
};
|
|
17044
|
+
var emptySender = {
|
|
17045
|
+
trackLabel: '',
|
|
17046
|
+
maxPacketLossRatio: 0,
|
|
17047
|
+
availableBandwidth: 0,
|
|
17048
|
+
bytesSent: 0,
|
|
17049
|
+
meanRemoteJitter: [],
|
|
17050
|
+
meanRoundTripTime: []
|
|
17051
|
+
};
|
|
17052
|
+
var emptyReceiver = {
|
|
17053
|
+
availableBandwidth: 0,
|
|
17054
|
+
bytesReceived: 0,
|
|
17055
|
+
meanRtpJitter: [],
|
|
17056
|
+
meanRoundTripTime: []
|
|
17057
|
+
};
|
|
17058
|
+
var VIDEO_FRAME_RATE_MULTIPLIER = 100;
|
|
17059
|
+
|
|
17060
|
+
var max = array => {
|
|
17061
|
+
if (array.length === 0) {
|
|
17062
|
+
return 0;
|
|
17063
|
+
}
|
|
17064
|
+
return Math.max(...array);
|
|
17065
|
+
};
|
|
17066
|
+
var mean = array => {
|
|
17067
|
+
if (array.length === 0) {
|
|
17068
|
+
return 0;
|
|
17069
|
+
}
|
|
17070
|
+
return array.reduce((a, b) => a + b) / array.length;
|
|
17071
|
+
};
|
|
17072
|
+
var getTotalValueFromBaseType = (stats, sendrecvType, baseMediaType, value) => Object.keys(stats).filter(mt => mt.includes(baseMediaType)).reduce((acc, mt) => {
|
|
17073
|
+
var _stats$mt, _stats$mt$sendrecvTyp;
|
|
17074
|
+
return acc + (((_stats$mt = stats[mt]) === null || _stats$mt === void 0 ? void 0 : (_stats$mt$sendrecvTyp = _stats$mt[sendrecvType]) === null || _stats$mt$sendrecvTyp === void 0 ? void 0 : _stats$mt$sendrecvTyp[value]) || 0);
|
|
17075
|
+
}, 0);
|
|
17076
|
+
var getAudioReceiverMqa = _ref => {
|
|
17077
|
+
var {
|
|
17078
|
+
audioReceiver,
|
|
17079
|
+
statsResults,
|
|
17080
|
+
lastMqaDataSent,
|
|
17081
|
+
baseMediaType,
|
|
17082
|
+
isMultistream
|
|
17083
|
+
} = _ref;
|
|
17084
|
+
var sendrecvType = MediaDirection.RECEIVE;
|
|
17085
|
+
var getLastTotalValue = value => getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
|
|
17086
|
+
var getTotalValue = value => getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);
|
|
17087
|
+
var lastPacketsReceived = getLastTotalValue('totalPacketsReceived');
|
|
17088
|
+
var lastPacketsLost = getLastTotalValue('totalPacketsLost');
|
|
17089
|
+
var lastBytesReceived = getLastTotalValue('totalBytesReceived');
|
|
17090
|
+
var lastFecPacketsReceived = getLastTotalValue('fecPacketsReceived');
|
|
17091
|
+
var lastFecPacketsDiscarded = getLastTotalValue('fecPacketsDiscarded');
|
|
17092
|
+
var totalPacketsReceived = getTotalValue('totalPacketsReceived');
|
|
17093
|
+
var packetsLost = getTotalValue('totalPacketsLost');
|
|
17094
|
+
var totalBytesReceived = getTotalValue('totalBytesReceived');
|
|
17095
|
+
var totalFecPacketsReceived = getTotalValue('fecPacketsReceived');
|
|
17096
|
+
var totalFecPacketsDiscarded = getTotalValue('fecPacketsDiscarded');
|
|
17097
|
+
var mediaTypeKey = Object.keys(statsResults).find(mediaType => mediaType.includes(baseMediaType));
|
|
17098
|
+
if (mediaTypeKey) {
|
|
17099
|
+
var _statsResults$mediaTy;
|
|
17100
|
+
audioReceiver.common.common.direction = ((_statsResults$mediaTy = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy === void 0 ? void 0 : _statsResults$mediaTy.direction) || 'inactive';
|
|
17101
|
+
} else {
|
|
17102
|
+
audioReceiver.common.common.direction = 'inactive';
|
|
17103
|
+
}
|
|
17104
|
+
audioReceiver.common.common.isMain = !baseMediaType.includes('-share');
|
|
17105
|
+
audioReceiver.common.common.multistreamEnabled = isMultistream;
|
|
17106
|
+
audioReceiver.common.transportType = statsResults.connectionType.local.transport;
|
|
17107
|
+
audioReceiver.common.rtpPackets = totalPacketsReceived - lastPacketsReceived;
|
|
17108
|
+
var totalPacketsLost = packetsLost - lastPacketsLost;
|
|
17109
|
+
audioReceiver.common.mediaHopByHopLost = totalPacketsLost;
|
|
17110
|
+
audioReceiver.common.rtpHopByHopLost = totalPacketsLost;
|
|
17111
|
+
var fecRecovered = totalFecPacketsReceived - lastFecPacketsReceived - (totalFecPacketsDiscarded - lastFecPacketsDiscarded);
|
|
17112
|
+
audioReceiver.common.fecPackets = totalFecPacketsReceived - lastFecPacketsReceived;
|
|
17113
|
+
audioReceiver.common.rtpRecovered = fecRecovered;
|
|
17114
|
+
audioReceiver.common.rtpBitrate = (totalBytesReceived - lastBytesReceived) * 8 / 60 || 0;
|
|
17115
|
+
};
|
|
17116
|
+
var getAudioReceiverStreamMqa = _ref2 => {
|
|
17117
|
+
var _lastMqaDataSent$medi, _lastMqaDataSent$medi2, _lastMqaDataSent$medi3, _lastMqaDataSent$medi4, _lastMqaDataSent$medi5, _lastMqaDataSent$medi6, _lastMqaDataSent$medi7, _lastMqaDataSent$medi8;
|
|
17118
|
+
var {
|
|
17119
|
+
audioReceiverStream,
|
|
17120
|
+
statsResults,
|
|
17121
|
+
lastMqaDataSent,
|
|
17122
|
+
mediaType
|
|
17123
|
+
} = _ref2;
|
|
17124
|
+
var sendrecvType = MediaDirection.RECEIVE;
|
|
17125
|
+
var lastPacketsDecoded = ((_lastMqaDataSent$medi = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi === void 0 ? void 0 : _lastMqaDataSent$medi[sendrecvType].totalSamplesDecoded) || 0;
|
|
17126
|
+
var lastSamplesReceived = ((_lastMqaDataSent$medi2 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi2 === void 0 ? void 0 : _lastMqaDataSent$medi2[sendrecvType].totalSamplesReceived) || 0;
|
|
17127
|
+
var lastConcealedSamples = ((_lastMqaDataSent$medi3 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi3 === void 0 ? void 0 : _lastMqaDataSent$medi3[sendrecvType].concealedSamples) || 0;
|
|
17128
|
+
var lastBytesReceived = ((_lastMqaDataSent$medi4 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi4 === void 0 ? void 0 : _lastMqaDataSent$medi4[sendrecvType].totalBytesReceived) || 0;
|
|
17129
|
+
var lastFecPacketsReceived = ((_lastMqaDataSent$medi5 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi5 === void 0 ? void 0 : _lastMqaDataSent$medi5[sendrecvType].fecPacketsReceived) || 0;
|
|
17130
|
+
var lastFecPacketsDiscarded = ((_lastMqaDataSent$medi6 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi6 === void 0 ? void 0 : _lastMqaDataSent$medi6[sendrecvType].fecPacketsDiscarded) || 0;
|
|
17131
|
+
var lastPacketsReceived = ((_lastMqaDataSent$medi7 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi7 === void 0 ? void 0 : _lastMqaDataSent$medi7[sendrecvType].totalPacketsReceived) || 0;
|
|
17132
|
+
var lastPacketsLost = ((_lastMqaDataSent$medi8 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi8 === void 0 ? void 0 : _lastMqaDataSent$medi8[sendrecvType].totalPacketsLost) || 0;
|
|
17133
|
+
var {
|
|
17134
|
+
csi
|
|
17135
|
+
} = statsResults[mediaType];
|
|
17136
|
+
if (csi && !audioReceiverStream.common.csi.includes(csi)) {
|
|
17137
|
+
audioReceiverStream.common.csi.push(csi);
|
|
17138
|
+
}
|
|
17139
|
+
audioReceiverStream.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsReceived - lastPacketsReceived || 0;
|
|
17140
|
+
audioReceiverStream.common.maxRtpJitter = max(statsResults[mediaType][sendrecvType].meanRtpJitter || []) * 1000;
|
|
17141
|
+
audioReceiverStream.common.meanRtpJitter = mean(statsResults[mediaType][sendrecvType].meanRtpJitter || []) * 1000;
|
|
17142
|
+
var fecRecovered = statsResults[mediaType][sendrecvType].fecPacketsReceived - lastFecPacketsReceived - (statsResults[mediaType][sendrecvType].fecPacketsDiscarded - lastFecPacketsDiscarded);
|
|
17143
|
+
audioReceiverStream.common.rtpEndToEndLost = statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost - fecRecovered || 0;
|
|
17144
|
+
audioReceiverStream.common.framesDropped = statsResults[mediaType][sendrecvType].totalSamplesDecoded - lastPacketsDecoded || 0;
|
|
17145
|
+
audioReceiverStream.common.renderedFrameRate = audioReceiverStream.common.framesDropped * 100 / 60 || 0;
|
|
17146
|
+
audioReceiverStream.common.framesReceived = statsResults[mediaType][sendrecvType].totalSamplesReceived - lastSamplesReceived || 0;
|
|
17147
|
+
audioReceiverStream.common.concealedFrames = statsResults[mediaType][sendrecvType].concealedSamples - lastConcealedSamples || 0;
|
|
17148
|
+
audioReceiverStream.common.receivedBitrate = (statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived) * 8 / 60 || 0;
|
|
17149
|
+
};
|
|
17150
|
+
var getAudioSenderMqa = _ref3 => {
|
|
17151
|
+
var {
|
|
17152
|
+
audioSender,
|
|
17153
|
+
statsResults,
|
|
17154
|
+
lastMqaDataSent,
|
|
17155
|
+
baseMediaType,
|
|
17156
|
+
isMultistream
|
|
17157
|
+
} = _ref3;
|
|
17158
|
+
var sendrecvType = MediaDirection.SEND;
|
|
17159
|
+
var getLastTotalValue = value => getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
|
|
17160
|
+
var getTotalValue = value => getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);
|
|
17161
|
+
var lastPacketsSent = getLastTotalValue('totalPacketsSent');
|
|
17162
|
+
var lastPacketsLostTotal = getLastTotalValue('totalPacketsLostOnReceiver');
|
|
17163
|
+
var totalPacketsLostOnReceiver = getTotalValue('totalPacketsLostOnReceiver');
|
|
17164
|
+
var totalPacketsSent = getTotalValue('totalPacketsSent');
|
|
17165
|
+
var meanRemoteJitter = Object.keys(statsResults).filter(mt => mt.includes(baseMediaType)).reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRemoteJitter), []);
|
|
17166
|
+
var meanRoundTripTime = Object.keys(statsResults).filter(mt => mt.includes(baseMediaType)).reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRoundTripTime), []);
|
|
17167
|
+
var mediaTypeKey = Object.keys(statsResults).find(mediaType => mediaType.includes(baseMediaType));
|
|
17168
|
+
if (mediaTypeKey) {
|
|
17169
|
+
var _statsResults$mediaTy2;
|
|
17170
|
+
audioSender.common.common.direction = ((_statsResults$mediaTy2 = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy2 === void 0 ? void 0 : _statsResults$mediaTy2.direction) || 'inactive';
|
|
17171
|
+
} else {
|
|
17172
|
+
audioSender.common.common.direction = 'inactive';
|
|
17173
|
+
}
|
|
17174
|
+
audioSender.common.common.isMain = !baseMediaType.includes('-share');
|
|
17175
|
+
audioSender.common.common.multistreamEnabled = isMultistream;
|
|
17176
|
+
audioSender.common.transportType = statsResults.connectionType.local.transport;
|
|
17177
|
+
audioSender.common.maxRemoteJitter = max(meanRemoteJitter) * 1000;
|
|
17178
|
+
audioSender.common.meanRemoteJitter = mean(meanRemoteJitter) * 1000;
|
|
17179
|
+
audioSender.common.rtpPackets = totalPacketsSent - lastPacketsSent || 0;
|
|
17180
|
+
audioSender.common.availableBitrate = getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, 'availableOutgoingBitrate');
|
|
17181
|
+
var totalPacketsLostForaMin = totalPacketsLostOnReceiver - lastPacketsLostTotal;
|
|
17182
|
+
audioSender.common.maxRemoteLossRate = totalPacketsSent - lastPacketsSent > 0 ? totalPacketsLostForaMin * 100 / (totalPacketsSent - lastPacketsSent) : 0;
|
|
17183
|
+
audioSender.common.maxRoundTripTime = max(meanRoundTripTime) * 1000;
|
|
17184
|
+
audioSender.common.meanRoundTripTime = mean(meanRoundTripTime) * 1000;
|
|
17185
|
+
audioSender.common.roundTripTime = audioSender.common.maxRoundTripTime;
|
|
17186
|
+
var totalBytesSentInaMin = getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, 'totalBytesSent') - getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, 'totalBytesSent');
|
|
17187
|
+
audioSender.common.rtpBitrate = totalBytesSentInaMin ? totalBytesSentInaMin * 8 / 60 : 0;
|
|
17188
|
+
};
|
|
17189
|
+
var getAudioSenderStreamMqa = _ref4 => {
|
|
17190
|
+
var _lastMqaDataSent$medi9, _lastMqaDataSent$medi10, _lastMqaDataSent$medi11, _lastMqaDataSent$medi12;
|
|
17191
|
+
var {
|
|
17192
|
+
audioSenderStream,
|
|
17193
|
+
statsResults,
|
|
17194
|
+
lastMqaDataSent,
|
|
17195
|
+
mediaType
|
|
17196
|
+
} = _ref4;
|
|
17197
|
+
var sendrecvType = MediaDirection.SEND;
|
|
17198
|
+
var lastBytesSent = ((_lastMqaDataSent$medi9 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi9 === void 0 ? void 0 : _lastMqaDataSent$medi9[sendrecvType].totalBytesSent) || 0;
|
|
17199
|
+
var lastFramesEncoded = ((_lastMqaDataSent$medi10 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi10 === void 0 ? void 0 : _lastMqaDataSent$medi10[sendrecvType].totalKeyFramesEncoded) || 0;
|
|
17200
|
+
var lastFirCount = ((_lastMqaDataSent$medi11 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi11 === void 0 ? void 0 : _lastMqaDataSent$medi11[sendrecvType].totalFirCount) || 0;
|
|
17201
|
+
var lastPacketsSent = ((_lastMqaDataSent$medi12 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi12 === void 0 ? void 0 : _lastMqaDataSent$medi12[sendrecvType].totalPacketsSent) || 0;
|
|
17202
|
+
var {
|
|
17203
|
+
csi
|
|
17204
|
+
} = statsResults[mediaType];
|
|
17205
|
+
if (csi && !audioSenderStream.common.csi.includes(csi)) {
|
|
17206
|
+
audioSenderStream.common.csi.push(csi);
|
|
17207
|
+
}
|
|
17208
|
+
audioSenderStream.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;
|
|
17209
|
+
var totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastBytesSent;
|
|
17210
|
+
audioSenderStream.common.transmittedBitrate = totalBytesSentInaMin ? totalBytesSentInaMin * 8 / 60 : 0;
|
|
17211
|
+
audioSenderStream.transmittedKeyFrames = statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastFramesEncoded || 0;
|
|
17212
|
+
audioSenderStream.requestedKeyFrames = statsResults[mediaType][sendrecvType].totalFirCount - lastFirCount || 0;
|
|
17213
|
+
audioSenderStream.requestedBitrate = statsResults[mediaType][sendrecvType].requestedBitrate || 0;
|
|
17214
|
+
};
|
|
17215
|
+
var getVideoReceiverMqa = _ref5 => {
|
|
17216
|
+
var {
|
|
17217
|
+
videoReceiver,
|
|
17218
|
+
statsResults,
|
|
17219
|
+
lastMqaDataSent,
|
|
17220
|
+
baseMediaType,
|
|
17221
|
+
isMultistream
|
|
17222
|
+
} = _ref5;
|
|
17223
|
+
var sendrecvType = MediaDirection.RECEIVE;
|
|
17224
|
+
var getLastTotalValue = value => getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
|
|
17225
|
+
var getTotalValue = value => getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);
|
|
17226
|
+
var lastPacketsReceived = getLastTotalValue('totalPacketsReceived');
|
|
17227
|
+
var lastPacketsLost = getLastTotalValue('totalPacketsLost');
|
|
17228
|
+
var lastBytesReceived = getLastTotalValue('totalBytesReceived');
|
|
17229
|
+
var lastRtxPacketsReceived = getLastTotalValue('totalRtxPacketsReceived');
|
|
17230
|
+
var lastRtxBytesReceived = getLastTotalValue('totalRtxBytesReceived');
|
|
17231
|
+
var packetsLost = getTotalValue('totalPacketsLost');
|
|
17232
|
+
var totalPacketsReceived = getTotalValue('totalPacketsReceived');
|
|
17233
|
+
var totalBytesReceived = getTotalValue('totalBytesReceived');
|
|
17234
|
+
var totalRtxPacketsReceived = getTotalValue('totalRtxPacketsReceived');
|
|
17235
|
+
var totalRtxBytesReceived = getTotalValue('totalRtxBytesReceived');
|
|
17236
|
+
var mediaTypeKey = Object.keys(statsResults).find(mediaType => mediaType.includes(baseMediaType));
|
|
17237
|
+
if (mediaTypeKey) {
|
|
17238
|
+
var _statsResults$mediaTy3;
|
|
17239
|
+
videoReceiver.common.common.direction = ((_statsResults$mediaTy3 = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy3 === void 0 ? void 0 : _statsResults$mediaTy3.direction) || 'inactive';
|
|
17240
|
+
} else {
|
|
17241
|
+
videoReceiver.common.common.direction = 'inactive';
|
|
17242
|
+
}
|
|
17243
|
+
videoReceiver.common.common.isMain = !baseMediaType.includes('-share');
|
|
17244
|
+
videoReceiver.common.common.multistreamEnabled = isMultistream;
|
|
17245
|
+
videoReceiver.common.transportType = statsResults.connectionType.local.transport;
|
|
17246
|
+
videoReceiver.common.rtpPackets = totalPacketsReceived - lastPacketsReceived || 0;
|
|
17247
|
+
var totalPacketsLost = packetsLost - lastPacketsLost;
|
|
17248
|
+
videoReceiver.common.mediaHopByHopLost = totalPacketsLost;
|
|
17249
|
+
videoReceiver.common.rtpHopByHopLost = totalPacketsLost;
|
|
17250
|
+
var totalBytesReceivedInaMin = totalBytesReceived - lastBytesReceived;
|
|
17251
|
+
var totalRtxBytesReceivedInaMin = totalRtxBytesReceived - lastRtxBytesReceived;
|
|
17252
|
+
videoReceiver.common.rtpBitrate = totalBytesReceivedInaMin ? totalBytesReceivedInaMin * 8 / 60 : 0;
|
|
17253
|
+
videoReceiver.common.rtxPackets = totalRtxPacketsReceived - lastRtxPacketsReceived;
|
|
17254
|
+
videoReceiver.common.rtxBitrate = totalRtxBytesReceivedInaMin ? totalRtxBytesReceivedInaMin * 8 / 60 : 0;
|
|
17255
|
+
};
|
|
17256
|
+
var getVideoReceiverStreamMqa = _ref6 => {
|
|
17257
|
+
var _lastMqaDataSent$medi13, _lastMqaDataSent$medi14, _lastMqaDataSent$medi15, _lastMqaDataSent$medi16, _lastMqaDataSent$medi17, _lastMqaDataSent$medi18, _lastMqaDataSent$medi19, _lastMqaDataSent$medi20, _statsResults$mediaTy4, _statsResults$mediaTy5;
|
|
17258
|
+
var {
|
|
17259
|
+
videoReceiverStream,
|
|
17260
|
+
statsResults,
|
|
17261
|
+
lastMqaDataSent,
|
|
17262
|
+
mediaType
|
|
17263
|
+
} = _ref6;
|
|
17264
|
+
var sendrecvType = MediaDirection.RECEIVE;
|
|
17265
|
+
var lastPacketsReceived = ((_lastMqaDataSent$medi13 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi13 === void 0 ? void 0 : _lastMqaDataSent$medi13[sendrecvType].totalPacketsReceived) || 0;
|
|
17266
|
+
var lastPacketsLost = ((_lastMqaDataSent$medi14 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi14 === void 0 ? void 0 : _lastMqaDataSent$medi14[sendrecvType].totalPacketsLost) || 0;
|
|
17267
|
+
var lastBytesReceived = ((_lastMqaDataSent$medi15 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi15 === void 0 ? void 0 : _lastMqaDataSent$medi15[sendrecvType].totalBytesReceived) || 0;
|
|
17268
|
+
var lastFramesReceived = ((_lastMqaDataSent$medi16 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi16 === void 0 ? void 0 : _lastMqaDataSent$medi16[sendrecvType].framesReceived) || 0;
|
|
17269
|
+
var lastFramesDecoded = ((_lastMqaDataSent$medi17 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi17 === void 0 ? void 0 : _lastMqaDataSent$medi17[sendrecvType].framesDecoded) || 0;
|
|
17270
|
+
var lastFramesDropped = ((_lastMqaDataSent$medi18 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi18 === void 0 ? void 0 : _lastMqaDataSent$medi18[sendrecvType].framesDropped) || 0;
|
|
17271
|
+
var lastKeyFramesDecoded = ((_lastMqaDataSent$medi19 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi19 === void 0 ? void 0 : _lastMqaDataSent$medi19[sendrecvType].keyFramesDecoded) || 0;
|
|
17272
|
+
var lastPliCount = ((_lastMqaDataSent$medi20 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi20 === void 0 ? void 0 : _lastMqaDataSent$medi20[sendrecvType].totalPliCount) || 0;
|
|
17273
|
+
var {
|
|
17274
|
+
csi
|
|
17275
|
+
} = statsResults[mediaType];
|
|
17276
|
+
if (csi && !videoReceiverStream.common.csi.includes(csi)) {
|
|
17277
|
+
videoReceiverStream.common.csi.push(csi);
|
|
17278
|
+
}
|
|
17279
|
+
videoReceiverStream.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsReceived - lastPacketsReceived || 0;
|
|
17280
|
+
var totalPacketLoss = statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost || 0;
|
|
17281
|
+
videoReceiverStream.common.rtpEndToEndLost = totalPacketLoss;
|
|
17282
|
+
videoReceiverStream.common.maxRtpJitter = max(statsResults[mediaType][sendrecvType].meanRtpJitter || []) * 1000;
|
|
17283
|
+
videoReceiverStream.common.meanRtpJitter = mean(statsResults[mediaType][sendrecvType].meanRtpJitter || []) * 1000;
|
|
17284
|
+
var totalBytesReceivedInaMin = statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived;
|
|
17285
|
+
videoReceiverStream.common.receivedBitrate = totalBytesReceivedInaMin ? totalBytesReceivedInaMin * 8 / 60 : 0;
|
|
17286
|
+
var totalFrameReceivedInaMin = statsResults[mediaType][sendrecvType].framesReceived - lastFramesReceived;
|
|
17287
|
+
var totalFrameDecodedInaMin = statsResults[mediaType][sendrecvType].framesDecoded - lastFramesDecoded;
|
|
17288
|
+
videoReceiverStream.common.receivedFrameRate = Math.round(totalFrameReceivedInaMin ? totalFrameReceivedInaMin * VIDEO_FRAME_RATE_MULTIPLIER / 60 : 0);
|
|
17289
|
+
videoReceiverStream.common.renderedFrameRate = Math.round(totalFrameDecodedInaMin ? totalFrameDecodedInaMin * VIDEO_FRAME_RATE_MULTIPLIER / 60 : 0);
|
|
17290
|
+
videoReceiverStream.common.framesDropped = statsResults[mediaType][sendrecvType].framesDropped - lastFramesDropped || 0;
|
|
17291
|
+
videoReceiverStream.receivedHeight = statsResults[mediaType][sendrecvType].height || 0;
|
|
17292
|
+
videoReceiverStream.receivedWidth = statsResults[mediaType][sendrecvType].width || 0;
|
|
17293
|
+
videoReceiverStream.receivedFrameSize = videoReceiverStream.receivedHeight * videoReceiverStream.receivedWidth / 256;
|
|
17294
|
+
videoReceiverStream.receivedKeyFrames = statsResults[mediaType][sendrecvType].keyFramesDecoded - lastKeyFramesDecoded || 0;
|
|
17295
|
+
videoReceiverStream.requestedKeyFrames = statsResults[mediaType][sendrecvType].totalPliCount - lastPliCount || 0;
|
|
17296
|
+
videoReceiverStream.isActiveSpeaker = statsResults[mediaType][sendrecvType].isActiveSpeaker || ((_statsResults$mediaTy4 = statsResults[mediaType][sendrecvType].lastActiveSpeakerTimestamp) !== null && _statsResults$mediaTy4 !== void 0 ? _statsResults$mediaTy4 : 0) > 0 && performance.now() + performance.timeOrigin - ((_statsResults$mediaTy5 = statsResults[mediaType][sendrecvType].lastActiveSpeakerTimestamp) !== null && _statsResults$mediaTy5 !== void 0 ? _statsResults$mediaTy5 : 0) < MQA_INTERVAL;
|
|
17297
|
+
};
|
|
17298
|
+
var getVideoSenderMqa = _ref7 => {
|
|
17299
|
+
var {
|
|
17300
|
+
videoSender,
|
|
17301
|
+
statsResults,
|
|
17302
|
+
lastMqaDataSent,
|
|
17303
|
+
baseMediaType,
|
|
17304
|
+
isMultistream
|
|
17305
|
+
} = _ref7;
|
|
17306
|
+
var sendrecvType = MediaDirection.SEND;
|
|
17307
|
+
var getLastTotalValue = value => getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
|
|
17308
|
+
var getTotalValue = value => getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);
|
|
17309
|
+
var lastPacketsSent = getLastTotalValue('totalPacketsSent');
|
|
17310
|
+
var lastBytesSent = getLastTotalValue('totalBytesSent');
|
|
17311
|
+
var lastPacketsLostTotal = getLastTotalValue('totalPacketsLostOnReceiver');
|
|
17312
|
+
var lastRtxPacketsSent = getLastTotalValue('totalRtxPacketsSent');
|
|
17313
|
+
var lastRtxBytesSent = getLastTotalValue('totalRtxBytesSent');
|
|
17314
|
+
var totalPacketsLostOnReceiver = getTotalValue('totalPacketsLostOnReceiver');
|
|
17315
|
+
var totalPacketsSent = getTotalValue('totalPacketsSent');
|
|
17316
|
+
var totalBytesSent = getTotalValue('totalBytesSent');
|
|
17317
|
+
var availableOutgoingBitrate = getTotalValue('availableOutgoingBitrate');
|
|
17318
|
+
var totalRtxPacketsSent = getTotalValue('totalRtxPacketsSent');
|
|
17319
|
+
var totalRtxBytesSent = getTotalValue('totalRtxBytesSent');
|
|
17320
|
+
var mediaTypeKey = Object.keys(statsResults).find(mediaType => mediaType.includes(baseMediaType));
|
|
17321
|
+
if (mediaTypeKey) {
|
|
17322
|
+
var _statsResults$mediaTy6;
|
|
17323
|
+
videoSender.common.common.direction = ((_statsResults$mediaTy6 = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy6 === void 0 ? void 0 : _statsResults$mediaTy6.direction) || 'inactive';
|
|
17324
|
+
} else {
|
|
17325
|
+
videoSender.common.common.direction = 'inactive';
|
|
17326
|
+
}
|
|
17327
|
+
videoSender.common.common.isMain = !baseMediaType.includes('-share');
|
|
17328
|
+
videoSender.common.common.multistreamEnabled = isMultistream;
|
|
17329
|
+
videoSender.common.transportType = statsResults.connectionType.local.transport;
|
|
17330
|
+
var meanRemoteJitter = Object.keys(statsResults).filter(mt => mt.includes(baseMediaType)).reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRemoteJitter), []);
|
|
17331
|
+
var meanRoundTripTime = Object.keys(statsResults).filter(mt => mt.includes(baseMediaType)).reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRoundTripTime), []);
|
|
17332
|
+
videoSender.common.maxRemoteJitter = max(meanRemoteJitter) * 1000;
|
|
17333
|
+
videoSender.common.meanRemoteJitter = mean(meanRemoteJitter) * 1000;
|
|
17334
|
+
videoSender.common.rtpPackets = totalPacketsSent - lastPacketsSent;
|
|
17335
|
+
videoSender.common.availableBitrate = availableOutgoingBitrate;
|
|
17336
|
+
var totalPacketsLostForaMin = totalPacketsLostOnReceiver - lastPacketsLostTotal;
|
|
17337
|
+
videoSender.common.maxRemoteLossRate = totalPacketsSent - lastPacketsSent > 0 ? totalPacketsLostForaMin * 100 / (totalPacketsSent - lastPacketsSent) : 0;
|
|
17338
|
+
videoSender.common.maxRoundTripTime = max(meanRoundTripTime) * 1000;
|
|
17339
|
+
videoSender.common.meanRoundTripTime = mean(meanRoundTripTime) * 1000;
|
|
17340
|
+
videoSender.common.roundTripTime = videoSender.common.maxRoundTripTime;
|
|
17341
|
+
var totalBytesSentInaMin = totalBytesSent - lastBytesSent;
|
|
17342
|
+
var totalRtxBytesSentInaMin = totalRtxBytesSent - lastRtxBytesSent;
|
|
17343
|
+
videoSender.common.rtpBitrate = totalBytesSentInaMin ? totalBytesSentInaMin * 8 / 60 : 0;
|
|
17344
|
+
videoSender.common.rtxPackets = totalRtxPacketsSent - lastRtxPacketsSent;
|
|
17345
|
+
videoSender.common.rtxBitrate = totalRtxBytesSentInaMin ? totalRtxBytesSentInaMin * 8 / 60 : 0;
|
|
17346
|
+
};
|
|
17347
|
+
var getVideoSenderStreamMqa = _ref8 => {
|
|
17348
|
+
var _lastMqaDataSent$medi21, _lastMqaDataSent$medi22, _lastMqaDataSent$medi23, _lastMqaDataSent$medi24, _lastMqaDataSent$medi25;
|
|
17349
|
+
var {
|
|
17350
|
+
videoSenderStream,
|
|
17351
|
+
statsResults,
|
|
17352
|
+
lastMqaDataSent,
|
|
17353
|
+
mediaType
|
|
17354
|
+
} = _ref8;
|
|
17355
|
+
var sendrecvType = MediaDirection.SEND;
|
|
17356
|
+
var lastPacketsSent = ((_lastMqaDataSent$medi21 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi21 === void 0 ? void 0 : _lastMqaDataSent$medi21[sendrecvType].totalPacketsSent) || 0;
|
|
17357
|
+
var lastBytesSent = ((_lastMqaDataSent$medi22 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi22 === void 0 ? void 0 : _lastMqaDataSent$medi22[sendrecvType].totalBytesSent) || 0;
|
|
17358
|
+
var lastKeyFramesEncoded = ((_lastMqaDataSent$medi23 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi23 === void 0 ? void 0 : _lastMqaDataSent$medi23[sendrecvType].totalKeyFramesEncoded) || 0;
|
|
17359
|
+
var lastFirCount = ((_lastMqaDataSent$medi24 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi24 === void 0 ? void 0 : _lastMqaDataSent$medi24[sendrecvType].totalFirCount) || 0;
|
|
17360
|
+
var lastFramesSent = ((_lastMqaDataSent$medi25 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi25 === void 0 ? void 0 : _lastMqaDataSent$medi25[sendrecvType].framesSent) || 0;
|
|
17361
|
+
var {
|
|
17362
|
+
csi
|
|
17363
|
+
} = statsResults[mediaType];
|
|
17364
|
+
if (csi && !videoSenderStream.common.csi.includes(csi)) {
|
|
17365
|
+
videoSenderStream.common.csi.push(csi);
|
|
17366
|
+
}
|
|
17367
|
+
videoSenderStream.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;
|
|
17368
|
+
var totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastBytesSent;
|
|
17369
|
+
videoSenderStream.common.transmittedBitrate = totalBytesSentInaMin ? totalBytesSentInaMin * 8 / 60 : 0;
|
|
17370
|
+
videoSenderStream.transmittedKeyFrames = statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastKeyFramesEncoded || 0;
|
|
17371
|
+
videoSenderStream.requestedKeyFrames = statsResults[mediaType][sendrecvType].totalFirCount - lastFirCount || 0;
|
|
17372
|
+
var totalFrameSentInaMin = statsResults[mediaType][sendrecvType].framesSent - (lastFramesSent || 0);
|
|
17373
|
+
videoSenderStream.common.transmittedFrameRate = Math.round(totalFrameSentInaMin ? totalFrameSentInaMin * VIDEO_FRAME_RATE_MULTIPLIER / 60 : 0);
|
|
17374
|
+
videoSenderStream.transmittedHeight = statsResults[mediaType][sendrecvType].height || 0;
|
|
17375
|
+
videoSenderStream.transmittedWidth = statsResults[mediaType][sendrecvType].width || 0;
|
|
17376
|
+
videoSenderStream.transmittedFrameSize = videoSenderStream.transmittedHeight * videoSenderStream.transmittedWidth / 256;
|
|
17377
|
+
videoSenderStream.requestedBitrate = statsResults[mediaType][sendrecvType].requestedBitrate || 0;
|
|
17378
|
+
videoSenderStream.requestedFrameSize = statsResults[mediaType][sendrecvType].requestedFrameSize || 0;
|
|
17379
|
+
};
|
|
17380
|
+
var isStreamRequested = (statsResults, mediaType, direction) => {
|
|
17381
|
+
var _statsResults$mediaTy7, _statsResults$mediaTy8;
|
|
17382
|
+
var now = performance.timeOrigin + performance.now();
|
|
17383
|
+
var lastUpdateTimestamp = (_statsResults$mediaTy7 = statsResults[mediaType][direction]) === null || _statsResults$mediaTy7 === void 0 ? void 0 : _statsResults$mediaTy7.lastRequestedUpdateTimestamp;
|
|
17384
|
+
var isRequested = (_statsResults$mediaTy8 = statsResults[mediaType][direction]) === null || _statsResults$mediaTy8 === void 0 ? void 0 : _statsResults$mediaTy8.isRequested;
|
|
17385
|
+
return isRequested || lastUpdateTimestamp && now - lastUpdateTimestamp < MQA_INTERVAL;
|
|
17386
|
+
};
|
|
17387
|
+
|
|
17388
|
+
exports.StatsAnalyzerEventNames = void 0;
|
|
17389
|
+
(function (StatsAnalyzerEventNames) {
|
|
17390
|
+
StatsAnalyzerEventNames["MEDIA_QUALITY"] = "MEDIA_QUALITY";
|
|
17391
|
+
StatsAnalyzerEventNames["LOCAL_MEDIA_STARTED"] = "LOCAL_MEDIA_STARTED";
|
|
17392
|
+
StatsAnalyzerEventNames["LOCAL_MEDIA_STOPPED"] = "LOCAL_MEDIA_STOPPED";
|
|
17393
|
+
StatsAnalyzerEventNames["REMOTE_MEDIA_STARTED"] = "REMOTE_MEDIA_STARTED";
|
|
17394
|
+
StatsAnalyzerEventNames["REMOTE_MEDIA_STOPPED"] = "REMOTE_MEDIA_STOPPED";
|
|
17395
|
+
})(exports.StatsAnalyzerEventNames || (exports.StatsAnalyzerEventNames = {}));
|
|
17396
|
+
|
|
17397
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
17398
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
17399
|
+
class StatsAnalyzer extends EventEmitter$5 {
|
|
17400
|
+
constructor(_ref) {
|
|
17401
|
+
var {
|
|
17402
|
+
config,
|
|
17403
|
+
networkQualityMonitor = {},
|
|
17404
|
+
statsResults = STATS_DEFAULT,
|
|
17405
|
+
isMultistream = false
|
|
17406
|
+
} = _ref;
|
|
17407
|
+
super();
|
|
17408
|
+
_defineProperty__default["default"](this, "config", void 0);
|
|
17409
|
+
_defineProperty__default["default"](this, "correlationId", void 0);
|
|
17410
|
+
_defineProperty__default["default"](this, "lastEmittedStartStopEvents", void 0);
|
|
17411
|
+
_defineProperty__default["default"](this, "lastMqaDataSent", void 0);
|
|
17412
|
+
_defineProperty__default["default"](this, "lastStatsResults", void 0);
|
|
17413
|
+
_defineProperty__default["default"](this, "meetingMediaStatus", void 0);
|
|
17414
|
+
_defineProperty__default["default"](this, "mqaInterval", void 0);
|
|
17415
|
+
_defineProperty__default["default"](this, "mqaSentCount", void 0);
|
|
17416
|
+
_defineProperty__default["default"](this, "networkQualityMonitor", void 0);
|
|
17417
|
+
_defineProperty__default["default"](this, "mediaConnection", void 0);
|
|
17418
|
+
_defineProperty__default["default"](this, "statsInterval", void 0);
|
|
17419
|
+
_defineProperty__default["default"](this, "statsResults", void 0);
|
|
17420
|
+
_defineProperty__default["default"](this, "statsStarted", void 0);
|
|
17421
|
+
_defineProperty__default["default"](this, "successfulCandidatePair", void 0);
|
|
17422
|
+
_defineProperty__default["default"](this, "localIpAddress", void 0);
|
|
17423
|
+
_defineProperty__default["default"](this, "shareVideoEncoderImplementation", void 0);
|
|
17424
|
+
_defineProperty__default["default"](this, "isMultistream", void 0);
|
|
17425
|
+
_defineProperty__default["default"](this, "emitStartStopEvents", (mediaType, previousValue, currentValue, isLocal) => {
|
|
17426
|
+
var _this$lastEmittedStar, _this$lastEmittedStar2;
|
|
17427
|
+
if (mediaType !== 'audio' && mediaType !== 'video' && mediaType !== 'share') {
|
|
17428
|
+
throw new Error("Unsupported mediaType: ".concat(mediaType));
|
|
17429
|
+
}
|
|
17430
|
+
if (previousValue === undefined) previousValue = 0;
|
|
17431
|
+
if (currentValue === undefined) currentValue = 0;
|
|
17432
|
+
if (!this.lastEmittedStartStopEvents[mediaType]) {
|
|
17433
|
+
this.lastEmittedStartStopEvents[mediaType] = {};
|
|
17434
|
+
}
|
|
17435
|
+
var lastEmittedEvent = isLocal ? (_this$lastEmittedStar = this.lastEmittedStartStopEvents[mediaType]) === null || _this$lastEmittedStar === void 0 ? void 0 : _this$lastEmittedStar.local : (_this$lastEmittedStar2 = this.lastEmittedStartStopEvents[mediaType]) === null || _this$lastEmittedStar2 === void 0 ? void 0 : _this$lastEmittedStar2.remote;
|
|
17436
|
+
var newEvent;
|
|
17437
|
+
if (currentValue - previousValue > 0) {
|
|
17438
|
+
newEvent = isLocal ? exports.StatsAnalyzerEventNames.LOCAL_MEDIA_STARTED : exports.StatsAnalyzerEventNames.REMOTE_MEDIA_STARTED;
|
|
17439
|
+
} else if (currentValue === previousValue && currentValue > 0) {
|
|
17440
|
+
newEvent = isLocal ? exports.StatsAnalyzerEventNames.LOCAL_MEDIA_STOPPED : exports.StatsAnalyzerEventNames.REMOTE_MEDIA_STOPPED;
|
|
17441
|
+
}
|
|
17442
|
+
if (newEvent && lastEmittedEvent !== newEvent) {
|
|
17443
|
+
var emittedEvent = this.lastEmittedStartStopEvents[mediaType];
|
|
17444
|
+
if (isLocal) {
|
|
17445
|
+
emittedEvent.local = newEvent;
|
|
17446
|
+
} else {
|
|
17447
|
+
emittedEvent.remote = newEvent;
|
|
17448
|
+
}
|
|
17449
|
+
this.emit(newEvent, {
|
|
17450
|
+
mediaType
|
|
17451
|
+
});
|
|
17452
|
+
}
|
|
17453
|
+
});
|
|
17454
|
+
_defineProperty__default["default"](this, "extractAndSetLocalIpAddressInfoForDiagnostics", (successfulCandidatePairId, candidates) => {
|
|
17455
|
+
var newIpAddress = '';
|
|
17456
|
+
if (successfulCandidatePairId && Object.keys(candidates).length > 0) {
|
|
17457
|
+
var localCandidate = candidates[successfulCandidatePairId];
|
|
17458
|
+
if (localCandidate) {
|
|
17459
|
+
if (localCandidate.candidateType === 'host') {
|
|
17460
|
+
newIpAddress = "".concat(localCandidate.address);
|
|
17461
|
+
} else if (localCandidate.candidateType === 'prflx') {
|
|
17462
|
+
if (!localCandidate.relayProtocol) {
|
|
17463
|
+
newIpAddress = "".concat(localCandidate.relatedAddress);
|
|
17464
|
+
} else {
|
|
17465
|
+
newIpAddress = "".concat(localCandidate.address);
|
|
17466
|
+
}
|
|
17467
|
+
}
|
|
17468
|
+
}
|
|
17469
|
+
}
|
|
17470
|
+
this.localIpAddress = newIpAddress;
|
|
17471
|
+
});
|
|
17472
|
+
_defineProperty__default["default"](this, "parseCandidate", (result, type, isSender, isRemote) => {
|
|
17473
|
+
var _this$successfulCandi;
|
|
17474
|
+
if (!result || !result.id) {
|
|
17475
|
+
return;
|
|
17476
|
+
}
|
|
17477
|
+
if (((_this$successfulCandi = this.successfulCandidatePair) === null || _this$successfulCandi === void 0 ? void 0 : _this$successfulCandi.localCandidateId) !== result.id) {
|
|
17478
|
+
return;
|
|
17479
|
+
}
|
|
17480
|
+
var transport;
|
|
17481
|
+
if (result.relayProtocol) {
|
|
17482
|
+
transport = result.relayProtocol.toUpperCase();
|
|
17483
|
+
} else if (result.protocol) {
|
|
17484
|
+
transport = result.protocol.toUpperCase();
|
|
17485
|
+
}
|
|
17486
|
+
var sendRecvType = isSender ? MediaDirection.SEND : MediaDirection.RECEIVE;
|
|
17487
|
+
var ipType = isRemote ? IpType.REMOTE : IpType.LOCAL;
|
|
17488
|
+
if (!this.statsResults.candidates) {
|
|
17489
|
+
this.statsResults.candidates = {};
|
|
17490
|
+
}
|
|
17491
|
+
this.statsResults.candidates[result.id] = {
|
|
17492
|
+
candidateType: result.candidateType,
|
|
17493
|
+
ipAddress: result.ip,
|
|
17494
|
+
relatedAddress: result.relatedAddress,
|
|
17495
|
+
relatedPort: result.relatedPort,
|
|
17496
|
+
relayProtocol: result.relayProtocol,
|
|
17497
|
+
protocol: result.protocol,
|
|
17498
|
+
address: result.address,
|
|
17499
|
+
portNumber: result.port,
|
|
17500
|
+
networkType: result.networkType,
|
|
17501
|
+
priority: result.priority,
|
|
17502
|
+
transport,
|
|
17503
|
+
timestamp: result.time,
|
|
17504
|
+
id: result.id,
|
|
17505
|
+
type: result.type
|
|
17506
|
+
};
|
|
17507
|
+
this.statsResults.connectionType[ipType].candidateType = result.candidateType;
|
|
17508
|
+
this.statsResults.connectionType[ipType].ipAddress = result.ipAddress;
|
|
17509
|
+
this.statsResults.connectionType[ipType].networkType = result.networkType === NetworkType.VPN ? NetworkType.UNKNOWN : result.networkType;
|
|
17510
|
+
this.statsResults.connectionType[ipType].transport = transport;
|
|
17511
|
+
this.statsResults[type][sendRecvType].totalRoundTripTime = result.totalRoundTripTime;
|
|
17512
|
+
});
|
|
17513
|
+
this.statsStarted = false;
|
|
17514
|
+
this.statsResults = statsResults;
|
|
17515
|
+
this.lastStatsResults = null;
|
|
17516
|
+
this.config = config;
|
|
17517
|
+
this.networkQualityMonitor = networkQualityMonitor;
|
|
17518
|
+
this.correlationId = config.correlationId;
|
|
17519
|
+
this.mqaSentCount = -1;
|
|
17520
|
+
this.lastMqaDataSent = {};
|
|
17521
|
+
this.mediaConnection = null;
|
|
17522
|
+
this.lastEmittedStartStopEvents = {};
|
|
17523
|
+
this.successfulCandidatePair = {};
|
|
17524
|
+
this.localIpAddress = '';
|
|
17525
|
+
this.isMultistream = isMultistream;
|
|
17526
|
+
}
|
|
17527
|
+
resetStatsResults() {
|
|
17528
|
+
Object.keys(this.statsResults).forEach(mediaType => {
|
|
17529
|
+
if (mediaType.includes('recv')) {
|
|
17530
|
+
this.statsResults[mediaType].recv.meanRtpJitter = [];
|
|
17531
|
+
}
|
|
17532
|
+
if (mediaType.includes('send')) {
|
|
17533
|
+
this.statsResults[mediaType].send.meanRemoteJitter = [];
|
|
17534
|
+
this.statsResults[mediaType].send.meanRoundTripTime = [];
|
|
17535
|
+
}
|
|
17536
|
+
});
|
|
17537
|
+
}
|
|
17538
|
+
updateMediaStatus(status) {
|
|
17539
|
+
var _this$meetingMediaSta, _this$meetingMediaSta2;
|
|
17540
|
+
this.meetingMediaStatus = {
|
|
17541
|
+
actual: _objectSpread(_objectSpread({}, (_this$meetingMediaSta = this.meetingMediaStatus) === null || _this$meetingMediaSta === void 0 ? void 0 : _this$meetingMediaSta.actual), status === null || status === void 0 ? void 0 : status.actual),
|
|
17542
|
+
expected: _objectSpread(_objectSpread({}, (_this$meetingMediaSta2 = this.meetingMediaStatus) === null || _this$meetingMediaSta2 === void 0 ? void 0 : _this$meetingMediaSta2.expected), status === null || status === void 0 ? void 0 : status.expected)
|
|
17543
|
+
};
|
|
17544
|
+
}
|
|
17545
|
+
sendMqaData() {
|
|
17546
|
+
var newMqa = structuredClone(emptyMqaInterval);
|
|
17547
|
+
Object.keys(this.statsResults).forEach(mediaType => {
|
|
17548
|
+
if (!this.lastMqaDataSent[mediaType]) {
|
|
17549
|
+
this.lastMqaDataSent[mediaType] = {};
|
|
17550
|
+
}
|
|
17551
|
+
if (!this.lastMqaDataSent[mediaType].send && mediaType.includes('-send')) {
|
|
17552
|
+
this.lastMqaDataSent[mediaType].send = {};
|
|
17553
|
+
}
|
|
17554
|
+
if (!this.lastMqaDataSent[mediaType].recv && mediaType.includes('-recv')) {
|
|
17555
|
+
this.lastMqaDataSent[mediaType].recv = {};
|
|
17556
|
+
}
|
|
17557
|
+
});
|
|
17558
|
+
var audioSender = structuredClone(emptyAudioTransmit);
|
|
17559
|
+
var audioShareSender = structuredClone(emptyAudioTransmit);
|
|
17560
|
+
var audioReceiver = structuredClone(emptyAudioReceive);
|
|
17561
|
+
var audioShareReceiver = structuredClone(emptyAudioReceive);
|
|
17562
|
+
var videoSender = structuredClone(emptyVideoTransmit);
|
|
17563
|
+
var videoShareSender = structuredClone(emptyVideoTransmit);
|
|
17564
|
+
var videoReceiver = structuredClone(emptyVideoReceive);
|
|
17565
|
+
var videoShareReceiver = structuredClone(emptyVideoReceive);
|
|
17566
|
+
getAudioSenderMqa({
|
|
17567
|
+
audioSender,
|
|
17568
|
+
statsResults: this.statsResults,
|
|
17569
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
17570
|
+
baseMediaType: 'audio-send',
|
|
17571
|
+
isMultistream: this.isMultistream
|
|
17572
|
+
});
|
|
17573
|
+
newMqa.audioTransmit.push(audioSender);
|
|
17574
|
+
getAudioSenderMqa({
|
|
17575
|
+
audioSender: audioShareSender,
|
|
17576
|
+
statsResults: this.statsResults,
|
|
17577
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
17578
|
+
baseMediaType: 'audio-share-send',
|
|
17579
|
+
isMultistream: this.isMultistream
|
|
17580
|
+
});
|
|
17581
|
+
newMqa.audioTransmit.push(audioShareSender);
|
|
17582
|
+
getAudioReceiverMqa({
|
|
17583
|
+
audioReceiver,
|
|
17584
|
+
statsResults: this.statsResults,
|
|
17585
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
17586
|
+
baseMediaType: 'audio-recv',
|
|
17587
|
+
isMultistream: this.isMultistream
|
|
17588
|
+
});
|
|
17589
|
+
newMqa.audioReceive.push(audioReceiver);
|
|
17590
|
+
getAudioReceiverMqa({
|
|
17591
|
+
audioReceiver: audioShareReceiver,
|
|
17592
|
+
statsResults: this.statsResults,
|
|
17593
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
17594
|
+
baseMediaType: 'audio-share-recv',
|
|
17595
|
+
isMultistream: this.isMultistream
|
|
17596
|
+
});
|
|
17597
|
+
newMqa.audioReceive.push(audioShareReceiver);
|
|
17598
|
+
getVideoSenderMqa({
|
|
17599
|
+
videoSender,
|
|
17600
|
+
statsResults: this.statsResults,
|
|
17601
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
17602
|
+
baseMediaType: 'video-send',
|
|
17603
|
+
isMultistream: this.isMultistream
|
|
17604
|
+
});
|
|
17605
|
+
newMqa.videoTransmit.push(videoSender);
|
|
17606
|
+
getVideoSenderMqa({
|
|
17607
|
+
videoSender: videoShareSender,
|
|
17608
|
+
statsResults: this.statsResults,
|
|
17609
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
17610
|
+
baseMediaType: 'video-share-send',
|
|
17611
|
+
isMultistream: this.isMultistream
|
|
17612
|
+
});
|
|
17613
|
+
newMqa.videoTransmit.push(videoShareSender);
|
|
17614
|
+
getVideoReceiverMqa({
|
|
17615
|
+
videoReceiver,
|
|
17616
|
+
statsResults: this.statsResults,
|
|
17617
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
17618
|
+
baseMediaType: 'video-recv',
|
|
17619
|
+
isMultistream: this.isMultistream
|
|
17620
|
+
});
|
|
17621
|
+
newMqa.videoReceive.push(videoReceiver);
|
|
17622
|
+
getVideoReceiverMqa({
|
|
17623
|
+
videoReceiver: videoShareReceiver,
|
|
17624
|
+
statsResults: this.statsResults,
|
|
17625
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
17626
|
+
baseMediaType: 'video-share-recv',
|
|
17627
|
+
isMultistream: this.isMultistream
|
|
17628
|
+
});
|
|
17629
|
+
newMqa.videoReceive.push(videoShareReceiver);
|
|
17630
|
+
Object.keys(this.statsResults).forEach(mediaType => {
|
|
17631
|
+
if (mediaType.startsWith('audio-send')) {
|
|
17632
|
+
var audioSenderStream = structuredClone(emptyAudioTransmitStream);
|
|
17633
|
+
getAudioSenderStreamMqa({
|
|
17634
|
+
audioSenderStream,
|
|
17635
|
+
statsResults: this.statsResults,
|
|
17636
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
17637
|
+
mediaType
|
|
17638
|
+
});
|
|
17639
|
+
if (isStreamRequested(this.statsResults, mediaType, MediaDirection.SEND)) {
|
|
17640
|
+
newMqa.audioTransmit[0].streams.push(audioSenderStream);
|
|
17641
|
+
}
|
|
17642
|
+
this.lastMqaDataSent[mediaType].send = structuredClone(this.statsResults[mediaType].send);
|
|
17643
|
+
} else if (mediaType.startsWith('audio-share-send')) {
|
|
17644
|
+
var _audioSenderStream = structuredClone(emptyAudioTransmitStream);
|
|
17645
|
+
getAudioSenderStreamMqa({
|
|
17646
|
+
audioSenderStream: _audioSenderStream,
|
|
17647
|
+
statsResults: this.statsResults,
|
|
17648
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
17649
|
+
mediaType
|
|
17650
|
+
});
|
|
17651
|
+
if (isStreamRequested(this.statsResults, mediaType, MediaDirection.SEND)) {
|
|
17652
|
+
newMqa.audioTransmit[1].streams.push(_audioSenderStream);
|
|
17653
|
+
}
|
|
17654
|
+
this.lastMqaDataSent[mediaType].send = structuredClone(this.statsResults[mediaType].send);
|
|
17655
|
+
} else if (mediaType.startsWith('audio-recv')) {
|
|
17656
|
+
var audioReceiverStream = structuredClone(emptyAudioReceiveStream);
|
|
17657
|
+
getAudioReceiverStreamMqa({
|
|
17658
|
+
audioReceiverStream,
|
|
17659
|
+
statsResults: this.statsResults,
|
|
17660
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
17661
|
+
mediaType
|
|
17662
|
+
});
|
|
17663
|
+
if (isStreamRequested(this.statsResults, mediaType, MediaDirection.RECEIVE)) {
|
|
17664
|
+
newMqa.audioReceive[0].streams.push(audioReceiverStream);
|
|
17665
|
+
}
|
|
17666
|
+
this.lastMqaDataSent[mediaType].recv = structuredClone(this.statsResults[mediaType].recv);
|
|
17667
|
+
} else if (mediaType.startsWith('audio-share-recv')) {
|
|
17668
|
+
var _audioReceiverStream = structuredClone(emptyAudioReceiveStream);
|
|
17669
|
+
getAudioReceiverStreamMqa({
|
|
17670
|
+
audioReceiverStream: _audioReceiverStream,
|
|
17671
|
+
statsResults: this.statsResults,
|
|
17672
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
17673
|
+
mediaType
|
|
17674
|
+
});
|
|
17675
|
+
if (isStreamRequested(this.statsResults, mediaType, MediaDirection.RECEIVE)) {
|
|
17676
|
+
newMqa.audioReceive[1].streams.push(_audioReceiverStream);
|
|
17677
|
+
}
|
|
17678
|
+
this.lastMqaDataSent[mediaType].recv = structuredClone(this.statsResults[mediaType].recv);
|
|
17679
|
+
} else if (mediaType.startsWith('video-send-layer')) {
|
|
17680
|
+
var videoSenderStream = structuredClone(emptyVideoTransmitStream);
|
|
17681
|
+
getVideoSenderStreamMqa({
|
|
17682
|
+
videoSenderStream,
|
|
17683
|
+
statsResults: this.statsResults,
|
|
17684
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
17685
|
+
mediaType
|
|
17686
|
+
});
|
|
17687
|
+
if (isStreamRequested(this.statsResults, mediaType, MediaDirection.SEND)) {
|
|
17688
|
+
newMqa.videoTransmit[0].streams.push(videoSenderStream);
|
|
17689
|
+
}
|
|
17690
|
+
this.lastMqaDataSent[mediaType].send = structuredClone(this.statsResults[mediaType].send);
|
|
17691
|
+
} else if (mediaType.startsWith('video-share-send')) {
|
|
17692
|
+
var _videoSenderStream = structuredClone(emptyVideoTransmitStream);
|
|
17693
|
+
getVideoSenderStreamMqa({
|
|
17694
|
+
videoSenderStream: _videoSenderStream,
|
|
17695
|
+
statsResults: this.statsResults,
|
|
17696
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
17697
|
+
mediaType
|
|
17698
|
+
});
|
|
17699
|
+
if (isStreamRequested(this.statsResults, mediaType, MediaDirection.SEND)) {
|
|
17700
|
+
newMqa.videoTransmit[1].streams.push(_videoSenderStream);
|
|
17701
|
+
}
|
|
17702
|
+
this.lastMqaDataSent[mediaType].send = structuredClone(this.statsResults[mediaType].send);
|
|
17703
|
+
} else if (mediaType.startsWith('video-recv')) {
|
|
17704
|
+
var videoReceiverStream = structuredClone(emptyVideoReceiveStream);
|
|
17705
|
+
getVideoReceiverStreamMqa({
|
|
17706
|
+
videoReceiverStream,
|
|
17707
|
+
statsResults: this.statsResults,
|
|
17708
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
17709
|
+
mediaType
|
|
17710
|
+
});
|
|
17711
|
+
if (isStreamRequested(this.statsResults, mediaType, MediaDirection.RECEIVE)) {
|
|
17712
|
+
newMqa.videoReceive[0].streams.push(videoReceiverStream);
|
|
17713
|
+
}
|
|
17714
|
+
this.lastMqaDataSent[mediaType].recv = structuredClone(this.statsResults[mediaType].recv);
|
|
17715
|
+
} else if (mediaType.startsWith('video-share-recv')) {
|
|
17716
|
+
var _videoReceiverStream = structuredClone(emptyVideoReceiveStream);
|
|
17717
|
+
getVideoReceiverStreamMqa({
|
|
17718
|
+
videoReceiverStream: _videoReceiverStream,
|
|
17719
|
+
statsResults: this.statsResults,
|
|
17720
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
17721
|
+
mediaType
|
|
17722
|
+
});
|
|
17723
|
+
if (isStreamRequested(this.statsResults, mediaType, MediaDirection.RECEIVE)) {
|
|
17724
|
+
newMqa.videoReceive[1].streams.push(_videoReceiverStream);
|
|
17725
|
+
}
|
|
17726
|
+
this.lastMqaDataSent[mediaType].recv = structuredClone(this.statsResults[mediaType].recv);
|
|
17727
|
+
}
|
|
17728
|
+
});
|
|
17729
|
+
newMqa.intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress;
|
|
17730
|
+
newMqa.intervalMetadata.cpuInfo.numberOfCores = CpuInfo.getNumLogicalCores() || 1;
|
|
17731
|
+
newMqa.intervalMetadata.peripherals.push({
|
|
17732
|
+
information: _UNKNOWN_,
|
|
17733
|
+
name: MediaDevices.SPEAKER
|
|
17734
|
+
});
|
|
17735
|
+
if (this.statsResults['audio-send']) {
|
|
17736
|
+
newMqa.intervalMetadata.peripherals.push({
|
|
17737
|
+
information: this.statsResults['audio-send'].trackLabel || _UNKNOWN_,
|
|
17738
|
+
name: MediaDevices.MICROPHONE
|
|
17739
|
+
});
|
|
17740
|
+
}
|
|
17741
|
+
var existingVideoSender = Object.keys(this.statsResults).find(item => item.includes('video-send'));
|
|
17742
|
+
if (existingVideoSender) {
|
|
17743
|
+
newMqa.intervalMetadata.peripherals.push({
|
|
17744
|
+
information: this.statsResults[existingVideoSender].trackLabel || _UNKNOWN_,
|
|
17745
|
+
name: MediaDevices.CAMERA
|
|
17746
|
+
});
|
|
17747
|
+
}
|
|
17748
|
+
newMqa.networkType = this.statsResults.connectionType.local.networkType;
|
|
17749
|
+
newMqa.intervalMetadata.screenWidth = window.screen.width;
|
|
17750
|
+
newMqa.intervalMetadata.screenHeight = window.screen.height;
|
|
17751
|
+
newMqa.intervalMetadata.screenResolution = Math.round(window.screen.width * window.screen.height / 256);
|
|
17752
|
+
newMqa.intervalMetadata.appWindowWidth = window.innerWidth;
|
|
17753
|
+
newMqa.intervalMetadata.appWindowHeight = window.innerHeight;
|
|
17754
|
+
newMqa.intervalMetadata.appWindowSize = Math.round(window.innerWidth * window.innerHeight / 256);
|
|
17755
|
+
this.mqaSentCount += 1;
|
|
17756
|
+
newMqa.intervalNumber = this.mqaSentCount;
|
|
17757
|
+
this.resetStatsResults();
|
|
17758
|
+
this.emit(exports.StatsAnalyzerEventNames.MEDIA_QUALITY, {
|
|
17759
|
+
data: newMqa
|
|
17760
|
+
});
|
|
17761
|
+
}
|
|
17762
|
+
getLocalIpAddress() {
|
|
17763
|
+
return this.localIpAddress;
|
|
17764
|
+
}
|
|
17765
|
+
startAnalyzer(mediaConnection) {
|
|
17766
|
+
if (!this.statsStarted) {
|
|
17767
|
+
this.statsStarted = true;
|
|
17768
|
+
this.mediaConnection = mediaConnection;
|
|
17769
|
+
return this.getStatsAndParse().then(() => {
|
|
17770
|
+
this.statsInterval = setInterval(() => {
|
|
17771
|
+
this.getStatsAndParse();
|
|
17772
|
+
}, this.config.analyzerInterval);
|
|
17773
|
+
this.sendMqaData();
|
|
17774
|
+
this.mqaInterval = setInterval(() => {
|
|
17775
|
+
this.sendMqaData();
|
|
17776
|
+
}, MQA_INTERVAL);
|
|
17777
|
+
});
|
|
17778
|
+
}
|
|
17779
|
+
return Promise.resolve();
|
|
17780
|
+
}
|
|
17781
|
+
stopAnalyzer() {
|
|
17782
|
+
var sendOneLastMqa = this.mqaInterval && this.statsInterval;
|
|
17783
|
+
if (this.statsInterval) {
|
|
17784
|
+
clearInterval(this.statsInterval);
|
|
17785
|
+
this.statsInterval = undefined;
|
|
17786
|
+
}
|
|
17787
|
+
if (this.mqaInterval) {
|
|
17788
|
+
clearInterval(this.mqaInterval);
|
|
17789
|
+
this.mqaInterval = undefined;
|
|
17790
|
+
}
|
|
17791
|
+
if (sendOneLastMqa) {
|
|
17792
|
+
return this.getStatsAndParse().then(() => {
|
|
17793
|
+
this.sendMqaData();
|
|
17794
|
+
this.mediaConnection = null;
|
|
17795
|
+
});
|
|
17796
|
+
}
|
|
17797
|
+
return Promise.resolve();
|
|
17798
|
+
}
|
|
17799
|
+
parseGetStatsResult(getStatsResult, type, isSender) {
|
|
17800
|
+
if (!getStatsResult) {
|
|
17801
|
+
return;
|
|
17802
|
+
}
|
|
17803
|
+
if (!this.statsResults[type]) {
|
|
17804
|
+
this.statsResults[type] = {};
|
|
17805
|
+
}
|
|
17806
|
+
if (isSender && !this.statsResults[type].send) {
|
|
17807
|
+
this.statsResults[type].send = structuredClone(emptySender);
|
|
17808
|
+
} else if (!isSender && !this.statsResults[type].recv) {
|
|
17809
|
+
this.statsResults[type].recv = structuredClone(emptyReceiver);
|
|
17810
|
+
}
|
|
17811
|
+
switch (getStatsResult.type) {
|
|
17812
|
+
case 'outbound-rtp':
|
|
17813
|
+
this.processOutboundRTPResult(getStatsResult, type);
|
|
17814
|
+
break;
|
|
17815
|
+
case 'inbound-rtp':
|
|
17816
|
+
this.processInboundRTPResult(getStatsResult, type);
|
|
17817
|
+
break;
|
|
17818
|
+
case 'remote-inbound-rtp':
|
|
17819
|
+
case 'remote-outbound-rtp':
|
|
17820
|
+
this.compareSentAndReceived(getStatsResult, type);
|
|
17821
|
+
break;
|
|
17822
|
+
case 'remotecandidate':
|
|
17823
|
+
case 'remote-candidate':
|
|
17824
|
+
this.parseCandidate(getStatsResult, type, isSender, true);
|
|
17825
|
+
break;
|
|
17826
|
+
case 'local-candidate':
|
|
17827
|
+
this.parseCandidate(getStatsResult, type, isSender, false);
|
|
17828
|
+
break;
|
|
17829
|
+
case 'media-source':
|
|
17830
|
+
this.parseAudioSource(getStatsResult, type);
|
|
17831
|
+
break;
|
|
17832
|
+
}
|
|
17833
|
+
}
|
|
17834
|
+
filterAndParseGetStatsResults(statsItem, type, isSender) {
|
|
17835
|
+
var {
|
|
17836
|
+
types
|
|
17837
|
+
} = DEFAULT_GET_STATS_FILTER;
|
|
17838
|
+
statsItem.report.forEach(report => {
|
|
17839
|
+
if (report.type === 'candidate-pair' && report.state === 'succeeded') {
|
|
17840
|
+
this.successfulCandidatePair = report;
|
|
17841
|
+
}
|
|
17842
|
+
});
|
|
17843
|
+
var videoSenderIndex = 0;
|
|
17844
|
+
statsItem.report.forEach(result => {
|
|
17845
|
+
if (types.includes(result.type)) {
|
|
17846
|
+
if (type === 'video-send' && result.type === 'outbound-rtp') {
|
|
17847
|
+
var newType = "video-send-layer-".concat(videoSenderIndex);
|
|
17848
|
+
this.parseGetStatsResult(result, newType, isSender);
|
|
17849
|
+
videoSenderIndex += 1;
|
|
17850
|
+
this.statsResults[newType].direction = statsItem.currentDirection;
|
|
17851
|
+
this.statsResults[newType].trackLabel = statsItem.localTrackLabel;
|
|
17852
|
+
this.statsResults[newType].csi = statsItem.csi;
|
|
17853
|
+
} else if (type === 'video-share-send' && result.type === 'outbound-rtp') {
|
|
17854
|
+
this.shareVideoEncoderImplementation = result.encoderImplementation;
|
|
17855
|
+
this.parseGetStatsResult(result, type, isSender);
|
|
17856
|
+
} else {
|
|
17857
|
+
this.parseGetStatsResult(result, type, isSender);
|
|
17858
|
+
}
|
|
17859
|
+
}
|
|
17860
|
+
});
|
|
17861
|
+
if (this.statsResults[type]) {
|
|
17862
|
+
var _this$successfulCandi2, _this$statsResults;
|
|
17863
|
+
this.statsResults[type].direction = statsItem.currentDirection;
|
|
17864
|
+
this.statsResults[type].trackLabel = statsItem.localTrackLabel;
|
|
17865
|
+
this.statsResults[type].csi = statsItem.csi;
|
|
17866
|
+
this.extractAndSetLocalIpAddressInfoForDiagnostics((_this$successfulCandi2 = this.successfulCandidatePair) === null || _this$successfulCandi2 === void 0 ? void 0 : _this$successfulCandi2.localCandidateId, (_this$statsResults = this.statsResults) === null || _this$statsResults === void 0 ? void 0 : _this$statsResults.candidates);
|
|
17867
|
+
this.successfulCandidatePair = {};
|
|
17868
|
+
}
|
|
17869
|
+
}
|
|
17870
|
+
parseAudioSource(result, type) {
|
|
17871
|
+
if (!result) {
|
|
17872
|
+
return;
|
|
17873
|
+
}
|
|
17874
|
+
if (type.includes('audio-send')) {
|
|
17875
|
+
this.statsResults[type].send.audioLevel = result.audioLevel;
|
|
17876
|
+
this.statsResults[type].send.totalAudioEnergy = result.totalAudioEnergy;
|
|
17877
|
+
}
|
|
17878
|
+
}
|
|
17879
|
+
compareLastStatsResult() {
|
|
17880
|
+
if (this.lastStatsResults !== null && this.meetingMediaStatus) {
|
|
17881
|
+
var getCurrentStatsTotals = (keyPrefix, value) => Object.keys(this.statsResults).filter(key => key.startsWith(keyPrefix)).reduce((prev, cur) => {
|
|
17882
|
+
var _this$statsResults$cu;
|
|
17883
|
+
return prev + (((_this$statsResults$cu = this.statsResults[cur]) === null || _this$statsResults$cu === void 0 ? void 0 : _this$statsResults$cu[keyPrefix.includes('send') ? 'send' : 'recv'][value]) || 0);
|
|
17884
|
+
}, 0);
|
|
17885
|
+
var getPreviousStatsTotals = (keyPrefix, value) => Object.keys(this.statsResults).filter(key => key.startsWith(keyPrefix)).reduce((prev, cur) => {
|
|
17886
|
+
var _this$lastStatsResult, _this$lastStatsResult2;
|
|
17887
|
+
return prev + (((_this$lastStatsResult = this.lastStatsResults) === null || _this$lastStatsResult === void 0 ? void 0 : (_this$lastStatsResult2 = _this$lastStatsResult[cur]) === null || _this$lastStatsResult2 === void 0 ? void 0 : _this$lastStatsResult2[keyPrefix.includes('send') ? 'send' : 'recv'][value]) || 0);
|
|
17888
|
+
}, 0);
|
|
17889
|
+
if (this.lastStatsResults['audio-send']) {
|
|
17890
|
+
var currentStats = this.statsResults['audio-send'].send;
|
|
17891
|
+
var previousStats = this.lastStatsResults['audio-send'].send;
|
|
17892
|
+
if (this.meetingMediaStatus.expected.sendAudio && currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
|
|
17893
|
+
getLogger().info("StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets sent", currentStats.totalPacketsSent);
|
|
17894
|
+
} else {
|
|
17895
|
+
if (this.meetingMediaStatus.expected.sendAudio && currentStats.totalAudioEnergy === previousStats.totalAudioEnergy || currentStats.totalAudioEnergy === 0) {
|
|
17896
|
+
getLogger().info("StatsAnalyzer:index#compareLastStatsResult --> No audio Energy present", currentStats.totalAudioEnergy);
|
|
17897
|
+
}
|
|
17898
|
+
if (this.meetingMediaStatus.expected.sendAudio && currentStats.audioLevel === 0) {
|
|
17899
|
+
getLogger().info("StatsAnalyzer:index#compareLastStatsResult --> audio level is 0 for the user");
|
|
17900
|
+
}
|
|
17901
|
+
}
|
|
17902
|
+
this.emitStartStopEvents('audio', previousStats.totalPacketsSent, currentStats.totalPacketsSent, true);
|
|
17903
|
+
}
|
|
17904
|
+
var currentAudioPacketsReceived = getCurrentStatsTotals('audio-recv', 'totalPacketsReceived');
|
|
17905
|
+
var previousAudioPacketsReceived = getPreviousStatsTotals('audio-recv', 'totalPacketsReceived');
|
|
17906
|
+
this.emitStartStopEvents('audio', previousAudioPacketsReceived, currentAudioPacketsReceived, false);
|
|
17907
|
+
var currentTotalPacketsSent = getCurrentStatsTotals('video-send', 'totalPacketsSent');
|
|
17908
|
+
var previousTotalPacketsSent = getPreviousStatsTotals('video-send', 'totalPacketsSent');
|
|
17909
|
+
var currentFramesEncoded = getCurrentStatsTotals('video-send', 'framesEncoded');
|
|
17910
|
+
var previousFramesEncoded = getPreviousStatsTotals('video-send', 'framesEncoded');
|
|
17911
|
+
var currentFramesSent = getCurrentStatsTotals('video-send', 'framesSent');
|
|
17912
|
+
var previousFramesSent = getPreviousStatsTotals('video-send', 'framesSent');
|
|
17913
|
+
var doesVideoSendExist = Object.keys(this.lastStatsResults).some(item => item.includes('video-send'));
|
|
17914
|
+
if (doesVideoSendExist) {
|
|
17915
|
+
if (this.meetingMediaStatus.expected.sendVideo && (currentTotalPacketsSent === previousTotalPacketsSent || currentTotalPacketsSent === 0)) {
|
|
17916
|
+
getLogger().info("StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets sent", currentTotalPacketsSent);
|
|
17917
|
+
} else {
|
|
17918
|
+
if (this.meetingMediaStatus.expected.sendVideo && (currentFramesEncoded === previousFramesEncoded || currentFramesEncoded === 0)) {
|
|
17919
|
+
getLogger().info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames Encoded", currentFramesEncoded);
|
|
17920
|
+
}
|
|
17921
|
+
if (this.meetingMediaStatus.expected.sendVideo && (currentFramesSent === previousFramesSent || currentFramesSent === 0)) {
|
|
17922
|
+
getLogger().info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames sent", currentFramesSent);
|
|
17923
|
+
}
|
|
17924
|
+
}
|
|
17925
|
+
this.emitStartStopEvents('video', previousFramesSent, currentFramesSent, true);
|
|
17926
|
+
}
|
|
17927
|
+
var currentVideoFramesDecoded = getCurrentStatsTotals('video-recv', 'framesDecoded');
|
|
17928
|
+
var previousVideoFramesDecoded = getPreviousStatsTotals('video-recv', 'framesDecoded');
|
|
17929
|
+
this.emitStartStopEvents('video', previousVideoFramesDecoded, currentVideoFramesDecoded, false);
|
|
17930
|
+
if (this.lastStatsResults['video-share-send']) {
|
|
17931
|
+
var _currentStats = this.statsResults['video-share-send'].send;
|
|
17932
|
+
var _previousStats = this.lastStatsResults['video-share-send'].send;
|
|
17933
|
+
if (this.meetingMediaStatus.expected.sendShare && (_currentStats.totalPacketsSent === _previousStats.totalPacketsSent || _currentStats.totalPacketsSent === 0)) {
|
|
17934
|
+
getLogger().info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets sent", _currentStats.totalPacketsSent);
|
|
17935
|
+
} else {
|
|
17936
|
+
if (this.meetingMediaStatus.expected.sendShare && (_currentStats.framesEncoded === _previousStats.framesEncoded || _currentStats.framesEncoded === 0)) {
|
|
17937
|
+
getLogger().info("StatsAnalyzer:index#compareLastStatsResult --> No share frames getting encoded", _currentStats.framesEncoded);
|
|
17938
|
+
}
|
|
17939
|
+
if (this.meetingMediaStatus.expected.sendShare && (this.statsResults['video-share-send'].send.framesSent === this.lastStatsResults['video-share-send'].send.framesSent || this.statsResults['video-share-send'].send.framesSent === 0)) {
|
|
17940
|
+
getLogger().info("StatsAnalyzer:index#compareLastStatsResult --> No share frames sent", this.statsResults['video-share-send'].send.framesSent);
|
|
17941
|
+
}
|
|
17942
|
+
}
|
|
17943
|
+
this.emitStartStopEvents('share', _previousStats.framesSent, _currentStats.framesSent, true);
|
|
17944
|
+
}
|
|
17945
|
+
var currentShareFramesDecoded = getCurrentStatsTotals('video-share-recv', 'framesDecoded');
|
|
17946
|
+
var previousShareFramesDecoded = getPreviousStatsTotals('video-share-recv', 'framesDecoded');
|
|
17947
|
+
this.emitStartStopEvents('share', previousShareFramesDecoded, currentShareFramesDecoded, false);
|
|
17948
|
+
}
|
|
17949
|
+
}
|
|
17950
|
+
getStatsAndParse() {
|
|
17951
|
+
if (!this.mediaConnection) {
|
|
17952
|
+
return Promise.resolve();
|
|
17953
|
+
}
|
|
17954
|
+
if (this.mediaConnection && this.mediaConnection.getConnectionState() === exports.ConnectionState.Failed) {
|
|
17955
|
+
getLogger().trace('StatsAnalyzer:index#getStatsAndParse --> media connection is in failed state');
|
|
17956
|
+
return Promise.resolve();
|
|
17957
|
+
}
|
|
17958
|
+
getLogger().trace('StatsAnalyzer:index#getStatsAndParse --> Collecting Stats');
|
|
17959
|
+
return this.mediaConnection.getTransceiverStats().then(transceiverStats => {
|
|
17960
|
+
transceiverStats.video.receivers.forEach((receiver, i) => this.filterAndParseGetStatsResults(receiver, "video-recv-".concat(i), false));
|
|
17961
|
+
transceiverStats.audio.receivers.forEach((receiver, i) => this.filterAndParseGetStatsResults(receiver, "audio-recv-".concat(i), false));
|
|
17962
|
+
transceiverStats.screenShareVideo.receivers.forEach((receiver, i) => this.filterAndParseGetStatsResults(receiver, "video-share-recv-".concat(i), false));
|
|
17963
|
+
transceiverStats.screenShareAudio.receivers.forEach((receiver, i) => this.filterAndParseGetStatsResults(receiver, "audio-share-recv-".concat(i), false));
|
|
17964
|
+
transceiverStats.video.senders.forEach((sender, i) => {
|
|
17965
|
+
if (i > 0) {
|
|
17966
|
+
throw new Error('Stats Analyzer does not support multiple senders.');
|
|
17967
|
+
}
|
|
17968
|
+
this.filterAndParseGetStatsResults(sender, 'video-send', true);
|
|
17969
|
+
});
|
|
17970
|
+
transceiverStats.audio.senders.forEach((sender, i) => {
|
|
17971
|
+
if (i > 0) {
|
|
17972
|
+
throw new Error('Stats Analyzer does not support multiple senders.');
|
|
17973
|
+
}
|
|
17974
|
+
this.filterAndParseGetStatsResults(sender, 'audio-send', true);
|
|
17975
|
+
});
|
|
17976
|
+
transceiverStats.screenShareVideo.senders.forEach((sender, i) => {
|
|
17977
|
+
if (i > 0) {
|
|
17978
|
+
throw new Error('Stats Analyzer does not support multiple senders.');
|
|
17979
|
+
}
|
|
17980
|
+
this.filterAndParseGetStatsResults(sender, 'video-share-send', true);
|
|
17981
|
+
});
|
|
17982
|
+
transceiverStats.screenShareAudio.senders.forEach((sender, i) => {
|
|
17983
|
+
if (i > 0) {
|
|
17984
|
+
throw new Error('Stats Analyzer does not support multiple senders.');
|
|
17985
|
+
}
|
|
17986
|
+
this.filterAndParseGetStatsResults(sender, 'audio-share-send', true);
|
|
17987
|
+
});
|
|
17988
|
+
this.compareLastStatsResult();
|
|
17989
|
+
this.lastStatsResults = JSON.parse(JSON.stringify(this.statsResults));
|
|
17990
|
+
getLogger().trace('StatsAnalyzer:index#getStatsAndParse --> Finished Collecting Stats');
|
|
17991
|
+
});
|
|
17992
|
+
}
|
|
17993
|
+
processOutboundRTPResult(result, mediaType) {
|
|
17994
|
+
var sendrecvType = MediaDirection.SEND;
|
|
17995
|
+
if (result.bytesSent) {
|
|
17996
|
+
var kilobytes = 0;
|
|
17997
|
+
if (result.frameWidth && result.frameHeight) {
|
|
17998
|
+
this.statsResults[mediaType][sendrecvType].width = result.frameWidth;
|
|
17999
|
+
this.statsResults[mediaType][sendrecvType].height = result.frameHeight;
|
|
18000
|
+
this.statsResults[mediaType][sendrecvType].framesSent = result.framesSent;
|
|
18001
|
+
this.statsResults[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;
|
|
18002
|
+
}
|
|
18003
|
+
this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);
|
|
18004
|
+
this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;
|
|
18005
|
+
this.statsResults[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;
|
|
18006
|
+
this.statsResults[mediaType][sendrecvType].packetsSent = result.packetsSent;
|
|
18007
|
+
this.statsResults[mediaType][sendrecvType].totalKeyFramesEncoded = result.keyFramesEncoded;
|
|
18008
|
+
this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;
|
|
18009
|
+
this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;
|
|
18010
|
+
this.statsResults[mediaType][sendrecvType].totalPacketsSent = result.packetsSent;
|
|
18011
|
+
this.statsResults[mediaType][sendrecvType].totalFirCount = result.firCount;
|
|
18012
|
+
this.statsResults[mediaType][sendrecvType].framesSent = result.framesSent;
|
|
18013
|
+
this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;
|
|
18014
|
+
this.statsResults[mediaType][sendrecvType].encoderImplementation = result.encoderImplementation;
|
|
18015
|
+
this.statsResults[mediaType][sendrecvType].qualityLimitationReason = result.qualityLimitationReason;
|
|
18016
|
+
this.statsResults[mediaType][sendrecvType].qualityLimitationResolutionChanges = result.qualityLimitationResolutionChanges;
|
|
18017
|
+
this.statsResults[mediaType][sendrecvType].totalRtxPacketsSent = result.retransmittedPacketsSent;
|
|
18018
|
+
this.statsResults[mediaType][sendrecvType].totalRtxBytesSent = result.retransmittedBytesSent;
|
|
18019
|
+
this.statsResults[mediaType][sendrecvType].totalBytesSent = result.bytesSent;
|
|
18020
|
+
this.statsResults[mediaType][sendrecvType].headerBytesSent = result.headerBytesSent;
|
|
18021
|
+
this.statsResults[mediaType][sendrecvType].retransmittedBytesSent = result.retransmittedBytesSent;
|
|
18022
|
+
this.statsResults[mediaType][sendrecvType].isRequested = result.isRequested;
|
|
18023
|
+
this.statsResults[mediaType][sendrecvType].lastRequestedUpdateTimestamp = result.lastRequestedUpdateTimestamp;
|
|
18024
|
+
this.statsResults[mediaType][sendrecvType].requestedBitrate = result.requestedBitrate;
|
|
18025
|
+
this.statsResults[mediaType][sendrecvType].requestedFrameSize = result.requestedFrameSize;
|
|
18026
|
+
}
|
|
18027
|
+
}
|
|
18028
|
+
processInboundRTPResult(result, mediaType) {
|
|
18029
|
+
var sendrecvType = MediaDirection.RECEIVE;
|
|
18030
|
+
if (result.bytesReceived) {
|
|
18031
|
+
var kilobytes = 0;
|
|
18032
|
+
var sourceState = result.sourceState;
|
|
18033
|
+
var midAndCsi = "mid: \"".concat(result.mid || '', "\"").concat(result.csi ? " and csi: ".concat(result.csi) : '');
|
|
18034
|
+
var bytes = result.bytesReceived - this.statsResults[mediaType][sendrecvType].totalBytesReceived;
|
|
18035
|
+
kilobytes = bytes / 1024;
|
|
18036
|
+
this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);
|
|
18037
|
+
var currentPacketsLost = result.packetsLost - this.statsResults[mediaType][sendrecvType].totalPacketsLost;
|
|
18038
|
+
if (currentPacketsLost < 0) {
|
|
18039
|
+
currentPacketsLost = 0;
|
|
18040
|
+
}
|
|
18041
|
+
var packetsReceivedDiff = result.packetsReceived - this.statsResults[mediaType][sendrecvType].totalPacketsReceived;
|
|
18042
|
+
this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
|
|
18043
|
+
if (packetsReceivedDiff === 0) {
|
|
18044
|
+
if (sourceState === 'live') {
|
|
18045
|
+
getLogger().info("StatsAnalyzer:index#processInboundRTPResult --> No packets received for mediaType: ".concat(mediaType, ", receive slot ").concat(midAndCsi, ". Total packets received on slot: "), result.packetsReceived);
|
|
18046
|
+
}
|
|
18047
|
+
}
|
|
18048
|
+
if (mediaType.startsWith('video') || mediaType.startsWith('share')) {
|
|
18049
|
+
var videoFramesReceivedDiff = result.framesReceived - this.statsResults[mediaType][sendrecvType].framesReceived;
|
|
18050
|
+
if (videoFramesReceivedDiff === 0) {
|
|
18051
|
+
if (sourceState === 'live') {
|
|
18052
|
+
getLogger().info("StatsAnalyzer:index#processInboundRTPResult --> No frames received for mediaType: ".concat(mediaType, ", receive slot ").concat(midAndCsi, ". Total frames received on slot: "), result.framesReceived);
|
|
18053
|
+
}
|
|
18054
|
+
}
|
|
18055
|
+
var videoFramesDecodedDiff = result.framesDecoded - this.statsResults[mediaType][sendrecvType].framesDecoded;
|
|
18056
|
+
if (videoFramesDecodedDiff === 0) {
|
|
18057
|
+
if (sourceState === 'live') {
|
|
18058
|
+
getLogger().info("StatsAnalyzer:index#processInboundRTPResult --> No frames decoded for mediaType: ".concat(mediaType, ", receive slot ").concat(midAndCsi, ". Total frames decoded on slot: "), result.framesDecoded);
|
|
18059
|
+
}
|
|
18060
|
+
}
|
|
18061
|
+
var videoFramesDroppedDiff = result.framesDropped - this.statsResults[mediaType][sendrecvType].framesDropped;
|
|
18062
|
+
if (videoFramesDroppedDiff > 10) {
|
|
18063
|
+
if (sourceState === 'live') {
|
|
18064
|
+
getLogger().info("StatsAnalyzer:index#processInboundRTPResult --> Frames dropped for mediaType: ".concat(mediaType, ", receive slot ").concat(midAndCsi, ". Total frames dropped on slot: "), result.framesDropped);
|
|
18065
|
+
}
|
|
18066
|
+
}
|
|
18067
|
+
}
|
|
18068
|
+
if (mediaType.startsWith('video-recv')) {
|
|
18069
|
+
this.statsResults[mediaType][sendrecvType].isActiveSpeaker = result.isActiveSpeaker;
|
|
18070
|
+
this.statsResults[mediaType][sendrecvType].lastActiveSpeakerTimestamp = result.lastActiveSpeakerUpdateTimestamp;
|
|
18071
|
+
}
|
|
18072
|
+
this.statsResults[mediaType][sendrecvType].currentPacketLossRatio = currentPacketsLost > 0 ? currentPacketsLost / (packetsReceivedDiff + currentPacketsLost) : 0;
|
|
18073
|
+
if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {
|
|
18074
|
+
getLogger().info("StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver with slot ".concat(midAndCsi), this.statsResults[mediaType][sendrecvType].currentPacketLossRatio);
|
|
18075
|
+
}
|
|
18076
|
+
if (result.frameWidth && result.frameHeight) {
|
|
18077
|
+
this.statsResults[mediaType][sendrecvType].width = result.frameWidth;
|
|
18078
|
+
this.statsResults[mediaType][sendrecvType].height = result.frameHeight;
|
|
18079
|
+
this.statsResults[mediaType][sendrecvType].framesReceived = result.framesReceived;
|
|
18080
|
+
}
|
|
18081
|
+
if (result.packetsLost) {
|
|
18082
|
+
this.statsResults[mediaType][sendrecvType].totalPacketsLost = result.packetsLost > 0 ? result.packetsLost : -result.packetsLost;
|
|
18083
|
+
} else {
|
|
18084
|
+
this.statsResults[mediaType][sendrecvType].totalPacketsLost = 0;
|
|
18085
|
+
}
|
|
18086
|
+
this.statsResults[mediaType][sendrecvType].lastPacketReceivedTimestamp = result.lastPacketReceivedTimestamp;
|
|
18087
|
+
this.statsResults[mediaType][sendrecvType].requestedBitrate = result.requestedBitrate;
|
|
18088
|
+
this.statsResults[mediaType][sendrecvType].requestedFrameSize = result.requestedFrameSize;
|
|
18089
|
+
this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;
|
|
18090
|
+
this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;
|
|
18091
|
+
this.statsResults[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
|
|
18092
|
+
this.statsResults[mediaType][sendrecvType].keyFramesDecoded = result.keyFramesDecoded;
|
|
18093
|
+
this.statsResults[mediaType][sendrecvType].framesDropped = result.framesDropped;
|
|
18094
|
+
this.statsResults[mediaType][sendrecvType].decoderImplementation = result.decoderImplementation;
|
|
18095
|
+
this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
|
|
18096
|
+
this.statsResults[mediaType][sendrecvType].fecPacketsDiscarded = result.fecPacketsDiscarded;
|
|
18097
|
+
this.statsResults[mediaType][sendrecvType].fecPacketsReceived = result.fecPacketsReceived;
|
|
18098
|
+
this.statsResults[mediaType][sendrecvType].totalBytesReceived = result.bytesReceived;
|
|
18099
|
+
this.statsResults[mediaType][sendrecvType].headerBytesReceived = result.headerBytesReceived;
|
|
18100
|
+
this.statsResults[mediaType][sendrecvType].totalRtxPacketsReceived = result.retransmittedPacketsReceived;
|
|
18101
|
+
this.statsResults[mediaType][sendrecvType].totalRtxBytesReceived = result.retransmittedBytesReceived;
|
|
18102
|
+
this.statsResults[mediaType][sendrecvType].meanRtpJitter.push(result.jitter);
|
|
18103
|
+
this.statsResults[mediaType][sendrecvType].audioLevel = result.audioLevel;
|
|
18104
|
+
this.statsResults[mediaType][sendrecvType].totalAudioEnergy = result.totalAudioEnergy;
|
|
18105
|
+
this.statsResults[mediaType][sendrecvType].totalSamplesReceived = result.totalSamplesReceived || 0;
|
|
18106
|
+
this.statsResults[mediaType][sendrecvType].totalSamplesDecoded = result.totalSamplesDecoded || 0;
|
|
18107
|
+
this.statsResults[mediaType][sendrecvType].concealedSamples = result.concealedSamples || 0;
|
|
18108
|
+
this.statsResults[mediaType][sendrecvType].isRequested = result.isRequested;
|
|
18109
|
+
this.statsResults[mediaType][sendrecvType].lastRequestedUpdateTimestamp = result.lastRequestedUpdateTimestamp;
|
|
18110
|
+
}
|
|
18111
|
+
}
|
|
18112
|
+
compareSentAndReceived(result, type) {
|
|
18113
|
+
if (!type || !this.statsResults[type].send) {
|
|
18114
|
+
return;
|
|
18115
|
+
}
|
|
18116
|
+
var mediaType = type;
|
|
18117
|
+
var currentPacketLoss = result.packetsLost - this.statsResults[mediaType].send.totalPacketsLostOnReceiver;
|
|
18118
|
+
this.statsResults[mediaType].send.packetsLostOnReceiver = currentPacketLoss;
|
|
18119
|
+
this.statsResults[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
|
|
18120
|
+
this.statsResults[mediaType].send.meanRemoteJitter.push(result.jitter);
|
|
18121
|
+
this.statsResults[mediaType].send.meanRoundTripTime.push(result.roundTripTime);
|
|
18122
|
+
this.statsResults[mediaType].send.timestamp = result.timestamp;
|
|
18123
|
+
this.statsResults[mediaType].send.ssrc = result.ssrc;
|
|
18124
|
+
this.statsResults[mediaType].send.reportsReceived = result.reportsReceived;
|
|
18125
|
+
this.statsResults[mediaType].send.overAllPacketLossRatio = this.statsResults[mediaType].send.totalPacketsLostOnReceiver > 0 ? this.statsResults[mediaType].send.totalPacketsLostOnReceiver / this.statsResults[mediaType].send.totalPacketsSent : 0;
|
|
18126
|
+
this.statsResults[mediaType].send.currentPacketLossRatio = this.statsResults[mediaType].send.packetsLostOnReceiver > 0 ? this.statsResults[mediaType].send.packetsLostOnReceiver * 100 / (this.statsResults[mediaType].send.packetsSent + this.statsResults[mediaType].send.packetsLostOnReceiver) : 0;
|
|
18127
|
+
if (this.statsResults[mediaType].send.maxPacketLossRatio < this.statsResults[mediaType].send.currentPacketLossRatio) {
|
|
18128
|
+
this.statsResults[mediaType].send.maxPacketLossRatio = this.statsResults[mediaType].send.currentPacketLossRatio;
|
|
18129
|
+
}
|
|
18130
|
+
if (result.type === 'remote-inbound-rtp') {
|
|
18131
|
+
this.networkQualityMonitor.determineUplinkNetworkQuality({
|
|
18132
|
+
mediaType,
|
|
18133
|
+
remoteRtpResults: result,
|
|
18134
|
+
statsAnalyzerCurrentStats: this.statsResults
|
|
18135
|
+
});
|
|
18136
|
+
}
|
|
18137
|
+
}
|
|
18138
|
+
}
|
|
18139
|
+
|
|
15357
18140
|
var Media = {
|
|
15358
18141
|
createAudioTrack: createAudioTrack,
|
|
15359
18142
|
createVideoTrack: createVideoTrack,
|
|
@@ -15388,6 +18171,7 @@ exports.ReceiverSelectedInfo = ReceiverSelectedInfo;
|
|
|
15388
18171
|
exports.RemoteStream = RemoteStream;
|
|
15389
18172
|
exports.RoapMediaConnection = RoapMediaConnection;
|
|
15390
18173
|
exports.SendSlot = SendSlot;
|
|
18174
|
+
exports.StatsAnalyzer = StatsAnalyzer;
|
|
15391
18175
|
exports.StreamRequest = StreamRequest;
|
|
15392
18176
|
exports.WcmeError = WcmeError;
|
|
15393
18177
|
exports.configureWcmeLogger = configureWcmeLogger;
|