@webex/internal-media-core 2.14.9 → 2.16.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 +1324 -1491
- package/dist/esm/index.js +1324 -1491
- package/dist/types/MediaConnection/config.d.ts +1 -0
- package/dist/types/MediaConnection/config.d.ts.map +1 -1
- package/dist/types/StatsAnalyzer/MqeBuilder.d.ts +30 -0
- package/dist/types/StatsAnalyzer/MqeBuilder.d.ts.map +1 -0
- package/dist/types/StatsAnalyzer/MqeIntervalSessionReceiveAudioBuilder.d.ts +10 -0
- package/dist/types/StatsAnalyzer/MqeIntervalSessionReceiveAudioBuilder.d.ts.map +1 -0
- package/dist/types/StatsAnalyzer/MqeIntervalSessionReceiveAudioBuilder.test.d.ts +2 -0
- package/dist/types/StatsAnalyzer/MqeIntervalSessionReceiveAudioBuilder.test.d.ts.map +1 -0
- package/dist/types/StatsAnalyzer/MqeIntervalSessionReceiveVideoBuilder.d.ts +10 -0
- package/dist/types/StatsAnalyzer/MqeIntervalSessionReceiveVideoBuilder.d.ts.map +1 -0
- package/dist/types/StatsAnalyzer/MqeIntervalSessionReceiveVideoBuilder.test.d.ts +2 -0
- package/dist/types/StatsAnalyzer/MqeIntervalSessionReceiveVideoBuilder.test.d.ts.map +1 -0
- package/dist/types/StatsAnalyzer/MqeIntervalSessionTransmitAudioBuilder.d.ts +10 -0
- package/dist/types/StatsAnalyzer/MqeIntervalSessionTransmitAudioBuilder.d.ts.map +1 -0
- package/dist/types/StatsAnalyzer/MqeIntervalSessionTransmitAudioBuilder.test.d.ts +2 -0
- package/dist/types/StatsAnalyzer/MqeIntervalSessionTransmitAudioBuilder.test.d.ts.map +1 -0
- package/dist/types/StatsAnalyzer/MqeIntervalSessionTransmitVideoBuilder.d.ts +10 -0
- package/dist/types/StatsAnalyzer/MqeIntervalSessionTransmitVideoBuilder.d.ts.map +1 -0
- package/dist/types/StatsAnalyzer/MqeIntervalSessionTransmitVideoBuilder.test.d.ts +2 -0
- package/dist/types/StatsAnalyzer/MqeIntervalSessionTransmitVideoBuilder.test.d.ts.map +1 -0
- package/dist/types/StatsAnalyzer/NetworkQualityMonitor.d.ts +6 -5
- package/dist/types/StatsAnalyzer/NetworkQualityMonitor.d.ts.map +1 -1
- package/dist/types/StatsAnalyzer/StatsAnalyzer.d.ts +30 -35
- package/dist/types/StatsAnalyzer/StatsAnalyzer.d.ts.map +1 -1
- package/dist/types/StatsAnalyzer/constants.d.ts +13 -310
- package/dist/types/StatsAnalyzer/constants.d.ts.map +1 -1
- package/dist/types/StatsAnalyzer/eventTypes.d.ts +3 -2
- package/dist/types/StatsAnalyzer/eventTypes.d.ts.map +1 -1
- package/dist/types/StatsAnalyzer/mqeTypes.d.ts +26 -0
- package/dist/types/StatsAnalyzer/mqeTypes.d.ts.map +1 -0
- package/dist/types/StatsAnalyzer/types.d.ts +11 -27
- package/dist/types/StatsAnalyzer/types.d.ts.map +1 -1
- package/dist/types/StatsAnalyzer/utils.d.ts +20 -64
- package/dist/types/StatsAnalyzer/utils.d.ts.map +1 -1
- package/dist/types/StatsAnalyzer/utils.test.d.ts +2 -0
- package/dist/types/StatsAnalyzer/utils.test.d.ts.map +1 -0
- package/package.json +6 -4
package/dist/cjs/index.js
CHANGED
|
@@ -1454,60 +1454,60 @@ class MediaConnectionError extends Error {
|
|
|
1454
1454
|
}
|
|
1455
1455
|
}
|
|
1456
1456
|
|
|
1457
|
-
function ownKeys$
|
|
1458
|
-
function _objectSpread$
|
|
1457
|
+
function ownKeys$d(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; }
|
|
1458
|
+
function _objectSpread$d(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$d(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$d(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
1459
1459
|
class SdpError extends MediaConnectionError {
|
|
1460
1460
|
constructor(message) {
|
|
1461
1461
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
1462
|
-
super(message, _objectSpread$
|
|
1462
|
+
super(message, _objectSpread$d({
|
|
1463
1463
|
code: ErrorCode.SdpError,
|
|
1464
1464
|
name: 'SdpError'
|
|
1465
1465
|
}, options));
|
|
1466
1466
|
}
|
|
1467
1467
|
}
|
|
1468
1468
|
|
|
1469
|
-
function ownKeys$
|
|
1470
|
-
function _objectSpread$
|
|
1469
|
+
function ownKeys$c(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; }
|
|
1470
|
+
function _objectSpread$c(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$c(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$c(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
1471
1471
|
class IceGatheringError extends SdpError {
|
|
1472
1472
|
constructor(message) {
|
|
1473
1473
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
1474
|
-
super(message, _objectSpread$
|
|
1474
|
+
super(message, _objectSpread$c({
|
|
1475
1475
|
code: ErrorCode.IceGatheringError,
|
|
1476
1476
|
name: 'IceGatheringError'
|
|
1477
1477
|
}, options));
|
|
1478
1478
|
}
|
|
1479
1479
|
}
|
|
1480
1480
|
|
|
1481
|
-
function ownKeys$
|
|
1482
|
-
function _objectSpread$
|
|
1481
|
+
function ownKeys$b(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; }
|
|
1482
|
+
function _objectSpread$b(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$b(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$b(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
1483
1483
|
class SdpAnswerHandlingError extends SdpError {
|
|
1484
1484
|
constructor(message) {
|
|
1485
1485
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
1486
|
-
super(message, _objectSpread$
|
|
1486
|
+
super(message, _objectSpread$b({
|
|
1487
1487
|
code: ErrorCode.SdpAnswerHandlingError,
|
|
1488
1488
|
name: 'SdpAnswerHandlingError'
|
|
1489
1489
|
}, options));
|
|
1490
1490
|
}
|
|
1491
1491
|
}
|
|
1492
1492
|
|
|
1493
|
-
function ownKeys$
|
|
1494
|
-
function _objectSpread$
|
|
1493
|
+
function ownKeys$a(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; }
|
|
1494
|
+
function _objectSpread$a(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$a(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$a(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
1495
1495
|
class SdpOfferCreationError extends SdpError {
|
|
1496
1496
|
constructor(message) {
|
|
1497
1497
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
1498
|
-
super(message, _objectSpread$
|
|
1498
|
+
super(message, _objectSpread$a({
|
|
1499
1499
|
code: ErrorCode.SdpOfferCreationError,
|
|
1500
1500
|
name: 'SdpOfferCreationError'
|
|
1501
1501
|
}, options));
|
|
1502
1502
|
}
|
|
1503
1503
|
}
|
|
1504
1504
|
|
|
1505
|
-
function ownKeys$
|
|
1506
|
-
function _objectSpread$
|
|
1505
|
+
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; }
|
|
1506
|
+
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(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; }
|
|
1507
1507
|
class SdpOfferHandlingError extends SdpError {
|
|
1508
1508
|
constructor(message) {
|
|
1509
1509
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
1510
|
-
super(message, _objectSpread$
|
|
1510
|
+
super(message, _objectSpread$9({
|
|
1511
1511
|
code: ErrorCode.SdpOfferHandlingError,
|
|
1512
1512
|
name: 'SdpOfferHandlingError'
|
|
1513
1513
|
}, options));
|
|
@@ -3585,7 +3585,7 @@ opts=arguments[0];}else if(arguments.length===3&&typeof arguments[2]==='object')
|
|
|
3585
3585
|
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]?arguments[0].sdp:'undefined'));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.
|
|
3586
3586
|
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`
|
|
3587
3587
|
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
|
|
3588
|
-
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=fmtpParams.replace(/;$/,'');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,"Offer media description is missing MID.");}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,codecs,paramsMap){paramsMap.forEach((value,param)=>{[...mediaDescription.codecs.values()].filter(ci=>ci.name&&codecs.includes(ci.name)).forEach(ci=>{if(value===null){ci.fmtParams.delete(param);}else {ci.fmtParams.set(param,"".concat(value));}});});}function hasIceCandidates(sdp){return sdp.media.some(media=>media.iceInfo.candidates.length);}function generateSsrc(){return Math.floor(Math.random()*0xffffffff)+1;}class EgressSdpMunger{constructor(){this.streamIds=[];this.customCodecParameters=new Map();}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(_ref2=>{var{ssrc}=_ref2;return simulcastSsrcs.includes(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;if(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,['H264','opus'],this.customCodecParameters);if(options.twccDisabled){disableTwcc(mediaDescription);}}mungeLocalDescriptionForRemoteServer(mediaDescription,mediaContent,csi){var mungeOptions=arguments.length>3&&arguments[3]!==undefined?arguments[3]:{injectDummyCandidates:true};injectContentType(mediaDescription,mediaContent);injectJmpAttributes(mediaDescription,csi,'SSRC');if(mungeOptions.injectDummyCandidates){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=>areStreamIdsEqual(currStreamId,streamId));}setCodecParameters(parameters){Object.entries(parameters).forEach(_ref3=>{var[param,value]=_ref3;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
|
|
3588
|
+
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=fmtpParams.replace(/;$/,'');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,"Offer media description is missing MID.");}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,codecs,paramsMap){paramsMap.forEach((value,param)=>{[...mediaDescription.codecs.values()].filter(ci=>ci.name&&codecs.includes(ci.name)).forEach(ci=>{if(value===null){ci.fmtParams.delete(param);}else {ci.fmtParams.set(param,"".concat(value));}});});}function hasIceCandidates(sdp){return sdp.media.some(media=>media.iceInfo.candidates.length);}function generateSsrc(){return Math.floor(Math.random()*0xffffffff)+1;}class EgressSdpMunger{constructor(){this.streamIds=[];this.customCodecParameters=new Map();}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(_ref2=>{var{ssrc}=_ref2;return simulcastSsrcs.includes(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;if(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,['H264','opus'],this.customCodecParameters);if(options.twccDisabled){disableTwcc(mediaDescription);}}mungeLocalDescriptionForRemoteServer(mediaDescription,mediaContent,csi){var mungeOptions=arguments.length>3&&arguments[3]!==undefined?arguments[3]:{injectDummyCandidates:true};injectContentType(mediaDescription,mediaContent);injectJmpAttributes(mediaDescription,csi,'SSRC');if(mungeOptions.injectDummyCandidates){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){var mungeOptions=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{dtxDisabled:true};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');});if(mediaDescription.type==='audio'){[...mediaDescription.codecs.values()].forEach(ci=>{ci.fmtParams.set('usedtx',mungeOptions.dtxDisabled?'0':'1');});}}getSenderIds(){return this.streamIds;}getEncodingIndexForStreamId(streamId){return this.streamIds.findIndex(currStreamId=>areStreamIdsEqual(currStreamId,streamId));}setCodecParameters(parameters){Object.entries(parameters).forEach(_ref3=>{var[param,value]=_ref3;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
|
|
3589
3589
|
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
|
|
3590
3590
|
// added to it. This is a useful default which helps finding memory leaks.
|
|
3591
3591
|
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
|
|
@@ -5608,7 +5608,7 @@ var{hasOwnProperty}=Object.prototype;for(var i=0;i<mapResults.length;i++){if(map
|
|
|
5608
5608
|
* // arg1 now equals 'three'
|
|
5609
5609
|
* callback(null, 'done');
|
|
5610
5610
|
* }
|
|
5611
|
-
*/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(config){super(config);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.sourceStateOverrideChange=new TypedEvent();this.metadata={lastRequestedUpdateTimestampsMap:new Map()};this.munger=config.munger;this.csi=config.csi;this.direction='sendrecv';this.handleTrackChange=this.handleTrackChange.bind(this);this.handleStreamConstraintsChange=this.handleStreamConstraintsChange.bind(this);this.handleStreamMuteStateChange=this.handleStreamMuteStateChange.bind(this);}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,_e;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;stats.trackLabel=(_e=this.publishedStream)===null||_e===void 0?void 0:_e.label;}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){var mungeOptions=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{injectDummyCandidates:true};this.munger.mungeLocalDescriptionForRemoteServer(mediaDescription,getMediaContent(this.mediaType),this.csi,mungeOptions);}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);}setSourceStateOverride(state){this.sourceStateOverride=state;this.sourceStateOverrideChange.emit();}get currentSourceState(){if(this.sourceStateOverride){return this.sourceStateOverride;}if(!this.publishedStream){return 'no source';}if(this.publishedStream.muted){return 'avatar';}return 'live';}}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);});}setSourceStateOverride(state){this.sendTransceiver.setSourceStateOverride(state);}clearSourceStateOverride(){this.sendTransceiver.setSourceStateOverride(undefined);}}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(_ref7=>{var[mediaType,transceiver]=_ref7;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(_ref8=>{var[mediaType,transceivers]=_ref8;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;var item={report:yield t.getStats(),csi:t.receiveSlot.currentRxCsi,currentDirection:'recvonly',localTrackLabel:(_b=t.receiveSlot.stream.getTracks()[0])===null||_b===void 0?void 0:_b.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,iceTransportPolicy:'all',disableContentSimulcast:true,disableAudioTwcc:true,doFullIce:BrowserInfo.isFirefox(),stopIceGatheringAfterFirstRelayCandidate:false,metricsCallback:()=>{}};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.overuseUpdateCallback=()=>{};this.midPredictor=new MidPredictor();this.offerAnswerQueue=new AsyncQueue();this.currentCreateOfferId=0;this.iceCandidates=[];this.options=Object.assign(Object.assign({},defaultMultistreamConnectionOptions),userOptions);logger.info("Creating multistream connection with options ".concat(JSON.stringify(this.options)));this.metricsCallback=this.options.metricsCallback;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,iceTransportPolicy:this.options.iceTransportPolicy});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=>{if(candidate.candidate){this.iceCandidates.push(candidate.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 rtcRtpTransceiver;try{rtcRtpTransceiver=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();var transceiver=new SendOnlyTransceiver({rtcRtpTransceiver,mid,mediaType,munger,csi});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);});transceiver.sourceStateOverrideChange.on(()=>{this.sendMediaRequestStatus(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(jmpMessage=>{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;}var homerMsg=new HomerMsg(HomerMsgType.Multistream,jmpMessage);var serializedHomerMsg=JSON.stringify(homerMsg);try{logger.info("Sending JMP message: ".concat(serializedHomerMsg));this.dataChannel.send(serializedHomerMsg);}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(serializedHomerMsg.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=>{if(!isValidSsrcStreamId(s.id)){logger.error("Received MediaRequestStatus with non-SSRC based stream ID, which is currently not supported: ".concat(JSON.stringify(s.id)));return;}var receiveSlot=this.getReceiveSlotById(s.id);if(!receiveSlot){logger.warn("Got MediaRequestStatus for unknown receive slot: ".concat(JSON.stringify(s.id)));return;}if(!receiveSlot._isRequested){logger.info("MediaRequestStatus ignored due to transceiver's receive slot unrequested: ".concat(JSON.stringify(s.id)," csi ").concat(s.csi));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(_ref9=>{var{ids,policySpecificInfo,codecInfos,maxPayloadBitsPerSecond}=_ref9;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];if(!isValidSsrcStreamId(id)){logger.warn("".concat(mediaType,": The stream ID is not a valid SsrcStreamId: ").concat(JSON.stringify(id)));return;}var streamIdsMatched=sendTransceiver.senderIds.some(validId=>areStreamIdsEqual(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 sendTransceiver=this.getSendTransceiverOrThrow(mediaType);return sendTransceiver.senderIds.map(id=>({id,state:sendTransceiver.currentSourceState,csi:sendTransceiver.csi}));}createReceiveTransceiver(mediaType){var rtcRtpTransceiver=this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'recvonly'});var mid=this.midPredictor.getNextMid(mediaType);var munger=new IngressSdpMunger();var recvOnlyTransceiver=new ReceiveOnlyTransceiver({rtcRtpTransceiver,mid,mediaType,munger});if(getMediaFamily(mediaType)===exports.MediaFamily.Video){recvOnlyTransceiver.setCodecParameters({'sps-pps-idr-in-keyframe':'1'});recvOnlyTransceiver.setRtxCodecParameters({'rtx-time':mediaType===exports.MediaType.VideoMain?defaultVideoMainRtxTime:defaultVideoSlidesRtxTime});}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.IceCandidate,candidate=>{if(candidate.candidate===null||this.options.stopIceGatheringAfterFirstRelayCandidate&&candidate.candidate.type==='relay'){resolve();}});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);var shouldInjectDummyCandidates=()=>{if(!this.options.doFullIce){return true;}return !hasIceCandidates(parsedOffer);};var mungeOptions={injectDummyCandidates:shouldInjectDummyCandidates()};parsedOffer.avMedia.filter(av=>av.direction==='sendrecv'||av.direction==='inactive').forEach(av=>{var sendTransceiver=this.getSendTransceiverByMidOrThrow(av.mid);sendTransceiver.mungeLocalDescriptionForRemoteServer(av,mungeOptions);});if(mungeOptions.injectDummyCandidates){parsedOffer.media.filter(media=>media instanceof ApplicationMediaDescription$1).forEach(media=>{injectDummyCandidates(media);});}if(BrowserInfo.isFirefox()&&this.options.doFullIce){parsedOffer.media.forEach(media=>{media.iceInfo.candidates=[];this.iceCandidates.forEach(iceCandidate=>{var candidateLine=CandidateLine$1.fromSdpLine(iceCandidate.candidate.toString());if(candidateLine){media.addLine(candidateLine);}});});}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=>areStreamIdsEqual(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=>areStreamIdsEqual(id,transceiver.receiveSlot.id))){var relevantRequest=streamRequests.find(request=>request.receiveSlots.some(slot=>areStreamIdsEqual(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);}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);}}
|
|
5611
|
+
*/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(config){super(config);this.rtxEnabled=false;this.dtxDisabled=true;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.sourceStateOverrideChange=new TypedEvent();this.metadata={lastRequestedUpdateTimestampsMap:new Map()};this.munger=config.munger;this.csi=config.csi;this.direction='sendrecv';this.handleTrackChange=this.handleTrackChange.bind(this);this.handleStreamConstraintsChange=this.handleStreamConstraintsChange.bind(this);this.handleStreamMuteStateChange=this.handleStreamMuteStateChange.bind(this);}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,_e;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;stats.trackLabel=(_e=this.publishedStream)===null||_e===void 0?void 0:_e.label;}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){var mungeOptions=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{injectDummyCandidates:true};this.munger.mungeLocalDescriptionForRemoteServer(mediaDescription,getMediaContent(this.mediaType),this.csi,mungeOptions);}mungeRemoteDescription(mediaDescription){this.munger.mungeRemoteDescription(mediaDescription,{dtxDisabled:this.dtxDisabled});}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);}setSourceStateOverride(state){this.sourceStateOverride=state;this.sourceStateOverrideChange.emit();}get currentSourceState(){if(this.sourceStateOverride){return this.sourceStateOverride;}if(!this.publishedStream){return 'no source';}if(this.publishedStream.muted){return 'avatar';}return 'live';}}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);});}setSourceStateOverride(state){this.sendTransceiver.setSourceStateOverride(state);}clearSourceStateOverride(){this.sendTransceiver.setSourceStateOverride(undefined);}}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(_ref7=>{var[mediaType,transceiver]=_ref7;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(_ref8=>{var[mediaType,transceivers]=_ref8;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;var item={report:yield t.getStats(),csi:t.receiveSlot.currentRxCsi,currentDirection:'recvonly',localTrackLabel:(_b=t.receiveSlot.stream.getTracks()[0])===null||_b===void 0?void 0:_b.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,iceTransportPolicy:'all',disableContentSimulcast:true,disableAudioTwcc:true,doFullIce:BrowserInfo.isFirefox(),stopIceGatheringAfterFirstRelayCandidate:false,disableAudioMainDtx:true,metricsCallback:()=>{}};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.overuseUpdateCallback=()=>{};this.midPredictor=new MidPredictor();this.offerAnswerQueue=new AsyncQueue();this.currentCreateOfferId=0;this.iceCandidates=[];this.metadata={isMediaBypassEdge:false};this.options=Object.assign(Object.assign({},defaultMultistreamConnectionOptions),userOptions);logger.info("Creating multistream connection with options ".concat(JSON.stringify(this.options)));this.metricsCallback=this.options.metricsCallback;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,iceTransportPolicy:this.options.iceTransportPolicy});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=>{if(candidate.candidate){this.iceCandidates.push(candidate.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 rtcRtpTransceiver;try{rtcRtpTransceiver=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();var transceiver=new SendOnlyTransceiver({rtcRtpTransceiver,mid,mediaType,munger,csi});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.dtxDisabled=mediaType!==exports.MediaType.AudioMain||this.options.disableAudioMainDtx;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);});transceiver.sourceStateOverrideChange.on(()=>{this.sendMediaRequestStatus(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(jmpMessage=>{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;}var homerMsg=new HomerMsg(HomerMsgType.Multistream,jmpMessage);var serializedHomerMsg=JSON.stringify(homerMsg);try{logger.info("Sending JMP message: ".concat(serializedHomerMsg));this.dataChannel.send(serializedHomerMsg);}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(serializedHomerMsg.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=>{if(!isValidSsrcStreamId(s.id)){logger.error("Received MediaRequestStatus with non-SSRC based stream ID, which is currently not supported: ".concat(JSON.stringify(s.id)));return;}var receiveSlot=this.getReceiveSlotById(s.id);if(!receiveSlot){logger.warn("Got MediaRequestStatus for unknown receive slot: ".concat(JSON.stringify(s.id)));return;}if(!receiveSlot._isRequested){logger.info("MediaRequestStatus ignored due to transceiver's receive slot unrequested: ".concat(JSON.stringify(s.id)," csi ").concat(s.csi));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(_ref9=>{var{ids,policySpecificInfo,codecInfos,maxPayloadBitsPerSecond}=_ref9;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];if(!isValidSsrcStreamId(id)){logger.warn("".concat(mediaType,": The stream ID is not a valid SsrcStreamId: ").concat(JSON.stringify(id)));return;}var streamIdsMatched=sendTransceiver.senderIds.some(validId=>areStreamIdsEqual(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 sendTransceiver=this.getSendTransceiverOrThrow(mediaType);return sendTransceiver.senderIds.map(id=>({id,state:sendTransceiver.currentSourceState,csi:sendTransceiver.csi}));}createReceiveTransceiver(mediaType){var rtcRtpTransceiver=this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'recvonly'});var mid=this.midPredictor.getNextMid(mediaType);var munger=new IngressSdpMunger();var recvOnlyTransceiver=new ReceiveOnlyTransceiver({rtcRtpTransceiver,mid,mediaType,munger});if(getMediaFamily(mediaType)===exports.MediaFamily.Video){recvOnlyTransceiver.setCodecParameters({'sps-pps-idr-in-keyframe':'1'});recvOnlyTransceiver.setRtxCodecParameters({'rtx-time':mediaType===exports.MediaType.VideoMain?defaultVideoMainRtxTime:defaultVideoSlidesRtxTime});}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.IceCandidate,candidate=>{if(candidate.candidate===null||this.options.stopIceGatheringAfterFirstRelayCandidate&&candidate.candidate.type==='relay'){resolve();}});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);var shouldInjectDummyCandidates=()=>{if(!this.options.doFullIce){return true;}return !hasIceCandidates(parsedOffer);};var mungeOptions={injectDummyCandidates:shouldInjectDummyCandidates()};parsedOffer.avMedia.filter(av=>av.direction==='sendrecv'||av.direction==='inactive').forEach(av=>{var sendTransceiver=this.getSendTransceiverByMidOrThrow(av.mid);sendTransceiver.mungeLocalDescriptionForRemoteServer(av,mungeOptions);});if(mungeOptions.injectDummyCandidates){parsedOffer.media.filter(media=>media instanceof ApplicationMediaDescription$1).forEach(media=>{injectDummyCandidates(media);});}if(BrowserInfo.isFirefox()&&this.options.doFullIce){parsedOffer.media.forEach(media=>{media.iceInfo.candidates=[];this.iceCandidates.forEach(iceCandidate=>{var candidateLine=CandidateLine$1.fromSdpLine(iceCandidate.candidate.toString());if(candidateLine){media.addLine(candidateLine);}});});}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,_b;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());}if((_b=parsedAnswer.session.information)===null||_b===void 0?void 0:_b.info){this.metadata.isMediaBypassEdge=!parsedAnswer.session.information.info.includes('linus');}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=>areStreamIdsEqual(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=>areStreamIdsEqual(id,transceiver.receiveSlot.id))){var relevantRequest=streamRequests.find(request=>request.receiveSlots.some(slot=>areStreamIdsEqual(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*(){stats.forEach(stat=>{if(stat.type==='peer-connection'){stat.isMediaBypassEdge=this.metadata.isMediaBypassEdge;}});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);}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);}}
|
|
5612
5612
|
|
|
5613
5613
|
var defaultLogger = {
|
|
5614
5614
|
info: function info() {
|
|
@@ -7216,8 +7216,8 @@ exports.ErrorType = void 0;
|
|
|
7216
7216
|
ErrorType["TIMEOUT"] = "TIMEOUT";
|
|
7217
7217
|
})(exports.ErrorType || (exports.ErrorType = {}));
|
|
7218
7218
|
|
|
7219
|
-
function ownKeys$
|
|
7220
|
-
function _objectSpread$
|
|
7219
|
+
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; }
|
|
7220
|
+
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(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; }
|
|
7221
7221
|
var localTrackTypes = [{
|
|
7222
7222
|
type: 'audio',
|
|
7223
7223
|
kind: 'audio'
|
|
@@ -7244,8 +7244,8 @@ class MediaConnection extends EventEmitter$5 {
|
|
|
7244
7244
|
_defineProperty(this, "forceStatsReport", void 0);
|
|
7245
7245
|
this.config = mediaConnectionConfig;
|
|
7246
7246
|
this.metricsCallback = metricsCallback;
|
|
7247
|
-
this.mediaDirection = _objectSpread$
|
|
7248
|
-
this.localTracks = _objectSpread$
|
|
7247
|
+
this.mediaDirection = _objectSpread$8({}, options.direction);
|
|
7248
|
+
this.localTracks = _objectSpread$8({}, options.localTracks);
|
|
7249
7249
|
this.remoteQualityLevel = options.remoteQualityLevel;
|
|
7250
7250
|
this.id = debugId || 'MediaConnection';
|
|
7251
7251
|
this.transceivers = {};
|
|
@@ -7370,7 +7370,7 @@ class MediaConnection extends EventEmitter$5 {
|
|
|
7370
7370
|
updateLocalTracks(tracks) {
|
|
7371
7371
|
return this.updateTransceivers({
|
|
7372
7372
|
localTracks: tracks,
|
|
7373
|
-
direction: _objectSpread$
|
|
7373
|
+
direction: _objectSpread$8({}, this.mediaDirection)
|
|
7374
7374
|
});
|
|
7375
7375
|
}
|
|
7376
7376
|
updateDirection(direction) {
|
|
@@ -7603,7 +7603,7 @@ class MediaConnection extends EventEmitter$5 {
|
|
|
7603
7603
|
if (this.config.sdpMunging.h264MaxFs) {
|
|
7604
7604
|
this.warn('createSdpMungingConfig', 'conflict: both config.sdpMunging.h264MaxFs and receiveOptions.remoteQualityLevel are set, remoteQualityLevel will override the config');
|
|
7605
7605
|
}
|
|
7606
|
-
return _objectSpread$
|
|
7606
|
+
return _objectSpread$8(_objectSpread$8({}, this.config.sdpMunging), {}, {
|
|
7607
7607
|
h264MaxFs: maxFsValues[this.remoteQualityLevel]
|
|
7608
7608
|
});
|
|
7609
7609
|
}
|
|
@@ -15154,8 +15154,8 @@ function createMachine(config, options) {
|
|
|
15154
15154
|
|
|
15155
15155
|
var assign = assign$1;
|
|
15156
15156
|
|
|
15157
|
-
function ownKeys$
|
|
15158
|
-
function _objectSpread$
|
|
15157
|
+
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; }
|
|
15158
|
+
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(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; }
|
|
15159
15159
|
var WEB_TIEBREAKER_VALUE = 0xfffffffe;
|
|
15160
15160
|
var MAX_RETRIES = 2;
|
|
15161
15161
|
var DEFAULT_IS_OK_IN_TRANSACTION = true;
|
|
@@ -15423,28 +15423,28 @@ class Roap extends EventEmitter$5 {
|
|
|
15423
15423
|
handleRemoteOffer: (_context, event) => this.handleRemoteOfferCallback(event.sdp)
|
|
15424
15424
|
},
|
|
15425
15425
|
actions: {
|
|
15426
|
-
enqueueNewOfferCreation: assign(context => _objectSpread$
|
|
15426
|
+
enqueueNewOfferCreation: assign(context => _objectSpread$7(_objectSpread$7({}, context), {}, {
|
|
15427
15427
|
pendingLocalOffer: true
|
|
15428
15428
|
})),
|
|
15429
|
-
resetPendingLocalOffer: assign(context => _objectSpread$
|
|
15429
|
+
resetPendingLocalOffer: assign(context => _objectSpread$7(_objectSpread$7({}, context), {}, {
|
|
15430
15430
|
pendingLocalOffer: false
|
|
15431
15431
|
})),
|
|
15432
|
-
increaseSeq: assign(context => _objectSpread$
|
|
15432
|
+
increaseSeq: assign(context => _objectSpread$7(_objectSpread$7({}, context), {}, {
|
|
15433
15433
|
seq: context.seq + 1
|
|
15434
15434
|
})),
|
|
15435
|
-
updateSeq: assign((context, event) => _objectSpread$
|
|
15435
|
+
updateSeq: assign((context, event) => _objectSpread$7(_objectSpread$7({}, context), {}, {
|
|
15436
15436
|
seq: event.seq
|
|
15437
15437
|
})),
|
|
15438
|
-
increaseRetryCounter: assign(context => _objectSpread$
|
|
15438
|
+
increaseRetryCounter: assign(context => _objectSpread$7(_objectSpread$7({}, context), {}, {
|
|
15439
15439
|
retryCounter: context.retryCounter + 1
|
|
15440
15440
|
})),
|
|
15441
|
-
resetRetryCounter: assign(context => _objectSpread$
|
|
15441
|
+
resetRetryCounter: assign(context => _objectSpread$7(_objectSpread$7({}, context), {}, {
|
|
15442
15442
|
retryCounter: 0
|
|
15443
15443
|
})),
|
|
15444
|
-
setOfferRequestFlag: assign(context => _objectSpread$
|
|
15444
|
+
setOfferRequestFlag: assign(context => _objectSpread$7(_objectSpread$7({}, context), {}, {
|
|
15445
15445
|
isHandlingOfferRequest: true
|
|
15446
15446
|
})),
|
|
15447
|
-
resetOfferRequestFlag: assign(context => _objectSpread$
|
|
15447
|
+
resetOfferRequestFlag: assign(context => _objectSpread$7(_objectSpread$7({}, context), {}, {
|
|
15448
15448
|
isHandlingOfferRequest: false
|
|
15449
15449
|
})),
|
|
15450
15450
|
handleGlare: (_context, event) => {
|
|
@@ -15472,11 +15472,11 @@ class Roap extends EventEmitter$5 {
|
|
|
15472
15472
|
rejectPendingInitiateOfferPromises: (_context, event) => this.rejectPendingInitiateOfferPromises(event.data),
|
|
15473
15473
|
updateIsOkInTransaction: assign((context, event) => {
|
|
15474
15474
|
var _event$headers;
|
|
15475
|
-
return _objectSpread$
|
|
15475
|
+
return _objectSpread$7(_objectSpread$7({}, context), {}, {
|
|
15476
15476
|
isOkInTransaction: !((_event$headers = event.headers) !== null && _event$headers !== void 0 && _event$headers.includes(HEADER_NO_OK_IN_TRANSACTION))
|
|
15477
15477
|
});
|
|
15478
15478
|
}),
|
|
15479
|
-
resetOkInTransaction: assign(context => _objectSpread$
|
|
15479
|
+
resetOkInTransaction: assign(context => _objectSpread$7(_objectSpread$7({}, context), {}, {
|
|
15480
15480
|
isOkInTransaction: DEFAULT_IS_OK_IN_TRANSACTION
|
|
15481
15481
|
}))
|
|
15482
15482
|
},
|
|
@@ -15698,8 +15698,8 @@ class Roap extends EventEmitter$5 {
|
|
|
15698
15698
|
}
|
|
15699
15699
|
}
|
|
15700
15700
|
|
|
15701
|
-
function ownKeys$
|
|
15702
|
-
function _objectSpread$
|
|
15701
|
+
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; }
|
|
15702
|
+
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(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; }
|
|
15703
15703
|
class RoapMediaConnection extends EventEmitter$5 {
|
|
15704
15704
|
constructor(mediaConnectionConfig, options, debugId) {
|
|
15705
15705
|
var metricsCallback = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : () => {};
|
|
@@ -15807,7 +15807,7 @@ class RoapMediaConnection extends EventEmitter$5 {
|
|
|
15807
15807
|
reconnect(iceServers) {
|
|
15808
15808
|
var initiateOffer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
15809
15809
|
this.log('reconnect()', "iceServers: ".concat(JSON.stringify(iceServers)));
|
|
15810
|
-
var config = _objectSpread$
|
|
15810
|
+
var config = _objectSpread$6(_objectSpread$6({}, this.mediaConnection.getConfig()), {}, {
|
|
15811
15811
|
iceServers
|
|
15812
15812
|
});
|
|
15813
15813
|
var options = this.mediaConnection.getSendReceiveOptions();
|
|
@@ -15914,8 +15914,8 @@ class RoapMediaConnection extends EventEmitter$5 {
|
|
|
15914
15914
|
}
|
|
15915
15915
|
}
|
|
15916
15916
|
|
|
15917
|
-
function ownKeys$
|
|
15918
|
-
function _objectSpread$
|
|
15917
|
+
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; }
|
|
15918
|
+
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(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; }
|
|
15919
15919
|
class MultistreamRoapMediaConnection extends EventEmitter$5 {
|
|
15920
15920
|
constructor(mediaConnectionConfig, debugId) {
|
|
15921
15921
|
var metricsCallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : () => {};
|
|
@@ -15949,7 +15949,7 @@ class MultistreamRoapMediaConnection extends EventEmitter$5 {
|
|
|
15949
15949
|
}
|
|
15950
15950
|
createMultistreamConnection(mediaConnectionConfig, metricsCallback) {
|
|
15951
15951
|
this.log('createMultistreamConnection()', 'called');
|
|
15952
|
-
var multistreamConnection = new MultistreamConnection(_objectSpread$
|
|
15952
|
+
var multistreamConnection = new MultistreamConnection(_objectSpread$5(_objectSpread$5({}, mediaConnectionConfig), {}, {
|
|
15953
15953
|
metricsCallback
|
|
15954
15954
|
}));
|
|
15955
15955
|
multistreamConnection.on(MultistreamConnectionEventNames.ActiveSpeakerNotification, csis => {
|
|
@@ -16166,6 +16166,272 @@ class MultistreamRoapMediaConnection extends EventEmitter$5 {
|
|
|
16166
16166
|
|
|
16167
16167
|
var Errors = Error$1;
|
|
16168
16168
|
|
|
16169
|
+
var isIPv4 = function isIPv4(ipString) {
|
|
16170
|
+
if (!ipString.match(/^([0-9]{1,3}\.){3}[0-9]{1,3}$/)) {
|
|
16171
|
+
return false;
|
|
16172
|
+
}
|
|
16173
|
+
var octets = ipString.split('.');
|
|
16174
|
+
for (var octet of octets) {
|
|
16175
|
+
var number = Number(octet);
|
|
16176
|
+
if (number > 255) {
|
|
16177
|
+
return false;
|
|
16178
|
+
}
|
|
16179
|
+
}
|
|
16180
|
+
return true;
|
|
16181
|
+
};
|
|
16182
|
+
var isIPv6 = function isIPv6(ipString) {
|
|
16183
|
+
var chunks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 8;
|
|
16184
|
+
ipString = ipString.toLowerCase();
|
|
16185
|
+
if (ipString === '::') {
|
|
16186
|
+
return true;
|
|
16187
|
+
}
|
|
16188
|
+
if (!ipString.match(/^([0-9a-f]{0,4}:?){2,8}$/)) {
|
|
16189
|
+
return false;
|
|
16190
|
+
}
|
|
16191
|
+
|
|
16192
|
+
// If there is a colon at the end, it must be a double colon
|
|
16193
|
+
if (ipString[ipString.length - 1] === ':') {
|
|
16194
|
+
if (ipString[ipString.length - 2] !== ':') {
|
|
16195
|
+
return false;
|
|
16196
|
+
}
|
|
16197
|
+
}
|
|
16198
|
+
|
|
16199
|
+
// No more than one double colon
|
|
16200
|
+
if (ipString.split('::').length > 2) {
|
|
16201
|
+
return false;
|
|
16202
|
+
}
|
|
16203
|
+
|
|
16204
|
+
// If no double colon, then exactly `chunks` chunks
|
|
16205
|
+
if (ipString.split('::').length === 1) {
|
|
16206
|
+
if (ipString.split(':').length !== chunks) {
|
|
16207
|
+
return false;
|
|
16208
|
+
}
|
|
16209
|
+
}
|
|
16210
|
+
if (ipString.split('::').length === 2) {
|
|
16211
|
+
var right = ipString.split('::')[1];
|
|
16212
|
+
right = right.split(':');
|
|
16213
|
+
for (var i = 0; i < right.length - 1; i++) {
|
|
16214
|
+
if (right[i] === '') {
|
|
16215
|
+
return false;
|
|
16216
|
+
}
|
|
16217
|
+
}
|
|
16218
|
+
}
|
|
16219
|
+
return true;
|
|
16220
|
+
};
|
|
16221
|
+
var isIPv64 = function isIPv64(ipString) {
|
|
16222
|
+
var [v6, v4] = splitIPv64(ipString);
|
|
16223
|
+
return isIPv6(v6, 6) && isIPv4(v4);
|
|
16224
|
+
};
|
|
16225
|
+
|
|
16226
|
+
// Reference: https://web.archive.org/web/20181019071947/http://www.tcpipguide.com/free/t_IPv6IPv4AddressEmbedding-2.htm
|
|
16227
|
+
// Either starts with 96 0s or 80 0s followed by 16 1s
|
|
16228
|
+
var isIPv4MappedIPv6 = function isIPv4MappedIPv6(ipString) {
|
|
16229
|
+
return isIPv64(ipString) && (!binaryIPv64(ipString).substring(0, 96).includes('1') || !binaryIPv64(ipString).substring(0, 80).includes('1') && !binaryIPv64(ipString).substring(80, 96).includes('0'));
|
|
16230
|
+
};
|
|
16231
|
+
var ipType = function ipType(ipString) {
|
|
16232
|
+
if (isIPv4(ipString)) {
|
|
16233
|
+
return 'IPv4';
|
|
16234
|
+
}
|
|
16235
|
+
if (isIPv6(ipString)) {
|
|
16236
|
+
return 'IPv6';
|
|
16237
|
+
}
|
|
16238
|
+
if (isIPv64(ipString)) {
|
|
16239
|
+
return 'IPv6_4';
|
|
16240
|
+
}
|
|
16241
|
+
return 'None';
|
|
16242
|
+
};
|
|
16243
|
+
var padRight = function padRight(str, length) {
|
|
16244
|
+
var char = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '0';
|
|
16245
|
+
while (str.length < length) {
|
|
16246
|
+
str += char;
|
|
16247
|
+
}
|
|
16248
|
+
return str;
|
|
16249
|
+
};
|
|
16250
|
+
var padLeft = function padLeft(str, length) {
|
|
16251
|
+
var char = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '0';
|
|
16252
|
+
while (str.length < length) {
|
|
16253
|
+
str = char + str;
|
|
16254
|
+
}
|
|
16255
|
+
return str;
|
|
16256
|
+
};
|
|
16257
|
+
var split = function split(str, length) {
|
|
16258
|
+
var chunks = [];
|
|
16259
|
+
while (str.length > 0) {
|
|
16260
|
+
var chunk = str.substring(0, length);
|
|
16261
|
+
chunks.push(chunk);
|
|
16262
|
+
str = str.substring(length);
|
|
16263
|
+
}
|
|
16264
|
+
return chunks;
|
|
16265
|
+
};
|
|
16266
|
+
var toBinary = function toBinary(n) {
|
|
16267
|
+
return Number(n).toString(2);
|
|
16268
|
+
};
|
|
16269
|
+
var fromBinary = function fromBinary(binaryString) {
|
|
16270
|
+
return parseInt(binaryString, 2);
|
|
16271
|
+
};
|
|
16272
|
+
var binaryIPv4 = function binaryIPv4(ipString) {
|
|
16273
|
+
var octetStrings = ipString.split('.');
|
|
16274
|
+
return octetStrings.map(str => padLeft(toBinary(str), 8)).join('');
|
|
16275
|
+
};
|
|
16276
|
+
var toHex = function toHex(n) {
|
|
16277
|
+
return n.toString(16);
|
|
16278
|
+
};
|
|
16279
|
+
var binaryIPv6 = function binaryIPv6(ipString) {
|
|
16280
|
+
var [left, right] = ipString.split('::');
|
|
16281
|
+
left = left.split(':');
|
|
16282
|
+
if (right !== undefined) {
|
|
16283
|
+
right = right.split(':');
|
|
16284
|
+
} else {
|
|
16285
|
+
right = [];
|
|
16286
|
+
}
|
|
16287
|
+
while (left.length + right.length < 8) {
|
|
16288
|
+
left.push('0');
|
|
16289
|
+
}
|
|
16290
|
+
var chunkStrings = left.concat(right);
|
|
16291
|
+
for (var i = 0; i < chunkStrings.length; i++) {
|
|
16292
|
+
if (chunkStrings[i].length === 0) {
|
|
16293
|
+
chunkStrings[i] = '0';
|
|
16294
|
+
}
|
|
16295
|
+
}
|
|
16296
|
+
var chunks = chunkStrings.map(str => parseInt(str, 16));
|
|
16297
|
+
var binaryChunks = chunks.map(n => padLeft(toBinary(n), 16));
|
|
16298
|
+
return binaryChunks.join('');
|
|
16299
|
+
};
|
|
16300
|
+
var splitIPv64 = function splitIPv64(ipString) {
|
|
16301
|
+
var separatorIndex = ipString.lastIndexOf(':');
|
|
16302
|
+
var v6 = ipString.substring(0, separatorIndex);
|
|
16303
|
+
var v4 = ipString.substring(separatorIndex + 1);
|
|
16304
|
+
if (v6[v6.length - 1] === ':') {
|
|
16305
|
+
v6 = v6 + ':';
|
|
16306
|
+
}
|
|
16307
|
+
return [v6, v4];
|
|
16308
|
+
};
|
|
16309
|
+
var binaryIPv64 = function binaryIPv64(ipString) {
|
|
16310
|
+
var [v6, v4] = splitIPv64(ipString);
|
|
16311
|
+
var [left, right] = v6.split('::');
|
|
16312
|
+
left = left.split(':');
|
|
16313
|
+
if (right !== undefined) {
|
|
16314
|
+
right = right.split(':');
|
|
16315
|
+
} else {
|
|
16316
|
+
right = [];
|
|
16317
|
+
}
|
|
16318
|
+
while (left.length + right.length < 6) {
|
|
16319
|
+
left.push('0');
|
|
16320
|
+
}
|
|
16321
|
+
var chunkStrings = left.concat(right);
|
|
16322
|
+
for (var i = 0; i < chunkStrings.length; i++) {
|
|
16323
|
+
if (chunkStrings[i].length === 0) {
|
|
16324
|
+
chunkStrings[i] = '0';
|
|
16325
|
+
}
|
|
16326
|
+
}
|
|
16327
|
+
var chunks = chunkStrings.map(str => parseInt(str, 16));
|
|
16328
|
+
var binaryChunks = chunks.map(n => padLeft(toBinary(n), 16));
|
|
16329
|
+
return binaryChunks.join('') + binaryIPv4(v4);
|
|
16330
|
+
};
|
|
16331
|
+
var fromBinaryIPv4 = function fromBinaryIPv4(binaryString) {
|
|
16332
|
+
var octets = split(binaryString, 8);
|
|
16333
|
+
return octets.map(fromBinary).join('.');
|
|
16334
|
+
};
|
|
16335
|
+
var compressIPv6 = function compressIPv6(ipString) {
|
|
16336
|
+
var chunks = ipString.split(':');
|
|
16337
|
+
var bestRunLength = 0;
|
|
16338
|
+
var bestRunStart = null;
|
|
16339
|
+
var currentlyRun = false;
|
|
16340
|
+
var runLength = 0;
|
|
16341
|
+
var runStart = null;
|
|
16342
|
+
for (var i = 0; i < chunks.length; i++) {
|
|
16343
|
+
if (currentlyRun) {
|
|
16344
|
+
if (chunks[i] === '0') {
|
|
16345
|
+
runLength++;
|
|
16346
|
+
} else {
|
|
16347
|
+
if (runLength > bestRunLength) {
|
|
16348
|
+
bestRunLength = runLength;
|
|
16349
|
+
bestRunStart = runStart;
|
|
16350
|
+
}
|
|
16351
|
+
currentlyRun = false;
|
|
16352
|
+
runLength = 0;
|
|
16353
|
+
runStart = null;
|
|
16354
|
+
}
|
|
16355
|
+
} else {
|
|
16356
|
+
if (chunks[i] === '0') {
|
|
16357
|
+
currentlyRun = true;
|
|
16358
|
+
runLength = 1;
|
|
16359
|
+
runStart = i;
|
|
16360
|
+
}
|
|
16361
|
+
}
|
|
16362
|
+
}
|
|
16363
|
+
if (runStart !== null && runLength > bestRunLength) {
|
|
16364
|
+
bestRunLength = runLength;
|
|
16365
|
+
bestRunStart = runStart;
|
|
16366
|
+
}
|
|
16367
|
+
if (bestRunLength < 2) {
|
|
16368
|
+
return ipString;
|
|
16369
|
+
}
|
|
16370
|
+
var left = chunks.slice(0, bestRunStart).join(':');
|
|
16371
|
+
var right = chunks.slice(bestRunStart + bestRunLength).join(':');
|
|
16372
|
+
var result = left + '::' + right;
|
|
16373
|
+
return result;
|
|
16374
|
+
};
|
|
16375
|
+
var fromBinaryIPv6 = function fromBinaryIPv6(binaryString) {
|
|
16376
|
+
var chunks = split(binaryString, 16);
|
|
16377
|
+
var hexChunks = chunks.map(fromBinary).map(toHex);
|
|
16378
|
+
var compressedChunks = compressIPv6(hexChunks.join(':'));
|
|
16379
|
+
return compressedChunks;
|
|
16380
|
+
};
|
|
16381
|
+
var fromBinaryIPv64 = function fromBinaryIPv64(binaryString) {
|
|
16382
|
+
var v6 = binaryString.substring(0, 96);
|
|
16383
|
+
var v4 = binaryString.substring(96);
|
|
16384
|
+
var left = fromBinaryIPv6(v6);
|
|
16385
|
+
var right = fromBinaryIPv4(v4);
|
|
16386
|
+
var compressedChunks = left;
|
|
16387
|
+
if (compressedChunks[compressedChunks.length - 1] !== ':') {
|
|
16388
|
+
compressedChunks += ':';
|
|
16389
|
+
}
|
|
16390
|
+
return compressedChunks + right;
|
|
16391
|
+
};
|
|
16392
|
+
var anonymizeIPv4 = function anonymizeIPv4(ipString, maskLength) {
|
|
16393
|
+
var binary = binaryIPv4(ipString);
|
|
16394
|
+
var segment = binary.substring(0, maskLength);
|
|
16395
|
+
var anonymizedBinary = padRight(segment, 32);
|
|
16396
|
+
return fromBinaryIPv4(anonymizedBinary);
|
|
16397
|
+
};
|
|
16398
|
+
var anonymizeIPv6 = function anonymizeIPv6(ipString, maskLength) {
|
|
16399
|
+
var binary = binaryIPv6(ipString);
|
|
16400
|
+
var segment = binary.substring(0, maskLength);
|
|
16401
|
+
var anonymizedBinary = padRight(segment, 128);
|
|
16402
|
+
return fromBinaryIPv6(anonymizedBinary);
|
|
16403
|
+
};
|
|
16404
|
+
var anonymizeIPv64 = function anonymizeIPv64(ipString, maskLength) {
|
|
16405
|
+
var binary = binaryIPv64(ipString);
|
|
16406
|
+
var segment = binary.substring(0, maskLength);
|
|
16407
|
+
var anonymizedBinary = padRight(segment, 128);
|
|
16408
|
+
return fromBinaryIPv64(anonymizedBinary);
|
|
16409
|
+
};
|
|
16410
|
+
var anonymizeIP = function anonymizeIP(ipString) {
|
|
16411
|
+
var v4MaskLength = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 24;
|
|
16412
|
+
var v6MaskLength = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 24;
|
|
16413
|
+
if (typeof ipString !== 'string') {
|
|
16414
|
+
return null;
|
|
16415
|
+
}
|
|
16416
|
+
ipString = ipString.trim().toLowerCase();
|
|
16417
|
+
var type = ipType(ipString);
|
|
16418
|
+
if (type === 'IPv4') {
|
|
16419
|
+
return anonymizeIPv4(ipString, v4MaskLength);
|
|
16420
|
+
}
|
|
16421
|
+
if (type === 'IPv6') {
|
|
16422
|
+
return anonymizeIPv6(ipString, v6MaskLength);
|
|
16423
|
+
}
|
|
16424
|
+
if (type === 'IPv6_4') {
|
|
16425
|
+
if (isIPv4MappedIPv6(ipString)) {
|
|
16426
|
+
return anonymizeIPv64(ipString, v4MaskLength + 96);
|
|
16427
|
+
} else {
|
|
16428
|
+
return anonymizeIPv64(ipString, v6MaskLength);
|
|
16429
|
+
}
|
|
16430
|
+
}
|
|
16431
|
+
return null;
|
|
16432
|
+
};
|
|
16433
|
+
var ipAnonymize = anonymizeIP;
|
|
16434
|
+
|
|
16169
16435
|
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global$1 !== 'undefined' ? global$1 : typeof self !== 'undefined' ? self : {};
|
|
16170
16436
|
function getDefaultExportFromCjs(x) {
|
|
16171
16437
|
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
|
|
@@ -17516,371 +17782,121 @@ var CapabilityState;
|
|
|
17516
17782
|
CapabilityState["UNKNOWN"] = "unknown";
|
|
17517
17783
|
})(CapabilityState || (CapabilityState = {}));
|
|
17518
17784
|
|
|
17519
|
-
var
|
|
17520
|
-
|
|
17521
|
-
|
|
17522
|
-
|
|
17523
|
-
|
|
17524
|
-
|
|
17525
|
-
|
|
17526
|
-
|
|
17527
|
-
(
|
|
17528
|
-
|
|
17529
|
-
|
|
17530
|
-
|
|
17531
|
-
|
|
17532
|
-
|
|
17533
|
-
|
|
17534
|
-
|
|
17535
|
-
|
|
17536
|
-
|
|
17537
|
-
|
|
17538
|
-
|
|
17539
|
-
|
|
17540
|
-
|
|
17541
|
-
|
|
17542
|
-
|
|
17543
|
-
var STATS_DEFAULT = {
|
|
17544
|
-
encryption: 'sha-256',
|
|
17545
|
-
bandwidth: {
|
|
17546
|
-
systemBandwidth: 0,
|
|
17547
|
-
sentPerSecond: 0,
|
|
17548
|
-
encodedPerSecond: 0,
|
|
17549
|
-
helper: {
|
|
17550
|
-
audioBytesSent: 0,
|
|
17551
|
-
videoBytesSent: 0
|
|
17552
|
-
},
|
|
17553
|
-
speed: 0
|
|
17554
|
-
},
|
|
17555
|
-
results: {},
|
|
17556
|
-
connectionType: {
|
|
17557
|
-
systemNetworkType: 'unknown',
|
|
17558
|
-
systemIpAddress: '0.0.0.0',
|
|
17559
|
-
local: {
|
|
17560
|
-
candidateType: 'host',
|
|
17561
|
-
transport: 'UDP',
|
|
17562
|
-
networkType: NetworkType.UNKNOWN
|
|
17563
|
-
},
|
|
17564
|
-
remote: {
|
|
17565
|
-
candidateType: 'host',
|
|
17566
|
-
transport: 'UDP',
|
|
17567
|
-
networkType: NetworkType.UNKNOWN
|
|
17568
|
-
}
|
|
17569
|
-
},
|
|
17570
|
-
resolutions: {},
|
|
17571
|
-
internal: {
|
|
17572
|
-
remote: {},
|
|
17573
|
-
candidates: {}
|
|
17574
|
-
}
|
|
17785
|
+
var MQE_INTERVAL = 60000;
|
|
17786
|
+
var DEFAULT_IP = '0.0.0.0';
|
|
17787
|
+
var UNKNOWN = 'unknown';
|
|
17788
|
+
var VIDEO_FRAME_RATE_MULTIPLIER = 100;
|
|
17789
|
+
var NOISE_REDUCTION_MODE;
|
|
17790
|
+
(function (NOISE_REDUCTION_MODE) {
|
|
17791
|
+
NOISE_REDUCTION_MODE["NONE"] = "AUDIO_BACKGROUND_NOISE_REDUCTION_NONE";
|
|
17792
|
+
NOISE_REDUCTION_MODE["LOW_POWER"] = "AUDIO_BACKGROUND_NOISE_REDUCTION_LOW_POWER";
|
|
17793
|
+
})(NOISE_REDUCTION_MODE || (NOISE_REDUCTION_MODE = {}));
|
|
17794
|
+
var VIRTUAL_BACKGROUND_MODE;
|
|
17795
|
+
(function (VIRTUAL_BACKGROUND_MODE) {
|
|
17796
|
+
VIRTUAL_BACKGROUND_MODE["NONE"] = "VIDEO_BACKGROUND_AUGMENT_NONE";
|
|
17797
|
+
VIRTUAL_BACKGROUND_MODE["BLUR"] = "VIDEO_BACKGROUND_AUGMENT_BLUR";
|
|
17798
|
+
VIRTUAL_BACKGROUND_MODE["REPLACE_IMAGE"] = "VIDEO_BACKGROUND_AUGMENT_REPLACE_IMAGE";
|
|
17799
|
+
VIRTUAL_BACKGROUND_MODE["REPLACE_VIDEO"] = "VIDEO_BACKGROUND_AUGMENT_REPLACE_VIDEO";
|
|
17800
|
+
})(VIRTUAL_BACKGROUND_MODE || (VIRTUAL_BACKGROUND_MODE = {}));
|
|
17801
|
+
|
|
17802
|
+
var initialMqeInterval = {
|
|
17803
|
+
intervalNumber: 0,
|
|
17804
|
+
intervalMetadata: {},
|
|
17805
|
+
audioTransmit: [],
|
|
17806
|
+
audioReceive: [],
|
|
17807
|
+
videoTransmit: [],
|
|
17808
|
+
videoReceive: []
|
|
17575
17809
|
};
|
|
17576
|
-
var
|
|
17577
|
-
|
|
17810
|
+
var initialMqeIntervalSessionCommon = {
|
|
17811
|
+
isMain: true,
|
|
17812
|
+
mariFecEnabled: false,
|
|
17813
|
+
mariQosEnabled: false,
|
|
17814
|
+
multistreamEnabled: true,
|
|
17815
|
+
direction: 'inactive'
|
|
17578
17816
|
};
|
|
17579
|
-
var
|
|
17580
|
-
|
|
17581
|
-
|
|
17582
|
-
|
|
17583
|
-
|
|
17584
|
-
|
|
17585
|
-
|
|
17586
|
-
|
|
17587
|
-
|
|
17588
|
-
|
|
17589
|
-
|
|
17590
|
-
|
|
17591
|
-
|
|
17592
|
-
|
|
17593
|
-
|
|
17594
|
-
|
|
17595
|
-
|
|
17596
|
-
|
|
17597
|
-
screenHeight: 0,
|
|
17598
|
-
screenResolution: 0,
|
|
17599
|
-
appWindowWidth: 0,
|
|
17600
|
-
appWindowHeight: 0,
|
|
17601
|
-
appWindowSize: 0
|
|
17602
|
-
},
|
|
17603
|
-
networkType: '',
|
|
17604
|
-
intervalNumber: 0,
|
|
17605
|
-
videoReceive: [],
|
|
17606
|
-
videoTransmit: []
|
|
17817
|
+
var initialMqeIntervalSessionReceive = {
|
|
17818
|
+
common: initialMqeIntervalSessionCommon,
|
|
17819
|
+
fecPackets: 0,
|
|
17820
|
+
fecBitrate: 0,
|
|
17821
|
+
rtpPackets: 0,
|
|
17822
|
+
rtpBitrate: 0,
|
|
17823
|
+
rtpHopByHopLost: 0,
|
|
17824
|
+
mediaHopByHopLost: 0,
|
|
17825
|
+
rtpRecovered: 0,
|
|
17826
|
+
rtcpPackets: 0,
|
|
17827
|
+
rtcpBitrate: 0,
|
|
17828
|
+
stunPackets: 0,
|
|
17829
|
+
stunBitrate: 0,
|
|
17830
|
+
dtlsPackets: 0,
|
|
17831
|
+
dtlsBitrate: 0,
|
|
17832
|
+
transportType: 'UDP',
|
|
17833
|
+
maxBitrate: 0,
|
|
17834
|
+
srtpUnprotectErrors: 0
|
|
17607
17835
|
};
|
|
17608
|
-
var
|
|
17609
|
-
|
|
17610
|
-
|
|
17611
|
-
|
|
17612
|
-
|
|
17613
|
-
|
|
17614
|
-
|
|
17615
|
-
|
|
17616
|
-
|
|
17617
|
-
|
|
17618
|
-
|
|
17619
|
-
dtlsBitrate: 0,
|
|
17620
|
-
dtlsPackets: 0,
|
|
17621
|
-
fecBitrate: 0,
|
|
17622
|
-
fecPackets: 0,
|
|
17623
|
-
maxBitrate: 0,
|
|
17624
|
-
mediaHopByHopLost: 0,
|
|
17625
|
-
rtcpBitrate: 0,
|
|
17626
|
-
rtcpPackets: 0,
|
|
17627
|
-
rtpBitrate: 0,
|
|
17628
|
-
rtpHopByHopLost: 0,
|
|
17629
|
-
rtpPackets: 0,
|
|
17630
|
-
rtpRecovered: 0,
|
|
17631
|
-
rtxBitrate: 0,
|
|
17632
|
-
rtxPackets: 0,
|
|
17633
|
-
srtcpUnprotectErrors: 0,
|
|
17634
|
-
srtpUnprotectErrors: 0,
|
|
17635
|
-
stunBitrate: 0,
|
|
17636
|
-
stunPackets: 0,
|
|
17637
|
-
transportType: 'UDP',
|
|
17638
|
-
mediaPacketSize: {
|
|
17639
|
-
meanRtpPacketSize: 0,
|
|
17640
|
-
maxRtpPacketSize: 0,
|
|
17641
|
-
minRtpPacketSize: 0
|
|
17642
|
-
}
|
|
17643
|
-
},
|
|
17644
|
-
streams: []
|
|
17836
|
+
var initialMqeIntervalStreamReceiveCommon = {
|
|
17837
|
+
ssci: 0,
|
|
17838
|
+
rtpPackets: 0,
|
|
17839
|
+
rtpEndToEndLost: 0,
|
|
17840
|
+
concealedFrames: 0,
|
|
17841
|
+
maxConcealRunLength: 0,
|
|
17842
|
+
receivedBitrate: 0,
|
|
17843
|
+
requestedBitrate: 0,
|
|
17844
|
+
optimalBitrate: 0,
|
|
17845
|
+
csi: [],
|
|
17846
|
+
codec: ''
|
|
17645
17847
|
};
|
|
17646
|
-
var
|
|
17647
|
-
common:
|
|
17648
|
-
codec: 'opus',
|
|
17649
|
-
concealedFrames: 0,
|
|
17650
|
-
csi: [],
|
|
17651
|
-
maxConcealRunLength: 0,
|
|
17652
|
-
optimalBitrate: 0,
|
|
17653
|
-
optimalFrameRate: 0,
|
|
17654
|
-
receivedBitrate: 0,
|
|
17655
|
-
receivedFrameRate: 0,
|
|
17656
|
-
renderedFrameRate: 0,
|
|
17657
|
-
requestedBitrate: 0,
|
|
17658
|
-
requestedFrameRate: 0,
|
|
17659
|
-
rtpEndToEndLost: 0,
|
|
17660
|
-
maxRtpJitter: 0,
|
|
17661
|
-
meanRtpJitter: 0,
|
|
17662
|
-
rtpPackets: 0,
|
|
17663
|
-
ssci: 0
|
|
17664
|
-
}
|
|
17848
|
+
var initialMqeIntervalStreamReceiveAudio = {
|
|
17849
|
+
common: initialMqeIntervalStreamReceiveCommon
|
|
17665
17850
|
};
|
|
17666
|
-
var
|
|
17667
|
-
common:
|
|
17668
|
-
|
|
17669
|
-
|
|
17670
|
-
|
|
17671
|
-
|
|
17672
|
-
|
|
17673
|
-
|
|
17674
|
-
|
|
17675
|
-
|
|
17676
|
-
|
|
17677
|
-
|
|
17678
|
-
|
|
17679
|
-
|
|
17680
|
-
|
|
17681
|
-
|
|
17682
|
-
maxBitrate: 0,
|
|
17683
|
-
queueDelay: 0,
|
|
17684
|
-
remoteJitter: 0,
|
|
17685
|
-
remoteLossRate: 0,
|
|
17686
|
-
roundTripTime: 0,
|
|
17687
|
-
rtcpBitrate: 0,
|
|
17688
|
-
rtcpPackets: 0,
|
|
17689
|
-
rtpBitrate: 0,
|
|
17690
|
-
rtpPackets: 0,
|
|
17691
|
-
rtxBitrate: 0,
|
|
17692
|
-
rtxPackets: 0,
|
|
17693
|
-
stunBitrate: 0,
|
|
17694
|
-
stunPackets: 0,
|
|
17695
|
-
transportType: 'UDP',
|
|
17696
|
-
mediaPacketSize: {
|
|
17697
|
-
meanRtpPacketSize: 0,
|
|
17698
|
-
maxRtpPacketSize: 0,
|
|
17699
|
-
minRtpPacketSize: 0
|
|
17700
|
-
}
|
|
17701
|
-
},
|
|
17702
|
-
streams: []
|
|
17851
|
+
var initialMqeIntervalSessionTransmit = {
|
|
17852
|
+
common: initialMqeIntervalSessionCommon,
|
|
17853
|
+
fecPackets: 0,
|
|
17854
|
+
fecBitrate: 0,
|
|
17855
|
+
rtpPackets: 0,
|
|
17856
|
+
rtpBitrate: 0,
|
|
17857
|
+
rtcpPackets: 0,
|
|
17858
|
+
rtcpBitrate: 0,
|
|
17859
|
+
stunPackets: 0,
|
|
17860
|
+
stunBitrate: 0,
|
|
17861
|
+
dtlsPackets: 0,
|
|
17862
|
+
dtlsBitrate: 0,
|
|
17863
|
+
transportType: 'UDP',
|
|
17864
|
+
maxBitrate: 0,
|
|
17865
|
+
availableBitrate: 0,
|
|
17866
|
+
queueDelay: 0
|
|
17703
17867
|
};
|
|
17704
|
-
var
|
|
17705
|
-
|
|
17706
|
-
|
|
17707
|
-
|
|
17708
|
-
|
|
17709
|
-
|
|
17710
|
-
rtpPackets: 0,
|
|
17711
|
-
ssci: 0,
|
|
17712
|
-
transmittedBitrate: 0,
|
|
17713
|
-
transmittedFrameRate: 0
|
|
17714
|
-
}
|
|
17868
|
+
var initialMqeIntervalStreamTransmitCommon = {
|
|
17869
|
+
ssci: 0,
|
|
17870
|
+
rtpPackets: 0,
|
|
17871
|
+
transmittedBitrate: 0,
|
|
17872
|
+
requestedBitrate: 0,
|
|
17873
|
+
codec: ''
|
|
17715
17874
|
};
|
|
17716
|
-
var
|
|
17717
|
-
common:
|
|
17718
|
-
common: {
|
|
17719
|
-
direction: 'inactive',
|
|
17720
|
-
isMain: true,
|
|
17721
|
-
mariFecEnabled: false,
|
|
17722
|
-
mariRtxEnabled: false,
|
|
17723
|
-
mariQosEnabled: false,
|
|
17724
|
-
mariLiteEnabled: false,
|
|
17725
|
-
multistreamEnabled: false
|
|
17726
|
-
},
|
|
17727
|
-
dtlsBitrate: 0,
|
|
17728
|
-
dtlsPackets: 0,
|
|
17729
|
-
fecBitrate: 0,
|
|
17730
|
-
fecPackets: 0,
|
|
17731
|
-
maxBitrate: 0,
|
|
17732
|
-
mediaHopByHopLost: 0,
|
|
17733
|
-
rtcpBitrate: 0,
|
|
17734
|
-
rtcpPackets: 0,
|
|
17735
|
-
rtpBitrate: 0,
|
|
17736
|
-
rtpHopByHopLost: 0,
|
|
17737
|
-
rtpPackets: 0,
|
|
17738
|
-
rtpRecovered: 0,
|
|
17739
|
-
rtxBitrate: 0,
|
|
17740
|
-
rtxPackets: 0,
|
|
17741
|
-
srtcpUnprotectErrors: 0,
|
|
17742
|
-
srtpUnprotectErrors: 0,
|
|
17743
|
-
stunBitrate: 0,
|
|
17744
|
-
stunPackets: 0,
|
|
17745
|
-
transportType: 'UDP',
|
|
17746
|
-
mediaPacketSize: {
|
|
17747
|
-
meanRtpPacketSize: 0,
|
|
17748
|
-
maxRtpPacketSize: 0,
|
|
17749
|
-
minRtpPacketSize: 0
|
|
17750
|
-
}
|
|
17751
|
-
},
|
|
17752
|
-
streams: []
|
|
17875
|
+
var initialMqeIntervalStreamTransmitAudio = {
|
|
17876
|
+
common: initialMqeIntervalStreamTransmitCommon
|
|
17753
17877
|
};
|
|
17754
|
-
var
|
|
17755
|
-
common:
|
|
17756
|
-
codec: 'H264',
|
|
17757
|
-
concealedFrames: 0,
|
|
17758
|
-
csi: [],
|
|
17759
|
-
maxConcealRunLength: 0,
|
|
17760
|
-
optimalBitrate: 0,
|
|
17761
|
-
optimalFrameRate: 0,
|
|
17762
|
-
receivedBitrate: 0,
|
|
17763
|
-
receivedFrameRate: 0,
|
|
17764
|
-
renderedFrameRate: 0,
|
|
17765
|
-
requestedBitrate: 0,
|
|
17766
|
-
requestedFrameRate: 0,
|
|
17767
|
-
rtpEndToEndLost: 0,
|
|
17768
|
-
maxRtpJitter: 0,
|
|
17769
|
-
meanRtpJitter: 0,
|
|
17770
|
-
rtpPackets: 0,
|
|
17771
|
-
ssci: 0
|
|
17772
|
-
},
|
|
17773
|
-
h264CodecProfile: 'BP',
|
|
17774
|
-
isActiveSpeaker: false,
|
|
17775
|
-
optimalFrameSize: 0,
|
|
17878
|
+
var initialMqeIntervalStreamReceiveVideo = {
|
|
17879
|
+
common: initialMqeIntervalStreamReceiveCommon,
|
|
17776
17880
|
receivedFrameSize: 0,
|
|
17881
|
+
requestedFrameSize: 0,
|
|
17882
|
+
optimalFrameSize: 0,
|
|
17777
17883
|
receivedHeight: 0,
|
|
17778
|
-
receivedKeyFrames: 0,
|
|
17779
|
-
receivedKeyFramesForRequest: 0,
|
|
17780
|
-
receivedKeyFramesSourceChange: 0,
|
|
17781
|
-
receivedKeyFramesUnknown: 0,
|
|
17782
17884
|
receivedWidth: 0,
|
|
17783
|
-
|
|
17784
|
-
requestedKeyFrames: 0
|
|
17785
|
-
};
|
|
17786
|
-
var emptyVideoTransmit = {
|
|
17787
|
-
common: {
|
|
17788
|
-
availableBitrate: 0,
|
|
17789
|
-
common: {
|
|
17790
|
-
direction: 'inactive',
|
|
17791
|
-
isMain: true,
|
|
17792
|
-
mariFecEnabled: false,
|
|
17793
|
-
mariRtxEnabled: false,
|
|
17794
|
-
mariQosEnabled: false,
|
|
17795
|
-
mariLiteEnabled: false,
|
|
17796
|
-
multistreamEnabled: false
|
|
17797
|
-
},
|
|
17798
|
-
dtlsBitrate: 0,
|
|
17799
|
-
dtlsPackets: 0,
|
|
17800
|
-
fecBitrate: 0,
|
|
17801
|
-
fecPackets: 0,
|
|
17802
|
-
maxBitrate: 0,
|
|
17803
|
-
queueDelay: 0,
|
|
17804
|
-
remoteJitter: 0,
|
|
17805
|
-
remoteLossRate: 0,
|
|
17806
|
-
roundTripTime: 0,
|
|
17807
|
-
rtcpBitrate: 0,
|
|
17808
|
-
rtcpPackets: 0,
|
|
17809
|
-
rtpBitrate: 0,
|
|
17810
|
-
rtpPackets: 0,
|
|
17811
|
-
rtxBitrate: 0,
|
|
17812
|
-
rtxPackets: 0,
|
|
17813
|
-
stunBitrate: 0,
|
|
17814
|
-
stunPackets: 0,
|
|
17815
|
-
transportType: 'UDP',
|
|
17816
|
-
mediaPacketSize: {
|
|
17817
|
-
meanRtpPacketSize: 0,
|
|
17818
|
-
maxRtpPacketSize: 0,
|
|
17819
|
-
minRtpPacketSize: 0
|
|
17820
|
-
}
|
|
17821
|
-
},
|
|
17822
|
-
streams: []
|
|
17823
|
-
};
|
|
17824
|
-
var emptyVideoTransmitStream = {
|
|
17825
|
-
common: {
|
|
17826
|
-
codec: 'H264',
|
|
17827
|
-
csi: [],
|
|
17828
|
-
duplicateSsci: 0,
|
|
17829
|
-
requestedBitrate: 0,
|
|
17830
|
-
requestedFrames: 0,
|
|
17831
|
-
rtpPackets: 0,
|
|
17832
|
-
ssci: 0,
|
|
17833
|
-
transmittedBitrate: 0,
|
|
17834
|
-
transmittedFrameRate: 0
|
|
17835
|
-
},
|
|
17836
|
-
h264CodecProfile: 'BP',
|
|
17837
|
-
isAvatar: false,
|
|
17838
|
-
isHardwareEncoded: false,
|
|
17839
|
-
localConfigurationChanges: 2,
|
|
17840
|
-
maxFrameQp: 0,
|
|
17841
|
-
maxNoiseLevel: 0,
|
|
17842
|
-
minRegionQp: 0,
|
|
17843
|
-
remoteConfigurationChanges: 0,
|
|
17844
|
-
requestedFrameSize: 0,
|
|
17885
|
+
receivedKeyFrames: 0,
|
|
17845
17886
|
requestedKeyFrames: 0,
|
|
17887
|
+
h264CodecProfile: 'BP'
|
|
17888
|
+
};
|
|
17889
|
+
var initialMqeIntervalStreamTransmitVideo = {
|
|
17890
|
+
common: initialMqeIntervalStreamTransmitCommon,
|
|
17846
17891
|
transmittedFrameSize: 0,
|
|
17892
|
+
requestedFrameSize: 0,
|
|
17847
17893
|
transmittedHeight: 0,
|
|
17894
|
+
transmittedWidth: 0,
|
|
17848
17895
|
transmittedKeyFrames: 0,
|
|
17849
|
-
|
|
17850
|
-
|
|
17851
|
-
|
|
17852
|
-
|
|
17853
|
-
transmittedKeyFramesOtherLayer: 0,
|
|
17854
|
-
transmittedKeyFramesPeriodic: 0,
|
|
17855
|
-
transmittedKeyFramesSceneChange: 0,
|
|
17856
|
-
transmittedKeyFramesStartup: 0,
|
|
17857
|
-
transmittedKeyFramesUnknown: 0,
|
|
17858
|
-
transmittedWidth: 0
|
|
17859
|
-
};
|
|
17860
|
-
var emptySender = {
|
|
17861
|
-
trackLabel: '',
|
|
17862
|
-
maxPacketLossRatio: 0,
|
|
17863
|
-
availableBandwidth: 0,
|
|
17864
|
-
bytesSent: 0,
|
|
17865
|
-
meanRemoteJitter: [],
|
|
17866
|
-
meanRoundTripTime: []
|
|
17867
|
-
};
|
|
17868
|
-
var emptyReceiver = {
|
|
17869
|
-
availableBandwidth: 0,
|
|
17870
|
-
bytesReceived: 0,
|
|
17871
|
-
meanRtpJitter: [],
|
|
17872
|
-
meanRoundTripTime: []
|
|
17873
|
-
};
|
|
17874
|
-
var VIDEO_FRAME_RATE_MULTIPLIER = 100;
|
|
17875
|
-
var NOISE_REDUCTION_MODE = {
|
|
17876
|
-
NONE: 'AUDIO_BACKGROUND_NOISE_REDUCTION_NONE',
|
|
17877
|
-
LOW_POWER: 'AUDIO_BACKGROUND_NOISE_REDUCTION_LOW_POWER'
|
|
17878
|
-
};
|
|
17879
|
-
var VIRTUAL_BACKGROUND_MODE = {
|
|
17880
|
-
NONE: 'VIDEO_BACKGROUND_AUGMENT_NONE',
|
|
17881
|
-
BLUR: 'VIDEO_BACKGROUND_AUGMENT_BLUR',
|
|
17882
|
-
REPLACE_IMAGE: 'VIDEO_BACKGROUND_AUGMENT_REPLACE_IMAGE',
|
|
17883
|
-
REPLACE_VIDEO: 'VIDEO_BACKGROUND_AUGMENT_REPLACE_VIDEO'
|
|
17896
|
+
requestedKeyFrames: 0,
|
|
17897
|
+
localConfigurationChanges: 0,
|
|
17898
|
+
remoteConfigurationChanges: 0,
|
|
17899
|
+
h264CodecProfile: 'BP'
|
|
17884
17900
|
};
|
|
17885
17901
|
|
|
17886
17902
|
var max = array => {
|
|
@@ -17901,385 +17917,602 @@ var mean = array => {
|
|
|
17901
17917
|
}
|
|
17902
17918
|
return array.reduce((a, b) => a + b) / array.length;
|
|
17903
17919
|
};
|
|
17904
|
-
var
|
|
17905
|
-
|
|
17906
|
-
|
|
17907
|
-
}, 0);
|
|
17920
|
+
var bytesToBitrate = (bytes, timeElapsed) => {
|
|
17921
|
+
return bytes * 8 / (timeElapsed / 1000);
|
|
17922
|
+
};
|
|
17908
17923
|
var samplesToMilliseconds = (samples, clockRate) => {
|
|
17924
|
+
if (clockRate < 0) {
|
|
17925
|
+
throw new Error("Clock rate cannot be negative: ".concat(clockRate));
|
|
17926
|
+
}
|
|
17927
|
+
if (clockRate === 0) {
|
|
17928
|
+
return 0;
|
|
17929
|
+
}
|
|
17909
17930
|
return samples / clockRate * 1000;
|
|
17910
17931
|
};
|
|
17911
|
-
var
|
|
17912
|
-
var
|
|
17913
|
-
|
|
17914
|
-
|
|
17915
|
-
}
|
|
17916
|
-
|
|
17917
|
-
var concealedSamplesDelta = concealedSamples - lastConcealedSamples;
|
|
17918
|
-
var silentConcealedSamplesDelta = silentConcealedSamples - lastSilentConcealedSamples;
|
|
17919
|
-
return samplesToMilliseconds(concealedSamplesDelta - silentConcealedSamplesDelta, clockRate);
|
|
17932
|
+
var convertToStatsMap = statsItems => {
|
|
17933
|
+
var statsMap = new Map();
|
|
17934
|
+
statsItems.forEach(statsItem => {
|
|
17935
|
+
statsItem.report.forEach((stats, key) => statsMap.set(key, stats));
|
|
17936
|
+
});
|
|
17937
|
+
return statsMap;
|
|
17920
17938
|
};
|
|
17921
|
-
var
|
|
17922
|
-
|
|
17923
|
-
return
|
|
17924
|
-
meanRtpPacketSize: Math.round(mean(meanRtpPacketSize)),
|
|
17925
|
-
maxRtpPacketSize: Math.round(max(meanRtpPacketSize)),
|
|
17926
|
-
minRtpPacketSize: Math.round(min(meanRtpPacketSize))
|
|
17927
|
-
};
|
|
17939
|
+
var getPropertyFromStatsById = (intervalStats, statsId, property) => {
|
|
17940
|
+
var _intervalStats$get;
|
|
17941
|
+
return (_intervalStats$get = intervalStats.get(statsId)) === null || _intervalStats$get === void 0 ? void 0 : _intervalStats$get[property];
|
|
17928
17942
|
};
|
|
17929
|
-
var
|
|
17930
|
-
var
|
|
17931
|
-
|
|
17932
|
-
|
|
17933
|
-
|
|
17934
|
-
|
|
17935
|
-
|
|
17936
|
-
|
|
17937
|
-
var sendrecvType = MediaDirection.RECEIVE;
|
|
17938
|
-
var getLastTotalValue = value => getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
|
|
17939
|
-
var getTotalValue = value => getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);
|
|
17940
|
-
var lastPacketsReceived = getLastTotalValue('totalPacketsReceived');
|
|
17941
|
-
var lastPacketsLost = getLastTotalValue('totalPacketsLost');
|
|
17942
|
-
var lastBytesReceived = getLastTotalValue('totalBytesReceived');
|
|
17943
|
-
var lastFecPacketsReceived = getLastTotalValue('fecPacketsReceived');
|
|
17944
|
-
var lastFecPacketsDiscarded = getLastTotalValue('fecPacketsDiscarded');
|
|
17945
|
-
var totalPacketsReceived = getTotalValue('totalPacketsReceived');
|
|
17946
|
-
var packetsLost = getTotalValue('totalPacketsLost');
|
|
17947
|
-
var totalBytesReceived = getTotalValue('totalBytesReceived');
|
|
17948
|
-
var totalFecPacketsReceived = getTotalValue('fecPacketsReceived');
|
|
17949
|
-
var totalFecPacketsDiscarded = getTotalValue('fecPacketsDiscarded');
|
|
17950
|
-
var mediaTypeKey = Object.keys(statsResults).find(mediaType => mediaType.includes(baseMediaType));
|
|
17951
|
-
if (mediaTypeKey) {
|
|
17952
|
-
var _statsResults$mediaTy;
|
|
17953
|
-
audioReceiver.common.common.direction = ((_statsResults$mediaTy = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy === void 0 ? void 0 : _statsResults$mediaTy.direction) || 'inactive';
|
|
17954
|
-
} else {
|
|
17955
|
-
audioReceiver.common.common.direction = 'inactive';
|
|
17956
|
-
}
|
|
17957
|
-
audioReceiver.common.common.isMain = !baseMediaType.includes('-share');
|
|
17958
|
-
audioReceiver.common.common.multistreamEnabled = isMultistream;
|
|
17959
|
-
audioReceiver.common.transportType = statsResults.connectionType.local.transport;
|
|
17960
|
-
audioReceiver.common.rtpPackets = totalPacketsReceived - lastPacketsReceived;
|
|
17961
|
-
var totalPacketsLost = packetsLost - lastPacketsLost;
|
|
17962
|
-
audioReceiver.common.mediaHopByHopLost = totalPacketsLost;
|
|
17963
|
-
audioReceiver.common.rtpHopByHopLost = totalPacketsLost;
|
|
17964
|
-
var fecRecovered = totalFecPacketsReceived - lastFecPacketsReceived - (totalFecPacketsDiscarded - lastFecPacketsDiscarded);
|
|
17965
|
-
audioReceiver.common.fecPackets = totalFecPacketsReceived - lastFecPacketsReceived;
|
|
17966
|
-
audioReceiver.common.rtpRecovered = fecRecovered;
|
|
17967
|
-
audioReceiver.common.rtpBitrate = (totalBytesReceived - lastBytesReceived) * 8 / 60 || 0;
|
|
17968
|
-
if (mediaTypeKey) {
|
|
17969
|
-
var _statsResults$mediaTy2;
|
|
17970
|
-
audioReceiver.common.mediaPacketSize = getMediaPacketSizeInfo(((_statsResults$mediaTy2 = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy2 === void 0 ? void 0 : _statsResults$mediaTy2[sendrecvType].meanRtpPacketSize) || []);
|
|
17971
|
-
}
|
|
17943
|
+
var getPropertyFromStatsByType = (intervalStats, statsType, property) => {
|
|
17944
|
+
var value;
|
|
17945
|
+
intervalStats.forEach(stats => {
|
|
17946
|
+
if (stats.type === statsType && stats[property] !== undefined) {
|
|
17947
|
+
value = stats[property];
|
|
17948
|
+
}
|
|
17949
|
+
});
|
|
17950
|
+
return value;
|
|
17972
17951
|
};
|
|
17973
|
-
var
|
|
17974
|
-
var
|
|
17975
|
-
|
|
17976
|
-
|
|
17977
|
-
|
|
17978
|
-
|
|
17979
|
-
|
|
17980
|
-
|
|
17981
|
-
var sendrecvType = MediaDirection.RECEIVE;
|
|
17982
|
-
var lastPacketsDecoded = ((_lastMqaDataSent$medi = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi === void 0 ? void 0 : _lastMqaDataSent$medi[sendrecvType].totalSamplesDecoded) || 0;
|
|
17983
|
-
var lastSamplesReceived = ((_lastMqaDataSent$medi2 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi2 === void 0 ? void 0 : _lastMqaDataSent$medi2[sendrecvType].totalSamplesReceived) || 0;
|
|
17984
|
-
var lastConcealedSamples = ((_lastMqaDataSent$medi3 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi3 === void 0 ? void 0 : _lastMqaDataSent$medi3[sendrecvType].concealedSamples) || 0;
|
|
17985
|
-
var lastSilentConcealedSamples = ((_lastMqaDataSent$medi4 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi4 === void 0 ? void 0 : _lastMqaDataSent$medi4[sendrecvType].silentConcealedSamples) || 0;
|
|
17986
|
-
var lastBytesReceived = ((_lastMqaDataSent$medi5 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi5 === void 0 ? void 0 : _lastMqaDataSent$medi5[sendrecvType].totalBytesReceived) || 0;
|
|
17987
|
-
var lastFecPacketsReceived = ((_lastMqaDataSent$medi6 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi6 === void 0 ? void 0 : _lastMqaDataSent$medi6[sendrecvType].fecPacketsReceived) || 0;
|
|
17988
|
-
var lastFecPacketsDiscarded = ((_lastMqaDataSent$medi7 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi7 === void 0 ? void 0 : _lastMqaDataSent$medi7[sendrecvType].fecPacketsDiscarded) || 0;
|
|
17989
|
-
var lastPacketsReceived = ((_lastMqaDataSent$medi8 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi8 === void 0 ? void 0 : _lastMqaDataSent$medi8[sendrecvType].totalPacketsReceived) || 0;
|
|
17990
|
-
var lastPacketsLost = ((_lastMqaDataSent$medi9 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi9 === void 0 ? void 0 : _lastMqaDataSent$medi9[sendrecvType].totalPacketsLost) || 0;
|
|
17991
|
-
var {
|
|
17992
|
-
csi
|
|
17993
|
-
} = statsResults[mediaType];
|
|
17994
|
-
if (csi && !audioReceiverStream.common.csi.includes(csi)) {
|
|
17995
|
-
audioReceiverStream.common.csi.push(csi);
|
|
17996
|
-
}
|
|
17997
|
-
audioReceiverStream.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsReceived - lastPacketsReceived || 0;
|
|
17998
|
-
audioReceiverStream.common.maxRtpJitter = max(statsResults[mediaType][sendrecvType].meanRtpJitter || []) * 1000;
|
|
17999
|
-
audioReceiverStream.common.meanRtpJitter = mean(statsResults[mediaType][sendrecvType].meanRtpJitter || []) * 1000;
|
|
18000
|
-
var fecRecovered = statsResults[mediaType][sendrecvType].fecPacketsReceived - lastFecPacketsReceived - (statsResults[mediaType][sendrecvType].fecPacketsDiscarded - lastFecPacketsDiscarded);
|
|
18001
|
-
audioReceiverStream.common.rtpEndToEndLost = statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost - fecRecovered || 0;
|
|
18002
|
-
audioReceiverStream.common.framesDropped = statsResults[mediaType][sendrecvType].totalSamplesDecoded - lastPacketsDecoded || 0;
|
|
18003
|
-
audioReceiverStream.common.renderedFrameRate = audioReceiverStream.common.framesDropped * 100 / 60 || 0;
|
|
18004
|
-
audioReceiverStream.common.framesReceived = statsResults[mediaType][sendrecvType].totalSamplesReceived - lastSamplesReceived || 0;
|
|
18005
|
-
audioReceiverStream.common.concealedFrames = calculateAudioReceiverConcealedFrames(statsResults, mediaType, lastConcealedSamples, lastSilentConcealedSamples);
|
|
18006
|
-
audioReceiverStream.common.receivedBitrate = (statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived) * 8 / 60 || 0;
|
|
18007
|
-
audioReceiverStream.common.requestedBitrate = (_statsResults$mediaTy3 = statsResults[mediaType][sendrecvType].requestedBitrate) !== null && _statsResults$mediaTy3 !== void 0 ? _statsResults$mediaTy3 : -1;
|
|
18008
|
-
audioReceiverStream.common.requestedFrameRate = (_statsResults$mediaTy4 = statsResults[mediaType][sendrecvType].requestedFrameRate) !== null && _statsResults$mediaTy4 !== void 0 ? _statsResults$mediaTy4 : -1;
|
|
17952
|
+
var getPropertyFromStatsByTypeInArray = (intervalStats, statsType, property) => {
|
|
17953
|
+
var values = [];
|
|
17954
|
+
intervalStats.forEach(stats => {
|
|
17955
|
+
if (stats.type === statsType && stats[property] !== undefined) {
|
|
17956
|
+
values.push(stats[property]);
|
|
17957
|
+
}
|
|
17958
|
+
});
|
|
17959
|
+
return values;
|
|
18009
17960
|
};
|
|
18010
|
-
var
|
|
18011
|
-
var
|
|
18012
|
-
|
|
18013
|
-
|
|
18014
|
-
|
|
18015
|
-
|
|
18016
|
-
|
|
18017
|
-
|
|
18018
|
-
|
|
18019
|
-
|
|
18020
|
-
|
|
18021
|
-
|
|
18022
|
-
var lastPacketsLostTotal = getLastTotalValue('totalPacketsLostOnReceiver');
|
|
18023
|
-
var totalPacketsLostOnReceiver = getTotalValue('totalPacketsLostOnReceiver');
|
|
18024
|
-
var totalPacketsSent = getTotalValue('totalPacketsSent');
|
|
18025
|
-
var meanRemoteJitter = Object.keys(statsResults).filter(mt => mt.includes(baseMediaType)).reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRemoteJitter), []);
|
|
18026
|
-
var meanRoundTripTime = Object.keys(statsResults).filter(mt => mt.includes(baseMediaType)).reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRoundTripTime), []);
|
|
18027
|
-
var mediaTypeKey = Object.keys(statsResults).find(mediaType => mediaType.includes(baseMediaType));
|
|
18028
|
-
if (mediaTypeKey) {
|
|
18029
|
-
var _statsResults$mediaTy5;
|
|
18030
|
-
audioSender.common.common.direction = ((_statsResults$mediaTy5 = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy5 === void 0 ? void 0 : _statsResults$mediaTy5.direction) || 'inactive';
|
|
18031
|
-
} else {
|
|
18032
|
-
audioSender.common.common.direction = 'inactive';
|
|
18033
|
-
}
|
|
18034
|
-
audioSender.common.common.isMain = !baseMediaType.includes('-share');
|
|
18035
|
-
audioSender.common.common.multistreamEnabled = isMultistream;
|
|
18036
|
-
audioSender.common.transportType = statsResults.connectionType.local.transport;
|
|
18037
|
-
audioSender.common.maxRemoteJitter = max(meanRemoteJitter) * 1000;
|
|
18038
|
-
audioSender.common.meanRemoteJitter = mean(meanRemoteJitter) * 1000;
|
|
18039
|
-
audioSender.common.rtpPackets = totalPacketsSent - lastPacketsSent || 0;
|
|
18040
|
-
audioSender.common.availableBitrate = statsResults.availableOutgoingBitrate;
|
|
18041
|
-
var totalPacketsLostForaMin = totalPacketsLostOnReceiver - lastPacketsLostTotal;
|
|
18042
|
-
audioSender.common.maxRemoteLossRate = totalPacketsSent - lastPacketsSent > 0 ? totalPacketsLostForaMin * 100 / (totalPacketsSent - lastPacketsSent) : 0;
|
|
18043
|
-
audioSender.common.maxRoundTripTime = max(meanRoundTripTime) * 1000;
|
|
18044
|
-
audioSender.common.meanRoundTripTime = mean(meanRoundTripTime) * 1000;
|
|
18045
|
-
audioSender.common.roundTripTime = audioSender.common.maxRoundTripTime;
|
|
18046
|
-
var totalBytesSentInaMin = getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, 'totalBytesSent') - getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, 'totalBytesSent');
|
|
18047
|
-
audioSender.common.rtpBitrate = totalBytesSentInaMin ? totalBytesSentInaMin * 8 / 60 : 0;
|
|
18048
|
-
if (mediaTypeKey) {
|
|
18049
|
-
var _statsResults$mediaTy6;
|
|
18050
|
-
audioSender.common.mediaPacketSize = getMediaPacketSizeInfo(((_statsResults$mediaTy6 = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy6 === void 0 ? void 0 : _statsResults$mediaTy6[sendrecvType].meanRtpPacketSize) || []);
|
|
18051
|
-
}
|
|
17961
|
+
var getSumFromStatsByType = (intervalStats, statsType, property) => {
|
|
17962
|
+
var sum = 0;
|
|
17963
|
+
intervalStats.forEach(stats => {
|
|
17964
|
+
if (stats.type === statsType && stats[property] !== undefined) {
|
|
17965
|
+
var value = stats[property];
|
|
17966
|
+
if (typeof value !== 'number') {
|
|
17967
|
+
throw Error("Attempted to get sum of property ".concat(property, " which is not a number"));
|
|
17968
|
+
}
|
|
17969
|
+
sum += value;
|
|
17970
|
+
}
|
|
17971
|
+
});
|
|
17972
|
+
return sum;
|
|
18052
17973
|
};
|
|
18053
|
-
var
|
|
18054
|
-
var
|
|
18055
|
-
var
|
|
18056
|
-
|
|
18057
|
-
|
|
18058
|
-
|
|
18059
|
-
|
|
18060
|
-
|
|
18061
|
-
|
|
18062
|
-
|
|
18063
|
-
|
|
18064
|
-
|
|
18065
|
-
|
|
18066
|
-
|
|
18067
|
-
|
|
18068
|
-
} = statsResults[mediaType];
|
|
18069
|
-
if (csi && !audioSenderStream.common.csi.includes(csi)) {
|
|
18070
|
-
audioSenderStream.common.csi.push(csi);
|
|
18071
|
-
}
|
|
18072
|
-
audioSenderStream.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;
|
|
18073
|
-
var totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastBytesSent;
|
|
18074
|
-
audioSenderStream.common.transmittedBitrate = totalBytesSentInaMin ? totalBytesSentInaMin * 8 / 60 : 0;
|
|
18075
|
-
audioSenderStream.transmittedKeyFrames = statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastFramesEncoded || 0;
|
|
18076
|
-
audioSenderStream.requestedKeyFrames = statsResults[mediaType][sendrecvType].totalFirCount - lastFirCount || 0;
|
|
18077
|
-
audioSenderStream.common.requestedBitrate = (_statsResults$mediaTy7 = statsResults[mediaType][sendrecvType].requestedBitrate) !== null && _statsResults$mediaTy7 !== void 0 ? _statsResults$mediaTy7 : -1;
|
|
18078
|
-
var lastUsedEffect = (_statsResults$mediaTy8 = statsResults[mediaType][sendrecvType]) === null || _statsResults$mediaTy8 === void 0 ? void 0 : _statsResults$mediaTy8.effect;
|
|
18079
|
-
var mode = NOISE_REDUCTION_MODE.NONE;
|
|
18080
|
-
if ((lastUsedEffect === null || lastUsedEffect === void 0 ? void 0 : lastUsedEffect.noiseReductionMode) in NOISE_REDUCTION_MODE) {
|
|
18081
|
-
mode = NOISE_REDUCTION_MODE[lastUsedEffect.noiseReductionMode];
|
|
18082
|
-
}
|
|
18083
|
-
audioSenderStream.backgroundNoiseReductionMode = mode;
|
|
17974
|
+
var getSelectedCandidatePairIdFromStats = intervalStats => {
|
|
17975
|
+
var _getPropertyFromStats;
|
|
17976
|
+
var transportId = (_getPropertyFromStats = getPropertyFromStatsByType(intervalStats, 'inbound-rtp', 'transportId')) !== null && _getPropertyFromStats !== void 0 ? _getPropertyFromStats : getPropertyFromStatsByType(intervalStats, 'outbound-rtp', 'transportId');
|
|
17977
|
+
if (transportId) {
|
|
17978
|
+
var selectedCandidatePairId = getPropertyFromStatsById(intervalStats, transportId, 'selectedCandidatePairId');
|
|
17979
|
+
if (selectedCandidatePairId) {
|
|
17980
|
+
return selectedCandidatePairId;
|
|
17981
|
+
}
|
|
17982
|
+
}
|
|
17983
|
+
for (var [id, stats] of intervalStats) {
|
|
17984
|
+
if (stats.type === 'candidate-pair' && stats.selected) {
|
|
17985
|
+
return id;
|
|
17986
|
+
}
|
|
17987
|
+
}
|
|
17988
|
+
return undefined;
|
|
18084
17989
|
};
|
|
18085
|
-
var
|
|
18086
|
-
var
|
|
18087
|
-
|
|
18088
|
-
|
|
18089
|
-
|
|
18090
|
-
baseMediaType,
|
|
18091
|
-
isMultistream
|
|
18092
|
-
} = _ref5;
|
|
18093
|
-
var sendrecvType = MediaDirection.RECEIVE;
|
|
18094
|
-
var getLastTotalValue = value => getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
|
|
18095
|
-
var getTotalValue = value => getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);
|
|
18096
|
-
var lastPacketsReceived = getLastTotalValue('totalPacketsReceived');
|
|
18097
|
-
var lastPacketsLost = getLastTotalValue('totalPacketsLost');
|
|
18098
|
-
var lastBytesReceived = getLastTotalValue('totalBytesReceived');
|
|
18099
|
-
var lastRtxPacketsReceived = getLastTotalValue('totalRtxPacketsReceived');
|
|
18100
|
-
var lastRtxBytesReceived = getLastTotalValue('totalRtxBytesReceived');
|
|
18101
|
-
var packetsLost = getTotalValue('totalPacketsLost');
|
|
18102
|
-
var totalPacketsReceived = getTotalValue('totalPacketsReceived');
|
|
18103
|
-
var totalBytesReceived = getTotalValue('totalBytesReceived');
|
|
18104
|
-
var totalRtxPacketsReceived = getTotalValue('totalRtxPacketsReceived');
|
|
18105
|
-
var totalRtxBytesReceived = getTotalValue('totalRtxBytesReceived');
|
|
18106
|
-
var mediaTypeKey = Object.keys(statsResults).find(mediaType => mediaType.includes(baseMediaType));
|
|
18107
|
-
if (mediaTypeKey) {
|
|
18108
|
-
var _statsResults$mediaTy9;
|
|
18109
|
-
videoReceiver.common.common.direction = ((_statsResults$mediaTy9 = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy9 === void 0 ? void 0 : _statsResults$mediaTy9.direction) || 'inactive';
|
|
18110
|
-
} else {
|
|
18111
|
-
videoReceiver.common.common.direction = 'inactive';
|
|
18112
|
-
}
|
|
18113
|
-
videoReceiver.common.common.isMain = !baseMediaType.includes('-share');
|
|
18114
|
-
videoReceiver.common.common.multistreamEnabled = isMultistream;
|
|
18115
|
-
videoReceiver.common.transportType = statsResults.connectionType.local.transport;
|
|
18116
|
-
videoReceiver.common.rtpPackets = totalPacketsReceived - lastPacketsReceived || 0;
|
|
18117
|
-
var totalPacketsLost = packetsLost - lastPacketsLost;
|
|
18118
|
-
videoReceiver.common.mediaHopByHopLost = totalPacketsLost;
|
|
18119
|
-
videoReceiver.common.rtpHopByHopLost = totalPacketsLost;
|
|
18120
|
-
var totalBytesReceivedInaMin = totalBytesReceived - lastBytesReceived;
|
|
18121
|
-
var totalRtxBytesReceivedInaMin = totalRtxBytesReceived - lastRtxBytesReceived;
|
|
18122
|
-
videoReceiver.common.rtpBitrate = totalBytesReceivedInaMin ? totalBytesReceivedInaMin * 8 / 60 : 0;
|
|
18123
|
-
videoReceiver.common.rtxPackets = totalRtxPacketsReceived - lastRtxPacketsReceived;
|
|
18124
|
-
videoReceiver.common.rtxBitrate = totalRtxBytesReceivedInaMin ? totalRtxBytesReceivedInaMin * 8 / 60 : 0;
|
|
18125
|
-
if (mediaTypeKey) {
|
|
18126
|
-
var _statsResults$mediaTy10;
|
|
18127
|
-
videoReceiver.common.mediaPacketSize = getMediaPacketSizeInfo(((_statsResults$mediaTy10 = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy10 === void 0 ? void 0 : _statsResults$mediaTy10[sendrecvType].meanRtpPacketSize) || []);
|
|
17990
|
+
var getSelectedCandidateIdFromStats = (intervalStats, candidateOrigin) => {
|
|
17991
|
+
var selectedCandidatePairId = getSelectedCandidatePairIdFromStats(intervalStats);
|
|
17992
|
+
if (selectedCandidatePairId) {
|
|
17993
|
+
var selectedCandidateId = getPropertyFromStatsById(intervalStats, selectedCandidatePairId, candidateOrigin === 'local' ? 'localCandidateId' : 'remoteCandidateId');
|
|
17994
|
+
return selectedCandidateId;
|
|
18128
17995
|
}
|
|
17996
|
+
return undefined;
|
|
18129
17997
|
};
|
|
18130
|
-
var
|
|
18131
|
-
var
|
|
18132
|
-
|
|
18133
|
-
|
|
18134
|
-
|
|
18135
|
-
|
|
18136
|
-
|
|
18137
|
-
|
|
18138
|
-
|
|
18139
|
-
|
|
18140
|
-
|
|
18141
|
-
|
|
18142
|
-
|
|
18143
|
-
var lastFramesDecoded = ((_lastMqaDataSent$medi18 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi18 === void 0 ? void 0 : _lastMqaDataSent$medi18[sendrecvType].framesDecoded) || 0;
|
|
18144
|
-
var lastFramesDropped = ((_lastMqaDataSent$medi19 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi19 === void 0 ? void 0 : _lastMqaDataSent$medi19[sendrecvType].framesDropped) || 0;
|
|
18145
|
-
var lastKeyFramesDecoded = ((_lastMqaDataSent$medi20 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi20 === void 0 ? void 0 : _lastMqaDataSent$medi20[sendrecvType].keyFramesDecoded) || 0;
|
|
18146
|
-
var lastPliCount = ((_lastMqaDataSent$medi21 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi21 === void 0 ? void 0 : _lastMqaDataSent$medi21[sendrecvType].totalPliCount) || 0;
|
|
18147
|
-
var {
|
|
18148
|
-
csi
|
|
18149
|
-
} = statsResults[mediaType];
|
|
18150
|
-
if (csi && !videoReceiverStream.common.csi.includes(csi)) {
|
|
18151
|
-
videoReceiverStream.common.csi.push(csi);
|
|
18152
|
-
}
|
|
18153
|
-
videoReceiverStream.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsReceived - lastPacketsReceived || 0;
|
|
18154
|
-
var totalPacketLoss = statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost || 0;
|
|
18155
|
-
videoReceiverStream.common.rtpEndToEndLost = totalPacketLoss;
|
|
18156
|
-
videoReceiverStream.common.maxRtpJitter = max(statsResults[mediaType][sendrecvType].meanRtpJitter || []) * 1000;
|
|
18157
|
-
videoReceiverStream.common.meanRtpJitter = mean(statsResults[mediaType][sendrecvType].meanRtpJitter || []) * 1000;
|
|
18158
|
-
var totalBytesReceivedInaMin = statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived;
|
|
18159
|
-
videoReceiverStream.common.receivedBitrate = totalBytesReceivedInaMin ? totalBytesReceivedInaMin * 8 / 60 : 0;
|
|
18160
|
-
var totalFrameReceivedInaMin = statsResults[mediaType][sendrecvType].framesReceived - lastFramesReceived;
|
|
18161
|
-
var totalFrameDecodedInaMin = statsResults[mediaType][sendrecvType].framesDecoded - lastFramesDecoded;
|
|
18162
|
-
videoReceiverStream.common.receivedFrameRate = Math.round(totalFrameReceivedInaMin ? totalFrameReceivedInaMin * VIDEO_FRAME_RATE_MULTIPLIER / 60 : 0);
|
|
18163
|
-
videoReceiverStream.common.renderedFrameRate = Math.round(totalFrameDecodedInaMin ? totalFrameDecodedInaMin * VIDEO_FRAME_RATE_MULTIPLIER / 60 : 0);
|
|
18164
|
-
videoReceiverStream.common.framesDropped = statsResults[mediaType][sendrecvType].framesDropped - lastFramesDropped || 0;
|
|
18165
|
-
videoReceiverStream.receivedHeight = statsResults[mediaType][sendrecvType].height || 0;
|
|
18166
|
-
videoReceiverStream.receivedWidth = statsResults[mediaType][sendrecvType].width || 0;
|
|
18167
|
-
videoReceiverStream.receivedFrameSize = videoReceiverStream.receivedHeight * videoReceiverStream.receivedWidth / 256;
|
|
18168
|
-
videoReceiverStream.receivedKeyFrames = statsResults[mediaType][sendrecvType].keyFramesDecoded - lastKeyFramesDecoded || 0;
|
|
18169
|
-
videoReceiverStream.requestedKeyFrames = statsResults[mediaType][sendrecvType].totalPliCount - lastPliCount || 0;
|
|
18170
|
-
videoReceiverStream.isActiveSpeaker = statsResults[mediaType][sendrecvType].isActiveSpeaker || ((_statsResults$mediaTy11 = statsResults[mediaType][sendrecvType].lastActiveSpeakerTimestamp) !== null && _statsResults$mediaTy11 !== void 0 ? _statsResults$mediaTy11 : 0) > 0 && performance.now() + performance.timeOrigin - ((_statsResults$mediaTy12 = statsResults[mediaType][sendrecvType].lastActiveSpeakerTimestamp) !== null && _statsResults$mediaTy12 !== void 0 ? _statsResults$mediaTy12 : 0) < MQA_INTERVAL;
|
|
18171
|
-
videoReceiverStream.common.requestedBitrate = (_statsResults$mediaTy13 = statsResults[mediaType][sendrecvType].requestedBitrate) !== null && _statsResults$mediaTy13 !== void 0 ? _statsResults$mediaTy13 : -1;
|
|
18172
|
-
videoReceiverStream.requestedFrameSize = (_statsResults$mediaTy14 = statsResults[mediaType][sendrecvType].requestedFrameSize) !== null && _statsResults$mediaTy14 !== void 0 ? _statsResults$mediaTy14 : -1;
|
|
18173
|
-
videoReceiverStream.common.requestedFrameRate = (_statsResults$mediaTy15 = statsResults[mediaType][sendrecvType].requestedFrameRate) !== null && _statsResults$mediaTy15 !== void 0 ? _statsResults$mediaTy15 : -1;
|
|
17998
|
+
var getTransportTypeFromStats = intervalStats => {
|
|
17999
|
+
var selectedLocalCandidateId = getSelectedCandidateIdFromStats(intervalStats, 'local');
|
|
18000
|
+
if (selectedLocalCandidateId) {
|
|
18001
|
+
var relayProtocol = getPropertyFromStatsById(intervalStats, selectedLocalCandidateId, 'relayProtocol');
|
|
18002
|
+
if (relayProtocol) {
|
|
18003
|
+
return relayProtocol.toUpperCase();
|
|
18004
|
+
}
|
|
18005
|
+
var protocol = getPropertyFromStatsById(intervalStats, selectedLocalCandidateId, 'protocol');
|
|
18006
|
+
if (protocol) {
|
|
18007
|
+
return protocol.toUpperCase();
|
|
18008
|
+
}
|
|
18009
|
+
}
|
|
18010
|
+
return undefined;
|
|
18174
18011
|
};
|
|
18175
|
-
var
|
|
18176
|
-
var
|
|
18177
|
-
|
|
18178
|
-
|
|
18179
|
-
|
|
18180
|
-
baseMediaType,
|
|
18181
|
-
isMultistream
|
|
18182
|
-
} = _ref7;
|
|
18183
|
-
var sendrecvType = MediaDirection.SEND;
|
|
18184
|
-
var getLastTotalValue = value => getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
|
|
18185
|
-
var getTotalValue = value => getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);
|
|
18186
|
-
var lastPacketsSent = getLastTotalValue('totalPacketsSent');
|
|
18187
|
-
var lastBytesSent = getLastTotalValue('totalBytesSent');
|
|
18188
|
-
var lastPacketsLostTotal = getLastTotalValue('totalPacketsLostOnReceiver');
|
|
18189
|
-
var lastRtxPacketsSent = getLastTotalValue('totalRtxPacketsSent');
|
|
18190
|
-
var lastRtxBytesSent = getLastTotalValue('totalRtxBytesSent');
|
|
18191
|
-
var totalPacketsLostOnReceiver = getTotalValue('totalPacketsLostOnReceiver');
|
|
18192
|
-
var totalPacketsSent = getTotalValue('totalPacketsSent');
|
|
18193
|
-
var totalBytesSent = getTotalValue('totalBytesSent');
|
|
18194
|
-
var totalRtxPacketsSent = getTotalValue('totalRtxPacketsSent');
|
|
18195
|
-
var totalRtxBytesSent = getTotalValue('totalRtxBytesSent');
|
|
18196
|
-
var mediaTypeKey = Object.keys(statsResults).find(mediaType => mediaType.includes(baseMediaType));
|
|
18197
|
-
if (mediaTypeKey) {
|
|
18198
|
-
var _statsResults$mediaTy16;
|
|
18199
|
-
videoSender.common.common.direction = ((_statsResults$mediaTy16 = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy16 === void 0 ? void 0 : _statsResults$mediaTy16.direction) || 'inactive';
|
|
18200
|
-
} else {
|
|
18201
|
-
videoSender.common.common.direction = 'inactive';
|
|
18202
|
-
}
|
|
18203
|
-
videoSender.common.common.isMain = !baseMediaType.includes('-share');
|
|
18204
|
-
videoSender.common.common.multistreamEnabled = isMultistream;
|
|
18205
|
-
videoSender.common.transportType = statsResults.connectionType.local.transport;
|
|
18206
|
-
var meanRemoteJitter = Object.keys(statsResults).filter(mt => mt.includes(baseMediaType)).reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRemoteJitter), []);
|
|
18207
|
-
var meanRoundTripTime = Object.keys(statsResults).filter(mt => mt.includes(baseMediaType)).reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRoundTripTime), []);
|
|
18208
|
-
videoSender.common.maxRemoteJitter = max(meanRemoteJitter) * 1000;
|
|
18209
|
-
videoSender.common.meanRemoteJitter = mean(meanRemoteJitter) * 1000;
|
|
18210
|
-
videoSender.common.rtpPackets = totalPacketsSent - lastPacketsSent;
|
|
18211
|
-
videoSender.common.availableBitrate = statsResults.availableOutgoingBitrate;
|
|
18212
|
-
var totalPacketsLostForaMin = totalPacketsLostOnReceiver - lastPacketsLostTotal;
|
|
18213
|
-
videoSender.common.maxRemoteLossRate = totalPacketsSent - lastPacketsSent > 0 ? totalPacketsLostForaMin * 100 / (totalPacketsSent - lastPacketsSent) : 0;
|
|
18214
|
-
videoSender.common.maxRoundTripTime = max(meanRoundTripTime) * 1000;
|
|
18215
|
-
videoSender.common.meanRoundTripTime = mean(meanRoundTripTime) * 1000;
|
|
18216
|
-
videoSender.common.roundTripTime = videoSender.common.maxRoundTripTime;
|
|
18217
|
-
var totalBytesSentInaMin = totalBytesSent - lastBytesSent;
|
|
18218
|
-
var totalRtxBytesSentInaMin = totalRtxBytesSent - lastRtxBytesSent;
|
|
18219
|
-
videoSender.common.rtpBitrate = totalBytesSentInaMin ? totalBytesSentInaMin * 8 / 60 : 0;
|
|
18220
|
-
videoSender.common.rtxPackets = totalRtxPacketsSent - lastRtxPacketsSent;
|
|
18221
|
-
videoSender.common.rtxBitrate = totalRtxBytesSentInaMin ? totalRtxBytesSentInaMin * 8 / 60 : 0;
|
|
18222
|
-
if (mediaTypeKey) {
|
|
18223
|
-
var _statsResults$mediaTy17;
|
|
18224
|
-
videoSender.common.mediaPacketSize = getMediaPacketSizeInfo(((_statsResults$mediaTy17 = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy17 === void 0 ? void 0 : _statsResults$mediaTy17[sendrecvType].meanRtpPacketSize) || []);
|
|
18012
|
+
var getAvailableOutgoingBitrateFromStats = intervalStats => {
|
|
18013
|
+
var selectedCandidatePairId = getSelectedCandidatePairIdFromStats(intervalStats);
|
|
18014
|
+
if (selectedCandidatePairId) {
|
|
18015
|
+
var availableOutgoingBitrate = getPropertyFromStatsById(intervalStats, selectedCandidatePairId, 'availableOutgoingBitrate');
|
|
18016
|
+
return availableOutgoingBitrate;
|
|
18225
18017
|
}
|
|
18018
|
+
return undefined;
|
|
18226
18019
|
};
|
|
18227
|
-
var
|
|
18228
|
-
var
|
|
18229
|
-
var
|
|
18230
|
-
|
|
18231
|
-
|
|
18232
|
-
|
|
18233
|
-
|
|
18234
|
-
|
|
18235
|
-
|
|
18236
|
-
|
|
18237
|
-
var lastBytesSent = ((_lastMqaDataSent$medi23 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi23 === void 0 ? void 0 : _lastMqaDataSent$medi23[sendrecvType].totalBytesSent) || 0;
|
|
18238
|
-
var lastKeyFramesEncoded = ((_lastMqaDataSent$medi24 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi24 === void 0 ? void 0 : _lastMqaDataSent$medi24[sendrecvType].totalKeyFramesEncoded) || 0;
|
|
18239
|
-
var lastFirCount = ((_lastMqaDataSent$medi25 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi25 === void 0 ? void 0 : _lastMqaDataSent$medi25[sendrecvType].totalFirCount) || 0;
|
|
18240
|
-
var lastFramesSent = ((_lastMqaDataSent$medi26 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi26 === void 0 ? void 0 : _lastMqaDataSent$medi26[sendrecvType].framesSent) || 0;
|
|
18241
|
-
var {
|
|
18242
|
-
csi
|
|
18243
|
-
} = statsResults[mediaType];
|
|
18244
|
-
if (csi && !videoSenderStream.common.csi.includes(csi)) {
|
|
18245
|
-
videoSenderStream.common.csi.push(csi);
|
|
18246
|
-
}
|
|
18247
|
-
videoSenderStream.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;
|
|
18248
|
-
var totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastBytesSent;
|
|
18249
|
-
videoSenderStream.common.transmittedBitrate = totalBytesSentInaMin ? totalBytesSentInaMin * 8 / 60 : 0;
|
|
18250
|
-
videoSenderStream.transmittedKeyFrames = statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastKeyFramesEncoded || 0;
|
|
18251
|
-
videoSenderStream.requestedKeyFrames = statsResults[mediaType][sendrecvType].totalFirCount - lastFirCount || 0;
|
|
18252
|
-
var totalFrameSentInaMin = statsResults[mediaType][sendrecvType].framesSent - (lastFramesSent || 0);
|
|
18253
|
-
videoSenderStream.common.transmittedFrameRate = Math.round(totalFrameSentInaMin ? totalFrameSentInaMin * VIDEO_FRAME_RATE_MULTIPLIER / 60 : 0);
|
|
18254
|
-
videoSenderStream.transmittedHeight = statsResults[mediaType][sendrecvType].height || 0;
|
|
18255
|
-
videoSenderStream.transmittedWidth = statsResults[mediaType][sendrecvType].width || 0;
|
|
18256
|
-
videoSenderStream.transmittedFrameSize = videoSenderStream.transmittedHeight * videoSenderStream.transmittedWidth / 256;
|
|
18257
|
-
videoSenderStream.common.requestedBitrate = (_statsResults$mediaTy18 = statsResults[mediaType][sendrecvType].requestedBitrate) !== null && _statsResults$mediaTy18 !== void 0 ? _statsResults$mediaTy18 : -1;
|
|
18258
|
-
videoSenderStream.requestedFrameSize = (_statsResults$mediaTy19 = statsResults[mediaType][sendrecvType].requestedFrameSize) !== null && _statsResults$mediaTy19 !== void 0 ? _statsResults$mediaTy19 : -1;
|
|
18259
|
-
var lastUsedEffect = (_statsResults$mediaTy20 = statsResults[mediaType][sendrecvType]) === null || _statsResults$mediaTy20 === void 0 ? void 0 : _statsResults$mediaTy20.effect;
|
|
18260
|
-
var mode = VIRTUAL_BACKGROUND_MODE.NONE;
|
|
18261
|
-
if ((lastUsedEffect === null || lastUsedEffect === void 0 ? void 0 : lastUsedEffect.virtualBackgroundMode) in VIRTUAL_BACKGROUND_MODE) {
|
|
18262
|
-
mode = VIRTUAL_BACKGROUND_MODE[lastUsedEffect.virtualBackgroundMode];
|
|
18263
|
-
}
|
|
18264
|
-
videoSenderStream.backgroundAugmentationType = mode;
|
|
18020
|
+
var getMediaSourceTrackLabelFromStats = intervalStats => {
|
|
18021
|
+
var latestTrackLabel;
|
|
18022
|
+
var latestTrackTimestamp = 0;
|
|
18023
|
+
intervalStats.forEach(stats => {
|
|
18024
|
+
if (stats.type === 'media-source' && stats.trackLabel && stats.timestamp > latestTrackTimestamp) {
|
|
18025
|
+
latestTrackLabel = stats.trackLabel;
|
|
18026
|
+
latestTrackTimestamp = stats.timestamp;
|
|
18027
|
+
}
|
|
18028
|
+
});
|
|
18029
|
+
return latestTrackLabel;
|
|
18265
18030
|
};
|
|
18266
|
-
var
|
|
18267
|
-
var
|
|
18268
|
-
|
|
18269
|
-
|
|
18270
|
-
|
|
18271
|
-
|
|
18272
|
-
|
|
18273
|
-
}
|
|
18274
|
-
|
|
18275
|
-
|
|
18031
|
+
var getCodecFromStatsByStreamStatsId = (intervalStats, streamStatsId) => {
|
|
18032
|
+
var codecId = getPropertyFromStatsById(intervalStats, streamStatsId, 'codecId');
|
|
18033
|
+
if (codecId) {
|
|
18034
|
+
var mimeType = getPropertyFromStatsById(intervalStats, codecId, 'mimeType');
|
|
18035
|
+
if (mimeType) {
|
|
18036
|
+
return mimeType.split('/')[1];
|
|
18037
|
+
}
|
|
18038
|
+
}
|
|
18039
|
+
return undefined;
|
|
18040
|
+
};
|
|
18041
|
+
var getH264ProfileFromStatsByStreamStatsId = (intervalStats, streamStatsId) => {
|
|
18042
|
+
var codecId = getPropertyFromStatsById(intervalStats, streamStatsId, 'codecId');
|
|
18043
|
+
if (codecId) {
|
|
18044
|
+
var sdpFmtpLine = getPropertyFromStatsById(intervalStats, codecId, 'sdpFmtpLine');
|
|
18045
|
+
if (sdpFmtpLine) {
|
|
18046
|
+
var _sdpFmtpLine$match;
|
|
18047
|
+
var profileLevelId = (_sdpFmtpLine$match = sdpFmtpLine.match(/profile-level-id=([0-9A-Fa-f]{6})/)) === null || _sdpFmtpLine$match === void 0 ? void 0 : _sdpFmtpLine$match[1];
|
|
18048
|
+
if (profileLevelId) {
|
|
18049
|
+
var profile = profileLevelId.substring(0, 2);
|
|
18050
|
+
if (profile === '42') {
|
|
18051
|
+
return 'BP';
|
|
18052
|
+
}
|
|
18053
|
+
if (profile === '64') {
|
|
18054
|
+
return 'CHP';
|
|
18055
|
+
}
|
|
18056
|
+
}
|
|
18057
|
+
}
|
|
18276
18058
|
}
|
|
18059
|
+
return undefined;
|
|
18060
|
+
};
|
|
18061
|
+
var isStreamRequested = stats => {
|
|
18277
18062
|
var now = performance.timeOrigin + performance.now();
|
|
18278
|
-
var
|
|
18279
|
-
var
|
|
18280
|
-
return
|
|
18063
|
+
var lastRequestedUpdateTimestamp = stats.lastRequestedUpdateTimestamp;
|
|
18064
|
+
var isCurrentlyRequested = stats.isRequested;
|
|
18065
|
+
return isCurrentlyRequested || !!(lastRequestedUpdateTimestamp && now - lastRequestedUpdateTimestamp < MQE_INTERVAL);
|
|
18066
|
+
};
|
|
18067
|
+
var pixelsToFrameSize = (width, height) => {
|
|
18068
|
+
var round16 = n => Math.ceil(n / 16) * 16;
|
|
18069
|
+
return round16(width) * round16(height) / 256;
|
|
18281
18070
|
};
|
|
18282
18071
|
|
|
18072
|
+
class MqeBuilder {
|
|
18073
|
+
constructor(params) {
|
|
18074
|
+
_defineProperty(this, "currentIntervalStats", new Map());
|
|
18075
|
+
_defineProperty(this, "previousIntervalStats", new Map());
|
|
18076
|
+
_defineProperty(this, "isMain", void 0);
|
|
18077
|
+
_defineProperty(this, "multistreamEnabled", void 0);
|
|
18078
|
+
_defineProperty(this, "direction", void 0);
|
|
18079
|
+
_defineProperty(this, "mediaKind", void 0);
|
|
18080
|
+
this.isMain = params.isMain;
|
|
18081
|
+
this.multistreamEnabled = params.multistreamEnabled;
|
|
18082
|
+
this.direction = params.direction;
|
|
18083
|
+
this.mediaKind = params.mediaKind;
|
|
18084
|
+
}
|
|
18085
|
+
updateCurrentIntervalStats(newStats) {
|
|
18086
|
+
if (newStats.size === 0) {
|
|
18087
|
+
getLogger().debug("MqeBuilder#updateCurrentIntervalStats --> Stats map is empty, nothing to update for ".concat(this.direction, " ").concat(this.mediaKind, " ").concat(this.isMain ? 'main' : 'slides', "."));
|
|
18088
|
+
return;
|
|
18089
|
+
}
|
|
18090
|
+
newStats.forEach((stats, key) => {
|
|
18091
|
+
var current = this.currentIntervalStats.get(key);
|
|
18092
|
+
if (stats.type === 'inbound-rtp') {
|
|
18093
|
+
var _current$jitterArray, _stats$jitter, _current$rtpPacketSiz, _stats$bytesReceived, _stats$packetsReceive;
|
|
18094
|
+
var jitterArray = (_current$jitterArray = current === null || current === void 0 ? void 0 : current.jitterArray) !== null && _current$jitterArray !== void 0 ? _current$jitterArray : [];
|
|
18095
|
+
jitterArray.push((_stats$jitter = stats.jitter) !== null && _stats$jitter !== void 0 ? _stats$jitter : 0);
|
|
18096
|
+
stats.jitterArray = jitterArray;
|
|
18097
|
+
var rtpPacketSizeArray = (_current$rtpPacketSiz = current === null || current === void 0 ? void 0 : current.rtpPacketSizeArray) !== null && _current$rtpPacketSiz !== void 0 ? _current$rtpPacketSiz : [];
|
|
18098
|
+
var bytesReceived = (_stats$bytesReceived = stats.bytesReceived) !== null && _stats$bytesReceived !== void 0 ? _stats$bytesReceived : 0;
|
|
18099
|
+
var packetsReceived = (_stats$packetsReceive = stats.packetsReceived) !== null && _stats$packetsReceive !== void 0 ? _stats$packetsReceive : 0;
|
|
18100
|
+
if (packetsReceived > 0) {
|
|
18101
|
+
var rtpPacketSize = Math.round(bytesReceived / packetsReceived);
|
|
18102
|
+
rtpPacketSizeArray.push(rtpPacketSize);
|
|
18103
|
+
}
|
|
18104
|
+
stats.rtpPacketSizeArray = rtpPacketSizeArray;
|
|
18105
|
+
} else if (stats.type === 'outbound-rtp') {
|
|
18106
|
+
var _current$rtpPacketSiz2, _stats$bytesSent, _stats$packetsSent;
|
|
18107
|
+
var lastUsedEffect = current === null || current === void 0 ? void 0 : current.lastUsedEffect;
|
|
18108
|
+
var effect = stats === null || stats === void 0 ? void 0 : stats.effect;
|
|
18109
|
+
stats.lastUsedEffect = effect !== null && effect !== void 0 ? effect : lastUsedEffect;
|
|
18110
|
+
var _rtpPacketSizeArray = (_current$rtpPacketSiz2 = current === null || current === void 0 ? void 0 : current.rtpPacketSizeArray) !== null && _current$rtpPacketSiz2 !== void 0 ? _current$rtpPacketSiz2 : [];
|
|
18111
|
+
var bytesSent = (_stats$bytesSent = stats.bytesSent) !== null && _stats$bytesSent !== void 0 ? _stats$bytesSent : 0;
|
|
18112
|
+
var packetsSent = (_stats$packetsSent = stats.packetsSent) !== null && _stats$packetsSent !== void 0 ? _stats$packetsSent : 0;
|
|
18113
|
+
if (packetsSent > 0) {
|
|
18114
|
+
var _rtpPacketSize = Math.round(bytesSent / packetsSent);
|
|
18115
|
+
_rtpPacketSizeArray.push(_rtpPacketSize);
|
|
18116
|
+
}
|
|
18117
|
+
stats.rtpPacketSizeArray = _rtpPacketSizeArray;
|
|
18118
|
+
} else if (stats.type === 'remote-inbound-rtp') {
|
|
18119
|
+
var _current$roundTripTim, _stats$roundTripTime, _current$fractionLost, _stats$fractionLost, _current$jitterArray2, _stats$jitter2;
|
|
18120
|
+
var roundTripTimeArray = (_current$roundTripTim = current === null || current === void 0 ? void 0 : current.roundTripTimeArray) !== null && _current$roundTripTim !== void 0 ? _current$roundTripTim : [];
|
|
18121
|
+
roundTripTimeArray.push((_stats$roundTripTime = stats.roundTripTime) !== null && _stats$roundTripTime !== void 0 ? _stats$roundTripTime : 0);
|
|
18122
|
+
stats.roundTripTimeArray = roundTripTimeArray;
|
|
18123
|
+
var fractionLostArray = (_current$fractionLost = current === null || current === void 0 ? void 0 : current.fractionLostArray) !== null && _current$fractionLost !== void 0 ? _current$fractionLost : [];
|
|
18124
|
+
fractionLostArray.push((_stats$fractionLost = stats.fractionLost) !== null && _stats$fractionLost !== void 0 ? _stats$fractionLost : 0);
|
|
18125
|
+
stats.fractionLostArray = fractionLostArray;
|
|
18126
|
+
var _jitterArray = (_current$jitterArray2 = current === null || current === void 0 ? void 0 : current.jitterArray) !== null && _current$jitterArray2 !== void 0 ? _current$jitterArray2 : [];
|
|
18127
|
+
_jitterArray.push((_stats$jitter2 = stats.jitter) !== null && _stats$jitter2 !== void 0 ? _stats$jitter2 : 0);
|
|
18128
|
+
stats.jitterArray = _jitterArray;
|
|
18129
|
+
}
|
|
18130
|
+
});
|
|
18131
|
+
this.currentIntervalStats = newStats;
|
|
18132
|
+
}
|
|
18133
|
+
reset() {
|
|
18134
|
+
this.previousIntervalStats = new Map();
|
|
18135
|
+
this.currentIntervalStats = new Map();
|
|
18136
|
+
}
|
|
18137
|
+
resetForNextInterval() {
|
|
18138
|
+
this.previousIntervalStats = new Map(this.currentIntervalStats);
|
|
18139
|
+
this.currentIntervalStats.forEach(stats => {
|
|
18140
|
+
if (stats.type === 'inbound-rtp') {
|
|
18141
|
+
delete stats.jitterArray;
|
|
18142
|
+
delete stats.isRequested;
|
|
18143
|
+
delete stats.rtpPacketSizeArray;
|
|
18144
|
+
} else if (stats.type === 'outbound-rtp') {
|
|
18145
|
+
delete stats.lastUsedEffect;
|
|
18146
|
+
delete stats.isRequested;
|
|
18147
|
+
delete stats.rtpPacketSizeArray;
|
|
18148
|
+
} else if (stats.type === 'remote-inbound-rtp') {
|
|
18149
|
+
delete stats.roundTripTimeArray;
|
|
18150
|
+
delete stats.fractionLostArray;
|
|
18151
|
+
delete stats.jitterArray;
|
|
18152
|
+
}
|
|
18153
|
+
});
|
|
18154
|
+
}
|
|
18155
|
+
buildMqeIntervalSessionCommon() {
|
|
18156
|
+
var result = structuredClone(initialMqeIntervalSessionCommon);
|
|
18157
|
+
result.isMain = this.isMain;
|
|
18158
|
+
result.mariFecEnabled = false;
|
|
18159
|
+
result.mariRtxEnabled = false;
|
|
18160
|
+
result.mariQosEnabled = false;
|
|
18161
|
+
result.mariLiteEnabled = false;
|
|
18162
|
+
result.multistreamEnabled = this.multistreamEnabled;
|
|
18163
|
+
result.direction = this.direction;
|
|
18164
|
+
return result;
|
|
18165
|
+
}
|
|
18166
|
+
buildMqeIntervalSessionReceive() {
|
|
18167
|
+
var _getTransportTypeFrom;
|
|
18168
|
+
var result = structuredClone(initialMqeIntervalSessionReceive);
|
|
18169
|
+
result.common = this.buildMqeIntervalSessionCommon();
|
|
18170
|
+
var current = this.currentIntervalStats;
|
|
18171
|
+
var previous = this.previousIntervalStats;
|
|
18172
|
+
var currentFecPacketsReceived = getSumFromStatsByType(current, 'inbound-rtp', 'fecPacketsReceived');
|
|
18173
|
+
var previousFecPacketsReceived = getSumFromStatsByType(previous, 'inbound-rtp', 'fecPacketsReceived');
|
|
18174
|
+
result.fecPackets = currentFecPacketsReceived - previousFecPacketsReceived;
|
|
18175
|
+
var currentRetransmittedPacketsReceived = getSumFromStatsByType(current, 'inbound-rtp', 'retransmittedPacketsReceived');
|
|
18176
|
+
var previousRetransmittedPacketsReceived = getSumFromStatsByType(previous, 'inbound-rtp', 'retransmittedPacketsReceived');
|
|
18177
|
+
result.rtxPackets = currentRetransmittedPacketsReceived - previousRetransmittedPacketsReceived;
|
|
18178
|
+
var currentRetransmittedBytesReceived = getSumFromStatsByType(current, 'inbound-rtp', 'retransmittedBytesReceived');
|
|
18179
|
+
var previousRetransmittedBytesReceived = getSumFromStatsByType(previous, 'inbound-rtp', 'retransmittedBytesReceived');
|
|
18180
|
+
result.rtxBitrate = bytesToBitrate(currentRetransmittedBytesReceived - previousRetransmittedBytesReceived, MQE_INTERVAL);
|
|
18181
|
+
var currentPacketsReceived = getSumFromStatsByType(current, 'inbound-rtp', 'packetsReceived');
|
|
18182
|
+
var previousPacketsReceived = getSumFromStatsByType(previous, 'inbound-rtp', 'packetsReceived');
|
|
18183
|
+
result.rtpPackets = currentPacketsReceived - previousPacketsReceived - result.rtxPackets;
|
|
18184
|
+
var currentBytesReceived = getSumFromStatsByType(current, 'inbound-rtp', 'bytesReceived');
|
|
18185
|
+
var previousBytesReceived = getSumFromStatsByType(previous, 'inbound-rtp', 'bytesReceived');
|
|
18186
|
+
result.rtpBitrate = bytesToBitrate(currentBytesReceived - previousBytesReceived, MQE_INTERVAL) - result.rtxBitrate;
|
|
18187
|
+
var currentPacketsLost = getSumFromStatsByType(current, 'inbound-rtp', 'packetsLost');
|
|
18188
|
+
var previousPacketsLost = getSumFromStatsByType(previous, 'inbound-rtp', 'packetsLost');
|
|
18189
|
+
result.rtpHopByHopLost = currentPacketsLost - previousPacketsLost;
|
|
18190
|
+
result.mediaHopByHopLost = currentPacketsLost - previousPacketsLost;
|
|
18191
|
+
var currentFecPacketsDiscarded = getSumFromStatsByType(current, 'inbound-rtp', 'fecPacketsDiscarded');
|
|
18192
|
+
var previousFecPacketsDiscarded = getSumFromStatsByType(previous, 'inbound-rtp', 'fecPacketsDiscarded');
|
|
18193
|
+
result.rtpRecovered = result.fecPackets - (currentFecPacketsDiscarded - previousFecPacketsDiscarded);
|
|
18194
|
+
var currentTransportType = (_getTransportTypeFrom = getTransportTypeFromStats(current)) !== null && _getTransportTypeFrom !== void 0 ? _getTransportTypeFrom : 'UDP';
|
|
18195
|
+
result.transportType = currentTransportType;
|
|
18196
|
+
var currentRtpPacketSizeArray = getPropertyFromStatsByTypeInArray(current, 'inbound-rtp', 'rtpPacketSizeArray').flat();
|
|
18197
|
+
result.mediaPacketSize = {
|
|
18198
|
+
meanRtpPacketSize: Math.round(mean(currentRtpPacketSizeArray)),
|
|
18199
|
+
maxRtpPacketSize: Math.round(max(currentRtpPacketSizeArray)),
|
|
18200
|
+
minRtpPacketSize: Math.round(min(currentRtpPacketSizeArray))
|
|
18201
|
+
};
|
|
18202
|
+
return result;
|
|
18203
|
+
}
|
|
18204
|
+
buildMqeIntervalStreamReceiveAudio(id) {
|
|
18205
|
+
var result = structuredClone(initialMqeIntervalStreamReceiveAudio);
|
|
18206
|
+
result.common = this.buildMqeIntervalStreamReceiveCommon(id);
|
|
18207
|
+
return result;
|
|
18208
|
+
}
|
|
18209
|
+
buildMqeIntervalStreamReceiveVideo(id) {
|
|
18210
|
+
var _getPropertyFromStats, _getPropertyFromStats2, _getPropertyFromStats3, _getPropertyFromStats4, _getPropertyFromStats5, _getPropertyFromStats6, _getPropertyFromStats7, _getPropertyFromStats8, _getPropertyFromStats9, _getH264ProfileFromSt;
|
|
18211
|
+
var result = structuredClone(initialMqeIntervalStreamReceiveVideo);
|
|
18212
|
+
result.common = this.buildMqeIntervalStreamReceiveCommon(id);
|
|
18213
|
+
var current = this.currentIntervalStats;
|
|
18214
|
+
var previous = this.previousIntervalStats;
|
|
18215
|
+
var currentFrameHeight = (_getPropertyFromStats = getPropertyFromStatsById(current, id, 'frameHeight')) !== null && _getPropertyFromStats !== void 0 ? _getPropertyFromStats : 0;
|
|
18216
|
+
var currentFrameWidth = (_getPropertyFromStats2 = getPropertyFromStatsById(current, id, 'frameWidth')) !== null && _getPropertyFromStats2 !== void 0 ? _getPropertyFromStats2 : 0;
|
|
18217
|
+
result.receivedFrameSize = pixelsToFrameSize(currentFrameWidth, currentFrameHeight);
|
|
18218
|
+
var currentRequestedFrameSize = (_getPropertyFromStats3 = getPropertyFromStatsById(current, id, 'requestedFrameSize')) !== null && _getPropertyFromStats3 !== void 0 ? _getPropertyFromStats3 : 0;
|
|
18219
|
+
result.requestedFrameSize = currentRequestedFrameSize;
|
|
18220
|
+
result.optimalFrameSize = currentRequestedFrameSize;
|
|
18221
|
+
result.receivedHeight = currentFrameHeight;
|
|
18222
|
+
result.receivedWidth = currentFrameWidth;
|
|
18223
|
+
var currentKeyFramesDecoded = (_getPropertyFromStats4 = getPropertyFromStatsById(current, id, 'keyFramesDecoded')) !== null && _getPropertyFromStats4 !== void 0 ? _getPropertyFromStats4 : 0;
|
|
18224
|
+
var previousKeyFramesDecoded = (_getPropertyFromStats5 = getPropertyFromStatsById(previous, id, 'keyFramesDecoded')) !== null && _getPropertyFromStats5 !== void 0 ? _getPropertyFromStats5 : 0;
|
|
18225
|
+
result.receivedKeyFrames = currentKeyFramesDecoded - previousKeyFramesDecoded;
|
|
18226
|
+
var currentFirCount = (_getPropertyFromStats6 = getPropertyFromStatsById(current, id, 'firCount')) !== null && _getPropertyFromStats6 !== void 0 ? _getPropertyFromStats6 : 0;
|
|
18227
|
+
var previousFirCount = (_getPropertyFromStats7 = getPropertyFromStatsById(previous, id, 'firCount')) !== null && _getPropertyFromStats7 !== void 0 ? _getPropertyFromStats7 : 0;
|
|
18228
|
+
var currentPliCount = (_getPropertyFromStats8 = getPropertyFromStatsById(current, id, 'pliCount')) !== null && _getPropertyFromStats8 !== void 0 ? _getPropertyFromStats8 : 0;
|
|
18229
|
+
var previousPliCount = (_getPropertyFromStats9 = getPropertyFromStatsById(previous, id, 'pliCount')) !== null && _getPropertyFromStats9 !== void 0 ? _getPropertyFromStats9 : 0;
|
|
18230
|
+
result.requestedKeyFrames = currentFirCount - previousFirCount + (currentPliCount - previousPliCount);
|
|
18231
|
+
if (this.multistreamEnabled) {
|
|
18232
|
+
var _getPropertyFromStats10, _getPropertyFromStats11;
|
|
18233
|
+
var currentIsActiveSpeaker = (_getPropertyFromStats10 = getPropertyFromStatsById(current, id, 'isActiveSpeaker')) !== null && _getPropertyFromStats10 !== void 0 ? _getPropertyFromStats10 : false;
|
|
18234
|
+
var currentLastActiveSpeakerUpdateTimestamp = (_getPropertyFromStats11 = getPropertyFromStatsById(current, id, 'lastActiveSpeakerUpdateTimestamp')) !== null && _getPropertyFromStats11 !== void 0 ? _getPropertyFromStats11 : 0;
|
|
18235
|
+
result.isActiveSpeaker = currentIsActiveSpeaker || currentLastActiveSpeakerUpdateTimestamp > performance.timeOrigin + performance.now() - MQE_INTERVAL;
|
|
18236
|
+
}
|
|
18237
|
+
var currentH264CodecProfile = (_getH264ProfileFromSt = getH264ProfileFromStatsByStreamStatsId(current, id)) !== null && _getH264ProfileFromSt !== void 0 ? _getH264ProfileFromSt : 'BP';
|
|
18238
|
+
result.h264CodecProfile = currentH264CodecProfile;
|
|
18239
|
+
return result;
|
|
18240
|
+
}
|
|
18241
|
+
buildMqeIntervalStreamReceiveCommon(id) {
|
|
18242
|
+
var _getPropertyFromStats12, _getPropertyFromStats13, _getPropertyFromStats14, _getPropertyFromStats15, _getPropertyFromStats16, _getPropertyFromStats17, _getPropertyFromStats30, _getPropertyFromStats31, _getPropertyFromStats32, _getPropertyFromStats33, _getPropertyFromStats34, _getPropertyFromStats35, _getCodecFromStatsByS;
|
|
18243
|
+
var result = structuredClone(initialMqeIntervalStreamReceiveCommon);
|
|
18244
|
+
var current = this.currentIntervalStats;
|
|
18245
|
+
var previous = this.previousIntervalStats;
|
|
18246
|
+
var currentPacketsReceived = (_getPropertyFromStats12 = getPropertyFromStatsById(current, id, 'packetsReceived')) !== null && _getPropertyFromStats12 !== void 0 ? _getPropertyFromStats12 : 0;
|
|
18247
|
+
var previousPacketsReceived = (_getPropertyFromStats13 = getPropertyFromStatsById(previous, id, 'packetsReceived')) !== null && _getPropertyFromStats13 !== void 0 ? _getPropertyFromStats13 : 0;
|
|
18248
|
+
var currentRetransmittedPacketsReceived = (_getPropertyFromStats14 = getPropertyFromStatsById(current, id, 'retransmittedPacketsReceived')) !== null && _getPropertyFromStats14 !== void 0 ? _getPropertyFromStats14 : 0;
|
|
18249
|
+
var previousRetransmittedPacketsReceived = (_getPropertyFromStats15 = getPropertyFromStatsById(previous, id, 'retransmittedPacketsReceived')) !== null && _getPropertyFromStats15 !== void 0 ? _getPropertyFromStats15 : 0;
|
|
18250
|
+
result.rtpPackets = currentPacketsReceived - previousPacketsReceived - (currentRetransmittedPacketsReceived - previousRetransmittedPacketsReceived);
|
|
18251
|
+
var currentPacketsLost = (_getPropertyFromStats16 = getPropertyFromStatsById(current, id, 'packetsLost')) !== null && _getPropertyFromStats16 !== void 0 ? _getPropertyFromStats16 : 0;
|
|
18252
|
+
var previousPacketsLost = (_getPropertyFromStats17 = getPropertyFromStatsById(previous, id, 'packetsLost')) !== null && _getPropertyFromStats17 !== void 0 ? _getPropertyFromStats17 : 0;
|
|
18253
|
+
result.rtpEndToEndLost = currentPacketsLost - previousPacketsLost;
|
|
18254
|
+
if (this.mediaKind === 'audio') {
|
|
18255
|
+
var _getPropertyFromStats18, _getPropertyFromStats19, _getPropertyFromStats20, _getPropertyFromStats21, _getPropertyFromStats22;
|
|
18256
|
+
var currentConcealedSamples = (_getPropertyFromStats18 = getPropertyFromStatsById(current, id, 'concealedSamples')) !== null && _getPropertyFromStats18 !== void 0 ? _getPropertyFromStats18 : 0;
|
|
18257
|
+
var previousConcealedSamples = (_getPropertyFromStats19 = getPropertyFromStatsById(previous, id, 'concealedSamples')) !== null && _getPropertyFromStats19 !== void 0 ? _getPropertyFromStats19 : 0;
|
|
18258
|
+
var currentSilentConcealedSamples = (_getPropertyFromStats20 = getPropertyFromStatsById(current, id, 'silentConcealedSamples')) !== null && _getPropertyFromStats20 !== void 0 ? _getPropertyFromStats20 : 0;
|
|
18259
|
+
var previousSilentConcealedSamples = (_getPropertyFromStats21 = getPropertyFromStatsById(previous, id, 'silentConcealedSamples')) !== null && _getPropertyFromStats21 !== void 0 ? _getPropertyFromStats21 : 0;
|
|
18260
|
+
var currentClockRate = (_getPropertyFromStats22 = getPropertyFromStatsByType(current, 'codec', 'clockRate')) !== null && _getPropertyFromStats22 !== void 0 ? _getPropertyFromStats22 : 0;
|
|
18261
|
+
result.concealedFrames = samplesToMilliseconds(currentConcealedSamples - previousConcealedSamples - (currentSilentConcealedSamples - previousSilentConcealedSamples), currentClockRate);
|
|
18262
|
+
}
|
|
18263
|
+
if (this.mediaKind === 'video') {
|
|
18264
|
+
var _getPropertyFromStats23, _getPropertyFromStats24, _getPropertyFromStats25, _getPropertyFromStats26, _getPropertyFromStats27, _getPropertyFromStats28, _getPropertyFromStats29;
|
|
18265
|
+
var currentTotalFreezesDuration = (_getPropertyFromStats23 = getPropertyFromStatsById(current, id, 'totalFreezesDuration')) !== null && _getPropertyFromStats23 !== void 0 ? _getPropertyFromStats23 : 0;
|
|
18266
|
+
var previousTotalFreezesDuration = (_getPropertyFromStats24 = getPropertyFromStatsById(previous, id, 'totalFreezesDuration')) !== null && _getPropertyFromStats24 !== void 0 ? _getPropertyFromStats24 : 0;
|
|
18267
|
+
result.concealedFrames = (currentTotalFreezesDuration - previousTotalFreezesDuration) * 1000;
|
|
18268
|
+
var currentFramesReceived = (_getPropertyFromStats25 = getPropertyFromStatsById(current, id, 'framesReceived')) !== null && _getPropertyFromStats25 !== void 0 ? _getPropertyFromStats25 : 0;
|
|
18269
|
+
var previousFramesReceived = (_getPropertyFromStats26 = getPropertyFromStatsById(previous, id, 'framesReceived')) !== null && _getPropertyFromStats26 !== void 0 ? _getPropertyFromStats26 : 0;
|
|
18270
|
+
result.receivedFrameRate = (currentFramesReceived - previousFramesReceived) * VIDEO_FRAME_RATE_MULTIPLIER / (MQE_INTERVAL / 1000);
|
|
18271
|
+
var currentFramesDecoded = (_getPropertyFromStats27 = getPropertyFromStatsById(current, id, 'framesDecoded')) !== null && _getPropertyFromStats27 !== void 0 ? _getPropertyFromStats27 : 0;
|
|
18272
|
+
var previousFramesDecoded = (_getPropertyFromStats28 = getPropertyFromStatsById(previous, id, 'framesDecoded')) !== null && _getPropertyFromStats28 !== void 0 ? _getPropertyFromStats28 : 0;
|
|
18273
|
+
result.renderedFrameRate = (currentFramesDecoded - previousFramesDecoded) * VIDEO_FRAME_RATE_MULTIPLIER / (MQE_INTERVAL / 1000);
|
|
18274
|
+
var currentRequestedFrameRate = (_getPropertyFromStats29 = getPropertyFromStatsById(current, id, 'requestedFrameRate')) !== null && _getPropertyFromStats29 !== void 0 ? _getPropertyFromStats29 : 0;
|
|
18275
|
+
result.requestedFrameRate = currentRequestedFrameRate;
|
|
18276
|
+
result.optimalFrameRate = currentRequestedFrameRate;
|
|
18277
|
+
}
|
|
18278
|
+
var currentJitterArray = (_getPropertyFromStats30 = getPropertyFromStatsById(current, id, 'jitterArray')) !== null && _getPropertyFromStats30 !== void 0 ? _getPropertyFromStats30 : [];
|
|
18279
|
+
result.meanRtpJitter = mean(currentJitterArray) * 1000;
|
|
18280
|
+
result.maxRtpJitter = max(currentJitterArray) * 1000;
|
|
18281
|
+
var currentBytesReceived = (_getPropertyFromStats31 = getPropertyFromStatsById(current, id, 'bytesReceived')) !== null && _getPropertyFromStats31 !== void 0 ? _getPropertyFromStats31 : 0;
|
|
18282
|
+
var previousBytesReceived = (_getPropertyFromStats32 = getPropertyFromStatsById(previous, id, 'bytesReceived')) !== null && _getPropertyFromStats32 !== void 0 ? _getPropertyFromStats32 : 0;
|
|
18283
|
+
var currentRetransmittedBytesReceived = (_getPropertyFromStats33 = getPropertyFromStatsById(current, id, 'retransmittedBytesReceived')) !== null && _getPropertyFromStats33 !== void 0 ? _getPropertyFromStats33 : 0;
|
|
18284
|
+
var previousRetransmittedBytesReceived = (_getPropertyFromStats34 = getPropertyFromStatsById(previous, id, 'retransmittedBytesReceived')) !== null && _getPropertyFromStats34 !== void 0 ? _getPropertyFromStats34 : 0;
|
|
18285
|
+
result.receivedBitrate = bytesToBitrate(currentBytesReceived - previousBytesReceived - (currentRetransmittedBytesReceived - previousRetransmittedBytesReceived), MQE_INTERVAL);
|
|
18286
|
+
var currentRequestedBitrate = (_getPropertyFromStats35 = getPropertyFromStatsById(current, id, 'requestedBitrate')) !== null && _getPropertyFromStats35 !== void 0 ? _getPropertyFromStats35 : 0;
|
|
18287
|
+
result.requestedBitrate = currentRequestedBitrate;
|
|
18288
|
+
result.optimalBitrate = currentRequestedBitrate;
|
|
18289
|
+
var currentCsi = getPropertyFromStatsById(current, id, 'csi');
|
|
18290
|
+
if (currentCsi) {
|
|
18291
|
+
result.csi = [currentCsi];
|
|
18292
|
+
}
|
|
18293
|
+
var currentCodec = (_getCodecFromStatsByS = getCodecFromStatsByStreamStatsId(current, id)) !== null && _getCodecFromStatsByS !== void 0 ? _getCodecFromStatsByS : this.mediaKind === 'audio' ? 'opus' : 'H264';
|
|
18294
|
+
result.codec = currentCodec;
|
|
18295
|
+
return result;
|
|
18296
|
+
}
|
|
18297
|
+
buildMqeIntervalSessionTransmit() {
|
|
18298
|
+
var _getTransportTypeFrom2, _getAvailableOutgoing;
|
|
18299
|
+
var result = structuredClone(initialMqeIntervalSessionTransmit);
|
|
18300
|
+
result.common = this.buildMqeIntervalSessionCommon();
|
|
18301
|
+
var current = this.currentIntervalStats;
|
|
18302
|
+
var previous = this.previousIntervalStats;
|
|
18303
|
+
var currentRetransmittedPacketsSent = getSumFromStatsByType(current, 'outbound-rtp', 'retransmittedPacketsSent');
|
|
18304
|
+
var previousRetransmittedPacketsSent = getSumFromStatsByType(previous, 'outbound-rtp', 'retransmittedPacketsSent');
|
|
18305
|
+
result.rtxPackets = currentRetransmittedPacketsSent - previousRetransmittedPacketsSent;
|
|
18306
|
+
var currentRetransmittedBytesSent = getSumFromStatsByType(current, 'outbound-rtp', 'retransmittedBytesSent');
|
|
18307
|
+
var previousRetransmittedBytesSent = getSumFromStatsByType(previous, 'outbound-rtp', 'retransmittedBytesSent');
|
|
18308
|
+
result.rtxBitrate = bytesToBitrate(currentRetransmittedBytesSent - previousRetransmittedBytesSent, MQE_INTERVAL);
|
|
18309
|
+
var currentPacketsSent = getSumFromStatsByType(current, 'outbound-rtp', 'packetsSent');
|
|
18310
|
+
var previousPacketsSent = getSumFromStatsByType(previous, 'outbound-rtp', 'packetsSent');
|
|
18311
|
+
result.rtpPackets = currentPacketsSent - previousPacketsSent - result.rtxPackets;
|
|
18312
|
+
var currentBytesSent = getSumFromStatsByType(current, 'outbound-rtp', 'bytesSent');
|
|
18313
|
+
var previousBytesSent = getSumFromStatsByType(previous, 'outbound-rtp', 'bytesSent');
|
|
18314
|
+
result.rtpBitrate = bytesToBitrate(currentBytesSent - previousBytesSent, MQE_INTERVAL) - result.rtxBitrate;
|
|
18315
|
+
var currentTransportType = (_getTransportTypeFrom2 = getTransportTypeFromStats(current)) !== null && _getTransportTypeFrom2 !== void 0 ? _getTransportTypeFrom2 : 'UDP';
|
|
18316
|
+
result.transportType = currentTransportType;
|
|
18317
|
+
var currentAvailableOutgoingBitrate = (_getAvailableOutgoing = getAvailableOutgoingBitrateFromStats(current)) !== null && _getAvailableOutgoing !== void 0 ? _getAvailableOutgoing : 0;
|
|
18318
|
+
result.availableBitrate = currentAvailableOutgoingBitrate;
|
|
18319
|
+
result.queueDelay = 0;
|
|
18320
|
+
var currentRoundTripTimeArray = getPropertyFromStatsByTypeInArray(current, 'remote-inbound-rtp', 'roundTripTimeArray').flat();
|
|
18321
|
+
result.meanRoundTripTime = mean(currentRoundTripTimeArray) * 1000;
|
|
18322
|
+
result.maxRoundTripTime = max(currentRoundTripTimeArray) * 1000;
|
|
18323
|
+
var currentFractionLostArray = getPropertyFromStatsByTypeInArray(current, 'remote-inbound-rtp', 'fractionLostArray').flat();
|
|
18324
|
+
result.maxRemoteLossRate = max(currentFractionLostArray) * 100;
|
|
18325
|
+
result.meanRemoteLossRate = mean(currentFractionLostArray) * 100;
|
|
18326
|
+
var currentJitterArray = getPropertyFromStatsByTypeInArray(current, 'remote-inbound-rtp', 'jitterArray').flat();
|
|
18327
|
+
result.maxRemoteJitter = max(currentJitterArray) * 1000;
|
|
18328
|
+
result.meanRemoteJitter = mean(currentJitterArray) * 1000;
|
|
18329
|
+
var currentRtpPacketSizeArray = getPropertyFromStatsByTypeInArray(current, 'outbound-rtp', 'rtpPacketSizeArray').flat();
|
|
18330
|
+
result.mediaPacketSize = {
|
|
18331
|
+
meanRtpPacketSize: Math.round(mean(currentRtpPacketSizeArray)),
|
|
18332
|
+
maxRtpPacketSize: Math.round(max(currentRtpPacketSizeArray)),
|
|
18333
|
+
minRtpPacketSize: Math.round(min(currentRtpPacketSizeArray))
|
|
18334
|
+
};
|
|
18335
|
+
return result;
|
|
18336
|
+
}
|
|
18337
|
+
buildMqeIntervalStreamTransmitAudio(id) {
|
|
18338
|
+
var result = structuredClone(initialMqeIntervalStreamTransmitAudio);
|
|
18339
|
+
result.common = this.buildMqeIntervalStreamTransmitCommon(id);
|
|
18340
|
+
var current = this.currentIntervalStats;
|
|
18341
|
+
var currentLastUsedEffect = getPropertyFromStatsById(current, id, 'lastUsedEffect');
|
|
18342
|
+
if ((currentLastUsedEffect === null || currentLastUsedEffect === void 0 ? void 0 : currentLastUsedEffect.kind) === 'noise-reduction-effect') {
|
|
18343
|
+
result.backgroundNoiseReductionMode = NOISE_REDUCTION_MODE.LOW_POWER;
|
|
18344
|
+
} else {
|
|
18345
|
+
result.backgroundNoiseReductionMode = NOISE_REDUCTION_MODE.NONE;
|
|
18346
|
+
}
|
|
18347
|
+
return result;
|
|
18348
|
+
}
|
|
18349
|
+
buildMqeIntervalStreamTransmitVideo(id) {
|
|
18350
|
+
var _getPropertyFromStats36, _getPropertyFromStats37, _getPropertyFromStats38, _getPropertyFromStats39, _getPropertyFromStats40, _getPropertyFromStats41, _getPropertyFromStats42, _getPropertyFromStats43, _getPropertyFromStats44, _getH264ProfileFromSt2;
|
|
18351
|
+
var result = structuredClone(initialMqeIntervalStreamTransmitVideo);
|
|
18352
|
+
result.common = this.buildMqeIntervalStreamTransmitCommon(id);
|
|
18353
|
+
var current = this.currentIntervalStats;
|
|
18354
|
+
var previous = this.previousIntervalStats;
|
|
18355
|
+
var currentFrameHeight = (_getPropertyFromStats36 = getPropertyFromStatsById(current, id, 'frameHeight')) !== null && _getPropertyFromStats36 !== void 0 ? _getPropertyFromStats36 : 0;
|
|
18356
|
+
var currentFrameWidth = (_getPropertyFromStats37 = getPropertyFromStatsById(current, id, 'frameWidth')) !== null && _getPropertyFromStats37 !== void 0 ? _getPropertyFromStats37 : 0;
|
|
18357
|
+
result.transmittedFrameSize = pixelsToFrameSize(currentFrameWidth, currentFrameHeight);
|
|
18358
|
+
var currentRequestedFrameSize = (_getPropertyFromStats38 = getPropertyFromStatsById(current, id, 'requestedFrameSize')) !== null && _getPropertyFromStats38 !== void 0 ? _getPropertyFromStats38 : 0;
|
|
18359
|
+
result.requestedFrameSize = currentRequestedFrameSize;
|
|
18360
|
+
result.transmittedHeight = currentFrameHeight;
|
|
18361
|
+
result.transmittedWidth = currentFrameWidth;
|
|
18362
|
+
var currentKeyFramesEncoded = (_getPropertyFromStats39 = getPropertyFromStatsById(current, id, 'keyFramesEncoded')) !== null && _getPropertyFromStats39 !== void 0 ? _getPropertyFromStats39 : 0;
|
|
18363
|
+
var previousKeyFramesEncoded = (_getPropertyFromStats40 = getPropertyFromStatsById(previous, id, 'keyFramesEncoded')) !== null && _getPropertyFromStats40 !== void 0 ? _getPropertyFromStats40 : 0;
|
|
18364
|
+
result.transmittedKeyFrames = currentKeyFramesEncoded - previousKeyFramesEncoded;
|
|
18365
|
+
var currentFirCount = (_getPropertyFromStats41 = getPropertyFromStatsById(current, id, 'firCount')) !== null && _getPropertyFromStats41 !== void 0 ? _getPropertyFromStats41 : 0;
|
|
18366
|
+
var previousFirCount = (_getPropertyFromStats42 = getPropertyFromStatsById(previous, id, 'firCount')) !== null && _getPropertyFromStats42 !== void 0 ? _getPropertyFromStats42 : 0;
|
|
18367
|
+
var currentPliCount = (_getPropertyFromStats43 = getPropertyFromStatsById(current, id, 'pliCount')) !== null && _getPropertyFromStats43 !== void 0 ? _getPropertyFromStats43 : 0;
|
|
18368
|
+
var previousPliCount = (_getPropertyFromStats44 = getPropertyFromStatsById(previous, id, 'pliCount')) !== null && _getPropertyFromStats44 !== void 0 ? _getPropertyFromStats44 : 0;
|
|
18369
|
+
result.requestedKeyFrames = currentFirCount - previousFirCount + (currentPliCount - previousPliCount);
|
|
18370
|
+
result.localConfigurationChanges = 0;
|
|
18371
|
+
var currentH264CodecProfile = (_getH264ProfileFromSt2 = getH264ProfileFromStatsByStreamStatsId(current, id)) !== null && _getH264ProfileFromSt2 !== void 0 ? _getH264ProfileFromSt2 : 'BP';
|
|
18372
|
+
result.h264CodecProfile = currentH264CodecProfile;
|
|
18373
|
+
var currentLastUsedEffect = getPropertyFromStatsById(current, id, 'lastUsedEffect');
|
|
18374
|
+
if ((currentLastUsedEffect === null || currentLastUsedEffect === void 0 ? void 0 : currentLastUsedEffect.kind) === 'virtual-background-effect' && 'virtualBackgroundMode' in currentLastUsedEffect) {
|
|
18375
|
+
if (currentLastUsedEffect.virtualBackgroundMode === 'BLUR') {
|
|
18376
|
+
result.backgroundAugmentationType = VIRTUAL_BACKGROUND_MODE.BLUR;
|
|
18377
|
+
} else if (currentLastUsedEffect.virtualBackgroundMode === 'IMAGE') {
|
|
18378
|
+
result.backgroundAugmentationType = VIRTUAL_BACKGROUND_MODE.REPLACE_IMAGE;
|
|
18379
|
+
} else if (currentLastUsedEffect.virtualBackgroundMode === 'VIDEO') {
|
|
18380
|
+
result.backgroundAugmentationType = VIRTUAL_BACKGROUND_MODE.REPLACE_VIDEO;
|
|
18381
|
+
} else {
|
|
18382
|
+
result.backgroundAugmentationType = VIRTUAL_BACKGROUND_MODE.NONE;
|
|
18383
|
+
}
|
|
18384
|
+
} else {
|
|
18385
|
+
result.backgroundAugmentationType = VIRTUAL_BACKGROUND_MODE.NONE;
|
|
18386
|
+
}
|
|
18387
|
+
return result;
|
|
18388
|
+
}
|
|
18389
|
+
buildMqeIntervalStreamTransmitCommon(id) {
|
|
18390
|
+
var _getPropertyFromStats45, _getPropertyFromStats46, _getPropertyFromStats47, _getPropertyFromStats48, _getPropertyFromStats52, _getPropertyFromStats53, _getPropertyFromStats54, _getPropertyFromStats55, _getPropertyFromStats56, _getCodecFromStatsByS2;
|
|
18391
|
+
var result = structuredClone(initialMqeIntervalStreamTransmitCommon);
|
|
18392
|
+
var current = this.currentIntervalStats;
|
|
18393
|
+
var previous = this.previousIntervalStats;
|
|
18394
|
+
var currentPacketsSent = (_getPropertyFromStats45 = getPropertyFromStatsById(current, id, 'packetsSent')) !== null && _getPropertyFromStats45 !== void 0 ? _getPropertyFromStats45 : 0;
|
|
18395
|
+
var previousPacketsSent = (_getPropertyFromStats46 = getPropertyFromStatsById(previous, id, 'packetsSent')) !== null && _getPropertyFromStats46 !== void 0 ? _getPropertyFromStats46 : 0;
|
|
18396
|
+
var currentRetransmittedPacketsSent = (_getPropertyFromStats47 = getPropertyFromStatsById(current, id, 'retransmittedPacketsSent')) !== null && _getPropertyFromStats47 !== void 0 ? _getPropertyFromStats47 : 0;
|
|
18397
|
+
var previousRetransmittedPacketsSent = (_getPropertyFromStats48 = getPropertyFromStatsById(previous, id, 'retransmittedPacketsSent')) !== null && _getPropertyFromStats48 !== void 0 ? _getPropertyFromStats48 : 0;
|
|
18398
|
+
result.rtpPackets = currentPacketsSent - previousPacketsSent - (currentRetransmittedPacketsSent - previousRetransmittedPacketsSent);
|
|
18399
|
+
if (this.mediaKind === 'video') {
|
|
18400
|
+
var _getPropertyFromStats49, _getPropertyFromStats50, _getPropertyFromStats51;
|
|
18401
|
+
var currentFramesSent = (_getPropertyFromStats49 = getPropertyFromStatsById(current, id, 'framesSent')) !== null && _getPropertyFromStats49 !== void 0 ? _getPropertyFromStats49 : 0;
|
|
18402
|
+
var previousFramesSent = (_getPropertyFromStats50 = getPropertyFromStatsById(previous, id, 'framesSent')) !== null && _getPropertyFromStats50 !== void 0 ? _getPropertyFromStats50 : 0;
|
|
18403
|
+
result.transmittedFrameRate = (currentFramesSent - previousFramesSent) * VIDEO_FRAME_RATE_MULTIPLIER / (MQE_INTERVAL / 1000);
|
|
18404
|
+
var currentRequestedFrameRate = (_getPropertyFromStats51 = getPropertyFromStatsById(current, id, 'requestedFrameRate')) !== null && _getPropertyFromStats51 !== void 0 ? _getPropertyFromStats51 : 0;
|
|
18405
|
+
result.requestedFrames = currentRequestedFrameRate;
|
|
18406
|
+
}
|
|
18407
|
+
var currentBytesSent = (_getPropertyFromStats52 = getPropertyFromStatsById(current, id, 'bytesSent')) !== null && _getPropertyFromStats52 !== void 0 ? _getPropertyFromStats52 : 0;
|
|
18408
|
+
var previousBytesSent = (_getPropertyFromStats53 = getPropertyFromStatsById(previous, id, 'bytesSent')) !== null && _getPropertyFromStats53 !== void 0 ? _getPropertyFromStats53 : 0;
|
|
18409
|
+
var currentRetransmittedBytesSent = (_getPropertyFromStats54 = getPropertyFromStatsById(current, id, 'retransmittedBytesSent')) !== null && _getPropertyFromStats54 !== void 0 ? _getPropertyFromStats54 : 0;
|
|
18410
|
+
var previousRetransmittedBytesSent = (_getPropertyFromStats55 = getPropertyFromStatsById(previous, id, 'retransmittedBytesSent')) !== null && _getPropertyFromStats55 !== void 0 ? _getPropertyFromStats55 : 0;
|
|
18411
|
+
result.transmittedBitrate = bytesToBitrate(currentBytesSent - previousBytesSent - (currentRetransmittedBytesSent - previousRetransmittedBytesSent), MQE_INTERVAL);
|
|
18412
|
+
var currentRequestedBitrate = (_getPropertyFromStats56 = getPropertyFromStatsById(current, id, 'requestedBitrate')) !== null && _getPropertyFromStats56 !== void 0 ? _getPropertyFromStats56 : 0;
|
|
18413
|
+
result.requestedBitrate = currentRequestedBitrate;
|
|
18414
|
+
var currentCodec = (_getCodecFromStatsByS2 = getCodecFromStatsByStreamStatsId(current, id)) !== null && _getCodecFromStatsByS2 !== void 0 ? _getCodecFromStatsByS2 : this.mediaKind === 'audio' ? 'opus' : 'H264';
|
|
18415
|
+
result.codec = currentCodec;
|
|
18416
|
+
var currentCsi = getPropertyFromStatsById(current, id, 'csi');
|
|
18417
|
+
if (currentCsi) {
|
|
18418
|
+
result.csi = [currentCsi];
|
|
18419
|
+
}
|
|
18420
|
+
return result;
|
|
18421
|
+
}
|
|
18422
|
+
}
|
|
18423
|
+
|
|
18424
|
+
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; }
|
|
18425
|
+
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(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; }
|
|
18426
|
+
class MqeIntervalSessionReceiveAudioBuilder extends MqeBuilder {
|
|
18427
|
+
constructor(params) {
|
|
18428
|
+
super(_objectSpread$4(_objectSpread$4({}, params), {}, {
|
|
18429
|
+
direction: 'recvonly',
|
|
18430
|
+
mediaKind: 'audio'
|
|
18431
|
+
}));
|
|
18432
|
+
}
|
|
18433
|
+
buildMqe() {
|
|
18434
|
+
var result = {
|
|
18435
|
+
common: this.buildMqeIntervalSessionReceive(),
|
|
18436
|
+
streams: []
|
|
18437
|
+
};
|
|
18438
|
+
this.currentIntervalStats.forEach((stats, key) => {
|
|
18439
|
+
if (stats.type === 'inbound-rtp' && (!this.multistreamEnabled || isStreamRequested(stats))) {
|
|
18440
|
+
result.streams.push(this.buildMqeIntervalStreamReceiveAudio(key));
|
|
18441
|
+
}
|
|
18442
|
+
});
|
|
18443
|
+
return result;
|
|
18444
|
+
}
|
|
18445
|
+
}
|
|
18446
|
+
|
|
18447
|
+
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; }
|
|
18448
|
+
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(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; }
|
|
18449
|
+
class MqeIntervalSessionReceiveVideoBuilder extends MqeBuilder {
|
|
18450
|
+
constructor(params) {
|
|
18451
|
+
super(_objectSpread$3(_objectSpread$3({}, params), {}, {
|
|
18452
|
+
direction: 'recvonly',
|
|
18453
|
+
mediaKind: 'video'
|
|
18454
|
+
}));
|
|
18455
|
+
}
|
|
18456
|
+
buildMqe() {
|
|
18457
|
+
var result = {
|
|
18458
|
+
common: this.buildMqeIntervalSessionReceive(),
|
|
18459
|
+
streams: []
|
|
18460
|
+
};
|
|
18461
|
+
this.currentIntervalStats.forEach((stats, key) => {
|
|
18462
|
+
if (stats.type === 'inbound-rtp' && (!this.multistreamEnabled || isStreamRequested(stats))) {
|
|
18463
|
+
result.streams.push(this.buildMqeIntervalStreamReceiveVideo(key));
|
|
18464
|
+
}
|
|
18465
|
+
});
|
|
18466
|
+
return result;
|
|
18467
|
+
}
|
|
18468
|
+
}
|
|
18469
|
+
|
|
18470
|
+
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; }
|
|
18471
|
+
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(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; }
|
|
18472
|
+
class MqeIntervalSessionTransmitAudioBuilder extends MqeBuilder {
|
|
18473
|
+
constructor(params) {
|
|
18474
|
+
super(_objectSpread$2(_objectSpread$2({}, params), {}, {
|
|
18475
|
+
direction: 'sendonly',
|
|
18476
|
+
mediaKind: 'audio'
|
|
18477
|
+
}));
|
|
18478
|
+
}
|
|
18479
|
+
buildMqe() {
|
|
18480
|
+
var result = {
|
|
18481
|
+
common: this.buildMqeIntervalSessionTransmit(),
|
|
18482
|
+
streams: []
|
|
18483
|
+
};
|
|
18484
|
+
this.currentIntervalStats.forEach((stats, key) => {
|
|
18485
|
+
if (stats.type === 'outbound-rtp' && (!this.multistreamEnabled || isStreamRequested(stats))) {
|
|
18486
|
+
result.streams.push(this.buildMqeIntervalStreamTransmitAudio(key));
|
|
18487
|
+
}
|
|
18488
|
+
});
|
|
18489
|
+
return result;
|
|
18490
|
+
}
|
|
18491
|
+
}
|
|
18492
|
+
|
|
18493
|
+
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; }
|
|
18494
|
+
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(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; }
|
|
18495
|
+
class MqeIntervalSessionTransmitVideoBuilder extends MqeBuilder {
|
|
18496
|
+
constructor(params) {
|
|
18497
|
+
super(_objectSpread$1(_objectSpread$1({}, params), {}, {
|
|
18498
|
+
direction: 'sendonly',
|
|
18499
|
+
mediaKind: 'video'
|
|
18500
|
+
}));
|
|
18501
|
+
}
|
|
18502
|
+
buildMqe() {
|
|
18503
|
+
var result = {
|
|
18504
|
+
common: this.buildMqeIntervalSessionTransmit(),
|
|
18505
|
+
streams: []
|
|
18506
|
+
};
|
|
18507
|
+
this.currentIntervalStats.forEach((stats, key) => {
|
|
18508
|
+
if (stats.type === 'outbound-rtp' && (!this.multistreamEnabled || isStreamRequested(stats))) {
|
|
18509
|
+
result.streams.push(this.buildMqeIntervalStreamTransmitVideo(key));
|
|
18510
|
+
}
|
|
18511
|
+
});
|
|
18512
|
+
return result;
|
|
18513
|
+
}
|
|
18514
|
+
}
|
|
18515
|
+
|
|
18283
18516
|
exports.StatsAnalyzerEventNames = void 0;
|
|
18284
18517
|
(function (StatsAnalyzerEventNames) {
|
|
18285
18518
|
StatsAnalyzerEventNames["MEDIA_QUALITY"] = "MEDIA_QUALITY";
|
|
@@ -18300,32 +18533,29 @@ class StatsAnalyzer extends EventEmitter$5 {
|
|
|
18300
18533
|
var {
|
|
18301
18534
|
config,
|
|
18302
18535
|
networkQualityMonitor,
|
|
18303
|
-
statsResults = STATS_DEFAULT,
|
|
18304
18536
|
isMultistream = false
|
|
18305
18537
|
} = _ref;
|
|
18306
18538
|
super();
|
|
18307
18539
|
_defineProperty(this, "config", void 0);
|
|
18308
|
-
_defineProperty(this, "
|
|
18309
|
-
_defineProperty(this, "
|
|
18310
|
-
_defineProperty(this, "lastMqaDataSent", void 0);
|
|
18311
|
-
_defineProperty(this, "lastStatsResults", void 0);
|
|
18540
|
+
_defineProperty(this, "lastEmittedStartStopEvents", {});
|
|
18541
|
+
_defineProperty(this, "previousTransceiverStats", void 0);
|
|
18312
18542
|
_defineProperty(this, "meetingMediaStatus", void 0);
|
|
18313
|
-
_defineProperty(this, "mqaInterval", void 0);
|
|
18314
|
-
_defineProperty(this, "mqaSentCount", void 0);
|
|
18315
|
-
_defineProperty(this, "networkQualityMonitor", void 0);
|
|
18316
|
-
_defineProperty(this, "mediaConnection", void 0);
|
|
18317
18543
|
_defineProperty(this, "statsInterval", void 0);
|
|
18318
|
-
_defineProperty(this, "
|
|
18319
|
-
_defineProperty(this, "
|
|
18320
|
-
_defineProperty(this, "
|
|
18321
|
-
_defineProperty(this, "
|
|
18322
|
-
_defineProperty(this, "
|
|
18323
|
-
_defineProperty(this, "
|
|
18544
|
+
_defineProperty(this, "mqeInterval", void 0);
|
|
18545
|
+
_defineProperty(this, "mqeSentCount", 0);
|
|
18546
|
+
_defineProperty(this, "networkQualityMonitor", void 0);
|
|
18547
|
+
_defineProperty(this, "mediaConnection", null);
|
|
18548
|
+
_defineProperty(this, "statsStarted", false);
|
|
18549
|
+
_defineProperty(this, "mqeIntervalSessionReceiveAudioMainBuilder", void 0);
|
|
18550
|
+
_defineProperty(this, "mqeIntervalSessionReceiveAudioSlidesBuilder", void 0);
|
|
18551
|
+
_defineProperty(this, "mqeIntervalSessionTransmitAudioMainBuilder", void 0);
|
|
18552
|
+
_defineProperty(this, "mqeIntervalSessionTransmitAudioSlidesBuilder", void 0);
|
|
18553
|
+
_defineProperty(this, "mqeIntervalSessionReceiveVideoMainBuilder", void 0);
|
|
18554
|
+
_defineProperty(this, "mqeIntervalSessionReceiveVideoSlidesBuilder", void 0);
|
|
18555
|
+
_defineProperty(this, "mqeIntervalSessionTransmitVideoMainBuilder", void 0);
|
|
18556
|
+
_defineProperty(this, "mqeIntervalSessionTransmitVideoSlidesBuilder", void 0);
|
|
18324
18557
|
_defineProperty(this, "emitStartStopEvents", (mediaType, previousValue, currentValue, isLocal) => {
|
|
18325
18558
|
var _this$lastEmittedStar, _this$lastEmittedStar2;
|
|
18326
|
-
if (mediaType !== 'audio' && mediaType !== 'video' && mediaType !== 'share') {
|
|
18327
|
-
throw new Error("Unsupported mediaType: ".concat(mediaType));
|
|
18328
|
-
}
|
|
18329
18559
|
if (previousValue === undefined) previousValue = 0;
|
|
18330
18560
|
if (currentValue === undefined) currentValue = 0;
|
|
18331
18561
|
if (!this.lastEmittedStartStopEvents[mediaType]) {
|
|
@@ -18335,7 +18565,7 @@ class StatsAnalyzer extends EventEmitter$5 {
|
|
|
18335
18565
|
var newEvent;
|
|
18336
18566
|
if (currentValue - previousValue > 0) {
|
|
18337
18567
|
newEvent = isLocal ? exports.StatsAnalyzerEventNames.LOCAL_MEDIA_STARTED : exports.StatsAnalyzerEventNames.REMOTE_MEDIA_STARTED;
|
|
18338
|
-
} else if (currentValue === previousValue &&
|
|
18568
|
+
} else if (currentValue === previousValue && (lastEmittedEvent === exports.StatsAnalyzerEventNames.LOCAL_MEDIA_STARTED || lastEmittedEvent === exports.StatsAnalyzerEventNames.REMOTE_MEDIA_STARTED)) {
|
|
18339
18569
|
newEvent = isLocal ? exports.StatsAnalyzerEventNames.LOCAL_MEDIA_STOPPED : exports.StatsAnalyzerEventNames.REMOTE_MEDIA_STOPPED;
|
|
18340
18570
|
}
|
|
18341
18571
|
if (newEvent && lastEmittedEvent !== newEvent) {
|
|
@@ -18350,761 +18580,365 @@ class StatsAnalyzer extends EventEmitter$5 {
|
|
|
18350
18580
|
});
|
|
18351
18581
|
}
|
|
18352
18582
|
});
|
|
18353
|
-
_defineProperty(this, "extractAndSetLocalIpAddressInfoForDiagnostics", (successfulCandidatePairId, candidates) => {
|
|
18354
|
-
var newIpAddress = '';
|
|
18355
|
-
if (successfulCandidatePairId && Object.keys(candidates).length > 0) {
|
|
18356
|
-
var localCandidate = candidates[successfulCandidatePairId];
|
|
18357
|
-
if (localCandidate) {
|
|
18358
|
-
if (localCandidate.candidateType === 'host') {
|
|
18359
|
-
newIpAddress = "".concat(localCandidate.address);
|
|
18360
|
-
} else if (localCandidate.candidateType === 'prflx') {
|
|
18361
|
-
if (!localCandidate.relayProtocol) {
|
|
18362
|
-
newIpAddress = "".concat(localCandidate.relatedAddress);
|
|
18363
|
-
} else {
|
|
18364
|
-
newIpAddress = "".concat(localCandidate.address);
|
|
18365
|
-
}
|
|
18366
|
-
}
|
|
18367
|
-
}
|
|
18368
|
-
}
|
|
18369
|
-
this.localIpAddress = newIpAddress;
|
|
18370
|
-
});
|
|
18371
|
-
_defineProperty(this, "parseCandidate", (result, type, isSender, isRemote) => {
|
|
18372
|
-
var _this$successfulCandi;
|
|
18373
|
-
if (!result || !result.id) {
|
|
18374
|
-
return;
|
|
18375
|
-
}
|
|
18376
|
-
if (((_this$successfulCandi = this.successfulCandidatePair) === null || _this$successfulCandi === void 0 ? void 0 : _this$successfulCandi.localCandidateId) !== result.id) {
|
|
18377
|
-
return;
|
|
18378
|
-
}
|
|
18379
|
-
var transport;
|
|
18380
|
-
if (result.relayProtocol) {
|
|
18381
|
-
transport = result.relayProtocol.toUpperCase();
|
|
18382
|
-
} else if (result.protocol) {
|
|
18383
|
-
transport = result.protocol.toUpperCase();
|
|
18384
|
-
}
|
|
18385
|
-
var sendRecvType = isSender ? MediaDirection.SEND : MediaDirection.RECEIVE;
|
|
18386
|
-
var ipType = isRemote ? IpType.REMOTE : IpType.LOCAL;
|
|
18387
|
-
if (!this.statsResults.candidates) {
|
|
18388
|
-
this.statsResults.candidates = {};
|
|
18389
|
-
}
|
|
18390
|
-
this.statsResults.candidates[result.id] = {
|
|
18391
|
-
candidateType: result.candidateType,
|
|
18392
|
-
ipAddress: result.ip,
|
|
18393
|
-
relatedAddress: result.relatedAddress,
|
|
18394
|
-
relatedPort: result.relatedPort,
|
|
18395
|
-
relayProtocol: result.relayProtocol,
|
|
18396
|
-
protocol: result.protocol,
|
|
18397
|
-
address: result.address,
|
|
18398
|
-
portNumber: result.port,
|
|
18399
|
-
networkType: result.networkType,
|
|
18400
|
-
priority: result.priority,
|
|
18401
|
-
transport,
|
|
18402
|
-
timestamp: result.time,
|
|
18403
|
-
id: result.id,
|
|
18404
|
-
type: result.type
|
|
18405
|
-
};
|
|
18406
|
-
this.statsResults.connectionType[ipType].candidateType = result.candidateType;
|
|
18407
|
-
this.statsResults.connectionType[ipType].ipAddress = result.ipAddress;
|
|
18408
|
-
this.statsResults.connectionType[ipType].networkType = result.networkType === NetworkType.VPN ? NetworkType.UNKNOWN : result.networkType;
|
|
18409
|
-
this.statsResults.connectionType[ipType].transport = transport;
|
|
18410
|
-
this.statsResults[type][sendRecvType].totalRoundTripTime = result.totalRoundTripTime;
|
|
18411
|
-
});
|
|
18412
|
-
this.statsStarted = false;
|
|
18413
|
-
this.statsResults = statsResults;
|
|
18414
|
-
this.lastStatsResults = null;
|
|
18415
18583
|
this.config = config;
|
|
18416
18584
|
this.networkQualityMonitor = networkQualityMonitor;
|
|
18417
|
-
this.
|
|
18418
|
-
|
|
18419
|
-
|
|
18420
|
-
this.mediaConnection = null;
|
|
18421
|
-
this.lastEmittedStartStopEvents = {};
|
|
18422
|
-
this.successfulCandidatePair = {};
|
|
18423
|
-
this.localIpAddress = '';
|
|
18424
|
-
this.isMultistream = isMultistream;
|
|
18425
|
-
}
|
|
18426
|
-
resetStatsResults() {
|
|
18427
|
-
Object.keys(this.statsResults).forEach(mediaType => {
|
|
18428
|
-
if (mediaType.includes('recv')) {
|
|
18429
|
-
this.statsResults[mediaType].recv.meanRtpJitter = [];
|
|
18430
|
-
this.statsResults[mediaType].recv.meanRtpPacketSize = [];
|
|
18431
|
-
}
|
|
18432
|
-
if (mediaType.includes('send')) {
|
|
18433
|
-
this.statsResults[mediaType].send.meanRemoteJitter = [];
|
|
18434
|
-
this.statsResults[mediaType].send.meanRoundTripTime = [];
|
|
18435
|
-
this.statsResults[mediaType].send.effect = undefined;
|
|
18436
|
-
this.statsResults[mediaType].send.meanRtpPacketSize = [];
|
|
18437
|
-
}
|
|
18438
|
-
});
|
|
18439
|
-
}
|
|
18440
|
-
updateMediaStatus(status) {
|
|
18441
|
-
var _this$meetingMediaSta, _this$meetingMediaSta2;
|
|
18442
|
-
this.meetingMediaStatus = {
|
|
18443
|
-
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),
|
|
18444
|
-
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)
|
|
18445
|
-
};
|
|
18446
|
-
getLogger().info("StatsAnalyzer:index#updateMediaStatus --> Meeting Media Status: ", JSON.stringify(this.meetingMediaStatus));
|
|
18447
|
-
}
|
|
18448
|
-
sendMqaData() {
|
|
18449
|
-
var newMqa = structuredClone(emptyMqaInterval);
|
|
18450
|
-
Object.keys(this.statsResults).forEach(mediaType => {
|
|
18451
|
-
if (!this.lastMqaDataSent[mediaType]) {
|
|
18452
|
-
this.lastMqaDataSent[mediaType] = {};
|
|
18453
|
-
}
|
|
18454
|
-
if (!this.lastMqaDataSent[mediaType].send && mediaType.includes('-send')) {
|
|
18455
|
-
this.lastMqaDataSent[mediaType].send = {};
|
|
18456
|
-
}
|
|
18457
|
-
if (!this.lastMqaDataSent[mediaType].recv && mediaType.includes('-recv')) {
|
|
18458
|
-
this.lastMqaDataSent[mediaType].recv = {};
|
|
18459
|
-
}
|
|
18460
|
-
});
|
|
18461
|
-
var audioSender = structuredClone(emptyAudioTransmit);
|
|
18462
|
-
var audioShareSender = structuredClone(emptyAudioTransmit);
|
|
18463
|
-
var audioReceiver = structuredClone(emptyAudioReceive);
|
|
18464
|
-
var audioShareReceiver = structuredClone(emptyAudioReceive);
|
|
18465
|
-
var videoSender = structuredClone(emptyVideoTransmit);
|
|
18466
|
-
var videoShareSender = structuredClone(emptyVideoTransmit);
|
|
18467
|
-
var videoReceiver = structuredClone(emptyVideoReceive);
|
|
18468
|
-
var videoShareReceiver = structuredClone(emptyVideoReceive);
|
|
18469
|
-
getAudioSenderMqa({
|
|
18470
|
-
audioSender,
|
|
18471
|
-
statsResults: this.statsResults,
|
|
18472
|
-
lastMqaDataSent: this.lastMqaDataSent,
|
|
18473
|
-
baseMediaType: 'audio-send',
|
|
18474
|
-
isMultistream: this.isMultistream
|
|
18585
|
+
this.mqeIntervalSessionReceiveAudioMainBuilder = new MqeIntervalSessionReceiveAudioBuilder({
|
|
18586
|
+
isMain: true,
|
|
18587
|
+
multistreamEnabled: isMultistream
|
|
18475
18588
|
});
|
|
18476
|
-
|
|
18477
|
-
|
|
18478
|
-
|
|
18479
|
-
statsResults: this.statsResults,
|
|
18480
|
-
lastMqaDataSent: this.lastMqaDataSent,
|
|
18481
|
-
baseMediaType: 'audio-share-send',
|
|
18482
|
-
isMultistream: this.isMultistream
|
|
18589
|
+
this.mqeIntervalSessionReceiveAudioSlidesBuilder = new MqeIntervalSessionReceiveAudioBuilder({
|
|
18590
|
+
isMain: false,
|
|
18591
|
+
multistreamEnabled: isMultistream
|
|
18483
18592
|
});
|
|
18484
|
-
|
|
18485
|
-
|
|
18486
|
-
|
|
18487
|
-
statsResults: this.statsResults,
|
|
18488
|
-
lastMqaDataSent: this.lastMqaDataSent,
|
|
18489
|
-
baseMediaType: 'audio-recv',
|
|
18490
|
-
isMultistream: this.isMultistream
|
|
18593
|
+
this.mqeIntervalSessionTransmitAudioMainBuilder = new MqeIntervalSessionTransmitAudioBuilder({
|
|
18594
|
+
isMain: true,
|
|
18595
|
+
multistreamEnabled: isMultistream
|
|
18491
18596
|
});
|
|
18492
|
-
|
|
18493
|
-
|
|
18494
|
-
|
|
18495
|
-
statsResults: this.statsResults,
|
|
18496
|
-
lastMqaDataSent: this.lastMqaDataSent,
|
|
18497
|
-
baseMediaType: 'audio-share-recv',
|
|
18498
|
-
isMultistream: this.isMultistream
|
|
18597
|
+
this.mqeIntervalSessionTransmitAudioSlidesBuilder = new MqeIntervalSessionTransmitAudioBuilder({
|
|
18598
|
+
isMain: false,
|
|
18599
|
+
multistreamEnabled: isMultistream
|
|
18499
18600
|
});
|
|
18500
|
-
|
|
18501
|
-
|
|
18502
|
-
|
|
18503
|
-
statsResults: this.statsResults,
|
|
18504
|
-
lastMqaDataSent: this.lastMqaDataSent,
|
|
18505
|
-
baseMediaType: 'video-send',
|
|
18506
|
-
isMultistream: this.isMultistream
|
|
18601
|
+
this.mqeIntervalSessionReceiveVideoMainBuilder = new MqeIntervalSessionReceiveVideoBuilder({
|
|
18602
|
+
isMain: true,
|
|
18603
|
+
multistreamEnabled: isMultistream
|
|
18507
18604
|
});
|
|
18508
|
-
|
|
18509
|
-
|
|
18510
|
-
|
|
18511
|
-
statsResults: this.statsResults,
|
|
18512
|
-
lastMqaDataSent: this.lastMqaDataSent,
|
|
18513
|
-
baseMediaType: 'video-share-send',
|
|
18514
|
-
isMultistream: this.isMultistream
|
|
18605
|
+
this.mqeIntervalSessionReceiveVideoSlidesBuilder = new MqeIntervalSessionReceiveVideoBuilder({
|
|
18606
|
+
isMain: false,
|
|
18607
|
+
multistreamEnabled: isMultistream
|
|
18515
18608
|
});
|
|
18516
|
-
|
|
18517
|
-
|
|
18518
|
-
|
|
18519
|
-
statsResults: this.statsResults,
|
|
18520
|
-
lastMqaDataSent: this.lastMqaDataSent,
|
|
18521
|
-
baseMediaType: 'video-recv',
|
|
18522
|
-
isMultistream: this.isMultistream
|
|
18609
|
+
this.mqeIntervalSessionTransmitVideoMainBuilder = new MqeIntervalSessionTransmitVideoBuilder({
|
|
18610
|
+
isMain: true,
|
|
18611
|
+
multistreamEnabled: isMultistream
|
|
18523
18612
|
});
|
|
18524
|
-
|
|
18525
|
-
|
|
18526
|
-
|
|
18527
|
-
statsResults: this.statsResults,
|
|
18528
|
-
lastMqaDataSent: this.lastMqaDataSent,
|
|
18529
|
-
baseMediaType: 'video-share-recv',
|
|
18530
|
-
isMultistream: this.isMultistream
|
|
18613
|
+
this.mqeIntervalSessionTransmitVideoSlidesBuilder = new MqeIntervalSessionTransmitVideoBuilder({
|
|
18614
|
+
isMain: false,
|
|
18615
|
+
multistreamEnabled: isMultistream
|
|
18531
18616
|
});
|
|
18532
|
-
|
|
18533
|
-
|
|
18534
|
-
|
|
18535
|
-
|
|
18536
|
-
|
|
18537
|
-
|
|
18538
|
-
|
|
18539
|
-
|
|
18540
|
-
|
|
18541
|
-
|
|
18542
|
-
if (
|
|
18543
|
-
|
|
18544
|
-
statsResults: this.statsResults,
|
|
18545
|
-
mediaType,
|
|
18546
|
-
direction: MediaDirection.SEND
|
|
18547
|
-
})) {
|
|
18548
|
-
newMqa.audioTransmit[0].streams.push(audioSenderStream);
|
|
18549
|
-
}
|
|
18550
|
-
this.lastMqaDataSent[mediaType].send = structuredClone(this.statsResults[mediaType].send);
|
|
18551
|
-
} else if (mediaType.startsWith('audio-share-send')) {
|
|
18552
|
-
var _audioSenderStream = structuredClone(emptyAudioTransmitStream);
|
|
18553
|
-
getAudioSenderStreamMqa({
|
|
18554
|
-
audioSenderStream: _audioSenderStream,
|
|
18555
|
-
statsResults: this.statsResults,
|
|
18556
|
-
lastMqaDataSent: this.lastMqaDataSent,
|
|
18557
|
-
mediaType
|
|
18558
|
-
});
|
|
18559
|
-
if (isStreamRequested({
|
|
18560
|
-
isMultistream: this.isMultistream,
|
|
18561
|
-
statsResults: this.statsResults,
|
|
18562
|
-
mediaType,
|
|
18563
|
-
direction: MediaDirection.SEND
|
|
18564
|
-
})) {
|
|
18565
|
-
newMqa.audioTransmit[1].streams.push(_audioSenderStream);
|
|
18566
|
-
}
|
|
18567
|
-
this.lastMqaDataSent[mediaType].send = structuredClone(this.statsResults[mediaType].send);
|
|
18568
|
-
} else if (mediaType.startsWith('audio-recv')) {
|
|
18569
|
-
var audioReceiverStream = structuredClone(emptyAudioReceiveStream);
|
|
18570
|
-
getAudioReceiverStreamMqa({
|
|
18571
|
-
audioReceiverStream,
|
|
18572
|
-
statsResults: this.statsResults,
|
|
18573
|
-
lastMqaDataSent: this.lastMqaDataSent,
|
|
18574
|
-
mediaType
|
|
18575
|
-
});
|
|
18576
|
-
if (isStreamRequested({
|
|
18577
|
-
isMultistream: this.isMultistream,
|
|
18578
|
-
statsResults: this.statsResults,
|
|
18579
|
-
mediaType,
|
|
18580
|
-
direction: MediaDirection.RECEIVE
|
|
18581
|
-
})) {
|
|
18582
|
-
newMqa.audioReceive[0].streams.push(audioReceiverStream);
|
|
18583
|
-
}
|
|
18584
|
-
this.lastMqaDataSent[mediaType].recv = structuredClone(this.statsResults[mediaType].recv);
|
|
18585
|
-
} else if (mediaType.startsWith('audio-share-recv')) {
|
|
18586
|
-
var _audioReceiverStream = structuredClone(emptyAudioReceiveStream);
|
|
18587
|
-
getAudioReceiverStreamMqa({
|
|
18588
|
-
audioReceiverStream: _audioReceiverStream,
|
|
18589
|
-
statsResults: this.statsResults,
|
|
18590
|
-
lastMqaDataSent: this.lastMqaDataSent,
|
|
18591
|
-
mediaType
|
|
18592
|
-
});
|
|
18593
|
-
if (isStreamRequested({
|
|
18594
|
-
isMultistream: this.isMultistream,
|
|
18595
|
-
statsResults: this.statsResults,
|
|
18596
|
-
mediaType,
|
|
18597
|
-
direction: MediaDirection.RECEIVE
|
|
18598
|
-
})) {
|
|
18599
|
-
newMqa.audioReceive[1].streams.push(_audioReceiverStream);
|
|
18600
|
-
}
|
|
18601
|
-
this.lastMqaDataSent[mediaType].recv = structuredClone(this.statsResults[mediaType].recv);
|
|
18602
|
-
} else if (mediaType.startsWith('video-send-layer')) {
|
|
18603
|
-
var videoSenderStream = structuredClone(emptyVideoTransmitStream);
|
|
18604
|
-
getVideoSenderStreamMqa({
|
|
18605
|
-
videoSenderStream,
|
|
18606
|
-
statsResults: this.statsResults,
|
|
18607
|
-
lastMqaDataSent: this.lastMqaDataSent,
|
|
18608
|
-
mediaType
|
|
18609
|
-
});
|
|
18610
|
-
if (isStreamRequested({
|
|
18611
|
-
isMultistream: this.isMultistream,
|
|
18612
|
-
statsResults: this.statsResults,
|
|
18613
|
-
mediaType,
|
|
18614
|
-
direction: MediaDirection.SEND
|
|
18615
|
-
})) {
|
|
18616
|
-
newMqa.videoTransmit[0].streams.push(videoSenderStream);
|
|
18617
|
-
}
|
|
18618
|
-
this.lastMqaDataSent[mediaType].send = structuredClone(this.statsResults[mediaType].send);
|
|
18619
|
-
} else if (mediaType.startsWith('video-share-send')) {
|
|
18620
|
-
var _videoSenderStream = structuredClone(emptyVideoTransmitStream);
|
|
18621
|
-
getVideoSenderStreamMqa({
|
|
18622
|
-
videoSenderStream: _videoSenderStream,
|
|
18623
|
-
statsResults: this.statsResults,
|
|
18624
|
-
lastMqaDataSent: this.lastMqaDataSent,
|
|
18625
|
-
mediaType
|
|
18626
|
-
});
|
|
18627
|
-
if (isStreamRequested({
|
|
18628
|
-
isMultistream: this.isMultistream,
|
|
18629
|
-
statsResults: this.statsResults,
|
|
18630
|
-
mediaType,
|
|
18631
|
-
direction: MediaDirection.SEND
|
|
18632
|
-
})) {
|
|
18633
|
-
newMqa.videoTransmit[1].streams.push(_videoSenderStream);
|
|
18634
|
-
}
|
|
18635
|
-
this.lastMqaDataSent[mediaType].send = structuredClone(this.statsResults[mediaType].send);
|
|
18636
|
-
} else if (mediaType.startsWith('video-recv')) {
|
|
18637
|
-
var videoReceiverStream = structuredClone(emptyVideoReceiveStream);
|
|
18638
|
-
getVideoReceiverStreamMqa({
|
|
18639
|
-
videoReceiverStream,
|
|
18640
|
-
statsResults: this.statsResults,
|
|
18641
|
-
lastMqaDataSent: this.lastMqaDataSent,
|
|
18642
|
-
mediaType
|
|
18643
|
-
});
|
|
18644
|
-
if (isStreamRequested({
|
|
18645
|
-
isMultistream: this.isMultistream,
|
|
18646
|
-
statsResults: this.statsResults,
|
|
18647
|
-
mediaType,
|
|
18648
|
-
direction: MediaDirection.RECEIVE
|
|
18649
|
-
})) {
|
|
18650
|
-
newMqa.videoReceive[0].streams.push(videoReceiverStream);
|
|
18617
|
+
}
|
|
18618
|
+
get builders() {
|
|
18619
|
+
return [this.mqeIntervalSessionReceiveAudioMainBuilder, this.mqeIntervalSessionReceiveAudioSlidesBuilder, this.mqeIntervalSessionTransmitAudioMainBuilder, this.mqeIntervalSessionTransmitAudioSlidesBuilder, this.mqeIntervalSessionReceiveVideoMainBuilder, this.mqeIntervalSessionReceiveVideoSlidesBuilder, this.mqeIntervalSessionTransmitVideoMainBuilder, this.mqeIntervalSessionTransmitVideoSlidesBuilder];
|
|
18620
|
+
}
|
|
18621
|
+
getLocalIpAddress() {
|
|
18622
|
+
for (var builder of this.builders) {
|
|
18623
|
+
var selectedLocalCandidateId = getSelectedCandidateIdFromStats(builder.currentIntervalStats, 'local');
|
|
18624
|
+
if (selectedLocalCandidateId) {
|
|
18625
|
+
var candidateType = getPropertyFromStatsById(builder.currentIntervalStats, selectedLocalCandidateId, 'candidateType');
|
|
18626
|
+
var address = getPropertyFromStatsById(builder.currentIntervalStats, selectedLocalCandidateId, 'address');
|
|
18627
|
+
if (candidateType === 'host') {
|
|
18628
|
+
return address;
|
|
18651
18629
|
}
|
|
18652
|
-
|
|
18653
|
-
|
|
18654
|
-
|
|
18655
|
-
|
|
18656
|
-
|
|
18657
|
-
|
|
18658
|
-
|
|
18659
|
-
mediaType
|
|
18660
|
-
});
|
|
18661
|
-
if (isStreamRequested({
|
|
18662
|
-
isMultistream: this.isMultistream,
|
|
18663
|
-
statsResults: this.statsResults,
|
|
18664
|
-
mediaType,
|
|
18665
|
-
direction: MediaDirection.RECEIVE
|
|
18666
|
-
})) {
|
|
18667
|
-
newMqa.videoReceive[1].streams.push(_videoReceiverStream);
|
|
18630
|
+
if (candidateType === 'prflx') {
|
|
18631
|
+
var relayProtocol = getPropertyFromStatsById(builder.currentIntervalStats, selectedLocalCandidateId, 'relayProtocol');
|
|
18632
|
+
if (!relayProtocol) {
|
|
18633
|
+
var relatedAddress = getPropertyFromStatsById(builder.currentIntervalStats, selectedLocalCandidateId, 'relatedAddress');
|
|
18634
|
+
return relatedAddress;
|
|
18635
|
+
}
|
|
18636
|
+
return address;
|
|
18668
18637
|
}
|
|
18669
|
-
this.lastMqaDataSent[mediaType].recv = structuredClone(this.statsResults[mediaType].recv);
|
|
18670
18638
|
}
|
|
18671
|
-
});
|
|
18672
|
-
newMqa.intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress;
|
|
18673
|
-
newMqa.intervalMetadata.cpuInfo.numberOfCores = CpuInfo.getNumLogicalCores() || 1;
|
|
18674
|
-
newMqa.intervalMetadata.peripherals.push({
|
|
18675
|
-
information: _UNKNOWN_,
|
|
18676
|
-
name: MediaDevices.SPEAKER
|
|
18677
|
-
});
|
|
18678
|
-
if (this.statsResults['audio-send']) {
|
|
18679
|
-
newMqa.intervalMetadata.peripherals.push({
|
|
18680
|
-
information: this.statsResults['audio-send'].trackLabel || _UNKNOWN_,
|
|
18681
|
-
name: MediaDevices.MICROPHONE
|
|
18682
|
-
});
|
|
18683
18639
|
}
|
|
18684
|
-
|
|
18685
|
-
|
|
18686
|
-
|
|
18687
|
-
|
|
18688
|
-
|
|
18689
|
-
|
|
18640
|
+
return undefined;
|
|
18641
|
+
}
|
|
18642
|
+
getNetworkType() {
|
|
18643
|
+
for (var builder of this.builders) {
|
|
18644
|
+
var selectedLocalCandidateId = getSelectedCandidateIdFromStats(builder.currentIntervalStats, 'local');
|
|
18645
|
+
if (selectedLocalCandidateId) {
|
|
18646
|
+
var networkType = getPropertyFromStatsById(builder.currentIntervalStats, selectedLocalCandidateId, 'networkType');
|
|
18647
|
+
return networkType;
|
|
18648
|
+
}
|
|
18690
18649
|
}
|
|
18691
|
-
|
|
18692
|
-
newMqa.intervalMetadata.screenWidth = window.screen.width;
|
|
18693
|
-
newMqa.intervalMetadata.screenHeight = window.screen.height;
|
|
18694
|
-
newMqa.intervalMetadata.screenResolution = Math.round(window.screen.width * window.screen.height / 256);
|
|
18695
|
-
newMqa.intervalMetadata.appWindowWidth = window.innerWidth;
|
|
18696
|
-
newMqa.intervalMetadata.appWindowHeight = window.innerHeight;
|
|
18697
|
-
newMqa.intervalMetadata.appWindowSize = Math.round(window.innerWidth * window.innerHeight / 256);
|
|
18698
|
-
this.mqaSentCount += 1;
|
|
18699
|
-
newMqa.intervalNumber = this.mqaSentCount;
|
|
18700
|
-
this.resetStatsResults();
|
|
18701
|
-
this.emit(exports.StatsAnalyzerEventNames.MEDIA_QUALITY, {
|
|
18702
|
-
data: newMqa
|
|
18703
|
-
});
|
|
18650
|
+
return undefined;
|
|
18704
18651
|
}
|
|
18705
|
-
|
|
18706
|
-
|
|
18652
|
+
get shareVideoEncoderImplementation() {
|
|
18653
|
+
var encoderImplementation = getPropertyFromStatsByType(this.mqeIntervalSessionTransmitVideoSlidesBuilder.currentIntervalStats, 'outbound-rtp', 'encoderImplementation');
|
|
18654
|
+
return encoderImplementation;
|
|
18707
18655
|
}
|
|
18708
|
-
|
|
18709
|
-
|
|
18710
|
-
|
|
18711
|
-
|
|
18712
|
-
|
|
18713
|
-
|
|
18714
|
-
this.getStatsAndParse();
|
|
18715
|
-
}, this.config.analyzerInterval);
|
|
18716
|
-
this.sendMqaData();
|
|
18717
|
-
this.mqaInterval = setInterval(() => {
|
|
18718
|
-
this.sendMqaData();
|
|
18719
|
-
}, MQA_INTERVAL);
|
|
18720
|
-
});
|
|
18656
|
+
get peerReflexiveIp() {
|
|
18657
|
+
for (var builder of this.builders) {
|
|
18658
|
+
var peerReflexiveCandidateStats = Array.from(builder.currentIntervalStats.values()).find(stats => stats.type === 'local-candidate' && stats.candidateType === 'prflx');
|
|
18659
|
+
if (peerReflexiveCandidateStats) {
|
|
18660
|
+
return peerReflexiveCandidateStats.address;
|
|
18661
|
+
}
|
|
18721
18662
|
}
|
|
18722
|
-
return
|
|
18663
|
+
return undefined;
|
|
18723
18664
|
}
|
|
18724
|
-
|
|
18725
|
-
var
|
|
18726
|
-
|
|
18727
|
-
|
|
18728
|
-
|
|
18729
|
-
|
|
18730
|
-
|
|
18731
|
-
clearInterval(this.mqaInterval);
|
|
18732
|
-
this.mqaInterval = undefined;
|
|
18733
|
-
}
|
|
18734
|
-
this.statsStarted = false;
|
|
18735
|
-
if (sendOneLastMqa) {
|
|
18736
|
-
return this.getStatsAndParse().then(() => {
|
|
18737
|
-
this.sendMqaData();
|
|
18738
|
-
this.mediaConnection = null;
|
|
18739
|
-
});
|
|
18665
|
+
get remoteMediaIp() {
|
|
18666
|
+
for (var builder of this.builders) {
|
|
18667
|
+
var selectedRemoteCandidateId = getSelectedCandidateIdFromStats(builder.currentIntervalStats, 'remote');
|
|
18668
|
+
if (selectedRemoteCandidateId) {
|
|
18669
|
+
var remoteMediaIp = getPropertyFromStatsById(builder.currentIntervalStats, selectedRemoteCandidateId, 'address');
|
|
18670
|
+
return remoteMediaIp;
|
|
18671
|
+
}
|
|
18740
18672
|
}
|
|
18741
|
-
return
|
|
18673
|
+
return undefined;
|
|
18742
18674
|
}
|
|
18743
|
-
|
|
18744
|
-
|
|
18745
|
-
|
|
18746
|
-
|
|
18747
|
-
|
|
18748
|
-
|
|
18749
|
-
|
|
18750
|
-
|
|
18751
|
-
|
|
18752
|
-
|
|
18753
|
-
|
|
18754
|
-
|
|
18755
|
-
|
|
18756
|
-
|
|
18757
|
-
|
|
18758
|
-
|
|
18759
|
-
|
|
18760
|
-
|
|
18761
|
-
|
|
18762
|
-
|
|
18763
|
-
|
|
18764
|
-
|
|
18765
|
-
|
|
18766
|
-
|
|
18767
|
-
|
|
18768
|
-
|
|
18769
|
-
|
|
18770
|
-
|
|
18771
|
-
|
|
18772
|
-
|
|
18773
|
-
|
|
18774
|
-
|
|
18775
|
-
|
|
18776
|
-
|
|
18777
|
-
|
|
18778
|
-
|
|
18779
|
-
}
|
|
18675
|
+
updateMediaStatus(status) {
|
|
18676
|
+
var _this$meetingMediaSta, _this$meetingMediaSta2;
|
|
18677
|
+
this.meetingMediaStatus = {
|
|
18678
|
+
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),
|
|
18679
|
+
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)
|
|
18680
|
+
};
|
|
18681
|
+
getLogger().info("StatsAnalyzer#updateMediaStatus --> Meeting media status: ".concat(JSON.stringify(this.meetingMediaStatus)));
|
|
18682
|
+
}
|
|
18683
|
+
sendMqeData() {
|
|
18684
|
+
var _anonymizeIP, _this$peerReflexiveIp, _this$remoteMediaIp, _getMediaSourceTrackL, _getMediaSourceTrackL2;
|
|
18685
|
+
getLogger().debug('StatsAnalyzer#sendMqeData --> Building MQE...');
|
|
18686
|
+
var mqeInterval = structuredClone(initialMqeInterval);
|
|
18687
|
+
mqeInterval.intervalMetadata = {
|
|
18688
|
+
maskedPeerReflexiveIP: (_anonymizeIP = ipAnonymize((_this$peerReflexiveIp = this.peerReflexiveIp) !== null && _this$peerReflexiveIp !== void 0 ? _this$peerReflexiveIp : DEFAULT_IP, 28, 96)) !== null && _anonymizeIP !== void 0 ? _anonymizeIP : DEFAULT_IP,
|
|
18689
|
+
remoteMediaIP: (_this$remoteMediaIp = this.remoteMediaIp) !== null && _this$remoteMediaIp !== void 0 ? _this$remoteMediaIp : DEFAULT_IP,
|
|
18690
|
+
peripherals: [{
|
|
18691
|
+
name: 'speaker',
|
|
18692
|
+
information: UNKNOWN
|
|
18693
|
+
}, {
|
|
18694
|
+
name: 'microphone',
|
|
18695
|
+
information: (_getMediaSourceTrackL = getMediaSourceTrackLabelFromStats(this.mqeIntervalSessionTransmitAudioMainBuilder.currentIntervalStats)) !== null && _getMediaSourceTrackL !== void 0 ? _getMediaSourceTrackL : UNKNOWN
|
|
18696
|
+
}, {
|
|
18697
|
+
name: 'camera',
|
|
18698
|
+
information: (_getMediaSourceTrackL2 = getMediaSourceTrackLabelFromStats(this.mqeIntervalSessionTransmitVideoMainBuilder.currentIntervalStats)) !== null && _getMediaSourceTrackL2 !== void 0 ? _getMediaSourceTrackL2 : UNKNOWN
|
|
18699
|
+
}],
|
|
18700
|
+
cpuInfo: {
|
|
18701
|
+
description: 'NA',
|
|
18702
|
+
numberOfCores: CpuInfo.getNumLogicalCores() || 1,
|
|
18703
|
+
architecture: UNKNOWN
|
|
18704
|
+
},
|
|
18705
|
+
screenResolution: window.screen.width * window.screen.height / 256,
|
|
18706
|
+
screenWidth: window.screen.width,
|
|
18707
|
+
screenHeight: window.screen.height,
|
|
18708
|
+
appWindowSize: window.innerWidth * window.innerHeight / 256,
|
|
18709
|
+
appWindowWidth: window.innerWidth,
|
|
18710
|
+
appWindowHeight: window.innerHeight
|
|
18711
|
+
};
|
|
18712
|
+
mqeInterval.audioReceive.push(this.mqeIntervalSessionReceiveAudioMainBuilder.buildMqe());
|
|
18713
|
+
mqeInterval.audioReceive.push(this.mqeIntervalSessionReceiveAudioSlidesBuilder.buildMqe());
|
|
18714
|
+
mqeInterval.audioTransmit.push(this.mqeIntervalSessionTransmitAudioMainBuilder.buildMqe());
|
|
18715
|
+
mqeInterval.audioTransmit.push(this.mqeIntervalSessionTransmitAudioSlidesBuilder.buildMqe());
|
|
18716
|
+
mqeInterval.videoReceive.push(this.mqeIntervalSessionReceiveVideoMainBuilder.buildMqe());
|
|
18717
|
+
mqeInterval.videoReceive.push(this.mqeIntervalSessionReceiveVideoSlidesBuilder.buildMqe());
|
|
18718
|
+
mqeInterval.videoTransmit.push(this.mqeIntervalSessionTransmitVideoMainBuilder.buildMqe());
|
|
18719
|
+
mqeInterval.videoTransmit.push(this.mqeIntervalSessionTransmitVideoSlidesBuilder.buildMqe());
|
|
18720
|
+
this.builders.forEach(builder => builder.resetForNextInterval());
|
|
18721
|
+
mqeInterval.intervalNumber = this.mqeSentCount;
|
|
18722
|
+
this.mqeSentCount += 1;
|
|
18723
|
+
getLogger().debug('StatsAnalyzer#sendMqeData --> Sending MQE...');
|
|
18724
|
+
this.emit(exports.StatsAnalyzerEventNames.MEDIA_QUALITY, {
|
|
18725
|
+
data: mqeInterval
|
|
18726
|
+
});
|
|
18780
18727
|
}
|
|
18781
|
-
|
|
18782
|
-
var _this
|
|
18783
|
-
|
|
18784
|
-
|
|
18785
|
-
|
|
18786
|
-
|
|
18787
|
-
if (report.type === 'candidate-pair' && report.state === 'succeeded') {
|
|
18788
|
-
this.successfulCandidatePair = report;
|
|
18728
|
+
startAnalyzer(mediaConnection) {
|
|
18729
|
+
var _this = this;
|
|
18730
|
+
return _asyncToGenerator(function* () {
|
|
18731
|
+
if (_this.statsStarted) {
|
|
18732
|
+
getLogger().info('StatsAnalyzer#startAnalyzer --> StatsAnalyzer already started.');
|
|
18733
|
+
return;
|
|
18789
18734
|
}
|
|
18790
|
-
|
|
18791
|
-
|
|
18792
|
-
|
|
18793
|
-
|
|
18794
|
-
|
|
18795
|
-
|
|
18796
|
-
|
|
18797
|
-
|
|
18798
|
-
|
|
18799
|
-
|
|
18800
|
-
|
|
18801
|
-
|
|
18802
|
-
|
|
18803
|
-
|
|
18804
|
-
|
|
18805
|
-
|
|
18806
|
-
|
|
18807
|
-
|
|
18735
|
+
_this.statsStarted = true;
|
|
18736
|
+
_this.mediaConnection = mediaConnection;
|
|
18737
|
+
yield _this.getStatsAndUpdate();
|
|
18738
|
+
_this.sendMqeData();
|
|
18739
|
+
_this.statsInterval = setInterval(() => {
|
|
18740
|
+
_this.getStatsAndUpdate();
|
|
18741
|
+
}, _this.config.analyzerInterval);
|
|
18742
|
+
_this.mqeInterval = setInterval(() => {
|
|
18743
|
+
_this.sendMqeData();
|
|
18744
|
+
}, MQE_INTERVAL);
|
|
18745
|
+
})();
|
|
18746
|
+
}
|
|
18747
|
+
stopAnalyzer() {
|
|
18748
|
+
var _this2 = this;
|
|
18749
|
+
return _asyncToGenerator(function* () {
|
|
18750
|
+
var sendOneLastMqe = _this2.mqeInterval && _this2.statsInterval;
|
|
18751
|
+
if (_this2.statsInterval) {
|
|
18752
|
+
clearInterval(_this2.statsInterval);
|
|
18753
|
+
_this2.statsInterval = undefined;
|
|
18754
|
+
}
|
|
18755
|
+
if (_this2.mqeInterval) {
|
|
18756
|
+
clearInterval(_this2.mqeInterval);
|
|
18757
|
+
_this2.mqeInterval = undefined;
|
|
18758
|
+
}
|
|
18759
|
+
_this2.statsStarted = false;
|
|
18760
|
+
if (sendOneLastMqe) {
|
|
18761
|
+
getLogger().info('StatsAnalyzer#stopAnalyzer --> Sending one last MQE...');
|
|
18762
|
+
yield _this2.getStatsAndUpdate();
|
|
18763
|
+
_this2.sendMqeData();
|
|
18764
|
+
_this2.mediaConnection = null;
|
|
18765
|
+
_this2.builders.forEach(builder => builder.reset());
|
|
18808
18766
|
}
|
|
18809
|
-
});
|
|
18810
|
-
if (this.statsResults[type]) {
|
|
18811
|
-
var _this$successfulCandi3, _this$statsResults;
|
|
18812
|
-
this.statsResults[type].direction = statsItem.currentDirection;
|
|
18813
|
-
this.statsResults[type].trackLabel = statsItem.localTrackLabel;
|
|
18814
|
-
this.statsResults[type].csi = statsItem.csi;
|
|
18815
|
-
this.extractAndSetLocalIpAddressInfoForDiagnostics((_this$successfulCandi3 = this.successfulCandidatePair) === null || _this$successfulCandi3 === void 0 ? void 0 : _this$successfulCandi3.localCandidateId, (_this$statsResults = this.statsResults) === null || _this$statsResults === void 0 ? void 0 : _this$statsResults.candidates);
|
|
18816
|
-
this.successfulCandidatePair = {};
|
|
18817
|
-
}
|
|
18767
|
+
})();
|
|
18818
18768
|
}
|
|
18819
|
-
|
|
18820
|
-
|
|
18821
|
-
|
|
18822
|
-
|
|
18823
|
-
|
|
18824
|
-
|
|
18825
|
-
|
|
18826
|
-
|
|
18827
|
-
|
|
18828
|
-
|
|
18829
|
-
|
|
18830
|
-
|
|
18831
|
-
|
|
18832
|
-
|
|
18833
|
-
|
|
18834
|
-
|
|
18835
|
-
|
|
18836
|
-
|
|
18837
|
-
|
|
18838
|
-
|
|
18839
|
-
|
|
18840
|
-
|
|
18841
|
-
|
|
18842
|
-
|
|
18843
|
-
|
|
18844
|
-
|
|
18845
|
-
|
|
18846
|
-
|
|
18847
|
-
|
|
18848
|
-
|
|
18849
|
-
|
|
18850
|
-
|
|
18851
|
-
|
|
18852
|
-
|
|
18769
|
+
getStatsAndUpdate() {
|
|
18770
|
+
var _this3 = this;
|
|
18771
|
+
return _asyncToGenerator(function* () {
|
|
18772
|
+
if (!_this3.mediaConnection) {
|
|
18773
|
+
return;
|
|
18774
|
+
}
|
|
18775
|
+
if (_this3.mediaConnection && _this3.mediaConnection.getConnectionState() === exports.ConnectionState.Failed) {
|
|
18776
|
+
getLogger().info('StatsAnalyzer#getStatsAndUpdate --> Media connection is in failed state.');
|
|
18777
|
+
return;
|
|
18778
|
+
}
|
|
18779
|
+
getLogger().debug('StatsAnalyzer#getStatsAndUpdate --> Collecting stats...');
|
|
18780
|
+
var transceiverStats = yield _this3.mediaConnection.getTransceiverStats();
|
|
18781
|
+
_this3.mqeIntervalSessionReceiveAudioMainBuilder.updateCurrentIntervalStats(convertToStatsMap(transceiverStats.audio.receivers));
|
|
18782
|
+
_this3.mqeIntervalSessionReceiveAudioSlidesBuilder.updateCurrentIntervalStats(convertToStatsMap(transceiverStats.screenShareAudio.receivers));
|
|
18783
|
+
_this3.mqeIntervalSessionTransmitAudioMainBuilder.updateCurrentIntervalStats(convertToStatsMap(transceiverStats.audio.senders));
|
|
18784
|
+
_this3.mqeIntervalSessionTransmitAudioSlidesBuilder.updateCurrentIntervalStats(convertToStatsMap(transceiverStats.screenShareAudio.senders));
|
|
18785
|
+
_this3.mqeIntervalSessionReceiveVideoMainBuilder.updateCurrentIntervalStats(convertToStatsMap(transceiverStats.video.receivers));
|
|
18786
|
+
_this3.mqeIntervalSessionReceiveVideoSlidesBuilder.updateCurrentIntervalStats(convertToStatsMap(transceiverStats.screenShareVideo.receivers));
|
|
18787
|
+
_this3.mqeIntervalSessionTransmitVideoMainBuilder.updateCurrentIntervalStats(convertToStatsMap(transceiverStats.video.senders));
|
|
18788
|
+
_this3.mqeIntervalSessionTransmitVideoSlidesBuilder.updateCurrentIntervalStats(convertToStatsMap(transceiverStats.screenShareVideo.senders));
|
|
18789
|
+
_this3.monitorStats(transceiverStats);
|
|
18790
|
+
getLogger().debug('StatsAnalyzer#getStatsAndUpdate --> Finished collecting stats.');
|
|
18791
|
+
})();
|
|
18792
|
+
}
|
|
18793
|
+
monitorStats(transceiverStats) {
|
|
18794
|
+
var _this$meetingMediaSta3, _this$meetingMediaSta4, _this$meetingMediaSta5, _this$meetingMediaSta6, _this$meetingMediaSta7, _this$previousTransce, _this$previousTransce2, _this$previousTransce3, _this$previousTransce4, _this$previousTransce5, _this$previousTransce6, _this$previousTransce7, _this$previousTransce8, _this$previousTransce9, _this$previousTransce10, _this$previousTransce11, _this$previousTransce12;
|
|
18795
|
+
var emitNetworkQualityEvents = (mediaType, intervalStats) => {
|
|
18796
|
+
var roundTripTimeArray = getPropertyFromStatsByTypeInArray(intervalStats, 'remote-inbound-rtp', 'roundTripTime');
|
|
18797
|
+
var jitterArray = getPropertyFromStatsByTypeInArray(intervalStats, 'remote-inbound-rtp', 'jitter');
|
|
18798
|
+
var fractionLostArray = getPropertyFromStatsByTypeInArray(intervalStats, 'remote-inbound-rtp', 'fractionLost');
|
|
18799
|
+
this.networkQualityMonitor.determineUplinkNetworkQuality({
|
|
18800
|
+
mediaType,
|
|
18801
|
+
roundTripTime: mean(roundTripTimeArray),
|
|
18802
|
+
jitter: mean(jitterArray),
|
|
18803
|
+
fractionLost: mean(fractionLostArray)
|
|
18804
|
+
});
|
|
18805
|
+
};
|
|
18806
|
+
if ((_this$meetingMediaSta3 = this.meetingMediaStatus) !== null && _this$meetingMediaSta3 !== void 0 && _this$meetingMediaSta3.expected.sendAudio) {
|
|
18807
|
+
var current = convertToStatsMap(transceiverStats.audio.senders);
|
|
18808
|
+
if (this.previousTransceiverStats) {
|
|
18809
|
+
var previous = convertToStatsMap(this.previousTransceiverStats.audio.senders);
|
|
18810
|
+
var currentPacketsSent = getSumFromStatsByType(current, 'outbound-rtp', 'packetsSent');
|
|
18811
|
+
var previousPacketsSent = getSumFromStatsByType(previous, 'outbound-rtp', 'packetsSent');
|
|
18812
|
+
if (currentPacketsSent === previousPacketsSent) {
|
|
18813
|
+
getLogger().info("StatsAnalyzer#monitorStats --> No audio packets sent, last packets sent count: ".concat(currentPacketsSent, "."));
|
|
18814
|
+
}
|
|
18815
|
+
var totalAudioEnergyExists = getPropertyFromStatsByType(current, 'media-source', 'totalAudioEnergy') !== undefined;
|
|
18816
|
+
if (totalAudioEnergyExists) {
|
|
18817
|
+
var currentTotalAudioEnergy = getSumFromStatsByType(current, 'media-source', 'totalAudioEnergy');
|
|
18818
|
+
var previousTotalAudioEnergy = getSumFromStatsByType(previous, 'media-source', 'totalAudioEnergy');
|
|
18819
|
+
if (currentTotalAudioEnergy === previousTotalAudioEnergy) {
|
|
18820
|
+
getLogger().info("StatsAnalyzer#monitorStats --> No audio energy, last total audio energy: ".concat(currentTotalAudioEnergy, "."));
|
|
18853
18821
|
}
|
|
18854
|
-
|
|
18855
|
-
|
|
18822
|
+
}
|
|
18823
|
+
var audioLevelExists = getPropertyFromStatsByType(current, 'media-source', 'audioLevel') !== undefined;
|
|
18824
|
+
if (audioLevelExists) {
|
|
18825
|
+
var currentAudioLevel = getSumFromStatsByType(current, 'media-source', 'audioLevel');
|
|
18826
|
+
if (currentAudioLevel === 0) {
|
|
18827
|
+
getLogger().info("StatsAnalyzer#monitorStats --> Audio level is 0.");
|
|
18856
18828
|
}
|
|
18857
18829
|
}
|
|
18858
|
-
|
|
18859
|
-
|
|
18860
|
-
|
|
18861
|
-
|
|
18862
|
-
|
|
18863
|
-
|
|
18864
|
-
|
|
18865
|
-
|
|
18866
|
-
|
|
18867
|
-
|
|
18868
|
-
|
|
18869
|
-
|
|
18870
|
-
|
|
18871
|
-
|
|
18872
|
-
|
|
18873
|
-
|
|
18874
|
-
|
|
18875
|
-
|
|
18830
|
+
}
|
|
18831
|
+
emitNetworkQualityEvents('audio', current);
|
|
18832
|
+
}
|
|
18833
|
+
if ((_this$meetingMediaSta4 = this.meetingMediaStatus) !== null && _this$meetingMediaSta4 !== void 0 && _this$meetingMediaSta4.expected.sendVideo) {
|
|
18834
|
+
var _current = convertToStatsMap(transceiverStats.video.senders);
|
|
18835
|
+
if (this.previousTransceiverStats) {
|
|
18836
|
+
var _previous = convertToStatsMap(this.previousTransceiverStats.video.senders);
|
|
18837
|
+
var _currentPacketsSent = getSumFromStatsByType(_current, 'outbound-rtp', 'packetsSent');
|
|
18838
|
+
var _previousPacketsSent = getSumFromStatsByType(_previous, 'outbound-rtp', 'packetsSent');
|
|
18839
|
+
if (_currentPacketsSent === _previousPacketsSent) {
|
|
18840
|
+
getLogger().info("StatsAnalyzer#monitorStats --> No video packets sent, last packets sent count: ".concat(_currentPacketsSent, "."));
|
|
18841
|
+
}
|
|
18842
|
+
var currentFramesEncoded = getSumFromStatsByType(_current, 'outbound-rtp', 'framesEncoded');
|
|
18843
|
+
var previousFramesEncoded = getSumFromStatsByType(_previous, 'outbound-rtp', 'framesEncoded');
|
|
18844
|
+
if (currentFramesEncoded === previousFramesEncoded) {
|
|
18845
|
+
getLogger().info("StatsAnalyzer#monitorStats --> No video frames encoded, last frames encoded count: ".concat(currentFramesEncoded, "."));
|
|
18846
|
+
}
|
|
18847
|
+
var currentFramesSent = getSumFromStatsByType(_current, 'outbound-rtp', 'framesSent');
|
|
18848
|
+
var previousFramesSent = getSumFromStatsByType(_previous, 'outbound-rtp', 'framesSent');
|
|
18849
|
+
if (currentFramesSent === previousFramesSent) {
|
|
18850
|
+
getLogger().info("StatsAnalyzer#monitorStats --> No video frames sent, last frames sent count: ".concat(currentFramesSent, "."));
|
|
18851
|
+
}
|
|
18852
|
+
}
|
|
18853
|
+
emitNetworkQualityEvents('video', _current);
|
|
18854
|
+
}
|
|
18855
|
+
if ((_this$meetingMediaSta5 = this.meetingMediaStatus) !== null && _this$meetingMediaSta5 !== void 0 && _this$meetingMediaSta5.expected.receiveVideo) {
|
|
18856
|
+
var _current2 = convertToStatsMap(transceiverStats.video.receivers);
|
|
18857
|
+
if (this.previousTransceiverStats) {
|
|
18858
|
+
var currentSourceStateArray = getPropertyFromStatsByTypeInArray(_current2, 'inbound-rtp', 'sourceState');
|
|
18859
|
+
if (currentSourceStateArray.includes('live')) {
|
|
18860
|
+
var _previous2 = convertToStatsMap(this.previousTransceiverStats.video.receivers);
|
|
18861
|
+
var currentPacketsReceived = getSumFromStatsByType(_current2, 'inbound-rtp', 'packetsReceived');
|
|
18862
|
+
var previousPacketsReceived = getSumFromStatsByType(_previous2, 'inbound-rtp', 'packetsReceived');
|
|
18863
|
+
if (currentPacketsReceived === previousPacketsReceived) {
|
|
18864
|
+
getLogger().info("StatsAnalyzer#monitorStats --> No video packets received, last packets received count: ".concat(currentPacketsReceived, "."));
|
|
18876
18865
|
}
|
|
18877
|
-
|
|
18878
|
-
|
|
18866
|
+
var currentFramesDecoded = getSumFromStatsByType(_current2, 'inbound-rtp', 'framesDecoded');
|
|
18867
|
+
var previousFramesDecoded = getSumFromStatsByType(_previous2, 'inbound-rtp', 'framesDecoded');
|
|
18868
|
+
if (currentFramesDecoded === previousFramesDecoded) {
|
|
18869
|
+
getLogger().info("StatsAnalyzer#monitorStats --> No video frames decoded, last frames decoded count: ".concat(currentFramesDecoded, "."));
|
|
18879
18870
|
}
|
|
18880
|
-
|
|
18881
|
-
|
|
18882
|
-
|
|
18883
|
-
|
|
18884
|
-
var previousVideoFramesDecoded = getPreviousStatsTotals('video-recv', 'framesDecoded');
|
|
18885
|
-
this.emitStartStopEvents('video', previousVideoFramesDecoded, currentVideoFramesDecoded, false);
|
|
18886
|
-
if (this.lastStatsResults['video-share-send']) {
|
|
18887
|
-
var _currentStats = this.statsResults['video-share-send'].send;
|
|
18888
|
-
var _previousStats = this.lastStatsResults['video-share-send'].send;
|
|
18889
|
-
if (this.meetingMediaStatus.expected.sendShare && (_currentStats.totalPacketsSent === _previousStats.totalPacketsSent || _currentStats.totalPacketsSent === 0)) {
|
|
18890
|
-
getLogger().info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets sent", _currentStats.totalPacketsSent);
|
|
18891
|
-
} else {
|
|
18892
|
-
if (this.meetingMediaStatus.expected.sendShare && (_currentStats.framesEncoded === _previousStats.framesEncoded || _currentStats.framesEncoded === 0)) {
|
|
18893
|
-
getLogger().info("StatsAnalyzer:index#compareLastStatsResult --> No share frames getting encoded", _currentStats.framesEncoded);
|
|
18871
|
+
var currentFramesReceived = getSumFromStatsByType(_current2, 'inbound-rtp', 'framesReceived');
|
|
18872
|
+
var previousFramesReceived = getSumFromStatsByType(_previous2, 'inbound-rtp', 'framesReceived');
|
|
18873
|
+
if (currentFramesReceived === previousFramesReceived) {
|
|
18874
|
+
getLogger().info("StatsAnalyzer#monitorStats --> No video frames received, last frames received count: ".concat(currentFramesReceived, "."));
|
|
18894
18875
|
}
|
|
18895
|
-
|
|
18896
|
-
|
|
18876
|
+
var currentFramesDropped = getSumFromStatsByType(_current2, 'inbound-rtp', 'framesDropped');
|
|
18877
|
+
var previousFramesDropped = getSumFromStatsByType(_previous2, 'inbound-rtp', 'framesDropped');
|
|
18878
|
+
if (currentFramesDropped - previousFramesDropped > 10) {
|
|
18879
|
+
getLogger().info("StatsAnalyzer#monitorStats --> Too many video frames dropped, total frames dropped count: ".concat(currentFramesDropped, "."));
|
|
18897
18880
|
}
|
|
18898
18881
|
}
|
|
18899
|
-
this.emitStartStopEvents('share', _previousStats.framesSent, _currentStats.framesSent, true);
|
|
18900
18882
|
}
|
|
18901
|
-
var currentShareFramesDecoded = getCurrentStatsTotals('video-share-recv', 'framesDecoded');
|
|
18902
|
-
var previousShareFramesDecoded = getPreviousStatsTotals('video-share-recv', 'framesDecoded');
|
|
18903
|
-
this.emitStartStopEvents('share', previousShareFramesDecoded, currentShareFramesDecoded, false);
|
|
18904
|
-
} else {
|
|
18905
|
-
getLogger().info('StatsAnalyzer:index#compareLastStatsResult --> No last stats results to compare, or meetingMediaStatus is not set');
|
|
18906
18883
|
}
|
|
18907
|
-
|
|
18908
|
-
|
|
18909
|
-
|
|
18910
|
-
|
|
18911
|
-
|
|
18912
|
-
|
|
18913
|
-
|
|
18914
|
-
|
|
18915
|
-
}
|
|
18916
|
-
getLogger().trace('StatsAnalyzer:index#getStatsAndParse --> Collecting Stats');
|
|
18917
|
-
return this.mediaConnection.getTransceiverStats().then(transceiverStats => {
|
|
18918
|
-
transceiverStats.video.receivers.forEach((receiver, i) => this.filterAndParseGetStatsResults(receiver, "video-recv-".concat(i), false));
|
|
18919
|
-
transceiverStats.audio.receivers.forEach((receiver, i) => this.filterAndParseGetStatsResults(receiver, "audio-recv-".concat(i), false));
|
|
18920
|
-
transceiverStats.screenShareVideo.receivers.forEach((receiver, i) => this.filterAndParseGetStatsResults(receiver, "video-share-recv-".concat(i), false));
|
|
18921
|
-
transceiverStats.screenShareAudio.receivers.forEach((receiver, i) => this.filterAndParseGetStatsResults(receiver, "audio-share-recv-".concat(i), false));
|
|
18922
|
-
transceiverStats.video.senders.forEach((sender, i) => {
|
|
18923
|
-
if (i > 0) {
|
|
18924
|
-
throw new Error('Stats Analyzer does not support multiple senders.');
|
|
18925
|
-
}
|
|
18926
|
-
this.filterAndParseGetStatsResults(sender, 'video-send', true);
|
|
18927
|
-
});
|
|
18928
|
-
transceiverStats.audio.senders.forEach((sender, i) => {
|
|
18929
|
-
if (i > 0) {
|
|
18930
|
-
throw new Error('Stats Analyzer does not support multiple senders.');
|
|
18884
|
+
if ((_this$meetingMediaSta6 = this.meetingMediaStatus) !== null && _this$meetingMediaSta6 !== void 0 && _this$meetingMediaSta6.expected.sendShare) {
|
|
18885
|
+
var _current3 = convertToStatsMap(transceiverStats.screenShareVideo.senders);
|
|
18886
|
+
if (this.previousTransceiverStats) {
|
|
18887
|
+
var _previous3 = convertToStatsMap(this.previousTransceiverStats.screenShareVideo.senders);
|
|
18888
|
+
var _currentPacketsSent2 = getSumFromStatsByType(_current3, 'outbound-rtp', 'packetsSent');
|
|
18889
|
+
var _previousPacketsSent2 = getSumFromStatsByType(_previous3, 'outbound-rtp', 'packetsSent');
|
|
18890
|
+
if (_currentPacketsSent2 === _previousPacketsSent2) {
|
|
18891
|
+
getLogger().info("StatsAnalyzer#monitorStats --> No share packets sent, last packets sent count: ".concat(_currentPacketsSent2, "."));
|
|
18931
18892
|
}
|
|
18932
|
-
|
|
18933
|
-
|
|
18934
|
-
|
|
18935
|
-
|
|
18936
|
-
throw new Error('Stats Analyzer does not support multiple senders.');
|
|
18893
|
+
var _currentFramesEncoded = getSumFromStatsByType(_current3, 'outbound-rtp', 'framesEncoded');
|
|
18894
|
+
var _previousFramesEncoded = getSumFromStatsByType(_previous3, 'outbound-rtp', 'framesEncoded');
|
|
18895
|
+
if (_currentFramesEncoded === _previousFramesEncoded) {
|
|
18896
|
+
getLogger().info("StatsAnalyzer#monitorStats --> No share frames encoded, last frames encoded count: ".concat(_currentFramesEncoded, "."));
|
|
18937
18897
|
}
|
|
18938
|
-
|
|
18939
|
-
|
|
18940
|
-
|
|
18941
|
-
|
|
18942
|
-
throw new Error('Stats Analyzer does not support multiple senders.');
|
|
18943
|
-
}
|
|
18944
|
-
this.filterAndParseGetStatsResults(sender, 'audio-share-send', true);
|
|
18945
|
-
});
|
|
18946
|
-
this.compareLastStatsResult();
|
|
18947
|
-
this.lastStatsResults = JSON.parse(JSON.stringify(this.statsResults));
|
|
18948
|
-
getLogger().trace('StatsAnalyzer:index#getStatsAndParse --> Finished Collecting Stats');
|
|
18949
|
-
});
|
|
18950
|
-
}
|
|
18951
|
-
processOutboundRTPResult(result, mediaType) {
|
|
18952
|
-
var sendrecvType = MediaDirection.SEND;
|
|
18953
|
-
if (result.bytesSent) {
|
|
18954
|
-
var _this$statsResults$me, _this$statsResults$me2;
|
|
18955
|
-
var kilobytes = 0;
|
|
18956
|
-
if (result.frameWidth && result.frameHeight) {
|
|
18957
|
-
this.statsResults[mediaType][sendrecvType].width = result.frameWidth;
|
|
18958
|
-
this.statsResults[mediaType][sendrecvType].height = result.frameHeight;
|
|
18959
|
-
this.statsResults[mediaType][sendrecvType].framesSent = result.framesSent;
|
|
18960
|
-
this.statsResults[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;
|
|
18961
|
-
}
|
|
18962
|
-
this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);
|
|
18963
|
-
this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;
|
|
18964
|
-
this.statsResults[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;
|
|
18965
|
-
this.statsResults[mediaType][sendrecvType].packetsSent = result.packetsSent;
|
|
18966
|
-
this.statsResults[mediaType][sendrecvType].totalKeyFramesEncoded = result.keyFramesEncoded;
|
|
18967
|
-
this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;
|
|
18968
|
-
this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;
|
|
18969
|
-
this.statsResults[mediaType][sendrecvType].totalPacketsSent = result.packetsSent;
|
|
18970
|
-
this.statsResults[mediaType][sendrecvType].totalFirCount = result.firCount;
|
|
18971
|
-
this.statsResults[mediaType][sendrecvType].framesSent = result.framesSent;
|
|
18972
|
-
this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;
|
|
18973
|
-
this.statsResults[mediaType][sendrecvType].encoderImplementation = result.encoderImplementation;
|
|
18974
|
-
this.statsResults[mediaType][sendrecvType].qualityLimitationReason = result.qualityLimitationReason;
|
|
18975
|
-
this.statsResults[mediaType][sendrecvType].qualityLimitationResolutionChanges = result.qualityLimitationResolutionChanges;
|
|
18976
|
-
this.statsResults[mediaType][sendrecvType].totalRtxPacketsSent = result.retransmittedPacketsSent;
|
|
18977
|
-
this.statsResults[mediaType][sendrecvType].totalRtxBytesSent = result.retransmittedBytesSent;
|
|
18978
|
-
this.statsResults[mediaType][sendrecvType].totalBytesSent = result.bytesSent;
|
|
18979
|
-
this.statsResults[mediaType][sendrecvType].headerBytesSent = result.headerBytesSent;
|
|
18980
|
-
this.statsResults[mediaType][sendrecvType].retransmittedBytesSent = result.retransmittedBytesSent;
|
|
18981
|
-
this.statsResults[mediaType][sendrecvType].isRequested = result.isRequested;
|
|
18982
|
-
this.statsResults[mediaType][sendrecvType].lastRequestedUpdateTimestamp = result.lastRequestedUpdateTimestamp;
|
|
18983
|
-
this.statsResults[mediaType][sendrecvType].requestedBitrate = result.requestedBitrate;
|
|
18984
|
-
this.statsResults[mediaType][sendrecvType].requestedFrameSize = result.requestedFrameSize;
|
|
18985
|
-
if (result.effect) {
|
|
18986
|
-
this.statsResults[mediaType][sendrecvType].effect = result.effect;
|
|
18987
|
-
}
|
|
18988
|
-
var meanRtpPacketSize = Math.round(result.bytesSent / result.packetsSent);
|
|
18989
|
-
(_this$statsResults$me2 = (_this$statsResults$me = this.statsResults[mediaType][sendrecvType]).meanRtpPacketSize) !== null && _this$statsResults$me2 !== void 0 ? _this$statsResults$me2 : _this$statsResults$me.meanRtpPacketSize = [];
|
|
18990
|
-
this.statsResults[mediaType][sendrecvType].meanRtpPacketSize.push(meanRtpPacketSize);
|
|
18991
|
-
}
|
|
18992
|
-
}
|
|
18993
|
-
processInboundRTPResult(result, mediaType) {
|
|
18994
|
-
var sendrecvType = MediaDirection.RECEIVE;
|
|
18995
|
-
if (result.bytesReceived) {
|
|
18996
|
-
var _this$statsResults$me3, _this$statsResults$me4;
|
|
18997
|
-
var kilobytes = 0;
|
|
18998
|
-
var sourceState = result.sourceState;
|
|
18999
|
-
var midAndCsi = "mid: \"".concat(result.mid || '', "\"").concat(result.csi ? " and csi: ".concat(result.csi) : '');
|
|
19000
|
-
var bytes = result.bytesReceived - this.statsResults[mediaType][sendrecvType].totalBytesReceived;
|
|
19001
|
-
kilobytes = bytes / 1024;
|
|
19002
|
-
this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);
|
|
19003
|
-
var currentPacketsLost = result.packetsLost - this.statsResults[mediaType][sendrecvType].totalPacketsLost;
|
|
19004
|
-
if (currentPacketsLost < 0) {
|
|
19005
|
-
currentPacketsLost = 0;
|
|
19006
|
-
}
|
|
19007
|
-
var packetsReceivedDiff = result.packetsReceived - this.statsResults[mediaType][sendrecvType].totalPacketsReceived;
|
|
19008
|
-
this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
|
|
19009
|
-
if (packetsReceivedDiff === 0) {
|
|
19010
|
-
if (sourceState === 'live') {
|
|
19011
|
-
getLogger().info("StatsAnalyzer:index#processInboundRTPResult --> No packets received for mediaType: ".concat(mediaType, ", receive slot ").concat(midAndCsi, ". Total packets received on slot: "), result.packetsReceived);
|
|
18898
|
+
var _currentFramesSent = getSumFromStatsByType(_current3, 'outbound-rtp', 'framesSent');
|
|
18899
|
+
var _previousFramesSent = getSumFromStatsByType(_previous3, 'outbound-rtp', 'framesSent');
|
|
18900
|
+
if (_currentFramesSent === _previousFramesSent) {
|
|
18901
|
+
getLogger().info("StatsAnalyzer#monitorStats --> No share frames sent, last frames sent count: ".concat(_currentFramesSent, "."));
|
|
19012
18902
|
}
|
|
19013
18903
|
}
|
|
19014
|
-
|
|
19015
|
-
|
|
19016
|
-
|
|
19017
|
-
|
|
19018
|
-
|
|
18904
|
+
emitNetworkQualityEvents('share', _current3);
|
|
18905
|
+
}
|
|
18906
|
+
if ((_this$meetingMediaSta7 = this.meetingMediaStatus) !== null && _this$meetingMediaSta7 !== void 0 && _this$meetingMediaSta7.expected.receiveShare) {
|
|
18907
|
+
var _current4 = convertToStatsMap(transceiverStats.screenShareVideo.receivers);
|
|
18908
|
+
if (this.previousTransceiverStats) {
|
|
18909
|
+
var _currentSourceStateArray = getPropertyFromStatsByTypeInArray(_current4, 'inbound-rtp', 'sourceState');
|
|
18910
|
+
if (_currentSourceStateArray.includes('live')) {
|
|
18911
|
+
var _previous4 = convertToStatsMap(this.previousTransceiverStats.screenShareVideo.receivers);
|
|
18912
|
+
var _currentPacketsReceived = getSumFromStatsByType(_current4, 'inbound-rtp', 'packetsReceived');
|
|
18913
|
+
var _previousPacketsReceived = getSumFromStatsByType(_previous4, 'inbound-rtp', 'packetsReceived');
|
|
18914
|
+
if (_currentPacketsReceived === _previousPacketsReceived) {
|
|
18915
|
+
getLogger().info("StatsAnalyzer#monitorStats --> No share packets received, last packets received count: ".concat(_currentPacketsReceived, "."));
|
|
19019
18916
|
}
|
|
19020
|
-
|
|
19021
|
-
|
|
19022
|
-
|
|
19023
|
-
|
|
19024
|
-
getLogger().info("StatsAnalyzer:index#processInboundRTPResult --> No frames decoded for mediaType: ".concat(mediaType, ", receive slot ").concat(midAndCsi, ". Total frames decoded on slot: "), result.framesDecoded);
|
|
18917
|
+
var _currentFramesDecoded = getSumFromStatsByType(_current4, 'inbound-rtp', 'framesDecoded');
|
|
18918
|
+
var _previousFramesDecoded = getSumFromStatsByType(_previous4, 'inbound-rtp', 'framesDecoded');
|
|
18919
|
+
if (_currentFramesDecoded === _previousFramesDecoded) {
|
|
18920
|
+
getLogger().info("StatsAnalyzer#monitorStats --> No share frames decoded, last frames decoded count: ".concat(_currentFramesDecoded, "."));
|
|
19025
18921
|
}
|
|
19026
|
-
|
|
19027
|
-
|
|
19028
|
-
|
|
19029
|
-
|
|
19030
|
-
|
|
18922
|
+
var _currentFramesReceived = getSumFromStatsByType(_current4, 'inbound-rtp', 'framesReceived');
|
|
18923
|
+
var _previousFramesReceived = getSumFromStatsByType(_previous4, 'inbound-rtp', 'framesReceived');
|
|
18924
|
+
if (_currentFramesReceived === _previousFramesReceived) {
|
|
18925
|
+
getLogger().info("StatsAnalyzer#monitorStats --> No share frames received, last frames received count: ".concat(_currentFramesReceived, "."));
|
|
18926
|
+
}
|
|
18927
|
+
var _currentFramesDropped = getSumFromStatsByType(_current4, 'inbound-rtp', 'framesDropped');
|
|
18928
|
+
var _previousFramesDropped = getSumFromStatsByType(_previous4, 'inbound-rtp', 'framesDropped');
|
|
18929
|
+
if (_currentFramesDropped - _previousFramesDropped > 10) {
|
|
18930
|
+
getLogger().info("StatsAnalyzer#monitorStats --> Too many share frames dropped, total frames dropped count: ".concat(_currentFramesDropped, "."));
|
|
19031
18931
|
}
|
|
19032
18932
|
}
|
|
19033
18933
|
}
|
|
19034
|
-
if (mediaType.startsWith('video-recv')) {
|
|
19035
|
-
this.statsResults[mediaType][sendrecvType].isActiveSpeaker = result.isActiveSpeaker;
|
|
19036
|
-
this.statsResults[mediaType][sendrecvType].lastActiveSpeakerTimestamp = result.lastActiveSpeakerUpdateTimestamp;
|
|
19037
|
-
}
|
|
19038
|
-
this.statsResults[mediaType][sendrecvType].currentPacketLossRatio = currentPacketsLost > 0 ? currentPacketsLost / (packetsReceivedDiff + currentPacketsLost) : 0;
|
|
19039
|
-
if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {
|
|
19040
|
-
getLogger().info("StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver with slot ".concat(midAndCsi), this.statsResults[mediaType][sendrecvType].currentPacketLossRatio);
|
|
19041
|
-
}
|
|
19042
|
-
if (result.frameWidth && result.frameHeight) {
|
|
19043
|
-
this.statsResults[mediaType][sendrecvType].width = result.frameWidth;
|
|
19044
|
-
this.statsResults[mediaType][sendrecvType].height = result.frameHeight;
|
|
19045
|
-
this.statsResults[mediaType][sendrecvType].framesReceived = result.framesReceived;
|
|
19046
|
-
}
|
|
19047
|
-
if (result.packetsLost) {
|
|
19048
|
-
this.statsResults[mediaType][sendrecvType].totalPacketsLost = result.packetsLost > 0 ? result.packetsLost : -result.packetsLost;
|
|
19049
|
-
} else {
|
|
19050
|
-
this.statsResults[mediaType][sendrecvType].totalPacketsLost = 0;
|
|
19051
|
-
}
|
|
19052
|
-
this.statsResults[mediaType][sendrecvType].lastPacketReceivedTimestamp = result.lastPacketReceivedTimestamp;
|
|
19053
|
-
this.statsResults[mediaType][sendrecvType].requestedBitrate = result.requestedBitrate;
|
|
19054
|
-
this.statsResults[mediaType][sendrecvType].requestedFrameSize = result.requestedFrameSize;
|
|
19055
|
-
this.statsResults[mediaType][sendrecvType].requestedFrameRate = result.requestedFrameRate;
|
|
19056
|
-
this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;
|
|
19057
|
-
this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;
|
|
19058
|
-
this.statsResults[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
|
|
19059
|
-
this.statsResults[mediaType][sendrecvType].keyFramesDecoded = result.keyFramesDecoded;
|
|
19060
|
-
this.statsResults[mediaType][sendrecvType].framesDropped = result.framesDropped;
|
|
19061
|
-
this.statsResults[mediaType][sendrecvType].decoderImplementation = result.decoderImplementation;
|
|
19062
|
-
this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
|
|
19063
|
-
this.statsResults[mediaType][sendrecvType].fecPacketsDiscarded = result.fecPacketsDiscarded;
|
|
19064
|
-
this.statsResults[mediaType][sendrecvType].fecPacketsReceived = result.fecPacketsReceived;
|
|
19065
|
-
this.statsResults[mediaType][sendrecvType].totalBytesReceived = result.bytesReceived;
|
|
19066
|
-
this.statsResults[mediaType][sendrecvType].headerBytesReceived = result.headerBytesReceived;
|
|
19067
|
-
this.statsResults[mediaType][sendrecvType].totalRtxPacketsReceived = result.retransmittedPacketsReceived;
|
|
19068
|
-
this.statsResults[mediaType][sendrecvType].totalRtxBytesReceived = result.retransmittedBytesReceived;
|
|
19069
|
-
this.statsResults[mediaType][sendrecvType].meanRtpJitter.push(result.jitter);
|
|
19070
|
-
this.statsResults[mediaType][sendrecvType].audioLevel = result.audioLevel;
|
|
19071
|
-
this.statsResults[mediaType][sendrecvType].totalAudioEnergy = result.totalAudioEnergy;
|
|
19072
|
-
this.statsResults[mediaType][sendrecvType].totalSamplesReceived = result.totalSamplesReceived || 0;
|
|
19073
|
-
this.statsResults[mediaType][sendrecvType].totalSamplesDecoded = result.totalSamplesDecoded || 0;
|
|
19074
|
-
this.statsResults[mediaType][sendrecvType].concealedSamples = result.concealedSamples || 0;
|
|
19075
|
-
this.statsResults[mediaType][sendrecvType].silentConcealedSamples = result.silentConcealedSamples || 0;
|
|
19076
|
-
this.statsResults[mediaType][sendrecvType].isRequested = result.isRequested;
|
|
19077
|
-
this.statsResults[mediaType][sendrecvType].lastRequestedUpdateTimestamp = result.lastRequestedUpdateTimestamp;
|
|
19078
|
-
var meanRtpPacketSize = Math.round(result.bytesReceived / result.packetsReceived);
|
|
19079
|
-
(_this$statsResults$me4 = (_this$statsResults$me3 = this.statsResults[mediaType][sendrecvType]).meanRtpPacketSize) !== null && _this$statsResults$me4 !== void 0 ? _this$statsResults$me4 : _this$statsResults$me3.meanRtpPacketSize = [];
|
|
19080
|
-
this.statsResults[mediaType][sendrecvType].meanRtpPacketSize.push(meanRtpPacketSize);
|
|
19081
|
-
}
|
|
19082
|
-
}
|
|
19083
|
-
compareSentAndReceived(result, type) {
|
|
19084
|
-
if (!type || !this.statsResults[type].send) {
|
|
19085
|
-
return;
|
|
19086
|
-
}
|
|
19087
|
-
var mediaType = type;
|
|
19088
|
-
var currentPacketLoss = result.packetsLost - this.statsResults[mediaType].send.totalPacketsLostOnReceiver;
|
|
19089
|
-
this.statsResults[mediaType].send.packetsLostOnReceiver = currentPacketLoss;
|
|
19090
|
-
this.statsResults[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
|
|
19091
|
-
this.statsResults[mediaType].send.meanRemoteJitter.push(result.jitter);
|
|
19092
|
-
this.statsResults[mediaType].send.meanRoundTripTime.push(result.roundTripTime);
|
|
19093
|
-
this.statsResults[mediaType].send.timestamp = result.timestamp;
|
|
19094
|
-
this.statsResults[mediaType].send.ssrc = result.ssrc;
|
|
19095
|
-
this.statsResults[mediaType].send.reportsReceived = result.reportsReceived;
|
|
19096
|
-
this.statsResults[mediaType].send.overAllPacketLossRatio = this.statsResults[mediaType].send.totalPacketsLostOnReceiver > 0 ? this.statsResults[mediaType].send.totalPacketsLostOnReceiver / this.statsResults[mediaType].send.totalPacketsSent : 0;
|
|
19097
|
-
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;
|
|
19098
|
-
if (this.statsResults[mediaType].send.maxPacketLossRatio < this.statsResults[mediaType].send.currentPacketLossRatio) {
|
|
19099
|
-
this.statsResults[mediaType].send.maxPacketLossRatio = this.statsResults[mediaType].send.currentPacketLossRatio;
|
|
19100
|
-
}
|
|
19101
|
-
if (result.type === 'remote-inbound-rtp') {
|
|
19102
|
-
this.networkQualityMonitor.determineUplinkNetworkQuality({
|
|
19103
|
-
mediaType,
|
|
19104
|
-
remoteRtpResults: result,
|
|
19105
|
-
statsAnalyzerCurrentStats: this.statsResults
|
|
19106
|
-
});
|
|
19107
18934
|
}
|
|
18935
|
+
this.emitStartStopEvents('audio', getSumFromStatsByType(convertToStatsMap((_this$previousTransce = (_this$previousTransce2 = this.previousTransceiverStats) === null || _this$previousTransce2 === void 0 ? void 0 : _this$previousTransce2.audio.senders) !== null && _this$previousTransce !== void 0 ? _this$previousTransce : []), 'outbound-rtp', 'packetsSent'), getSumFromStatsByType(convertToStatsMap(transceiverStats.audio.senders), 'outbound-rtp', 'packetsSent'), true);
|
|
18936
|
+
this.emitStartStopEvents('audio', getSumFromStatsByType(convertToStatsMap((_this$previousTransce3 = (_this$previousTransce4 = this.previousTransceiverStats) === null || _this$previousTransce4 === void 0 ? void 0 : _this$previousTransce4.audio.receivers) !== null && _this$previousTransce3 !== void 0 ? _this$previousTransce3 : []), 'inbound-rtp', 'packetsReceived'), getSumFromStatsByType(convertToStatsMap(transceiverStats.audio.receivers), 'inbound-rtp', 'packetsReceived'), false);
|
|
18937
|
+
this.emitStartStopEvents('video', getSumFromStatsByType(convertToStatsMap((_this$previousTransce5 = (_this$previousTransce6 = this.previousTransceiverStats) === null || _this$previousTransce6 === void 0 ? void 0 : _this$previousTransce6.video.senders) !== null && _this$previousTransce5 !== void 0 ? _this$previousTransce5 : []), 'outbound-rtp', 'framesSent'), getSumFromStatsByType(convertToStatsMap(transceiverStats.video.senders), 'outbound-rtp', 'framesSent'), true);
|
|
18938
|
+
this.emitStartStopEvents('video', getSumFromStatsByType(convertToStatsMap((_this$previousTransce7 = (_this$previousTransce8 = this.previousTransceiverStats) === null || _this$previousTransce8 === void 0 ? void 0 : _this$previousTransce8.video.receivers) !== null && _this$previousTransce7 !== void 0 ? _this$previousTransce7 : []), 'inbound-rtp', 'framesDecoded'), getSumFromStatsByType(convertToStatsMap(transceiverStats.video.receivers), 'inbound-rtp', 'framesDecoded'), false);
|
|
18939
|
+
this.emitStartStopEvents('share', getSumFromStatsByType(convertToStatsMap((_this$previousTransce9 = (_this$previousTransce10 = this.previousTransceiverStats) === null || _this$previousTransce10 === void 0 ? void 0 : _this$previousTransce10.screenShareVideo.senders) !== null && _this$previousTransce9 !== void 0 ? _this$previousTransce9 : []), 'outbound-rtp', 'framesSent'), getSumFromStatsByType(convertToStatsMap(transceiverStats.screenShareVideo.senders), 'outbound-rtp', 'framesSent'), true);
|
|
18940
|
+
this.emitStartStopEvents('share', getSumFromStatsByType(convertToStatsMap((_this$previousTransce11 = (_this$previousTransce12 = this.previousTransceiverStats) === null || _this$previousTransce12 === void 0 ? void 0 : _this$previousTransce12.screenShareVideo.receivers) !== null && _this$previousTransce11 !== void 0 ? _this$previousTransce11 : []), 'inbound-rtp', 'framesDecoded'), getSumFromStatsByType(convertToStatsMap(transceiverStats.screenShareVideo.receivers), 'inbound-rtp', 'framesDecoded'), false);
|
|
18941
|
+
this.previousTransceiverStats = transceiverStats;
|
|
19108
18942
|
}
|
|
19109
18943
|
}
|
|
19110
18944
|
|
|
@@ -19144,14 +18978,13 @@ class NetworkQualityMonitor extends EventEmitter$5 {
|
|
|
19144
18978
|
determineUplinkNetworkQuality(_ref) {
|
|
19145
18979
|
var {
|
|
19146
18980
|
mediaType,
|
|
19147
|
-
|
|
19148
|
-
|
|
18981
|
+
roundTripTime,
|
|
18982
|
+
jitter,
|
|
18983
|
+
fractionLost
|
|
19149
18984
|
} = _ref;
|
|
19150
|
-
var roundTripTimeInMilliseconds =
|
|
19151
|
-
var jitterInMilliseconds =
|
|
19152
|
-
var
|
|
19153
|
-
currentPacketLossRatio
|
|
19154
|
-
} = statsAnalyzerCurrentStats[mediaType].send;
|
|
18985
|
+
var roundTripTimeInMilliseconds = roundTripTime * 1000;
|
|
18986
|
+
var jitterInMilliseconds = jitter * 1000;
|
|
18987
|
+
var percentLost = fractionLost * 100;
|
|
19155
18988
|
var {
|
|
19156
18989
|
JITTER,
|
|
19157
18990
|
PACKETLOSS,
|
|
@@ -19161,7 +18994,7 @@ class NetworkQualityMonitor extends EventEmitter$5 {
|
|
|
19161
18994
|
UPLINK
|
|
19162
18995
|
} = this.frequencyTypes;
|
|
19163
18996
|
var determinePacketLoss = () => {
|
|
19164
|
-
if (this.config.videoPacketLossRatioThreshold !== undefined &&
|
|
18997
|
+
if (this.config.videoPacketLossRatioThreshold !== undefined && percentLost > this.config.videoPacketLossRatioThreshold) {
|
|
19165
18998
|
this.networkQualityScore = 0;
|
|
19166
18999
|
return false;
|
|
19167
19000
|
}
|
|
@@ -19188,15 +19021,15 @@ class NetworkQualityMonitor extends EventEmitter$5 {
|
|
|
19188
19021
|
}
|
|
19189
19022
|
this.networkQualityStatus[UPLINK][mediaType][PACKETLOSS] = {
|
|
19190
19023
|
acceptable: determinePacketLoss(),
|
|
19191
|
-
value: getValueOrNull(
|
|
19024
|
+
value: getValueOrNull(percentLost)
|
|
19192
19025
|
};
|
|
19193
19026
|
this.networkQualityStatus[UPLINK][mediaType][LATENCY] = {
|
|
19194
19027
|
acceptable: determineLatency(),
|
|
19195
|
-
value: getValueOrNull(
|
|
19028
|
+
value: getValueOrNull(roundTripTime)
|
|
19196
19029
|
};
|
|
19197
19030
|
this.networkQualityStatus[UPLINK][mediaType][JITTER] = {
|
|
19198
19031
|
acceptable: determineJitter(),
|
|
19199
|
-
value: getValueOrNull(
|
|
19032
|
+
value: getValueOrNull(jitter)
|
|
19200
19033
|
};
|
|
19201
19034
|
this.updateNetworkQualityStatus(mediaType);
|
|
19202
19035
|
}
|