@webex/internal-media-core 0.0.15-beta → 0.0.17-beta
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/README.md +1 -1
- package/dist/cjs/index.js +2257 -1997
- package/dist/esm/index.js +2257 -1997
- package/dist/types/MediaConnection/MultistreamRoapMediaConnection.d.ts +5 -4
- package/dist/types/MediaConnection/MultistreamRoapMediaConnection.d.ts.map +1 -1
- package/dist/types/MediaConnection/eventTypes.d.ts +2 -2
- package/dist/types/MediaConnection/eventTypes.d.ts.map +1 -1
- package/dist/types/MediaConnection/utils.d.ts.map +1 -1
- package/dist/types/MediaConnection/utils.test-fixtures.d.ts.map +1 -1
- package/package.json +15 -7
package/dist/cjs/index.js
CHANGED
|
@@ -2533,7 +2533,8 @@ var getErrorDescription = error => {
|
|
|
2533
2533
|
};
|
|
2534
2534
|
|
|
2535
2535
|
var NUM$1 = '\\d+';
|
|
2536
|
-
var
|
|
2536
|
+
var SDP_TOKEN$1 = "[!#$%&'*+\\-.^_`{|}~a-zA-Z0-9]+";
|
|
2537
|
+
var ANY_NON_WS$1 = '\\S+';
|
|
2537
2538
|
var SP$1 = '\\s';
|
|
2538
2539
|
var REST$1 = '.+';
|
|
2539
2540
|
class Line$1 {}
|
|
@@ -2627,7 +2628,7 @@ class CandidateLine$1 extends Line$1 {
|
|
|
2627
2628
|
}
|
|
2628
2629
|
_a$4$1 = CandidateLine$1;
|
|
2629
2630
|
CandidateLine$1.ICE_CHARS = "[a-zA-Z0-9+/]+";
|
|
2630
|
-
CandidateLine$1.regex = new RegExp("^candidate:(".concat(_a$4$1.ICE_CHARS, ") (").concat(NUM$1, ") (").concat(
|
|
2631
|
+
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, "))?"));
|
|
2631
2632
|
class ConnectionLine$1 extends Line$1 {
|
|
2632
2633
|
constructor(netType, addrType, ipAddr) {
|
|
2633
2634
|
super();
|
|
@@ -2649,7 +2650,7 @@ class ConnectionLine$1 extends Line$1 {
|
|
|
2649
2650
|
return "c=".concat(this.netType, " ").concat(this.addrType, " ").concat(this.ipAddr);
|
|
2650
2651
|
}
|
|
2651
2652
|
}
|
|
2652
|
-
ConnectionLine$1.regex = new RegExp("^(".concat(
|
|
2653
|
+
ConnectionLine$1.regex = new RegExp("^(".concat(ANY_NON_WS$1, ") (").concat(ANY_NON_WS$1, ") (").concat(ANY_NON_WS$1, ")"));
|
|
2653
2654
|
class ContentLine$1 extends Line$1 {
|
|
2654
2655
|
constructor(values) {
|
|
2655
2656
|
super();
|
|
@@ -2721,7 +2722,7 @@ class ExtMapLine$1 extends Line$1 {
|
|
|
2721
2722
|
}
|
|
2722
2723
|
_a$3$1 = ExtMapLine$1;
|
|
2723
2724
|
ExtMapLine$1.EXTMAP_DIRECTION = "sendonly|recvonly|sendrecv|inactive";
|
|
2724
|
-
ExtMapLine$1.regex = new RegExp("^extmap:(".concat(NUM$1, ")(?:/(").concat(_a$3$1.EXTMAP_DIRECTION, "))? (").concat(
|
|
2725
|
+
ExtMapLine$1.regex = new RegExp("^extmap:(".concat(NUM$1, ")(?:/(").concat(_a$3$1.EXTMAP_DIRECTION, "))? (").concat(ANY_NON_WS$1, ")(?: (").concat(REST$1, "))?"));
|
|
2725
2726
|
class FingerprintLine$1 extends Line$1 {
|
|
2726
2727
|
constructor(fingerprint) {
|
|
2727
2728
|
super();
|
|
@@ -2795,7 +2796,7 @@ class IcePwdLine$1 extends Line$1 {
|
|
|
2795
2796
|
return "a=ice-pwd:".concat(this.pwd);
|
|
2796
2797
|
}
|
|
2797
2798
|
}
|
|
2798
|
-
IcePwdLine$1.regex = new RegExp("^ice-pwd:(".concat(
|
|
2799
|
+
IcePwdLine$1.regex = new RegExp("^ice-pwd:(".concat(ANY_NON_WS$1, ")$"));
|
|
2799
2800
|
class IceUfragLine$1 extends Line$1 {
|
|
2800
2801
|
constructor(ufrag) {
|
|
2801
2802
|
super();
|
|
@@ -2813,7 +2814,7 @@ class IceUfragLine$1 extends Line$1 {
|
|
|
2813
2814
|
return "a=ice-ufrag:".concat(this.ufrag);
|
|
2814
2815
|
}
|
|
2815
2816
|
}
|
|
2816
|
-
IceUfragLine$1.regex = new RegExp("^ice-ufrag:(".concat(
|
|
2817
|
+
IceUfragLine$1.regex = new RegExp("^ice-ufrag:(".concat(ANY_NON_WS$1, ")$"));
|
|
2817
2818
|
class MaxMessageSizeLine$1 extends Line$1 {
|
|
2818
2819
|
constructor(maxMessageSize) {
|
|
2819
2820
|
super();
|
|
@@ -2858,7 +2859,7 @@ class MediaLine$1 extends Line$1 {
|
|
|
2858
2859
|
}
|
|
2859
2860
|
_a$2$1 = MediaLine$1;
|
|
2860
2861
|
MediaLine$1.MEDIA_TYPE = 'audio|video|application';
|
|
2861
|
-
MediaLine$1.regex = new RegExp("^(".concat(_a$2$1.MEDIA_TYPE, ") (").concat(NUM$1, ") (").concat(
|
|
2862
|
+
MediaLine$1.regex = new RegExp("^(".concat(_a$2$1.MEDIA_TYPE, ") (").concat(NUM$1, ") (").concat(ANY_NON_WS$1, ") (").concat(REST$1, ")"));
|
|
2862
2863
|
class MidLine$1 extends Line$1 {
|
|
2863
2864
|
constructor(mid) {
|
|
2864
2865
|
super();
|
|
@@ -2876,7 +2877,7 @@ class MidLine$1 extends Line$1 {
|
|
|
2876
2877
|
return "a=mid:".concat(this.mid);
|
|
2877
2878
|
}
|
|
2878
2879
|
}
|
|
2879
|
-
MidLine$1.regex = new RegExp("^mid:(".concat(
|
|
2880
|
+
MidLine$1.regex = new RegExp("^mid:(".concat(ANY_NON_WS$1, ")$"));
|
|
2880
2881
|
class OriginLine$1 extends Line$1 {
|
|
2881
2882
|
constructor(username, sessionId, sessionVersion, netType, addrType, ipAddr) {
|
|
2882
2883
|
super();
|
|
@@ -2904,7 +2905,7 @@ class OriginLine$1 extends Line$1 {
|
|
|
2904
2905
|
return "o=".concat(this.username, " ").concat(this.sessionId, " ").concat(this.sessionVersion, " ").concat(this.netType, " ").concat(this.addrType, " ").concat(this.ipAddr);
|
|
2905
2906
|
}
|
|
2906
2907
|
}
|
|
2907
|
-
OriginLine$1.regex = new RegExp("^(".concat(
|
|
2908
|
+
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, ")"));
|
|
2908
2909
|
var _a$1$1;
|
|
2909
2910
|
class RidLine$1 extends Line$1 {
|
|
2910
2911
|
constructor(id, direction, params) {
|
|
@@ -3172,7 +3173,60 @@ class SimulcastLine$1 extends Line$1 {
|
|
|
3172
3173
|
return str;
|
|
3173
3174
|
}
|
|
3174
3175
|
}
|
|
3175
|
-
SimulcastLine$1.regex = new RegExp("^simulcast:(send|recv) (".concat(
|
|
3176
|
+
SimulcastLine$1.regex = new RegExp("^simulcast:(send|recv) (".concat(ANY_NON_WS$1, ")(?: (send|recv) (").concat(ANY_NON_WS$1, "))?"));
|
|
3177
|
+
class SsrcLine$1 extends Line$1 {
|
|
3178
|
+
constructor(ssrcId, attribute) {
|
|
3179
|
+
var attributeValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
|
|
3180
|
+
var attributeData = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : undefined;
|
|
3181
|
+
super();
|
|
3182
|
+
this.ssrcId = ssrcId;
|
|
3183
|
+
this.attribute = attribute;
|
|
3184
|
+
this.attributeValue = attributeValue;
|
|
3185
|
+
this.attributeData = attributeData;
|
|
3186
|
+
}
|
|
3187
|
+
static fromSdpLine(line) {
|
|
3188
|
+
if (!SsrcLine$1.regex.test(line)) {
|
|
3189
|
+
return undefined;
|
|
3190
|
+
}
|
|
3191
|
+
var tokens = line.match(SsrcLine$1.regex);
|
|
3192
|
+
var ssrcId = parseInt(tokens[1], 10);
|
|
3193
|
+
var attribute = tokens[2];
|
|
3194
|
+
var attributeValue = tokens[3];
|
|
3195
|
+
var attributeData = tokens[4];
|
|
3196
|
+
return new SsrcLine$1(ssrcId, attribute, attributeValue, attributeData);
|
|
3197
|
+
}
|
|
3198
|
+
toSdpLine() {
|
|
3199
|
+
var str = "a=ssrc:".concat(this.ssrcId, " ").concat(this.attribute);
|
|
3200
|
+
if (this.attributeValue) {
|
|
3201
|
+
str += ":".concat(this.attributeValue);
|
|
3202
|
+
}
|
|
3203
|
+
if (this.attributeData) {
|
|
3204
|
+
str += " ".concat(this.attributeData);
|
|
3205
|
+
}
|
|
3206
|
+
return str;
|
|
3207
|
+
}
|
|
3208
|
+
}
|
|
3209
|
+
SsrcLine$1.regex = new RegExp("^ssrc:(".concat(NUM$1, ") (").concat(SDP_TOKEN$1, ")(?::(").concat(SDP_TOKEN$1, ")?(?: (").concat(ANY_NON_WS$1, "))?)?$"));
|
|
3210
|
+
class SsrcGroupLine$1 extends Line$1 {
|
|
3211
|
+
constructor(semantics, ssrcs) {
|
|
3212
|
+
super();
|
|
3213
|
+
this.semantics = semantics;
|
|
3214
|
+
this.ssrcs = ssrcs;
|
|
3215
|
+
}
|
|
3216
|
+
static fromSdpLine(line) {
|
|
3217
|
+
if (!SsrcGroupLine$1.regex.test(line)) {
|
|
3218
|
+
return undefined;
|
|
3219
|
+
}
|
|
3220
|
+
var tokens = line.match(SsrcGroupLine$1.regex);
|
|
3221
|
+
var semantics = tokens[1];
|
|
3222
|
+
var ssrcs = tokens[2].split(' ').map(ssrcStr => parseInt(ssrcStr, 10));
|
|
3223
|
+
return new SsrcGroupLine$1(semantics, ssrcs);
|
|
3224
|
+
}
|
|
3225
|
+
toSdpLine() {
|
|
3226
|
+
return "a=ssrc-group:".concat(this.semantics, " ").concat(this.ssrcs.join(' '));
|
|
3227
|
+
}
|
|
3228
|
+
}
|
|
3229
|
+
SsrcGroupLine$1.regex = new RegExp("^ssrc-group:(SIM|FID|FEC) ((?:".concat(NUM$1).concat(SP$1, "*)+)"));
|
|
3176
3230
|
class TimingLine$1 extends Line$1 {
|
|
3177
3231
|
constructor(startTime, stopTime) {
|
|
3178
3232
|
super();
|
|
@@ -3409,6 +3463,8 @@ class AvMediaDescription$1 extends MediaDescription$1 {
|
|
|
3409
3463
|
this.rids = [];
|
|
3410
3464
|
this.codecs = new Map();
|
|
3411
3465
|
this.rtcpMux = false;
|
|
3466
|
+
this.ssrcs = [];
|
|
3467
|
+
this.ssrcGroups = [];
|
|
3412
3468
|
this.pts = mediaLine.formats.map(fmt => {
|
|
3413
3469
|
return parseInt(fmt, 10);
|
|
3414
3470
|
});
|
|
@@ -3448,6 +3504,8 @@ class AvMediaDescription$1 extends MediaDescription$1 {
|
|
|
3448
3504
|
lines.push(new DirectionLine$1(this.direction));
|
|
3449
3505
|
}
|
|
3450
3506
|
this.codecs.forEach(codec => lines.push(...codec.toLines()));
|
|
3507
|
+
lines.push(...this.ssrcs);
|
|
3508
|
+
lines.push(...this.ssrcGroups);
|
|
3451
3509
|
lines.push(...this.otherLines);
|
|
3452
3510
|
return lines;
|
|
3453
3511
|
}
|
|
@@ -3486,6 +3544,14 @@ class AvMediaDescription$1 extends MediaDescription$1 {
|
|
|
3486
3544
|
codec.addLine(line);
|
|
3487
3545
|
return true;
|
|
3488
3546
|
}
|
|
3547
|
+
if (line instanceof SsrcLine$1) {
|
|
3548
|
+
this.ssrcs.push(line);
|
|
3549
|
+
return true;
|
|
3550
|
+
}
|
|
3551
|
+
if (line instanceof SsrcGroupLine$1) {
|
|
3552
|
+
this.ssrcGroups.push(line);
|
|
3553
|
+
return true;
|
|
3554
|
+
}
|
|
3489
3555
|
this.otherLines.push(line);
|
|
3490
3556
|
return true;
|
|
3491
3557
|
}
|
|
@@ -3630,6 +3696,8 @@ class SdpGrammar$1 extends Grammar$1 {
|
|
|
3630
3696
|
this.addParser('a', RidLine$1.fromSdpLine);
|
|
3631
3697
|
this.addParser('a', CandidateLine$1.fromSdpLine);
|
|
3632
3698
|
this.addParser('a', SimulcastLine$1.fromSdpLine);
|
|
3699
|
+
this.addParser('a', SsrcLine$1.fromSdpLine);
|
|
3700
|
+
this.addParser('a', SsrcGroupLine$1.fromSdpLine);
|
|
3633
3701
|
}
|
|
3634
3702
|
}
|
|
3635
3703
|
var DefaultSdpGrammar$1 = new SdpGrammar$1();
|
|
@@ -3796,7 +3864,7 @@ function appendToH264fmtpParams(sdp, paramsToAppend) {
|
|
|
3796
3864
|
}
|
|
3797
3865
|
});
|
|
3798
3866
|
}
|
|
3799
|
-
function
|
|
3867
|
+
function adjustH264Profile(sdp, maxFsValue) {
|
|
3800
3868
|
var maxFsForProfileLevel = {
|
|
3801
3869
|
10: 99,
|
|
3802
3870
|
11: 396,
|
|
@@ -3818,6 +3886,7 @@ function setH264MaxFs(sdp, maxFsValue) {
|
|
|
3818
3886
|
61: 139264,
|
|
3819
3887
|
62: 139264
|
|
3820
3888
|
};
|
|
3889
|
+
var framesPerSecond = 30;
|
|
3821
3890
|
sdp.avMedia.forEach(media => {
|
|
3822
3891
|
if (media.type === 'video') {
|
|
3823
3892
|
media.codecs.forEach(codec => {
|
|
@@ -3837,12 +3906,13 @@ function setH264MaxFs(sdp, maxFsValue) {
|
|
|
3837
3906
|
return fmtp;
|
|
3838
3907
|
}
|
|
3839
3908
|
if (maxFsForProfileLevel[levelId] < maxFsValue) {
|
|
3840
|
-
return "".concat(fmtp, ";max-fs=").concat(maxFsValue);
|
|
3909
|
+
return "".concat(fmtp, ";max-fs=").concat(maxFsValue, ";max-mbps=").concat(maxFsValue * framesPerSecond);
|
|
3841
3910
|
}
|
|
3842
3911
|
var newLevelId = Object.keys(maxFsForProfileLevel).reverse().find(key => maxFsForProfileLevel[key] === maxFsValue);
|
|
3843
3912
|
if (newLevelId) {
|
|
3844
3913
|
var newLevelIdHex = parseInt(newLevelId, 10).toString(16);
|
|
3845
|
-
|
|
3914
|
+
var maxMbps = "max-mbps=".concat(maxFsValue * framesPerSecond);
|
|
3915
|
+
return "".concat(stuffBeforeProfileLevelId, "profile-level-id=").concat(profile).concat(newLevelIdHex, ";").concat(maxMbps).concat(stuffAfterProfileLevelId);
|
|
3846
3916
|
}
|
|
3847
3917
|
throw new Error("unsupported maxFsValue: ".concat(maxFsValue));
|
|
3848
3918
|
}
|
|
@@ -3893,7 +3963,7 @@ function mungeLocalSdp(config, sdp) {
|
|
|
3893
3963
|
disableExtmap(parsedSdp);
|
|
3894
3964
|
}
|
|
3895
3965
|
if (config.h264MaxFs) {
|
|
3896
|
-
|
|
3966
|
+
adjustH264Profile(parsedSdp, config.h264MaxFs);
|
|
3897
3967
|
}
|
|
3898
3968
|
return parsedSdp.toString();
|
|
3899
3969
|
}
|
|
@@ -4855,7 +4925,12 @@ class LocalTrack extends EventEmitter$2 {
|
|
|
4855
4925
|
* Cleanup local microphone track.
|
|
4856
4926
|
*/
|
|
4857
4927
|
disposeEffects() {
|
|
4858
|
-
this.effects.
|
|
4928
|
+
if (this.effects.size > 0) {
|
|
4929
|
+
this.effects.forEach(effect => effect.dispose());
|
|
4930
|
+
this.effects.clear();
|
|
4931
|
+
this.underlyingStream = this.originalStream;
|
|
4932
|
+
this.emit(LocalTrackEvents.UnderlyingTrackChange);
|
|
4933
|
+
}
|
|
4859
4934
|
}
|
|
4860
4935
|
}
|
|
4861
4936
|
LocalTrack.Events = LocalTrackEvents;
|
|
@@ -8263,6 +8338,17 @@ class PeerConnection extends EventEmitter$2 {
|
|
|
8263
8338
|
getTransceivers() {
|
|
8264
8339
|
return this.pc.getTransceivers();
|
|
8265
8340
|
}
|
|
8341
|
+
/**
|
|
8342
|
+
* Get statistics about either the overall connection or about the specified MediaStreamTrack.
|
|
8343
|
+
*
|
|
8344
|
+
* @param selector - An optional MediaStreamTrack for which to gather statistics. If not provided,
|
|
8345
|
+
* statistics will be gathered for the entire underlying RTCPeerConnection.
|
|
8346
|
+
* @returns - A Promise which resolves with an RTCStatsReport object providing connection
|
|
8347
|
+
* statistics.
|
|
8348
|
+
*/
|
|
8349
|
+
getStats(selector) {
|
|
8350
|
+
return this.pc.getStats(selector);
|
|
8351
|
+
}
|
|
8266
8352
|
/**
|
|
8267
8353
|
* Returns a string that describes the connections' ICE gathering state.
|
|
8268
8354
|
*
|
|
@@ -8848,7 +8934,11 @@ class JmpSession extends EventEmitter$4 {
|
|
|
8848
8934
|
}
|
|
8849
8935
|
updateSourceIndication(numTotalSources, numLiveSources, sources) {
|
|
8850
8936
|
var _a;
|
|
8851
|
-
var
|
|
8937
|
+
var filteredSources = sources.filter(source => {
|
|
8938
|
+
var _a;
|
|
8939
|
+
return (_a = this.lastReceivedScr) === null || _a === void 0 ? void 0 : _a.requests.some(req => req.ids.find(streamId => compareStreamIds(streamId, source.id)));
|
|
8940
|
+
});
|
|
8941
|
+
var sourceIndicationMsg = new SourceIndicationMsg(this.currSourceIndicationSeqNum++, numTotalSources, numLiveSources, filteredSources);
|
|
8852
8942
|
var jmpMsg = new JmpMsg(this.mediaFamily, this.mediaContent, {
|
|
8853
8943
|
msgType: JmpMsgType$1.SourceIndication,
|
|
8854
8944
|
payload: sourceIndicationMsg
|
|
@@ -8993,94 +9083,12 @@ class JmpSession extends EventEmitter$4 {
|
|
|
8993
9083
|
(_a = this.txCallback) === null || _a === void 0 ? void 0 : _a.call(this, JSON.stringify(homerMsg));
|
|
8994
9084
|
}
|
|
8995
9085
|
}
|
|
8996
|
-
var MediaCodecMimeType;
|
|
8997
|
-
(function (MediaCodecMimeType) {
|
|
8998
|
-
MediaCodecMimeType["H264"] = "video/H264";
|
|
8999
|
-
MediaCodecMimeType["AV1"] = "video/AV1";
|
|
9000
|
-
MediaCodecMimeType["OPUS"] = "audio/opus";
|
|
9001
|
-
})(MediaCodecMimeType || (MediaCodecMimeType = {}));
|
|
9002
|
-
var defaultGlobalMaxVideoFrameSize = 8160;
|
|
9003
|
-
var defaultGlobalMaxVideoMbps = 244800;
|
|
9004
|
-
var defaultMaxFrameSize = 3600;
|
|
9005
|
-
var maxFrameSizeToMaxBitrateMap = new Map([[60, 99000], [240, 199000], [576, 300000], [920, 640000], [1296, 720000], [2304, 880000], [3600, 2500000], [8160, 4000000]]);
|
|
9006
|
-
function parseFmtpParams(fmtpParams) {
|
|
9007
|
-
fmtpParams = fmtpParams.replace(/^a=fmtp:\d+\x20/, '');
|
|
9008
|
-
var fmtpObj = {};
|
|
9009
|
-
fmtpParams.split(';').forEach(param => {
|
|
9010
|
-
var paramArr = param && param.split('=');
|
|
9011
|
-
if (paramArr.length !== 2 || !paramArr[0] || !paramArr[1]) {
|
|
9012
|
-
throw new Error("Fmtp params is invalid with ".concat(fmtpParams));
|
|
9013
|
-
}
|
|
9014
|
-
fmtpObj[paramArr[0]] = paramArr[1];
|
|
9015
|
-
});
|
|
9016
|
-
return fmtpObj;
|
|
9017
|
-
}
|
|
9018
|
-
function areProfileLevelIdsCompatible(senderProfileLevelId, receiverProfileLevelId, levelAsymmetryAllowed) {
|
|
9019
|
-
var senderProfile = Number.parseInt("0x".concat(senderProfileLevelId), 16);
|
|
9020
|
-
var recvProfile = Number.parseInt("0x".concat(receiverProfileLevelId), 16);
|
|
9021
|
-
var senderProfileIdc = senderProfile >> 16;
|
|
9022
|
-
var recvProfileIdc = recvProfile >> 16;
|
|
9023
|
-
var senderProfileIop = (senderProfile & 0x00ff00) >> 8;
|
|
9024
|
-
var recvProfileIop = (recvProfile & 0x00ff00) >> 8;
|
|
9025
|
-
var senderLevelIdc = senderProfile & 0x0000ff;
|
|
9026
|
-
var recvLevelIdc = recvProfile & 0x0000ff;
|
|
9027
|
-
var areProfileCompatible = senderProfileIdc === recvProfileIdc && senderProfileIop === recvProfileIop || senderProfileIdc === 0x42 && recvProfileIdc === 0x42 && (senderProfileIop & 0x40) === (recvProfileIop & 0x40);
|
|
9028
|
-
var isLevelIdcCompatible = levelAsymmetryAllowed ? true : senderLevelIdc <= recvLevelIdc;
|
|
9029
|
-
return areProfileCompatible && isLevelIdcCompatible;
|
|
9030
|
-
}
|
|
9031
|
-
function areCodecsCompatible(senderCodec, receiverCodec) {
|
|
9032
|
-
return Object.keys(receiverCodec).every(key => {
|
|
9033
|
-
if (!senderCodec[key] || !receiverCodec[key]) {
|
|
9034
|
-
return false;
|
|
9035
|
-
}
|
|
9036
|
-
if (key === 'payloadType') {
|
|
9037
|
-
return true;
|
|
9038
|
-
}
|
|
9039
|
-
if (key === 'sdpFmtpLine') {
|
|
9040
|
-
var fmtpForSender = parseFmtpParams(senderCodec[key]);
|
|
9041
|
-
var fmtpForReceiver = parseFmtpParams(receiverCodec[key]);
|
|
9042
|
-
var levelAsymmetryAllowed = Object.keys(fmtpForSender).some(senderFmtpParamKey => {
|
|
9043
|
-
return senderFmtpParamKey === 'level-asymmetry-allowed' && fmtpForReceiver[senderFmtpParamKey] === '1' && fmtpForSender[senderFmtpParamKey] === '1';
|
|
9044
|
-
});
|
|
9045
|
-
return Object.keys(fmtpForSender).every(senderFmtpParamKey => {
|
|
9046
|
-
if (fmtpForReceiver[senderFmtpParamKey]) {
|
|
9047
|
-
if (senderFmtpParamKey === 'profile-level-id') {
|
|
9048
|
-
return areProfileLevelIdsCompatible(fmtpForSender[senderFmtpParamKey], fmtpForReceiver[senderFmtpParamKey], levelAsymmetryAllowed);
|
|
9049
|
-
}
|
|
9050
|
-
}
|
|
9051
|
-
if (senderFmtpParamKey === 'packetization-mode') {
|
|
9052
|
-
return fmtpForSender[senderFmtpParamKey] === fmtpForReceiver[senderFmtpParamKey];
|
|
9053
|
-
}
|
|
9054
|
-
return true;
|
|
9055
|
-
});
|
|
9056
|
-
}
|
|
9057
|
-
return senderCodec[key] === receiverCodec[key];
|
|
9058
|
-
});
|
|
9059
|
-
}
|
|
9060
|
-
function gcd(a, b) {
|
|
9061
|
-
return b === 0 ? a : gcd(b, a % b);
|
|
9062
|
-
}
|
|
9063
|
-
function getFrameHeightByMaxFs(sourceAspectRatio, requestedMaxFs) {
|
|
9064
|
-
var _gcd = gcd(sourceAspectRatio[0], sourceAspectRatio[1]);
|
|
9065
|
-
var minNumberRatiosForWidth = sourceAspectRatio[0] / _gcd;
|
|
9066
|
-
var minNumberRatiosForHeight = sourceAspectRatio[1] / _gcd;
|
|
9067
|
-
return Math.floor(Math.sqrt(requestedMaxFs * 16 * 16 / (minNumberRatiosForWidth * minNumberRatiosForHeight))) * minNumberRatiosForHeight;
|
|
9068
|
-
}
|
|
9069
|
-
function getScaleDownRatio(sourceAspectRatio, sourceHeight, requestedMaxFs) {
|
|
9070
|
-
return sourceHeight / getFrameHeightByMaxFs(sourceAspectRatio, requestedMaxFs);
|
|
9071
|
-
}
|
|
9072
|
-
function getMaxBitrate(requestedMaxFs) {
|
|
9073
|
-
var maxFs = requestedMaxFs || defaultMaxFrameSize;
|
|
9074
|
-
var expectedHeight = [...maxFrameSizeToMaxBitrateMap.keys()].sort((a, b) => b - a).find(h => maxFs >= h);
|
|
9075
|
-
return maxFrameSizeToMaxBitrateMap.get(expectedHeight);
|
|
9076
|
-
}
|
|
9077
9086
|
class MediaRequest {
|
|
9078
|
-
constructor(policy, policySpecificInfo, receiveSlots, codecInfos) {
|
|
9079
|
-
var _a, _b;
|
|
9087
|
+
constructor(policy, policySpecificInfo, receiveSlots, maxPayloadBitsPerSecond, codecInfos) {
|
|
9080
9088
|
this.policy = policy;
|
|
9081
9089
|
this.policySpecificInfo = policySpecificInfo;
|
|
9082
9090
|
this.receiveSlots = receiveSlots;
|
|
9083
|
-
this.maxPayloadBitsPerSecond =
|
|
9091
|
+
this.maxPayloadBitsPerSecond = maxPayloadBitsPerSecond;
|
|
9084
9092
|
this.codecInfos = codecInfos;
|
|
9085
9093
|
}
|
|
9086
9094
|
_toJmpScrRequest() {
|
|
@@ -9680,6 +9688,41 @@ var uuid_1 = require$$0;
|
|
|
9680
9688
|
var deepCopy$1 = function deepCopy$1(value) {
|
|
9681
9689
|
return JSON.parse(JSON.stringify(value));
|
|
9682
9690
|
};
|
|
9691
|
+
/**
|
|
9692
|
+
* Check deep equality between two values.
|
|
9693
|
+
*
|
|
9694
|
+
* @param value1 - First value to check.
|
|
9695
|
+
* @param value2 - Second value to check.
|
|
9696
|
+
* @returns True if values are deeply equal, false otherwise.
|
|
9697
|
+
*/
|
|
9698
|
+
var deepEqual = function deepEqual(value1, value2) {
|
|
9699
|
+
// If both immutable values are equal, return true.
|
|
9700
|
+
if (value1 === value2) {
|
|
9701
|
+
return true;
|
|
9702
|
+
}
|
|
9703
|
+
// If both are objects, we check the length and properties of each.
|
|
9704
|
+
if (value1 && value2 && typeof value1 === 'object' && typeof value2 === 'object') {
|
|
9705
|
+
if (value1.constructor !== value2.constructor) return false;
|
|
9706
|
+
// Return false if the objects are of different sizes.
|
|
9707
|
+
if (Object.keys(value1).length !== Object.keys(value2).length) {
|
|
9708
|
+
return false;
|
|
9709
|
+
}
|
|
9710
|
+
// Deep equal check each property in the opject.
|
|
9711
|
+
for (var prop in value1) {
|
|
9712
|
+
if (value2.hasOwnProperty(prop)) {
|
|
9713
|
+
if (!deepEqual(value1[prop], value2[prop])) {
|
|
9714
|
+
return false;
|
|
9715
|
+
}
|
|
9716
|
+
} else {
|
|
9717
|
+
return false;
|
|
9718
|
+
}
|
|
9719
|
+
}
|
|
9720
|
+
// Return true if we found no differing properties.
|
|
9721
|
+
return true;
|
|
9722
|
+
}
|
|
9723
|
+
// Return false if no other conditions are met.
|
|
9724
|
+
return false;
|
|
9725
|
+
};
|
|
9683
9726
|
/**
|
|
9684
9727
|
* Translates a RTCStatsReport into an object.
|
|
9685
9728
|
*
|
|
@@ -9696,6 +9739,18 @@ var map2obj = function map2obj(report) {
|
|
|
9696
9739
|
});
|
|
9697
9740
|
return o;
|
|
9698
9741
|
};
|
|
9742
|
+
var persistedKeys = ['type', 'id', 'timestamp'];
|
|
9743
|
+
/**
|
|
9744
|
+
* Check to see if the report consists of more than just the persisted metadata.
|
|
9745
|
+
*
|
|
9746
|
+
* @param report - The report line being checked.
|
|
9747
|
+
* @returns True if the report item contains non-persisted keys, false otherwise.
|
|
9748
|
+
*/
|
|
9749
|
+
var hasNonMetadata = function hasNonMetadata(report) {
|
|
9750
|
+
return !!Object.keys(report).filter(function (key) {
|
|
9751
|
+
return !persistedKeys.includes(key);
|
|
9752
|
+
}).length;
|
|
9753
|
+
};
|
|
9699
9754
|
/**
|
|
9700
9755
|
* Apply a delta compression to the stats report. Reduces size by ~90%.
|
|
9701
9756
|
* To reduce further, report keys could be compressed.
|
|
@@ -9708,19 +9763,21 @@ var deltaCompression = function deltaCompression(oldStats, newStats) {
|
|
|
9708
9763
|
var updatedStats = deepCopy$1(newStats);
|
|
9709
9764
|
Object.keys(updatedStats).forEach(function (id) {
|
|
9710
9765
|
var report = updatedStats[id];
|
|
9711
|
-
delete report.id;
|
|
9712
9766
|
if (!oldStats[id]) {
|
|
9713
9767
|
return;
|
|
9714
9768
|
}
|
|
9769
|
+
// Persist specific values beyond delta compression, as long as they
|
|
9770
|
+
// aren't the only non-deduped keys.
|
|
9715
9771
|
Object.keys(report).forEach(function (name) {
|
|
9716
|
-
if (report[name]
|
|
9772
|
+
if (deepEqual(report[name], oldStats[id][name]) && !persistedKeys.includes(name)) {
|
|
9717
9773
|
delete updatedStats[id][name];
|
|
9718
9774
|
}
|
|
9719
|
-
if (
|
|
9775
|
+
if (!hasNonMetadata(report)) {
|
|
9720
9776
|
delete updatedStats[id];
|
|
9721
9777
|
}
|
|
9722
9778
|
});
|
|
9723
9779
|
});
|
|
9780
|
+
// Use the most recent timestamp.
|
|
9724
9781
|
var timestamp = -Infinity;
|
|
9725
9782
|
Object.keys(updatedStats).forEach(function (id) {
|
|
9726
9783
|
var report = updatedStats[id];
|
|
@@ -9728,15 +9785,42 @@ var deltaCompression = function deltaCompression(oldStats, newStats) {
|
|
|
9728
9785
|
timestamp = report.timestamp;
|
|
9729
9786
|
}
|
|
9730
9787
|
});
|
|
9788
|
+
// Delete the timestamps on each item.
|
|
9731
9789
|
Object.keys(updatedStats).forEach(function (id) {
|
|
9732
9790
|
var report = updatedStats[id];
|
|
9733
9791
|
if (report.timestamp === timestamp) {
|
|
9734
|
-
report.timestamp
|
|
9792
|
+
delete report.timestamp;
|
|
9735
9793
|
}
|
|
9736
9794
|
});
|
|
9737
9795
|
updatedStats.timestamp = timestamp;
|
|
9738
9796
|
return updatedStats;
|
|
9739
9797
|
};
|
|
9798
|
+
/**
|
|
9799
|
+
* Format the stats report into an array.
|
|
9800
|
+
*
|
|
9801
|
+
* @param report - A WebRTC stats report.
|
|
9802
|
+
* @returns - An array of Stats Report items.
|
|
9803
|
+
*/
|
|
9804
|
+
var formatStatsReport = function formatStatsReport(report) {
|
|
9805
|
+
return Object.keys(report).filter(function (name) {
|
|
9806
|
+
return name !== 'timestamp';
|
|
9807
|
+
}).map(function (name) {
|
|
9808
|
+
return report[name];
|
|
9809
|
+
});
|
|
9810
|
+
};
|
|
9811
|
+
/**
|
|
9812
|
+
* Parametrize a single string event to contain type and an (empty) id.
|
|
9813
|
+
*
|
|
9814
|
+
* @param value - The value to parametrize.
|
|
9815
|
+
* @returns An event object.
|
|
9816
|
+
*/
|
|
9817
|
+
var makeEvent = function makeEvent(value) {
|
|
9818
|
+
return [{
|
|
9819
|
+
value: value,
|
|
9820
|
+
type: 'string',
|
|
9821
|
+
id: ''
|
|
9822
|
+
}];
|
|
9823
|
+
};
|
|
9740
9824
|
/**
|
|
9741
9825
|
* Attach a Peer Connection to periodically get updated on events and stats.
|
|
9742
9826
|
*
|
|
@@ -9759,51 +9843,50 @@ var rtcStats = function rtcStats(pc, logger, intervalTime, id, statsPreProcessor
|
|
|
9759
9843
|
/**
|
|
9760
9844
|
* Log stats or event data with additional tracking information.
|
|
9761
9845
|
*
|
|
9762
|
-
* @param
|
|
9846
|
+
* @param name - Name of the event to log.
|
|
9847
|
+
* @param payload - Log data pertaining to the event.
|
|
9763
9848
|
*/
|
|
9764
|
-
var trace = function trace(
|
|
9849
|
+
var trace = function trace(name, payload, timestamp) {
|
|
9765
9850
|
logger({
|
|
9766
|
-
name: '[rtcstats]',
|
|
9767
9851
|
id: id,
|
|
9768
|
-
|
|
9769
|
-
|
|
9852
|
+
timestamp: timestamp ? Math.round(timestamp) : Date.now(),
|
|
9853
|
+
name: name,
|
|
9854
|
+
payload: payload
|
|
9770
9855
|
});
|
|
9771
9856
|
};
|
|
9772
|
-
trace('creating stats report');
|
|
9773
9857
|
pc.addEventListener('icecandidate', function (e) {
|
|
9774
|
-
|
|
9858
|
+
if (e.candidate) {
|
|
9859
|
+
trace('onicecandidate', makeEvent(JSON.stringify(e.candidate)));
|
|
9860
|
+
}
|
|
9775
9861
|
});
|
|
9776
9862
|
pc.addEventListener('icecandidateerror', function (event) {
|
|
9777
9863
|
var _a = event,
|
|
9778
9864
|
errorCode = _a.errorCode,
|
|
9779
9865
|
errorText = _a.errorText;
|
|
9780
|
-
trace('onicecandidateerror',
|
|
9781
|
-
errorText: errorText,
|
|
9782
|
-
errorCode: errorCode
|
|
9783
|
-
});
|
|
9866
|
+
trace('onicecandidateerror', makeEvent("".concat(errorCode, ": ").concat(errorText)));
|
|
9784
9867
|
});
|
|
9785
9868
|
pc.addEventListener('track', function (e) {
|
|
9786
|
-
trace('ontrack', "".concat(e.track.kind, ":").concat(e.track.id, " ").concat(e.streams.map(function (stream) {
|
|
9869
|
+
trace('ontrack', makeEvent("".concat(e.track.kind, ":").concat(e.track.id, " ").concat(e.streams.map(function (stream) {
|
|
9787
9870
|
return "stream:".concat(stream.id);
|
|
9788
|
-
})));
|
|
9871
|
+
}).join(' '))));
|
|
9789
9872
|
});
|
|
9790
9873
|
pc.addEventListener('signalingstatechange', function () {
|
|
9791
|
-
trace('onsignalingstatechange', pc.signalingState);
|
|
9874
|
+
trace('onsignalingstatechange', makeEvent(pc.signalingState));
|
|
9792
9875
|
});
|
|
9793
9876
|
pc.addEventListener('iceconnectionstatechange', function () {
|
|
9794
|
-
trace('oniceconnectionstatechange', pc.iceConnectionState);
|
|
9877
|
+
trace('oniceconnectionstatechange', makeEvent(pc.iceConnectionState));
|
|
9795
9878
|
});
|
|
9796
9879
|
pc.addEventListener('icegatheringstatechange', function () {
|
|
9797
|
-
trace('onicegatheringstatechange', pc.iceGatheringState);
|
|
9880
|
+
trace('onicegatheringstatechange', makeEvent(pc.iceGatheringState));
|
|
9798
9881
|
});
|
|
9799
9882
|
pc.addEventListener('connectionstatechange', function () {
|
|
9800
|
-
trace('onconnectionstatechange', pc.connectionState);
|
|
9883
|
+
trace('onconnectionstatechange', makeEvent(pc.connectionState));
|
|
9801
9884
|
});
|
|
9802
9885
|
pc.addEventListener('negotiationneeded', function () {
|
|
9803
|
-
trace('onnegotiationneeded');
|
|
9886
|
+
trace('onnegotiationneeded', makeEvent('negotiationneeded'));
|
|
9804
9887
|
});
|
|
9805
9888
|
pc.addEventListener('datachannel', function (event) {
|
|
9806
|
-
trace('ondatachannel',
|
|
9889
|
+
trace('ondatachannel', makeEvent("".concat(event.channel.id, ": ").concat(event.channel.label)));
|
|
9807
9890
|
});
|
|
9808
9891
|
var interval = window.setInterval(function () {
|
|
9809
9892
|
if (pc.signalingState === 'closed') {
|
|
@@ -9814,7 +9897,8 @@ var rtcStats = function rtcStats(pc, logger, intervalTime, id, statsPreProcessor
|
|
|
9814
9897
|
var now = map2obj(res);
|
|
9815
9898
|
statsPreProcessor(now).then(function () {
|
|
9816
9899
|
var base = deepCopy$1(now); // our new prev
|
|
9817
|
-
|
|
9900
|
+
var compressed = deltaCompression(prev, now);
|
|
9901
|
+
trace('stats-report', formatStatsReport(compressed), compressed.timestamp !== -Infinity ? compressed.timestamp : undefined);
|
|
9818
9902
|
prev = base;
|
|
9819
9903
|
});
|
|
9820
9904
|
});
|
|
@@ -11057,6 +11141,88 @@ function hasCodec(codecName, mLine) {
|
|
|
11057
11141
|
return ((_a = ci.name) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === codecName.toLowerCase();
|
|
11058
11142
|
});
|
|
11059
11143
|
}
|
|
11144
|
+
var MediaCodecMimeType;
|
|
11145
|
+
(function (MediaCodecMimeType) {
|
|
11146
|
+
MediaCodecMimeType["H264"] = "video/H264";
|
|
11147
|
+
MediaCodecMimeType["AV1"] = "video/AV1";
|
|
11148
|
+
MediaCodecMimeType["OPUS"] = "audio/opus";
|
|
11149
|
+
})(MediaCodecMimeType || (MediaCodecMimeType = {}));
|
|
11150
|
+
var defaultMaxVideoEncodeFrameSize = 8160;
|
|
11151
|
+
var defaultMaxVideoEncodeMbps = 244800;
|
|
11152
|
+
var RecommendedOpusBitrates;
|
|
11153
|
+
(function (RecommendedOpusBitrates) {
|
|
11154
|
+
RecommendedOpusBitrates[RecommendedOpusBitrates["NB"] = 12000] = "NB";
|
|
11155
|
+
RecommendedOpusBitrates[RecommendedOpusBitrates["WB"] = 20000] = "WB";
|
|
11156
|
+
RecommendedOpusBitrates[RecommendedOpusBitrates["FB"] = 40000] = "FB";
|
|
11157
|
+
RecommendedOpusBitrates[RecommendedOpusBitrates["FB_MONO_MUSIC"] = 64000] = "FB_MONO_MUSIC";
|
|
11158
|
+
RecommendedOpusBitrates[RecommendedOpusBitrates["FB_STEREO_MUSIC"] = 128000] = "FB_STEREO_MUSIC";
|
|
11159
|
+
})(RecommendedOpusBitrates || (RecommendedOpusBitrates = {}));
|
|
11160
|
+
function parseFmtpParams(fmtpParams) {
|
|
11161
|
+
fmtpParams = fmtpParams.replace(/^a=fmtp:\d+\x20/, '');
|
|
11162
|
+
var fmtpObj = {};
|
|
11163
|
+
fmtpParams.split(';').forEach(param => {
|
|
11164
|
+
var paramArr = param && param.split('=');
|
|
11165
|
+
if (paramArr.length !== 2 || !paramArr[0] || !paramArr[1]) {
|
|
11166
|
+
throw new Error("Fmtp params is invalid with ".concat(fmtpParams));
|
|
11167
|
+
}
|
|
11168
|
+
fmtpObj[paramArr[0]] = paramArr[1];
|
|
11169
|
+
});
|
|
11170
|
+
return fmtpObj;
|
|
11171
|
+
}
|
|
11172
|
+
function areProfileLevelIdsCompatible(senderProfileLevelId, receiverProfileLevelId, levelAsymmetryAllowed) {
|
|
11173
|
+
var senderProfile = Number.parseInt("0x".concat(senderProfileLevelId), 16);
|
|
11174
|
+
var recvProfile = Number.parseInt("0x".concat(receiverProfileLevelId), 16);
|
|
11175
|
+
var senderProfileIdc = senderProfile >> 16;
|
|
11176
|
+
var recvProfileIdc = recvProfile >> 16;
|
|
11177
|
+
var senderProfileIop = (senderProfile & 0x00ff00) >> 8;
|
|
11178
|
+
var recvProfileIop = (recvProfile & 0x00ff00) >> 8;
|
|
11179
|
+
var senderLevelIdc = senderProfile & 0x0000ff;
|
|
11180
|
+
var recvLevelIdc = recvProfile & 0x0000ff;
|
|
11181
|
+
var areProfileCompatible = senderProfileIdc === recvProfileIdc && senderProfileIop === recvProfileIop || senderProfileIdc === 0x42 && recvProfileIdc === 0x42 && (senderProfileIop & 0x40) === (recvProfileIop & 0x40);
|
|
11182
|
+
var isLevelIdcCompatible = levelAsymmetryAllowed ? true : senderLevelIdc <= recvLevelIdc;
|
|
11183
|
+
return areProfileCompatible && isLevelIdcCompatible;
|
|
11184
|
+
}
|
|
11185
|
+
function areCodecsCompatible(senderCodec, receiverCodec) {
|
|
11186
|
+
return Object.keys(receiverCodec).every(key => {
|
|
11187
|
+
if (!senderCodec[key] || !receiverCodec[key]) {
|
|
11188
|
+
return false;
|
|
11189
|
+
}
|
|
11190
|
+
if (key === 'payloadType') {
|
|
11191
|
+
return true;
|
|
11192
|
+
}
|
|
11193
|
+
if (key === 'sdpFmtpLine') {
|
|
11194
|
+
var fmtpForSender = parseFmtpParams(senderCodec[key]);
|
|
11195
|
+
var fmtpForReceiver = parseFmtpParams(receiverCodec[key]);
|
|
11196
|
+
var levelAsymmetryAllowed = Object.keys(fmtpForSender).some(senderFmtpParamKey => {
|
|
11197
|
+
return senderFmtpParamKey === 'level-asymmetry-allowed' && fmtpForReceiver[senderFmtpParamKey] === '1' && fmtpForSender[senderFmtpParamKey] === '1';
|
|
11198
|
+
});
|
|
11199
|
+
return Object.keys(fmtpForSender).every(senderFmtpParamKey => {
|
|
11200
|
+
if (fmtpForReceiver[senderFmtpParamKey]) {
|
|
11201
|
+
if (senderFmtpParamKey === 'profile-level-id') {
|
|
11202
|
+
return areProfileLevelIdsCompatible(fmtpForSender[senderFmtpParamKey], fmtpForReceiver[senderFmtpParamKey], levelAsymmetryAllowed);
|
|
11203
|
+
}
|
|
11204
|
+
}
|
|
11205
|
+
if (senderFmtpParamKey === 'packetization-mode') {
|
|
11206
|
+
return fmtpForSender[senderFmtpParamKey] === fmtpForReceiver[senderFmtpParamKey];
|
|
11207
|
+
}
|
|
11208
|
+
return true;
|
|
11209
|
+
});
|
|
11210
|
+
}
|
|
11211
|
+
return senderCodec[key] === receiverCodec[key];
|
|
11212
|
+
});
|
|
11213
|
+
}
|
|
11214
|
+
function gcd(a, b) {
|
|
11215
|
+
return b === 0 ? a : gcd(b, a % b);
|
|
11216
|
+
}
|
|
11217
|
+
function getFrameHeightByMaxFs(sourceAspectRatio, requestedMaxFs) {
|
|
11218
|
+
var _gcd = gcd(sourceAspectRatio[0], sourceAspectRatio[1]);
|
|
11219
|
+
var minNumberRatiosForWidth = sourceAspectRatio[0] / _gcd;
|
|
11220
|
+
var minNumberRatiosForHeight = sourceAspectRatio[1] / _gcd;
|
|
11221
|
+
return Math.floor(Math.sqrt(requestedMaxFs * 16 * 16 / (minNumberRatiosForWidth * minNumberRatiosForHeight))) * minNumberRatiosForHeight;
|
|
11222
|
+
}
|
|
11223
|
+
function getScaleDownRatio(sourceAspectRatio, sourceHeight, requestedMaxFs) {
|
|
11224
|
+
return sourceHeight / getFrameHeightByMaxFs(sourceAspectRatio, requestedMaxFs);
|
|
11225
|
+
}
|
|
11060
11226
|
var events = {
|
|
11061
11227
|
exports: {}
|
|
11062
11228
|
};
|
|
@@ -11446,1894 +11612,1944 @@ function eventTargetAgnosticAddListener(emitter, name, listener, flags) {
|
|
|
11446
11612
|
}
|
|
11447
11613
|
}
|
|
11448
11614
|
class EventEmitter extends events.exports.EventEmitter {}
|
|
11449
|
-
var
|
|
11450
|
-
|
|
11451
|
-
|
|
11452
|
-
|
|
11453
|
-
|
|
11454
|
-
|
|
11455
|
-
|
|
11456
|
-
|
|
11457
|
-
|
|
11458
|
-
|
|
11459
|
-
|
|
11460
|
-
|
|
11461
|
-
|
|
11462
|
-
|
|
11463
|
-
|
|
11464
|
-
|
|
11465
|
-
|
|
11615
|
+
var OveruseState;
|
|
11616
|
+
(function (OveruseState) {
|
|
11617
|
+
OveruseState[OveruseState["NOT_OVERUSED"] = 0] = "NOT_OVERUSED";
|
|
11618
|
+
OveruseState[OveruseState["OVERUSED"] = 1] = "OVERUSED";
|
|
11619
|
+
})(OveruseState || (OveruseState = {}));
|
|
11620
|
+
class OveruseStateManager {
|
|
11621
|
+
constructor(callback) {
|
|
11622
|
+
this.monitors = [];
|
|
11623
|
+
this.lastOverallOveruseState = OveruseState.NOT_OVERUSED;
|
|
11624
|
+
this.isRunning = false;
|
|
11625
|
+
this.overuseUpdateCallback = callback;
|
|
11626
|
+
}
|
|
11627
|
+
addMonitor(monitor) {
|
|
11628
|
+
this.monitors.push(monitor);
|
|
11629
|
+
if (this.isRunning) {
|
|
11630
|
+
monitor.startMonitoring(() => this.onMonitorOveruseUpdate());
|
|
11631
|
+
}
|
|
11632
|
+
}
|
|
11633
|
+
start() {
|
|
11634
|
+
this.isRunning = true;
|
|
11635
|
+
this.monitors.forEach(monitor => monitor.startMonitoring(() => this.onMonitorOveruseUpdate()));
|
|
11636
|
+
}
|
|
11637
|
+
stop() {
|
|
11638
|
+
this.isRunning = false;
|
|
11639
|
+
this.monitors.forEach(monitor => monitor.stopMonitoring());
|
|
11640
|
+
}
|
|
11641
|
+
onMonitorOveruseUpdate() {
|
|
11642
|
+
var overuseStates = this.monitors.map(monitor => monitor.getLastOveruseState());
|
|
11643
|
+
var overallOveruseState = overuseStates.some(overuseState => overuseState === OveruseState.OVERUSED) ? OveruseState.OVERUSED : OveruseState.NOT_OVERUSED;
|
|
11644
|
+
if (overallOveruseState !== this.lastOverallOveruseState) {
|
|
11645
|
+
this.lastOverallOveruseState = overallOveruseState;
|
|
11646
|
+
this.overuseUpdateCallback(overallOveruseState);
|
|
11647
|
+
}
|
|
11648
|
+
}
|
|
11649
|
+
}
|
|
11650
|
+
var ReceiveSlotEvents;
|
|
11651
|
+
(function (ReceiveSlotEvents) {
|
|
11652
|
+
ReceiveSlotEvents["MediaStarted"] = "media-started";
|
|
11653
|
+
ReceiveSlotEvents["MediaStopped"] = "media-stopped";
|
|
11654
|
+
ReceiveSlotEvents["SourceUpdate"] = "source-update";
|
|
11655
|
+
})(ReceiveSlotEvents || (ReceiveSlotEvents = {}));
|
|
11656
|
+
class ReceiveSlot extends EventEmitter {
|
|
11657
|
+
constructor(idGetter, track) {
|
|
11658
|
+
super();
|
|
11659
|
+
this._idGetter = idGetter;
|
|
11660
|
+
this.handleTrackMuted = this.handleTrackMuted.bind(this);
|
|
11661
|
+
this.handleTrackUnmuted = this.handleTrackUnmuted.bind(this);
|
|
11662
|
+
this._stream = new MediaStream([track]);
|
|
11663
|
+
this.addTrackHandlers(track);
|
|
11664
|
+
}
|
|
11665
|
+
addTrackHandlers(track) {
|
|
11666
|
+
track.addEventListener('mute', this.handleTrackMuted);
|
|
11667
|
+
track.addEventListener('unmute', this.handleTrackUnmuted);
|
|
11668
|
+
}
|
|
11669
|
+
handleTrackMuted() {
|
|
11670
|
+
this.emit(ReceiveSlotEvents.MediaStopped);
|
|
11671
|
+
}
|
|
11672
|
+
handleTrackUnmuted() {
|
|
11673
|
+
this.emit(ReceiveSlotEvents.MediaStarted);
|
|
11674
|
+
}
|
|
11675
|
+
removeTrackHandlers(track) {
|
|
11676
|
+
track.removeEventListener('mute', this.handleTrackMuted);
|
|
11677
|
+
track.removeEventListener('unmute', this.handleTrackUnmuted);
|
|
11678
|
+
}
|
|
11679
|
+
replaceTrack(newTrack) {
|
|
11680
|
+
var _a;
|
|
11681
|
+
var trackToRemove = (_a = this._stream.getTracks()) === null || _a === void 0 ? void 0 : _a[0];
|
|
11682
|
+
if (trackToRemove) {
|
|
11683
|
+
this._stream.removeTrack(trackToRemove);
|
|
11684
|
+
this.removeTrackHandlers(trackToRemove);
|
|
11685
|
+
}
|
|
11686
|
+
this.addTrackHandlers(newTrack);
|
|
11687
|
+
this._stream.addTrack(newTrack);
|
|
11688
|
+
}
|
|
11689
|
+
_updateSource(state, csi) {
|
|
11690
|
+
this.currentRxCsi = csi;
|
|
11691
|
+
this.emit(ReceiveSlotEvents.SourceUpdate, state, csi);
|
|
11692
|
+
}
|
|
11693
|
+
close() {
|
|
11694
|
+
this._stream.getTracks().forEach(t => {
|
|
11695
|
+
this.removeTrackHandlers(t);
|
|
11696
|
+
});
|
|
11697
|
+
}
|
|
11698
|
+
get id() {
|
|
11699
|
+
return this._idGetter();
|
|
11700
|
+
}
|
|
11701
|
+
get stream() {
|
|
11702
|
+
return this._stream;
|
|
11703
|
+
}
|
|
11704
|
+
}
|
|
11705
|
+
ReceiveSlot.Events = ReceiveSlotEvents;
|
|
11706
|
+
class Transceiver {
|
|
11707
|
+
constructor(rtcRtpTransceiver) {
|
|
11708
|
+
this._rtcRtpTransceiver = rtcRtpTransceiver;
|
|
11709
|
+
}
|
|
11710
|
+
replaceTransceiver(newRtcRtpTransceiver) {
|
|
11711
|
+
this._rtcRtpTransceiver = newRtcRtpTransceiver;
|
|
11712
|
+
}
|
|
11713
|
+
get receiver() {
|
|
11714
|
+
return this._rtcRtpTransceiver.receiver;
|
|
11715
|
+
}
|
|
11716
|
+
get sender() {
|
|
11717
|
+
return this._rtcRtpTransceiver.sender;
|
|
11718
|
+
}
|
|
11719
|
+
get mid() {
|
|
11720
|
+
return this._rtcRtpTransceiver.mid;
|
|
11721
|
+
}
|
|
11722
|
+
close() {
|
|
11723
|
+
this._rtcRtpTransceiver.stop();
|
|
11724
|
+
}
|
|
11725
|
+
}
|
|
11726
|
+
class ReceiveOnlyTransceiver extends Transceiver {
|
|
11727
|
+
constructor(rtcRtpTransceiver, idGetter) {
|
|
11728
|
+
super(rtcRtpTransceiver);
|
|
11729
|
+
this._receiveSlot = new ReceiveSlot(() => {
|
|
11730
|
+
if (!this._rtcRtpTransceiver.mid) {
|
|
11731
|
+
return null;
|
|
11466
11732
|
}
|
|
11467
|
-
return
|
|
11468
|
-
|
|
11469
|
-
|
|
11470
|
-
|
|
11471
|
-
|
|
11472
|
-
|
|
11473
|
-
|
|
11474
|
-
|
|
11475
|
-
|
|
11476
|
-
|
|
11733
|
+
return idGetter(this._rtcRtpTransceiver.mid);
|
|
11734
|
+
}, this._rtcRtpTransceiver.receiver.track);
|
|
11735
|
+
}
|
|
11736
|
+
replaceTransceiver(newRtcRtpTransceiver) {
|
|
11737
|
+
super.replaceTransceiver(newRtcRtpTransceiver);
|
|
11738
|
+
this._receiveSlot.replaceTrack(newRtcRtpTransceiver.receiver.track);
|
|
11739
|
+
}
|
|
11740
|
+
close() {
|
|
11741
|
+
super.close();
|
|
11742
|
+
this._receiveSlot.close();
|
|
11743
|
+
}
|
|
11744
|
+
get receiveSlot() {
|
|
11745
|
+
return this._receiveSlot;
|
|
11746
|
+
}
|
|
11747
|
+
getStats() {
|
|
11748
|
+
return this.receiver.getStats();
|
|
11749
|
+
}
|
|
11750
|
+
}
|
|
11751
|
+
ReceiveOnlyTransceiver.rid = '1';
|
|
11752
|
+
class JmpLine extends Line {
|
|
11753
|
+
static fromSdpLine(line) {
|
|
11754
|
+
if (!JmpLine.regex.test(line)) {
|
|
11755
|
+
return undefined;
|
|
11756
|
+
}
|
|
11757
|
+
return new JmpLine();
|
|
11758
|
+
}
|
|
11759
|
+
toSdpLine() {
|
|
11760
|
+
return "a=jmp";
|
|
11761
|
+
}
|
|
11762
|
+
}
|
|
11763
|
+
JmpLine.regex = /^jmp$/;
|
|
11764
|
+
class JmpStreamIdModeLine extends Line {
|
|
11765
|
+
constructor(streamIdMode) {
|
|
11766
|
+
super();
|
|
11767
|
+
this.streamIdMode = streamIdMode;
|
|
11768
|
+
}
|
|
11769
|
+
static fromSdpLine(line) {
|
|
11770
|
+
if (!JmpStreamIdModeLine.regex.test(line)) {
|
|
11771
|
+
return undefined;
|
|
11772
|
+
}
|
|
11773
|
+
var tokens = line.match(JmpStreamIdModeLine.regex);
|
|
11774
|
+
var mode = tokens[1];
|
|
11775
|
+
return new JmpStreamIdModeLine(mode);
|
|
11776
|
+
}
|
|
11777
|
+
toSdpLine() {
|
|
11778
|
+
return "a=jmp-stream-id-mode:".concat(this.streamIdMode);
|
|
11779
|
+
}
|
|
11780
|
+
}
|
|
11781
|
+
JmpStreamIdModeLine.regex = /^jmp-stream-id-mode:(MID-RID|SSRC)$/;
|
|
11782
|
+
class JmpSourceLine extends Line {
|
|
11783
|
+
constructor(source, csi) {
|
|
11784
|
+
super();
|
|
11785
|
+
this.source = source;
|
|
11786
|
+
this.csi = csi;
|
|
11787
|
+
}
|
|
11788
|
+
static fromSdpLine(line) {
|
|
11789
|
+
if (!JmpSourceLine.regex.test(line)) {
|
|
11790
|
+
return undefined;
|
|
11791
|
+
}
|
|
11792
|
+
var tokens = line.match(JmpSourceLine.regex);
|
|
11793
|
+
var source = tokens[1];
|
|
11794
|
+
var csi = tokens[2];
|
|
11795
|
+
return new JmpSourceLine(source, csi);
|
|
11796
|
+
}
|
|
11797
|
+
toSdpLine() {
|
|
11798
|
+
var line = "a=jmp-source:".concat(this.source);
|
|
11799
|
+
if (this.csi) {
|
|
11800
|
+
line += " csi=".concat(this.csi);
|
|
11801
|
+
}
|
|
11802
|
+
return line;
|
|
11803
|
+
}
|
|
11804
|
+
}
|
|
11805
|
+
JmpSourceLine.regex = new RegExp("^jmp-source:(".concat(ANY_NON_WS, ") (?:csi=(").concat(ANY_NON_WS, "))"));
|
|
11806
|
+
DefaultSdpGrammar.addParser('a', JmpLine.fromSdpLine);
|
|
11807
|
+
DefaultSdpGrammar.addParser('a', JmpSourceLine.fromSdpLine);
|
|
11808
|
+
DefaultSdpGrammar.addParser('a', JmpStreamIdModeLine.fromSdpLine);
|
|
11809
|
+
function deepCopy(source) {
|
|
11810
|
+
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) => {
|
|
11811
|
+
Object.defineProperty(o, prop, Object.getOwnPropertyDescriptor(source, prop));
|
|
11812
|
+
o[prop] = deepCopy(source[prop]);
|
|
11813
|
+
return o;
|
|
11814
|
+
}, Object.create(Object.getPrototypeOf(source))) : source;
|
|
11815
|
+
}
|
|
11816
|
+
function getMediaTypeForMline(mLine) {
|
|
11817
|
+
var _a, _b;
|
|
11818
|
+
var mediaFamily;
|
|
11819
|
+
if (mLine.type.toLowerCase() === MediaFamily$1.Audio.toLowerCase()) {
|
|
11820
|
+
mediaFamily = MediaFamily$1.Audio;
|
|
11821
|
+
} else if (mLine.type.toLowerCase() === MediaFamily$1.Video.toLowerCase()) {
|
|
11822
|
+
mediaFamily = MediaFamily$1.Video;
|
|
11823
|
+
} else {
|
|
11824
|
+
throw Error("Mline type doesn't match any known MediaFamily: ".concat(mLine.type));
|
|
11825
|
+
}
|
|
11826
|
+
var mediaContent;
|
|
11827
|
+
if ((_b = (_a = mLine.content) === null || _a === void 0 ? void 0 : _a.values) === null || _b === void 0 ? void 0 : _b.some(v => v.toLowerCase() === 'slides')) {
|
|
11828
|
+
mediaContent = MediaContent$1.Slides;
|
|
11829
|
+
} else {
|
|
11830
|
+
mediaContent = MediaContent$1.Main;
|
|
11831
|
+
}
|
|
11832
|
+
return getMediaType(mediaFamily, mediaContent);
|
|
11833
|
+
}
|
|
11834
|
+
function filterCodecs(parsedSdp, allowedCodecs) {
|
|
11835
|
+
var allowedLowerCase = allowedCodecs.map(s => s.toLowerCase());
|
|
11836
|
+
parsedSdp.avMedia.map(m => [...m.codecs.values()].map(c => c.name)).flat().filter(codecName => !allowedLowerCase.includes(codecName.toLowerCase())).forEach(c => removeCodec(parsedSdp, c));
|
|
11837
|
+
}
|
|
11838
|
+
function setMaxBandwidth(parsedSdp, maxBandwidth) {
|
|
11839
|
+
parsedSdp.avMedia.forEach(mline => {
|
|
11840
|
+
mline.bandwidth = new BandwidthLine('TIAS', maxBandwidth);
|
|
11841
|
+
});
|
|
11842
|
+
}
|
|
11843
|
+
function setupBundle(parsedSdp, bundlePolicy) {
|
|
11844
|
+
if (bundlePolicy === 'compat') {
|
|
11845
|
+
var audioMids = parsedSdp.avMedia.filter(m => m.type === 'audio').map(m => m.mid);
|
|
11846
|
+
var videoMids = parsedSdp.avMedia.filter(m => m.type === 'video').map(m => m.mid);
|
|
11847
|
+
parsedSdp.session.groups.splice(0, parsedSdp.session.groups.length);
|
|
11848
|
+
parsedSdp.session.groups.push(new BundleGroupLine(audioMids));
|
|
11849
|
+
parsedSdp.session.groups.push(new BundleGroupLine(videoMids));
|
|
11850
|
+
}
|
|
11851
|
+
}
|
|
11852
|
+
function filterRecvOnlyMlines(parsedSdp) {
|
|
11853
|
+
var filteredMids = [];
|
|
11854
|
+
parsedSdp.media = parsedSdp.media.filter(mLine => {
|
|
11855
|
+
if (mLine instanceof ApplicationMediaDescription || mLine instanceof AvMediaDescription && mLine.direction !== 'recvonly') {
|
|
11856
|
+
filteredMids.push(mLine.mid);
|
|
11857
|
+
return true;
|
|
11858
|
+
}
|
|
11859
|
+
return false;
|
|
11860
|
+
});
|
|
11861
|
+
parsedSdp.session.groups.forEach(g => {
|
|
11862
|
+
g.mids = g.mids.filter(m => filteredMids.includes(m));
|
|
11863
|
+
});
|
|
11864
|
+
}
|
|
11865
|
+
function matchMlinesInAnswer(parsedOffer, parsedAnswer, streamSignalerManager) {
|
|
11866
|
+
parsedAnswer.session.groups = parsedOffer.session.groups;
|
|
11867
|
+
parsedAnswer.media = parsedOffer.media.map(offerMline => {
|
|
11868
|
+
if (!offerMline.mid) {
|
|
11869
|
+
throw new Error("Offer mline is missing MID");
|
|
11870
|
+
}
|
|
11871
|
+
var answerMline = parsedAnswer.media.find(m => m.mid === offerMline.mid);
|
|
11872
|
+
if (answerMline) {
|
|
11873
|
+
if (answerMline instanceof AvMediaDescription) {
|
|
11874
|
+
[...answerMline.codecs.values()].forEach(ci => {
|
|
11875
|
+
ci.fmtParams.push('x-google-start-bitrate=60000');
|
|
11477
11876
|
});
|
|
11478
|
-
}, r.t = function (e, t) {
|
|
11479
|
-
if (1 & t && (e = r(e)), 8 & t) return e;
|
|
11480
|
-
if (4 & t && "object" == typeof e && e && e.__esModule) return e;
|
|
11481
|
-
var n = Object.create(null);
|
|
11482
|
-
if (r.r(n), Object.defineProperty(n, "default", {
|
|
11483
|
-
enumerable: !0,
|
|
11484
|
-
value: e
|
|
11485
|
-
}), 2 & t && "string" != typeof e) for (var i in e) {
|
|
11486
|
-
r.d(n, i, function (t) {
|
|
11487
|
-
return e[t];
|
|
11488
|
-
}.bind(null, i));
|
|
11489
|
-
}
|
|
11490
|
-
return n;
|
|
11491
|
-
}, r.n = function (e) {
|
|
11492
|
-
var t = e && e.__esModule ? function () {
|
|
11493
|
-
return e.default;
|
|
11494
|
-
} : function () {
|
|
11495
|
-
return e;
|
|
11496
|
-
};
|
|
11497
|
-
return r.d(t, "a", t), t;
|
|
11498
|
-
}, r.o = function (e, t) {
|
|
11499
|
-
return Object.prototype.hasOwnProperty.call(e, t);
|
|
11500
|
-
}, r.p = "", r(r.s = 90);
|
|
11501
|
-
}({
|
|
11502
|
-
17: function _(e, t, r) {
|
|
11503
|
-
t.__esModule = !0, t.default = void 0;
|
|
11504
|
-
var n = r(18),
|
|
11505
|
-
i = function () {
|
|
11506
|
-
function e() {}
|
|
11507
|
-
return e.getFirstMatch = function (e, t) {
|
|
11508
|
-
var r = t.match(e);
|
|
11509
|
-
return r && r.length > 0 && r[1] || "";
|
|
11510
|
-
}, e.getSecondMatch = function (e, t) {
|
|
11511
|
-
var r = t.match(e);
|
|
11512
|
-
return r && r.length > 1 && r[2] || "";
|
|
11513
|
-
}, e.matchAndReturnConst = function (e, t, r) {
|
|
11514
|
-
if (e.test(t)) return r;
|
|
11515
|
-
}, e.getWindowsVersionName = function (e) {
|
|
11516
|
-
switch (e) {
|
|
11517
|
-
case "NT":
|
|
11518
|
-
return "NT";
|
|
11519
|
-
case "XP":
|
|
11520
|
-
return "XP";
|
|
11521
|
-
case "NT 5.0":
|
|
11522
|
-
return "2000";
|
|
11523
|
-
case "NT 5.1":
|
|
11524
|
-
return "XP";
|
|
11525
|
-
case "NT 5.2":
|
|
11526
|
-
return "2003";
|
|
11527
|
-
case "NT 6.0":
|
|
11528
|
-
return "Vista";
|
|
11529
|
-
case "NT 6.1":
|
|
11530
|
-
return "7";
|
|
11531
|
-
case "NT 6.2":
|
|
11532
|
-
return "8";
|
|
11533
|
-
case "NT 6.3":
|
|
11534
|
-
return "8.1";
|
|
11535
|
-
case "NT 10.0":
|
|
11536
|
-
return "10";
|
|
11537
|
-
default:
|
|
11538
|
-
return;
|
|
11539
|
-
}
|
|
11540
|
-
}, e.getMacOSVersionName = function (e) {
|
|
11541
|
-
var t = e.split(".").splice(0, 2).map(function (e) {
|
|
11542
|
-
return parseInt(e, 10) || 0;
|
|
11543
|
-
});
|
|
11544
|
-
if (t.push(0), 10 === t[0]) switch (t[1]) {
|
|
11545
|
-
case 5:
|
|
11546
|
-
return "Leopard";
|
|
11547
|
-
case 6:
|
|
11548
|
-
return "Snow Leopard";
|
|
11549
|
-
case 7:
|
|
11550
|
-
return "Lion";
|
|
11551
|
-
case 8:
|
|
11552
|
-
return "Mountain Lion";
|
|
11553
|
-
case 9:
|
|
11554
|
-
return "Mavericks";
|
|
11555
|
-
case 10:
|
|
11556
|
-
return "Yosemite";
|
|
11557
|
-
case 11:
|
|
11558
|
-
return "El Capitan";
|
|
11559
|
-
case 12:
|
|
11560
|
-
return "Sierra";
|
|
11561
|
-
case 13:
|
|
11562
|
-
return "High Sierra";
|
|
11563
|
-
case 14:
|
|
11564
|
-
return "Mojave";
|
|
11565
|
-
case 15:
|
|
11566
|
-
return "Catalina";
|
|
11567
|
-
default:
|
|
11568
|
-
return;
|
|
11569
|
-
}
|
|
11570
|
-
}, e.getAndroidVersionName = function (e) {
|
|
11571
|
-
var t = e.split(".").splice(0, 2).map(function (e) {
|
|
11572
|
-
return parseInt(e, 10) || 0;
|
|
11573
|
-
});
|
|
11574
|
-
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;
|
|
11575
|
-
}, e.getVersionPrecision = function (e) {
|
|
11576
|
-
return e.split(".").length;
|
|
11577
|
-
}, e.compareVersions = function (t, r, n) {
|
|
11578
|
-
void 0 === n && (n = !1);
|
|
11579
|
-
var i = e.getVersionPrecision(t),
|
|
11580
|
-
s = e.getVersionPrecision(r),
|
|
11581
|
-
a = Math.max(i, s),
|
|
11582
|
-
o = 0,
|
|
11583
|
-
u = e.map([t, r], function (t) {
|
|
11584
|
-
var r = a - e.getVersionPrecision(t),
|
|
11585
|
-
n = t + new Array(r + 1).join(".0");
|
|
11586
|
-
return e.map(n.split("."), function (e) {
|
|
11587
|
-
return new Array(20 - e.length).join("0") + e;
|
|
11588
|
-
}).reverse();
|
|
11589
|
-
});
|
|
11590
|
-
for (n && (o = a - Math.min(i, s)), a -= 1; a >= o;) {
|
|
11591
|
-
if (u[0][a] > u[1][a]) return 1;
|
|
11592
|
-
if (u[0][a] === u[1][a]) {
|
|
11593
|
-
if (a === o) return 0;
|
|
11594
|
-
a -= 1;
|
|
11595
|
-
} else if (u[0][a] < u[1][a]) return -1;
|
|
11596
|
-
}
|
|
11597
|
-
}, e.map = function (e, t) {
|
|
11598
|
-
var r,
|
|
11599
|
-
n = [];
|
|
11600
|
-
if (Array.prototype.map) return Array.prototype.map.call(e, t);
|
|
11601
|
-
for (r = 0; r < e.length; r += 1) {
|
|
11602
|
-
n.push(t(e[r]));
|
|
11603
|
-
}
|
|
11604
|
-
return n;
|
|
11605
|
-
}, e.find = function (e, t) {
|
|
11606
|
-
var r, n;
|
|
11607
|
-
if (Array.prototype.find) return Array.prototype.find.call(e, t);
|
|
11608
|
-
for (r = 0, n = e.length; r < n; r += 1) {
|
|
11609
|
-
var i = e[r];
|
|
11610
|
-
if (t(i, r)) return i;
|
|
11611
|
-
}
|
|
11612
|
-
}, e.assign = function (e) {
|
|
11613
|
-
for (var t, r, n = e, i = arguments.length, s = new Array(i > 1 ? i - 1 : 0), a = 1; a < i; a++) {
|
|
11614
|
-
s[a - 1] = arguments[a];
|
|
11615
|
-
}
|
|
11616
|
-
if (Object.assign) return Object.assign.apply(Object, [e].concat(s));
|
|
11617
|
-
var o = function o() {
|
|
11618
|
-
var e = s[t];
|
|
11619
|
-
"object" == typeof e && null !== e && Object.keys(e).forEach(function (t) {
|
|
11620
|
-
n[t] = e[t];
|
|
11621
|
-
});
|
|
11622
|
-
};
|
|
11623
|
-
for (t = 0, r = s.length; t < r; t += 1) {
|
|
11624
|
-
o();
|
|
11625
|
-
}
|
|
11626
|
-
return e;
|
|
11627
|
-
}, e.getBrowserAlias = function (e) {
|
|
11628
|
-
return n.BROWSER_ALIASES_MAP[e];
|
|
11629
|
-
}, e.getBrowserTypeByAlias = function (e) {
|
|
11630
|
-
return n.BROWSER_MAP[e] || "";
|
|
11631
|
-
}, e;
|
|
11632
|
-
}();
|
|
11633
|
-
t.default = i, e.exports = t.default;
|
|
11634
|
-
},
|
|
11635
|
-
18: function _(e, t, r) {
|
|
11636
|
-
t.__esModule = !0, t.ENGINE_MAP = t.OS_MAP = t.PLATFORMS_MAP = t.BROWSER_MAP = t.BROWSER_ALIASES_MAP = void 0;
|
|
11637
|
-
t.BROWSER_ALIASES_MAP = {
|
|
11638
|
-
"Amazon Silk": "amazon_silk",
|
|
11639
|
-
"Android Browser": "android",
|
|
11640
|
-
Bada: "bada",
|
|
11641
|
-
BlackBerry: "blackberry",
|
|
11642
|
-
Chrome: "chrome",
|
|
11643
|
-
Chromium: "chromium",
|
|
11644
|
-
Electron: "electron",
|
|
11645
|
-
Epiphany: "epiphany",
|
|
11646
|
-
Firefox: "firefox",
|
|
11647
|
-
Focus: "focus",
|
|
11648
|
-
Generic: "generic",
|
|
11649
|
-
"Google Search": "google_search",
|
|
11650
|
-
Googlebot: "googlebot",
|
|
11651
|
-
"Internet Explorer": "ie",
|
|
11652
|
-
"K-Meleon": "k_meleon",
|
|
11653
|
-
Maxthon: "maxthon",
|
|
11654
|
-
"Microsoft Edge": "edge",
|
|
11655
|
-
"MZ Browser": "mz",
|
|
11656
|
-
"NAVER Whale Browser": "naver",
|
|
11657
|
-
Opera: "opera",
|
|
11658
|
-
"Opera Coast": "opera_coast",
|
|
11659
|
-
PhantomJS: "phantomjs",
|
|
11660
|
-
Puffin: "puffin",
|
|
11661
|
-
QupZilla: "qupzilla",
|
|
11662
|
-
QQ: "qq",
|
|
11663
|
-
QQLite: "qqlite",
|
|
11664
|
-
Safari: "safari",
|
|
11665
|
-
Sailfish: "sailfish",
|
|
11666
|
-
"Samsung Internet for Android": "samsung_internet",
|
|
11667
|
-
SeaMonkey: "seamonkey",
|
|
11668
|
-
Sleipnir: "sleipnir",
|
|
11669
|
-
Swing: "swing",
|
|
11670
|
-
Tizen: "tizen",
|
|
11671
|
-
"UC Browser": "uc",
|
|
11672
|
-
Vivaldi: "vivaldi",
|
|
11673
|
-
"WebOS Browser": "webos",
|
|
11674
|
-
WeChat: "wechat",
|
|
11675
|
-
"Yandex Browser": "yandex",
|
|
11676
|
-
Roku: "roku"
|
|
11677
|
-
};
|
|
11678
|
-
t.BROWSER_MAP = {
|
|
11679
|
-
amazon_silk: "Amazon Silk",
|
|
11680
|
-
android: "Android Browser",
|
|
11681
|
-
bada: "Bada",
|
|
11682
|
-
blackberry: "BlackBerry",
|
|
11683
|
-
chrome: "Chrome",
|
|
11684
|
-
chromium: "Chromium",
|
|
11685
|
-
electron: "Electron",
|
|
11686
|
-
epiphany: "Epiphany",
|
|
11687
|
-
firefox: "Firefox",
|
|
11688
|
-
focus: "Focus",
|
|
11689
|
-
generic: "Generic",
|
|
11690
|
-
googlebot: "Googlebot",
|
|
11691
|
-
google_search: "Google Search",
|
|
11692
|
-
ie: "Internet Explorer",
|
|
11693
|
-
k_meleon: "K-Meleon",
|
|
11694
|
-
maxthon: "Maxthon",
|
|
11695
|
-
edge: "Microsoft Edge",
|
|
11696
|
-
mz: "MZ Browser",
|
|
11697
|
-
naver: "NAVER Whale Browser",
|
|
11698
|
-
opera: "Opera",
|
|
11699
|
-
opera_coast: "Opera Coast",
|
|
11700
|
-
phantomjs: "PhantomJS",
|
|
11701
|
-
puffin: "Puffin",
|
|
11702
|
-
qupzilla: "QupZilla",
|
|
11703
|
-
qq: "QQ Browser",
|
|
11704
|
-
qqlite: "QQ Browser Lite",
|
|
11705
|
-
safari: "Safari",
|
|
11706
|
-
sailfish: "Sailfish",
|
|
11707
|
-
samsung_internet: "Samsung Internet for Android",
|
|
11708
|
-
seamonkey: "SeaMonkey",
|
|
11709
|
-
sleipnir: "Sleipnir",
|
|
11710
|
-
swing: "Swing",
|
|
11711
|
-
tizen: "Tizen",
|
|
11712
|
-
uc: "UC Browser",
|
|
11713
|
-
vivaldi: "Vivaldi",
|
|
11714
|
-
webos: "WebOS Browser",
|
|
11715
|
-
wechat: "WeChat",
|
|
11716
|
-
yandex: "Yandex Browser"
|
|
11717
|
-
};
|
|
11718
|
-
t.PLATFORMS_MAP = {
|
|
11719
|
-
tablet: "tablet",
|
|
11720
|
-
mobile: "mobile",
|
|
11721
|
-
desktop: "desktop",
|
|
11722
|
-
tv: "tv"
|
|
11723
|
-
};
|
|
11724
|
-
t.OS_MAP = {
|
|
11725
|
-
WindowsPhone: "Windows Phone",
|
|
11726
|
-
Windows: "Windows",
|
|
11727
|
-
MacOS: "macOS",
|
|
11728
|
-
iOS: "iOS",
|
|
11729
|
-
Android: "Android",
|
|
11730
|
-
WebOS: "WebOS",
|
|
11731
|
-
BlackBerry: "BlackBerry",
|
|
11732
|
-
Bada: "Bada",
|
|
11733
|
-
Tizen: "Tizen",
|
|
11734
|
-
Linux: "Linux",
|
|
11735
|
-
ChromeOS: "Chrome OS",
|
|
11736
|
-
PlayStation4: "PlayStation 4",
|
|
11737
|
-
Roku: "Roku"
|
|
11738
|
-
};
|
|
11739
|
-
t.ENGINE_MAP = {
|
|
11740
|
-
EdgeHTML: "EdgeHTML",
|
|
11741
|
-
Blink: "Blink",
|
|
11742
|
-
Trident: "Trident",
|
|
11743
|
-
Presto: "Presto",
|
|
11744
|
-
Gecko: "Gecko",
|
|
11745
|
-
WebKit: "WebKit"
|
|
11746
|
-
};
|
|
11747
|
-
},
|
|
11748
|
-
90: function _(e, t, r) {
|
|
11749
|
-
t.__esModule = !0, t.default = void 0;
|
|
11750
|
-
var n,
|
|
11751
|
-
i = (n = r(91)) && n.__esModule ? n : {
|
|
11752
|
-
default: n
|
|
11753
|
-
},
|
|
11754
|
-
s = r(18);
|
|
11755
|
-
function a(e, t) {
|
|
11756
|
-
for (var r = 0; r < t.length; r++) {
|
|
11757
|
-
var n = t[r];
|
|
11758
|
-
n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(e, n.key, n);
|
|
11759
|
-
}
|
|
11760
|
-
}
|
|
11761
|
-
var o = function () {
|
|
11762
|
-
function e() {}
|
|
11763
|
-
var t, r, n;
|
|
11764
|
-
return e.getParser = function (e, t) {
|
|
11765
|
-
if (void 0 === t && (t = !1), "string" != typeof e) throw new Error("UserAgent should be a string");
|
|
11766
|
-
return new i.default(e, t);
|
|
11767
|
-
}, e.parse = function (e) {
|
|
11768
|
-
return new i.default(e).getResult();
|
|
11769
|
-
}, t = e, n = [{
|
|
11770
|
-
key: "BROWSER_MAP",
|
|
11771
|
-
get: function get() {
|
|
11772
|
-
return s.BROWSER_MAP;
|
|
11773
|
-
}
|
|
11774
|
-
}, {
|
|
11775
|
-
key: "ENGINE_MAP",
|
|
11776
|
-
get: function get() {
|
|
11777
|
-
return s.ENGINE_MAP;
|
|
11778
|
-
}
|
|
11779
|
-
}, {
|
|
11780
|
-
key: "OS_MAP",
|
|
11781
|
-
get: function get() {
|
|
11782
|
-
return s.OS_MAP;
|
|
11783
|
-
}
|
|
11784
|
-
}, {
|
|
11785
|
-
key: "PLATFORMS_MAP",
|
|
11786
|
-
get: function get() {
|
|
11787
|
-
return s.PLATFORMS_MAP;
|
|
11788
|
-
}
|
|
11789
|
-
}], (r = null) && a(t.prototype, r), n && a(t, n), e;
|
|
11790
|
-
}();
|
|
11791
|
-
t.default = o, e.exports = t.default;
|
|
11792
|
-
},
|
|
11793
|
-
91: function _(e, t, r) {
|
|
11794
|
-
t.__esModule = !0, t.default = void 0;
|
|
11795
|
-
var n = u(r(92)),
|
|
11796
|
-
i = u(r(93)),
|
|
11797
|
-
s = u(r(94)),
|
|
11798
|
-
a = u(r(95)),
|
|
11799
|
-
o = u(r(17));
|
|
11800
|
-
function u(e) {
|
|
11801
|
-
return e && e.__esModule ? e : {
|
|
11802
|
-
default: e
|
|
11803
|
-
};
|
|
11804
|
-
}
|
|
11805
|
-
var d = function () {
|
|
11806
|
-
function e(e, t) {
|
|
11807
|
-
if (void 0 === t && (t = !1), null == e || "" === e) throw new Error("UserAgent parameter can't be empty");
|
|
11808
|
-
this._ua = e, this.parsedResult = {}, !0 !== t && this.parse();
|
|
11809
|
-
}
|
|
11810
|
-
var t = e.prototype;
|
|
11811
|
-
return t.getUA = function () {
|
|
11812
|
-
return this._ua;
|
|
11813
|
-
}, t.test = function (e) {
|
|
11814
|
-
return e.test(this._ua);
|
|
11815
|
-
}, t.parseBrowser = function () {
|
|
11816
|
-
var e = this;
|
|
11817
|
-
this.parsedResult.browser = {};
|
|
11818
|
-
var t = o.default.find(n.default, function (t) {
|
|
11819
|
-
if ("function" == typeof t.test) return t.test(e);
|
|
11820
|
-
if (t.test instanceof Array) return t.test.some(function (t) {
|
|
11821
|
-
return e.test(t);
|
|
11822
|
-
});
|
|
11823
|
-
throw new Error("Browser's test function is not valid");
|
|
11824
|
-
});
|
|
11825
|
-
return t && (this.parsedResult.browser = t.describe(this.getUA())), this.parsedResult.browser;
|
|
11826
|
-
}, t.getBrowser = function () {
|
|
11827
|
-
return this.parsedResult.browser ? this.parsedResult.browser : this.parseBrowser();
|
|
11828
|
-
}, t.getBrowserName = function (e) {
|
|
11829
|
-
return e ? String(this.getBrowser().name).toLowerCase() || "" : this.getBrowser().name || "";
|
|
11830
|
-
}, t.getBrowserVersion = function () {
|
|
11831
|
-
return this.getBrowser().version;
|
|
11832
|
-
}, t.getOS = function () {
|
|
11833
|
-
return this.parsedResult.os ? this.parsedResult.os : this.parseOS();
|
|
11834
|
-
}, t.parseOS = function () {
|
|
11835
|
-
var e = this;
|
|
11836
|
-
this.parsedResult.os = {};
|
|
11837
|
-
var t = o.default.find(i.default, function (t) {
|
|
11838
|
-
if ("function" == typeof t.test) return t.test(e);
|
|
11839
|
-
if (t.test instanceof Array) return t.test.some(function (t) {
|
|
11840
|
-
return e.test(t);
|
|
11841
|
-
});
|
|
11842
|
-
throw new Error("Browser's test function is not valid");
|
|
11843
|
-
});
|
|
11844
|
-
return t && (this.parsedResult.os = t.describe(this.getUA())), this.parsedResult.os;
|
|
11845
|
-
}, t.getOSName = function (e) {
|
|
11846
|
-
var t = this.getOS().name;
|
|
11847
|
-
return e ? String(t).toLowerCase() || "" : t || "";
|
|
11848
|
-
}, t.getOSVersion = function () {
|
|
11849
|
-
return this.getOS().version;
|
|
11850
|
-
}, t.getPlatform = function () {
|
|
11851
|
-
return this.parsedResult.platform ? this.parsedResult.platform : this.parsePlatform();
|
|
11852
|
-
}, t.getPlatformType = function (e) {
|
|
11853
|
-
void 0 === e && (e = !1);
|
|
11854
|
-
var t = this.getPlatform().type;
|
|
11855
|
-
return e ? String(t).toLowerCase() || "" : t || "";
|
|
11856
|
-
}, t.parsePlatform = function () {
|
|
11857
|
-
var e = this;
|
|
11858
|
-
this.parsedResult.platform = {};
|
|
11859
|
-
var t = o.default.find(s.default, function (t) {
|
|
11860
|
-
if ("function" == typeof t.test) return t.test(e);
|
|
11861
|
-
if (t.test instanceof Array) return t.test.some(function (t) {
|
|
11862
|
-
return e.test(t);
|
|
11863
|
-
});
|
|
11864
|
-
throw new Error("Browser's test function is not valid");
|
|
11865
|
-
});
|
|
11866
|
-
return t && (this.parsedResult.platform = t.describe(this.getUA())), this.parsedResult.platform;
|
|
11867
|
-
}, t.getEngine = function () {
|
|
11868
|
-
return this.parsedResult.engine ? this.parsedResult.engine : this.parseEngine();
|
|
11869
|
-
}, t.getEngineName = function (e) {
|
|
11870
|
-
return e ? String(this.getEngine().name).toLowerCase() || "" : this.getEngine().name || "";
|
|
11871
|
-
}, t.parseEngine = function () {
|
|
11872
|
-
var e = this;
|
|
11873
|
-
this.parsedResult.engine = {};
|
|
11874
|
-
var t = o.default.find(a.default, function (t) {
|
|
11875
|
-
if ("function" == typeof t.test) return t.test(e);
|
|
11876
|
-
if (t.test instanceof Array) return t.test.some(function (t) {
|
|
11877
|
-
return e.test(t);
|
|
11878
|
-
});
|
|
11879
|
-
throw new Error("Browser's test function is not valid");
|
|
11880
|
-
});
|
|
11881
|
-
return t && (this.parsedResult.engine = t.describe(this.getUA())), this.parsedResult.engine;
|
|
11882
|
-
}, t.parse = function () {
|
|
11883
|
-
return this.parseBrowser(), this.parseOS(), this.parsePlatform(), this.parseEngine(), this;
|
|
11884
|
-
}, t.getResult = function () {
|
|
11885
|
-
return o.default.assign({}, this.parsedResult);
|
|
11886
|
-
}, t.satisfies = function (e) {
|
|
11887
|
-
var t = this,
|
|
11888
|
-
r = {},
|
|
11889
|
-
n = 0,
|
|
11890
|
-
i = {},
|
|
11891
|
-
s = 0;
|
|
11892
|
-
if (Object.keys(e).forEach(function (t) {
|
|
11893
|
-
var a = e[t];
|
|
11894
|
-
"string" == typeof a ? (i[t] = a, s += 1) : "object" == typeof a && (r[t] = a, n += 1);
|
|
11895
|
-
}), n > 0) {
|
|
11896
|
-
var a = Object.keys(r),
|
|
11897
|
-
u = o.default.find(a, function (e) {
|
|
11898
|
-
return t.isOS(e);
|
|
11899
|
-
});
|
|
11900
|
-
if (u) {
|
|
11901
|
-
var d = this.satisfies(r[u]);
|
|
11902
|
-
if (void 0 !== d) return d;
|
|
11903
|
-
}
|
|
11904
|
-
var c = o.default.find(a, function (e) {
|
|
11905
|
-
return t.isPlatform(e);
|
|
11906
|
-
});
|
|
11907
|
-
if (c) {
|
|
11908
|
-
var f = this.satisfies(r[c]);
|
|
11909
|
-
if (void 0 !== f) return f;
|
|
11910
|
-
}
|
|
11911
|
-
}
|
|
11912
|
-
if (s > 0) {
|
|
11913
|
-
var l = Object.keys(i),
|
|
11914
|
-
h = o.default.find(l, function (e) {
|
|
11915
|
-
return t.isBrowser(e, !0);
|
|
11916
|
-
});
|
|
11917
|
-
if (void 0 !== h) return this.compareVersion(i[h]);
|
|
11918
|
-
}
|
|
11919
|
-
}, t.isBrowser = function (e, t) {
|
|
11920
|
-
void 0 === t && (t = !1);
|
|
11921
|
-
var r = this.getBrowserName().toLowerCase(),
|
|
11922
|
-
n = e.toLowerCase(),
|
|
11923
|
-
i = o.default.getBrowserTypeByAlias(n);
|
|
11924
|
-
return t && i && (n = i.toLowerCase()), n === r;
|
|
11925
|
-
}, t.compareVersion = function (e) {
|
|
11926
|
-
var t = [0],
|
|
11927
|
-
r = e,
|
|
11928
|
-
n = !1,
|
|
11929
|
-
i = this.getBrowserVersion();
|
|
11930
|
-
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;
|
|
11931
|
-
}, t.isOS = function (e) {
|
|
11932
|
-
return this.getOSName(!0) === String(e).toLowerCase();
|
|
11933
|
-
}, t.isPlatform = function (e) {
|
|
11934
|
-
return this.getPlatformType(!0) === String(e).toLowerCase();
|
|
11935
|
-
}, t.isEngine = function (e) {
|
|
11936
|
-
return this.getEngineName(!0) === String(e).toLowerCase();
|
|
11937
|
-
}, t.is = function (e, t) {
|
|
11938
|
-
return void 0 === t && (t = !1), this.isBrowser(e, t) || this.isOS(e) || this.isPlatform(e);
|
|
11939
|
-
}, t.some = function (e) {
|
|
11940
|
-
var t = this;
|
|
11941
|
-
return void 0 === e && (e = []), e.some(function (e) {
|
|
11942
|
-
return t.is(e);
|
|
11943
|
-
});
|
|
11944
|
-
}, e;
|
|
11945
|
-
}();
|
|
11946
|
-
t.default = d, e.exports = t.default;
|
|
11947
|
-
},
|
|
11948
|
-
92: function _(e, t, r) {
|
|
11949
|
-
t.__esModule = !0, t.default = void 0;
|
|
11950
|
-
var n,
|
|
11951
|
-
i = (n = r(17)) && n.__esModule ? n : {
|
|
11952
|
-
default: n
|
|
11953
|
-
};
|
|
11954
|
-
var s = /version\/(\d+(\.?_?\d+)+)/i,
|
|
11955
|
-
a = [{
|
|
11956
|
-
test: [/googlebot/i],
|
|
11957
|
-
describe: function describe(e) {
|
|
11958
|
-
var t = {
|
|
11959
|
-
name: "Googlebot"
|
|
11960
|
-
},
|
|
11961
|
-
r = i.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i, e) || i.default.getFirstMatch(s, e);
|
|
11962
|
-
return r && (t.version = r), t;
|
|
11963
|
-
}
|
|
11964
|
-
}, {
|
|
11965
|
-
test: [/opera/i],
|
|
11966
|
-
describe: function describe(e) {
|
|
11967
|
-
var t = {
|
|
11968
|
-
name: "Opera"
|
|
11969
|
-
},
|
|
11970
|
-
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
11971
|
-
return r && (t.version = r), t;
|
|
11972
|
-
}
|
|
11973
|
-
}, {
|
|
11974
|
-
test: [/opr\/|opios/i],
|
|
11975
|
-
describe: function describe(e) {
|
|
11976
|
-
var t = {
|
|
11977
|
-
name: "Opera"
|
|
11978
|
-
},
|
|
11979
|
-
r = i.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i, e) || i.default.getFirstMatch(s, e);
|
|
11980
|
-
return r && (t.version = r), t;
|
|
11981
|
-
}
|
|
11982
|
-
}, {
|
|
11983
|
-
test: [/SamsungBrowser/i],
|
|
11984
|
-
describe: function describe(e) {
|
|
11985
|
-
var t = {
|
|
11986
|
-
name: "Samsung Internet for Android"
|
|
11987
|
-
},
|
|
11988
|
-
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
11989
|
-
return r && (t.version = r), t;
|
|
11990
|
-
}
|
|
11991
|
-
}, {
|
|
11992
|
-
test: [/Whale/i],
|
|
11993
|
-
describe: function describe(e) {
|
|
11994
|
-
var t = {
|
|
11995
|
-
name: "NAVER Whale Browser"
|
|
11996
|
-
},
|
|
11997
|
-
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i, e);
|
|
11998
|
-
return r && (t.version = r), t;
|
|
11999
|
-
}
|
|
12000
|
-
}, {
|
|
12001
|
-
test: [/MZBrowser/i],
|
|
12002
|
-
describe: function describe(e) {
|
|
12003
|
-
var t = {
|
|
12004
|
-
name: "MZ Browser"
|
|
12005
|
-
},
|
|
12006
|
-
r = i.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12007
|
-
return r && (t.version = r), t;
|
|
12008
|
-
}
|
|
12009
|
-
}, {
|
|
12010
|
-
test: [/focus/i],
|
|
12011
|
-
describe: function describe(e) {
|
|
12012
|
-
var t = {
|
|
12013
|
-
name: "Focus"
|
|
12014
|
-
},
|
|
12015
|
-
r = i.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12016
|
-
return r && (t.version = r), t;
|
|
12017
|
-
}
|
|
12018
|
-
}, {
|
|
12019
|
-
test: [/swing/i],
|
|
12020
|
-
describe: function describe(e) {
|
|
12021
|
-
var t = {
|
|
12022
|
-
name: "Swing"
|
|
12023
|
-
},
|
|
12024
|
-
r = i.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12025
|
-
return r && (t.version = r), t;
|
|
12026
|
-
}
|
|
12027
|
-
}, {
|
|
12028
|
-
test: [/coast/i],
|
|
12029
|
-
describe: function describe(e) {
|
|
12030
|
-
var t = {
|
|
12031
|
-
name: "Opera Coast"
|
|
12032
|
-
},
|
|
12033
|
-
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12034
|
-
return r && (t.version = r), t;
|
|
12035
|
-
}
|
|
12036
|
-
}, {
|
|
12037
|
-
test: [/opt\/\d+(?:.?_?\d+)+/i],
|
|
12038
|
-
describe: function describe(e) {
|
|
12039
|
-
var t = {
|
|
12040
|
-
name: "Opera Touch"
|
|
12041
|
-
},
|
|
12042
|
-
r = i.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12043
|
-
return r && (t.version = r), t;
|
|
12044
|
-
}
|
|
12045
|
-
}, {
|
|
12046
|
-
test: [/yabrowser/i],
|
|
12047
|
-
describe: function describe(e) {
|
|
12048
|
-
var t = {
|
|
12049
|
-
name: "Yandex Browser"
|
|
12050
|
-
},
|
|
12051
|
-
r = i.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12052
|
-
return r && (t.version = r), t;
|
|
12053
|
-
}
|
|
12054
|
-
}, {
|
|
12055
|
-
test: [/ucbrowser/i],
|
|
12056
|
-
describe: function describe(e) {
|
|
12057
|
-
var t = {
|
|
12058
|
-
name: "UC Browser"
|
|
12059
|
-
},
|
|
12060
|
-
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12061
|
-
return r && (t.version = r), t;
|
|
12062
|
-
}
|
|
12063
|
-
}, {
|
|
12064
|
-
test: [/Maxthon|mxios/i],
|
|
12065
|
-
describe: function describe(e) {
|
|
12066
|
-
var t = {
|
|
12067
|
-
name: "Maxthon"
|
|
12068
|
-
},
|
|
12069
|
-
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12070
|
-
return r && (t.version = r), t;
|
|
12071
|
-
}
|
|
12072
|
-
}, {
|
|
12073
|
-
test: [/epiphany/i],
|
|
12074
|
-
describe: function describe(e) {
|
|
12075
|
-
var t = {
|
|
12076
|
-
name: "Epiphany"
|
|
12077
|
-
},
|
|
12078
|
-
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12079
|
-
return r && (t.version = r), t;
|
|
12080
|
-
}
|
|
12081
|
-
}, {
|
|
12082
|
-
test: [/puffin/i],
|
|
12083
|
-
describe: function describe(e) {
|
|
12084
|
-
var t = {
|
|
12085
|
-
name: "Puffin"
|
|
12086
|
-
},
|
|
12087
|
-
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12088
|
-
return r && (t.version = r), t;
|
|
12089
|
-
}
|
|
12090
|
-
}, {
|
|
12091
|
-
test: [/sleipnir/i],
|
|
12092
|
-
describe: function describe(e) {
|
|
12093
|
-
var t = {
|
|
12094
|
-
name: "Sleipnir"
|
|
12095
|
-
},
|
|
12096
|
-
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12097
|
-
return r && (t.version = r), t;
|
|
12098
|
-
}
|
|
12099
|
-
}, {
|
|
12100
|
-
test: [/k-meleon/i],
|
|
12101
|
-
describe: function describe(e) {
|
|
12102
|
-
var t = {
|
|
12103
|
-
name: "K-Meleon"
|
|
12104
|
-
},
|
|
12105
|
-
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12106
|
-
return r && (t.version = r), t;
|
|
12107
|
-
}
|
|
12108
|
-
}, {
|
|
12109
|
-
test: [/micromessenger/i],
|
|
12110
|
-
describe: function describe(e) {
|
|
12111
|
-
var t = {
|
|
12112
|
-
name: "WeChat"
|
|
12113
|
-
},
|
|
12114
|
-
r = i.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12115
|
-
return r && (t.version = r), t;
|
|
12116
|
-
}
|
|
12117
|
-
}, {
|
|
12118
|
-
test: [/qqbrowser/i],
|
|
12119
|
-
describe: function describe(e) {
|
|
12120
|
-
var t = {
|
|
12121
|
-
name: /qqbrowserlite/i.test(e) ? "QQ Browser Lite" : "QQ Browser"
|
|
12122
|
-
},
|
|
12123
|
-
r = i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12124
|
-
return r && (t.version = r), t;
|
|
12125
|
-
}
|
|
12126
|
-
}, {
|
|
12127
|
-
test: [/msie|trident/i],
|
|
12128
|
-
describe: function describe(e) {
|
|
12129
|
-
var t = {
|
|
12130
|
-
name: "Internet Explorer"
|
|
12131
|
-
},
|
|
12132
|
-
r = i.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i, e);
|
|
12133
|
-
return r && (t.version = r), t;
|
|
12134
|
-
}
|
|
12135
|
-
}, {
|
|
12136
|
-
test: [/\sedg\//i],
|
|
12137
|
-
describe: function describe(e) {
|
|
12138
|
-
var t = {
|
|
12139
|
-
name: "Microsoft Edge"
|
|
12140
|
-
},
|
|
12141
|
-
r = i.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i, e);
|
|
12142
|
-
return r && (t.version = r), t;
|
|
12143
|
-
}
|
|
12144
|
-
}, {
|
|
12145
|
-
test: [/edg([ea]|ios)/i],
|
|
12146
|
-
describe: function describe(e) {
|
|
12147
|
-
var t = {
|
|
12148
|
-
name: "Microsoft Edge"
|
|
12149
|
-
},
|
|
12150
|
-
r = i.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i, e);
|
|
12151
|
-
return r && (t.version = r), t;
|
|
12152
|
-
}
|
|
12153
|
-
}, {
|
|
12154
|
-
test: [/vivaldi/i],
|
|
12155
|
-
describe: function describe(e) {
|
|
12156
|
-
var t = {
|
|
12157
|
-
name: "Vivaldi"
|
|
12158
|
-
},
|
|
12159
|
-
r = i.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i, e);
|
|
12160
|
-
return r && (t.version = r), t;
|
|
12161
|
-
}
|
|
12162
|
-
}, {
|
|
12163
|
-
test: [/seamonkey/i],
|
|
12164
|
-
describe: function describe(e) {
|
|
12165
|
-
var t = {
|
|
12166
|
-
name: "SeaMonkey"
|
|
12167
|
-
},
|
|
12168
|
-
r = i.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i, e);
|
|
12169
|
-
return r && (t.version = r), t;
|
|
12170
|
-
}
|
|
12171
|
-
}, {
|
|
12172
|
-
test: [/sailfish/i],
|
|
12173
|
-
describe: function describe(e) {
|
|
12174
|
-
var t = {
|
|
12175
|
-
name: "Sailfish"
|
|
12176
|
-
},
|
|
12177
|
-
r = i.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i, e);
|
|
12178
|
-
return r && (t.version = r), t;
|
|
12179
|
-
}
|
|
12180
|
-
}, {
|
|
12181
|
-
test: [/silk/i],
|
|
12182
|
-
describe: function describe(e) {
|
|
12183
|
-
var t = {
|
|
12184
|
-
name: "Amazon Silk"
|
|
12185
|
-
},
|
|
12186
|
-
r = i.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i, e);
|
|
12187
|
-
return r && (t.version = r), t;
|
|
12188
|
-
}
|
|
12189
|
-
}, {
|
|
12190
|
-
test: [/phantom/i],
|
|
12191
|
-
describe: function describe(e) {
|
|
12192
|
-
var t = {
|
|
12193
|
-
name: "PhantomJS"
|
|
12194
|
-
},
|
|
12195
|
-
r = i.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i, e);
|
|
12196
|
-
return r && (t.version = r), t;
|
|
12197
|
-
}
|
|
12198
|
-
}, {
|
|
12199
|
-
test: [/slimerjs/i],
|
|
12200
|
-
describe: function describe(e) {
|
|
12201
|
-
var t = {
|
|
12202
|
-
name: "SlimerJS"
|
|
12203
|
-
},
|
|
12204
|
-
r = i.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i, e);
|
|
12205
|
-
return r && (t.version = r), t;
|
|
12206
|
-
}
|
|
12207
|
-
}, {
|
|
12208
|
-
test: [/blackberry|\bbb\d+/i, /rim\stablet/i],
|
|
12209
|
-
describe: function describe(e) {
|
|
12210
|
-
var t = {
|
|
12211
|
-
name: "BlackBerry"
|
|
12212
|
-
},
|
|
12213
|
-
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i, e);
|
|
12214
|
-
return r && (t.version = r), t;
|
|
12215
|
-
}
|
|
12216
|
-
}, {
|
|
12217
|
-
test: [/(web|hpw)[o0]s/i],
|
|
12218
|
-
describe: function describe(e) {
|
|
12219
|
-
var t = {
|
|
12220
|
-
name: "WebOS Browser"
|
|
12221
|
-
},
|
|
12222
|
-
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i, e);
|
|
12223
|
-
return r && (t.version = r), t;
|
|
12224
|
-
}
|
|
12225
|
-
}, {
|
|
12226
|
-
test: [/bada/i],
|
|
12227
|
-
describe: function describe(e) {
|
|
12228
|
-
var t = {
|
|
12229
|
-
name: "Bada"
|
|
12230
|
-
},
|
|
12231
|
-
r = i.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i, e);
|
|
12232
|
-
return r && (t.version = r), t;
|
|
12233
|
-
}
|
|
12234
|
-
}, {
|
|
12235
|
-
test: [/tizen/i],
|
|
12236
|
-
describe: function describe(e) {
|
|
12237
|
-
var t = {
|
|
12238
|
-
name: "Tizen"
|
|
12239
|
-
},
|
|
12240
|
-
r = i.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12241
|
-
return r && (t.version = r), t;
|
|
12242
|
-
}
|
|
12243
|
-
}, {
|
|
12244
|
-
test: [/qupzilla/i],
|
|
12245
|
-
describe: function describe(e) {
|
|
12246
|
-
var t = {
|
|
12247
|
-
name: "QupZilla"
|
|
12248
|
-
},
|
|
12249
|
-
r = i.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12250
|
-
return r && (t.version = r), t;
|
|
12251
|
-
}
|
|
12252
|
-
}, {
|
|
12253
|
-
test: [/firefox|iceweasel|fxios/i],
|
|
12254
|
-
describe: function describe(e) {
|
|
12255
|
-
var t = {
|
|
12256
|
-
name: "Firefox"
|
|
12257
|
-
},
|
|
12258
|
-
r = i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12259
|
-
return r && (t.version = r), t;
|
|
12260
|
-
}
|
|
12261
|
-
}, {
|
|
12262
|
-
test: [/electron/i],
|
|
12263
|
-
describe: function describe(e) {
|
|
12264
|
-
var t = {
|
|
12265
|
-
name: "Electron"
|
|
12266
|
-
},
|
|
12267
|
-
r = i.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i, e);
|
|
12268
|
-
return r && (t.version = r), t;
|
|
12269
|
-
}
|
|
12270
|
-
}, {
|
|
12271
|
-
test: [/MiuiBrowser/i],
|
|
12272
|
-
describe: function describe(e) {
|
|
12273
|
-
var t = {
|
|
12274
|
-
name: "Miui"
|
|
12275
|
-
},
|
|
12276
|
-
r = i.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12277
|
-
return r && (t.version = r), t;
|
|
12278
|
-
}
|
|
12279
|
-
}, {
|
|
12280
|
-
test: [/chromium/i],
|
|
12281
|
-
describe: function describe(e) {
|
|
12282
|
-
var t = {
|
|
12283
|
-
name: "Chromium"
|
|
12284
|
-
},
|
|
12285
|
-
r = i.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12286
|
-
return r && (t.version = r), t;
|
|
12287
|
-
}
|
|
12288
|
-
}, {
|
|
12289
|
-
test: [/chrome|crios|crmo/i],
|
|
12290
|
-
describe: function describe(e) {
|
|
12291
|
-
var t = {
|
|
12292
|
-
name: "Chrome"
|
|
12293
|
-
},
|
|
12294
|
-
r = i.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i, e);
|
|
12295
|
-
return r && (t.version = r), t;
|
|
12296
|
-
}
|
|
12297
|
-
}, {
|
|
12298
|
-
test: [/GSA/i],
|
|
12299
|
-
describe: function describe(e) {
|
|
12300
|
-
var t = {
|
|
12301
|
-
name: "Google Search"
|
|
12302
|
-
},
|
|
12303
|
-
r = i.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i, e);
|
|
12304
|
-
return r && (t.version = r), t;
|
|
12305
|
-
}
|
|
12306
|
-
}, {
|
|
12307
|
-
test: function test(e) {
|
|
12308
|
-
var t = !e.test(/like android/i),
|
|
12309
|
-
r = e.test(/android/i);
|
|
12310
|
-
return t && r;
|
|
12311
|
-
},
|
|
12312
|
-
describe: function describe(e) {
|
|
12313
|
-
var t = {
|
|
12314
|
-
name: "Android Browser"
|
|
12315
|
-
},
|
|
12316
|
-
r = i.default.getFirstMatch(s, e);
|
|
12317
|
-
return r && (t.version = r), t;
|
|
12318
|
-
}
|
|
12319
|
-
}, {
|
|
12320
|
-
test: [/playstation 4/i],
|
|
12321
|
-
describe: function describe(e) {
|
|
12322
|
-
var t = {
|
|
12323
|
-
name: "PlayStation 4"
|
|
12324
|
-
},
|
|
12325
|
-
r = i.default.getFirstMatch(s, e);
|
|
12326
|
-
return r && (t.version = r), t;
|
|
12327
|
-
}
|
|
12328
|
-
}, {
|
|
12329
|
-
test: [/safari|applewebkit/i],
|
|
12330
|
-
describe: function describe(e) {
|
|
12331
|
-
var t = {
|
|
12332
|
-
name: "Safari"
|
|
12333
|
-
},
|
|
12334
|
-
r = i.default.getFirstMatch(s, e);
|
|
12335
|
-
return r && (t.version = r), t;
|
|
12336
|
-
}
|
|
12337
|
-
}, {
|
|
12338
|
-
test: [/.*/i],
|
|
12339
|
-
describe: function describe(e) {
|
|
12340
|
-
var t = -1 !== e.search("\\(") ? /^(.*)\/(.*)[ \t]\((.*)/ : /^(.*)\/(.*) /;
|
|
12341
|
-
return {
|
|
12342
|
-
name: i.default.getFirstMatch(t, e),
|
|
12343
|
-
version: i.default.getSecondMatch(t, e)
|
|
12344
|
-
};
|
|
12345
|
-
}
|
|
12346
|
-
}];
|
|
12347
|
-
t.default = a, e.exports = t.default;
|
|
12348
|
-
},
|
|
12349
|
-
93: function _(e, t, r) {
|
|
12350
|
-
t.__esModule = !0, t.default = void 0;
|
|
12351
|
-
var n,
|
|
12352
|
-
i = (n = r(17)) && n.__esModule ? n : {
|
|
12353
|
-
default: n
|
|
12354
|
-
},
|
|
12355
|
-
s = r(18);
|
|
12356
|
-
var a = [{
|
|
12357
|
-
test: [/Roku\/DVP/],
|
|
12358
|
-
describe: function describe(e) {
|
|
12359
|
-
var t = i.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i, e);
|
|
12360
|
-
return {
|
|
12361
|
-
name: s.OS_MAP.Roku,
|
|
12362
|
-
version: t
|
|
12363
|
-
};
|
|
12364
|
-
}
|
|
12365
|
-
}, {
|
|
12366
|
-
test: [/windows phone/i],
|
|
12367
|
-
describe: function describe(e) {
|
|
12368
|
-
var t = i.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i, e);
|
|
12369
|
-
return {
|
|
12370
|
-
name: s.OS_MAP.WindowsPhone,
|
|
12371
|
-
version: t
|
|
12372
|
-
};
|
|
12373
|
-
}
|
|
12374
|
-
}, {
|
|
12375
|
-
test: [/windows /i],
|
|
12376
|
-
describe: function describe(e) {
|
|
12377
|
-
var t = i.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i, e),
|
|
12378
|
-
r = i.default.getWindowsVersionName(t);
|
|
12379
|
-
return {
|
|
12380
|
-
name: s.OS_MAP.Windows,
|
|
12381
|
-
version: t,
|
|
12382
|
-
versionName: r
|
|
12383
|
-
};
|
|
12384
|
-
}
|
|
12385
|
-
}, {
|
|
12386
|
-
test: [/Macintosh(.*?) FxiOS(.*?)\//],
|
|
12387
|
-
describe: function describe(e) {
|
|
12388
|
-
var t = {
|
|
12389
|
-
name: s.OS_MAP.iOS
|
|
12390
|
-
},
|
|
12391
|
-
r = i.default.getSecondMatch(/(Version\/)(\d[\d.]+)/, e);
|
|
12392
|
-
return r && (t.version = r), t;
|
|
12393
|
-
}
|
|
12394
|
-
}, {
|
|
12395
|
-
test: [/macintosh/i],
|
|
12396
|
-
describe: function describe(e) {
|
|
12397
|
-
var t = i.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i, e).replace(/[_\s]/g, "."),
|
|
12398
|
-
r = i.default.getMacOSVersionName(t),
|
|
12399
|
-
n = {
|
|
12400
|
-
name: s.OS_MAP.MacOS,
|
|
12401
|
-
version: t
|
|
12402
|
-
};
|
|
12403
|
-
return r && (n.versionName = r), n;
|
|
12404
|
-
}
|
|
12405
|
-
}, {
|
|
12406
|
-
test: [/(ipod|iphone|ipad)/i],
|
|
12407
|
-
describe: function describe(e) {
|
|
12408
|
-
var t = i.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i, e).replace(/[_\s]/g, ".");
|
|
12409
|
-
return {
|
|
12410
|
-
name: s.OS_MAP.iOS,
|
|
12411
|
-
version: t
|
|
12412
|
-
};
|
|
12413
|
-
}
|
|
12414
|
-
}, {
|
|
12415
|
-
test: function test(e) {
|
|
12416
|
-
var t = !e.test(/like android/i),
|
|
12417
|
-
r = e.test(/android/i);
|
|
12418
|
-
return t && r;
|
|
12419
|
-
},
|
|
12420
|
-
describe: function describe(e) {
|
|
12421
|
-
var t = i.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i, e),
|
|
12422
|
-
r = i.default.getAndroidVersionName(t),
|
|
12423
|
-
n = {
|
|
12424
|
-
name: s.OS_MAP.Android,
|
|
12425
|
-
version: t
|
|
12426
|
-
};
|
|
12427
|
-
return r && (n.versionName = r), n;
|
|
12428
|
-
}
|
|
12429
|
-
}, {
|
|
12430
|
-
test: [/(web|hpw)[o0]s/i],
|
|
12431
|
-
describe: function describe(e) {
|
|
12432
|
-
var t = i.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i, e),
|
|
12433
|
-
r = {
|
|
12434
|
-
name: s.OS_MAP.WebOS
|
|
12435
|
-
};
|
|
12436
|
-
return t && t.length && (r.version = t), r;
|
|
12437
|
-
}
|
|
12438
|
-
}, {
|
|
12439
|
-
test: [/blackberry|\bbb\d+/i, /rim\stablet/i],
|
|
12440
|
-
describe: function describe(e) {
|
|
12441
|
-
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);
|
|
12442
|
-
return {
|
|
12443
|
-
name: s.OS_MAP.BlackBerry,
|
|
12444
|
-
version: t
|
|
12445
|
-
};
|
|
12446
|
-
}
|
|
12447
|
-
}, {
|
|
12448
|
-
test: [/bada/i],
|
|
12449
|
-
describe: function describe(e) {
|
|
12450
|
-
var t = i.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i, e);
|
|
12451
|
-
return {
|
|
12452
|
-
name: s.OS_MAP.Bada,
|
|
12453
|
-
version: t
|
|
12454
|
-
};
|
|
12455
|
-
}
|
|
12456
|
-
}, {
|
|
12457
|
-
test: [/tizen/i],
|
|
12458
|
-
describe: function describe(e) {
|
|
12459
|
-
var t = i.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i, e);
|
|
12460
|
-
return {
|
|
12461
|
-
name: s.OS_MAP.Tizen,
|
|
12462
|
-
version: t
|
|
12463
|
-
};
|
|
12464
|
-
}
|
|
12465
|
-
}, {
|
|
12466
|
-
test: [/linux/i],
|
|
12467
|
-
describe: function describe() {
|
|
12468
|
-
return {
|
|
12469
|
-
name: s.OS_MAP.Linux
|
|
12470
|
-
};
|
|
12471
|
-
}
|
|
12472
|
-
}, {
|
|
12473
|
-
test: [/CrOS/],
|
|
12474
|
-
describe: function describe() {
|
|
12475
|
-
return {
|
|
12476
|
-
name: s.OS_MAP.ChromeOS
|
|
12477
|
-
};
|
|
12478
|
-
}
|
|
12479
|
-
}, {
|
|
12480
|
-
test: [/PlayStation 4/],
|
|
12481
|
-
describe: function describe(e) {
|
|
12482
|
-
var t = i.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i, e);
|
|
12483
|
-
return {
|
|
12484
|
-
name: s.OS_MAP.PlayStation4,
|
|
12485
|
-
version: t
|
|
12486
|
-
};
|
|
12487
|
-
}
|
|
12488
|
-
}];
|
|
12489
|
-
t.default = a, e.exports = t.default;
|
|
12490
|
-
},
|
|
12491
|
-
94: function _(e, t, r) {
|
|
12492
|
-
t.__esModule = !0, t.default = void 0;
|
|
12493
|
-
var n,
|
|
12494
|
-
i = (n = r(17)) && n.__esModule ? n : {
|
|
12495
|
-
default: n
|
|
12496
|
-
},
|
|
12497
|
-
s = r(18);
|
|
12498
|
-
var a = [{
|
|
12499
|
-
test: [/googlebot/i],
|
|
12500
|
-
describe: function describe() {
|
|
12501
|
-
return {
|
|
12502
|
-
type: "bot",
|
|
12503
|
-
vendor: "Google"
|
|
12504
|
-
};
|
|
12505
|
-
}
|
|
12506
|
-
}, {
|
|
12507
|
-
test: [/huawei/i],
|
|
12508
|
-
describe: function describe(e) {
|
|
12509
|
-
var t = i.default.getFirstMatch(/(can-l01)/i, e) && "Nova",
|
|
12510
|
-
r = {
|
|
12511
|
-
type: s.PLATFORMS_MAP.mobile,
|
|
12512
|
-
vendor: "Huawei"
|
|
12513
|
-
};
|
|
12514
|
-
return t && (r.model = t), r;
|
|
12515
|
-
}
|
|
12516
|
-
}, {
|
|
12517
|
-
test: [/nexus\s*(?:7|8|9|10).*/i],
|
|
12518
|
-
describe: function describe() {
|
|
12519
|
-
return {
|
|
12520
|
-
type: s.PLATFORMS_MAP.tablet,
|
|
12521
|
-
vendor: "Nexus"
|
|
12522
|
-
};
|
|
12523
|
-
}
|
|
12524
|
-
}, {
|
|
12525
|
-
test: [/ipad/i],
|
|
12526
|
-
describe: function describe() {
|
|
12527
|
-
return {
|
|
12528
|
-
type: s.PLATFORMS_MAP.tablet,
|
|
12529
|
-
vendor: "Apple",
|
|
12530
|
-
model: "iPad"
|
|
12531
|
-
};
|
|
12532
|
-
}
|
|
12533
|
-
}, {
|
|
12534
|
-
test: [/Macintosh(.*?) FxiOS(.*?)\//],
|
|
12535
|
-
describe: function describe() {
|
|
12536
|
-
return {
|
|
12537
|
-
type: s.PLATFORMS_MAP.tablet,
|
|
12538
|
-
vendor: "Apple",
|
|
12539
|
-
model: "iPad"
|
|
12540
|
-
};
|
|
12541
|
-
}
|
|
12542
|
-
}, {
|
|
12543
|
-
test: [/kftt build/i],
|
|
12544
|
-
describe: function describe() {
|
|
12545
|
-
return {
|
|
12546
|
-
type: s.PLATFORMS_MAP.tablet,
|
|
12547
|
-
vendor: "Amazon",
|
|
12548
|
-
model: "Kindle Fire HD 7"
|
|
12549
|
-
};
|
|
12550
|
-
}
|
|
12551
|
-
}, {
|
|
12552
|
-
test: [/silk/i],
|
|
12553
|
-
describe: function describe() {
|
|
12554
|
-
return {
|
|
12555
|
-
type: s.PLATFORMS_MAP.tablet,
|
|
12556
|
-
vendor: "Amazon"
|
|
12557
|
-
};
|
|
12558
|
-
}
|
|
12559
|
-
}, {
|
|
12560
|
-
test: [/tablet(?! pc)/i],
|
|
12561
|
-
describe: function describe() {
|
|
12562
|
-
return {
|
|
12563
|
-
type: s.PLATFORMS_MAP.tablet
|
|
12564
|
-
};
|
|
12565
|
-
}
|
|
12566
|
-
}, {
|
|
12567
|
-
test: function test(e) {
|
|
12568
|
-
var t = e.test(/ipod|iphone/i),
|
|
12569
|
-
r = e.test(/like (ipod|iphone)/i);
|
|
12570
|
-
return t && !r;
|
|
12571
|
-
},
|
|
12572
|
-
describe: function describe(e) {
|
|
12573
|
-
var t = i.default.getFirstMatch(/(ipod|iphone)/i, e);
|
|
12574
|
-
return {
|
|
12575
|
-
type: s.PLATFORMS_MAP.mobile,
|
|
12576
|
-
vendor: "Apple",
|
|
12577
|
-
model: t
|
|
12578
|
-
};
|
|
12579
|
-
}
|
|
12580
|
-
}, {
|
|
12581
|
-
test: [/nexus\s*[0-6].*/i, /galaxy nexus/i],
|
|
12582
|
-
describe: function describe() {
|
|
12583
|
-
return {
|
|
12584
|
-
type: s.PLATFORMS_MAP.mobile,
|
|
12585
|
-
vendor: "Nexus"
|
|
12586
|
-
};
|
|
12587
|
-
}
|
|
12588
|
-
}, {
|
|
12589
|
-
test: [/[^-]mobi/i],
|
|
12590
|
-
describe: function describe() {
|
|
12591
|
-
return {
|
|
12592
|
-
type: s.PLATFORMS_MAP.mobile
|
|
12593
|
-
};
|
|
12594
|
-
}
|
|
12595
|
-
}, {
|
|
12596
|
-
test: function test(e) {
|
|
12597
|
-
return "blackberry" === e.getBrowserName(!0);
|
|
12598
|
-
},
|
|
12599
|
-
describe: function describe() {
|
|
12600
|
-
return {
|
|
12601
|
-
type: s.PLATFORMS_MAP.mobile,
|
|
12602
|
-
vendor: "BlackBerry"
|
|
12603
|
-
};
|
|
12604
|
-
}
|
|
12605
|
-
}, {
|
|
12606
|
-
test: function test(e) {
|
|
12607
|
-
return "bada" === e.getBrowserName(!0);
|
|
12608
|
-
},
|
|
12609
|
-
describe: function describe() {
|
|
12610
|
-
return {
|
|
12611
|
-
type: s.PLATFORMS_MAP.mobile
|
|
12612
|
-
};
|
|
12613
|
-
}
|
|
12614
|
-
}, {
|
|
12615
|
-
test: function test(e) {
|
|
12616
|
-
return "windows phone" === e.getBrowserName();
|
|
12617
|
-
},
|
|
12618
|
-
describe: function describe() {
|
|
12619
|
-
return {
|
|
12620
|
-
type: s.PLATFORMS_MAP.mobile,
|
|
12621
|
-
vendor: "Microsoft"
|
|
12622
|
-
};
|
|
12623
|
-
}
|
|
12624
|
-
}, {
|
|
12625
|
-
test: function test(e) {
|
|
12626
|
-
var t = Number(String(e.getOSVersion()).split(".")[0]);
|
|
12627
|
-
return "android" === e.getOSName(!0) && t >= 3;
|
|
12628
|
-
},
|
|
12629
|
-
describe: function describe() {
|
|
12630
|
-
return {
|
|
12631
|
-
type: s.PLATFORMS_MAP.tablet
|
|
12632
|
-
};
|
|
12633
|
-
}
|
|
12634
|
-
}, {
|
|
12635
|
-
test: function test(e) {
|
|
12636
|
-
return "android" === e.getOSName(!0);
|
|
12637
|
-
},
|
|
12638
|
-
describe: function describe() {
|
|
12639
|
-
return {
|
|
12640
|
-
type: s.PLATFORMS_MAP.mobile
|
|
12641
|
-
};
|
|
12642
|
-
}
|
|
12643
|
-
}, {
|
|
12644
|
-
test: function test(e) {
|
|
12645
|
-
return "macos" === e.getOSName(!0);
|
|
12646
|
-
},
|
|
12647
|
-
describe: function describe() {
|
|
12648
|
-
return {
|
|
12649
|
-
type: s.PLATFORMS_MAP.desktop,
|
|
12650
|
-
vendor: "Apple"
|
|
12651
|
-
};
|
|
12652
|
-
}
|
|
12653
|
-
}, {
|
|
12654
|
-
test: function test(e) {
|
|
12655
|
-
return "windows" === e.getOSName(!0);
|
|
12656
|
-
},
|
|
12657
|
-
describe: function describe() {
|
|
12658
|
-
return {
|
|
12659
|
-
type: s.PLATFORMS_MAP.desktop
|
|
12660
|
-
};
|
|
12661
|
-
}
|
|
12662
|
-
}, {
|
|
12663
|
-
test: function test(e) {
|
|
12664
|
-
return "linux" === e.getOSName(!0);
|
|
12665
|
-
},
|
|
12666
|
-
describe: function describe() {
|
|
12667
|
-
return {
|
|
12668
|
-
type: s.PLATFORMS_MAP.desktop
|
|
12669
|
-
};
|
|
12670
|
-
}
|
|
12671
|
-
}, {
|
|
12672
|
-
test: function test(e) {
|
|
12673
|
-
return "playstation 4" === e.getOSName(!0);
|
|
12674
|
-
},
|
|
12675
|
-
describe: function describe() {
|
|
12676
|
-
return {
|
|
12677
|
-
type: s.PLATFORMS_MAP.tv
|
|
12678
|
-
};
|
|
12679
|
-
}
|
|
12680
|
-
}, {
|
|
12681
|
-
test: function test(e) {
|
|
12682
|
-
return "roku" === e.getOSName(!0);
|
|
12683
|
-
},
|
|
12684
|
-
describe: function describe() {
|
|
12685
|
-
return {
|
|
12686
|
-
type: s.PLATFORMS_MAP.tv
|
|
12687
|
-
};
|
|
12688
|
-
}
|
|
12689
|
-
}];
|
|
12690
|
-
t.default = a, e.exports = t.default;
|
|
12691
|
-
},
|
|
12692
|
-
95: function _(e, t, r) {
|
|
12693
|
-
t.__esModule = !0, t.default = void 0;
|
|
12694
|
-
var n,
|
|
12695
|
-
i = (n = r(17)) && n.__esModule ? n : {
|
|
12696
|
-
default: n
|
|
12697
|
-
},
|
|
12698
|
-
s = r(18);
|
|
12699
|
-
var a = [{
|
|
12700
|
-
test: function test(e) {
|
|
12701
|
-
return "microsoft edge" === e.getBrowserName(!0);
|
|
12702
|
-
},
|
|
12703
|
-
describe: function describe(e) {
|
|
12704
|
-
if (/\sedg\//i.test(e)) return {
|
|
12705
|
-
name: s.ENGINE_MAP.Blink
|
|
12706
|
-
};
|
|
12707
|
-
var t = i.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i, e);
|
|
12708
|
-
return {
|
|
12709
|
-
name: s.ENGINE_MAP.EdgeHTML,
|
|
12710
|
-
version: t
|
|
12711
|
-
};
|
|
12712
|
-
}
|
|
12713
|
-
}, {
|
|
12714
|
-
test: [/trident/i],
|
|
12715
|
-
describe: function describe(e) {
|
|
12716
|
-
var t = {
|
|
12717
|
-
name: s.ENGINE_MAP.Trident
|
|
12718
|
-
},
|
|
12719
|
-
r = i.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i, e);
|
|
12720
|
-
return r && (t.version = r), t;
|
|
12721
|
-
}
|
|
12722
|
-
}, {
|
|
12723
|
-
test: function test(e) {
|
|
12724
|
-
return e.test(/presto/i);
|
|
12725
|
-
},
|
|
12726
|
-
describe: function describe(e) {
|
|
12727
|
-
var t = {
|
|
12728
|
-
name: s.ENGINE_MAP.Presto
|
|
12729
|
-
},
|
|
12730
|
-
r = i.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i, e);
|
|
12731
|
-
return r && (t.version = r), t;
|
|
12732
|
-
}
|
|
12733
|
-
}, {
|
|
12734
|
-
test: function test(e) {
|
|
12735
|
-
var t = e.test(/gecko/i),
|
|
12736
|
-
r = e.test(/like gecko/i);
|
|
12737
|
-
return t && !r;
|
|
12738
|
-
},
|
|
12739
|
-
describe: function describe(e) {
|
|
12740
|
-
var t = {
|
|
12741
|
-
name: s.ENGINE_MAP.Gecko
|
|
12742
|
-
},
|
|
12743
|
-
r = i.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i, e);
|
|
12744
|
-
return r && (t.version = r), t;
|
|
12745
|
-
}
|
|
12746
|
-
}, {
|
|
12747
|
-
test: [/(apple)?webkit\/537\.36/i],
|
|
12748
|
-
describe: function describe() {
|
|
12749
|
-
return {
|
|
12750
|
-
name: s.ENGINE_MAP.Blink
|
|
12751
|
-
};
|
|
12752
|
-
}
|
|
12753
|
-
}, {
|
|
12754
|
-
test: [/(apple)?webkit/i],
|
|
12755
|
-
describe: function describe(e) {
|
|
12756
|
-
var t = {
|
|
12757
|
-
name: s.ENGINE_MAP.WebKit
|
|
12758
|
-
},
|
|
12759
|
-
r = i.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i, e);
|
|
12760
|
-
return r && (t.version = r), t;
|
|
12761
|
-
}
|
|
12762
|
-
}];
|
|
12763
|
-
t.default = a, e.exports = t.default;
|
|
12764
11877
|
}
|
|
12765
|
-
|
|
11878
|
+
return answerMline;
|
|
11879
|
+
}
|
|
11880
|
+
if (!(offerMline instanceof AvMediaDescription)) {
|
|
11881
|
+
throw new Error("Answer is missing a non-media mline: ".concat(offerMline.mid));
|
|
11882
|
+
}
|
|
11883
|
+
var startingMline = parsedAnswer.avMedia.find(m => m.type === offerMline.type);
|
|
11884
|
+
if (!startingMline) {
|
|
11885
|
+
throw new Error("Answer has no mline of type ".concat(offerMline.type, ", can't generate synthetic answer mline for mid ").concat(offerMline.mid));
|
|
11886
|
+
}
|
|
11887
|
+
var fakeCorrespondingMline = deepCopy(startingMline);
|
|
11888
|
+
fakeCorrespondingMline.mid = offerMline.mid;
|
|
11889
|
+
fakeCorrespondingMline.simulcast = undefined;
|
|
11890
|
+
if (offerMline.direction === 'sendrecv' || offerMline.direction === 'sendonly') {
|
|
11891
|
+
fakeCorrespondingMline.direction = 'recvonly';
|
|
11892
|
+
}
|
|
11893
|
+
if (offerMline.direction === 'recvonly') {
|
|
11894
|
+
fakeCorrespondingMline.direction = 'sendonly';
|
|
11895
|
+
var ingressSignaler = streamSignalerManager.getIngressStreamSignalerOrThrow(offerMline.mid);
|
|
11896
|
+
ingressSignaler.signalRemoteStreams(fakeCorrespondingMline);
|
|
11897
|
+
}
|
|
11898
|
+
return fakeCorrespondingMline;
|
|
12766
11899
|
});
|
|
12767
|
-
})(es5);
|
|
12768
|
-
var Bowser = /*@__PURE__*/getDefaultExportFromCjs(es5.exports);
|
|
12769
|
-
function getBrowserDetails() {
|
|
12770
|
-
var browser = Bowser.getParser(window.navigator.userAgent);
|
|
12771
|
-
return browser.getBrowser();
|
|
12772
11900
|
}
|
|
12773
|
-
|
|
12774
|
-
(
|
|
12775
|
-
|
|
12776
|
-
|
|
12777
|
-
|
|
12778
|
-
})(ReceiveSlotEvents || (ReceiveSlotEvents = {}));
|
|
12779
|
-
class ReceiveSlot extends EventEmitter {
|
|
12780
|
-
constructor(idGetter, track) {
|
|
12781
|
-
super();
|
|
12782
|
-
this._idGetter = idGetter;
|
|
12783
|
-
this.handleTrackMuted = this.handleTrackMuted.bind(this);
|
|
12784
|
-
this.handleTrackUnmuted = this.handleTrackUnmuted.bind(this);
|
|
12785
|
-
this._stream = new MediaStream([track]);
|
|
12786
|
-
this.addTrackHandlers(track);
|
|
12787
|
-
}
|
|
12788
|
-
addTrackHandlers(track) {
|
|
12789
|
-
track.addEventListener('mute', this.handleTrackMuted);
|
|
12790
|
-
track.addEventListener('unmute', this.handleTrackUnmuted);
|
|
12791
|
-
}
|
|
12792
|
-
handleTrackMuted() {
|
|
12793
|
-
this.emit(ReceiveSlotEvents.MediaStopped);
|
|
12794
|
-
}
|
|
12795
|
-
handleTrackUnmuted() {
|
|
12796
|
-
this.emit(ReceiveSlotEvents.MediaStarted);
|
|
12797
|
-
}
|
|
12798
|
-
removeTrackHandlers(track) {
|
|
12799
|
-
track.removeEventListener('mute', this.handleTrackMuted);
|
|
12800
|
-
track.removeEventListener('unmute', this.handleTrackUnmuted);
|
|
12801
|
-
}
|
|
12802
|
-
replaceTrack(newTrack) {
|
|
12803
|
-
var _a;
|
|
12804
|
-
var trackToRemove = (_a = this._stream.getTracks()) === null || _a === void 0 ? void 0 : _a[0];
|
|
12805
|
-
if (trackToRemove) {
|
|
12806
|
-
this._stream.removeTrack(trackToRemove);
|
|
12807
|
-
this.removeTrackHandlers(trackToRemove);
|
|
11901
|
+
function injectContentTypes(sdp, contentTypeMap) {
|
|
11902
|
+
contentTypeMap.forEach((mediaContent, mid) => {
|
|
11903
|
+
var mline = sdp.media.find(m => m.mid === mid);
|
|
11904
|
+
if (!mline) {
|
|
11905
|
+
throw new Error("Error trying to set content type for mid ".concat(mid, ": not found in SDP"));
|
|
12808
11906
|
}
|
|
12809
|
-
|
|
12810
|
-
|
|
12811
|
-
|
|
12812
|
-
|
|
12813
|
-
this.currentRxCsi = csi;
|
|
12814
|
-
this.emit(ReceiveSlotEvents.SourceUpdate, state, csi);
|
|
12815
|
-
}
|
|
12816
|
-
close() {
|
|
12817
|
-
this._stream.getTracks().forEach(t => {
|
|
12818
|
-
this.removeTrackHandlers(t);
|
|
12819
|
-
});
|
|
12820
|
-
}
|
|
12821
|
-
get id() {
|
|
12822
|
-
return this._idGetter();
|
|
12823
|
-
}
|
|
12824
|
-
get stream() {
|
|
12825
|
-
return this._stream;
|
|
12826
|
-
}
|
|
11907
|
+
if (mediaContent === MediaContent$1.Slides) {
|
|
11908
|
+
mline.addLine(new ContentLine(['slides']));
|
|
11909
|
+
}
|
|
11910
|
+
});
|
|
12827
11911
|
}
|
|
12828
|
-
|
|
12829
|
-
|
|
12830
|
-
|
|
12831
|
-
|
|
12832
|
-
|
|
12833
|
-
|
|
12834
|
-
|
|
12835
|
-
|
|
12836
|
-
|
|
12837
|
-
|
|
12838
|
-
|
|
12839
|
-
|
|
12840
|
-
|
|
12841
|
-
|
|
12842
|
-
|
|
12843
|
-
|
|
12844
|
-
}
|
|
12845
|
-
get sender() {
|
|
12846
|
-
return this._rtcRtpTransceiver.sender;
|
|
12847
|
-
}
|
|
12848
|
-
get mid() {
|
|
12849
|
-
return this._rtcRtpTransceiver.mid;
|
|
12850
|
-
}
|
|
12851
|
-
close() {
|
|
12852
|
-
this._rtcRtpTransceiver.stop();
|
|
12853
|
-
}
|
|
11912
|
+
function injectJmpAttributes(parsedSdp, csiMap, streamSignalingMode) {
|
|
11913
|
+
parsedSdp.avMedia.filter(mLine => mLine.direction === 'sendrecv' || mLine.direction === 'sendonly').forEach(mLine => {
|
|
11914
|
+
if (!mLine.otherLines.find(line => line instanceof JmpLine)) {
|
|
11915
|
+
mLine.addLine(new JmpLine());
|
|
11916
|
+
}
|
|
11917
|
+
if (!mLine.otherLines.find(line => line instanceof JmpSourceLine)) {
|
|
11918
|
+
var mediaType = getMediaTypeForMline(mLine);
|
|
11919
|
+
var csi = csiMap.get(mediaType);
|
|
11920
|
+
if (!csi) {
|
|
11921
|
+
throw new Error("Unable to find CSI for MediaType ".concat(mediaType));
|
|
11922
|
+
}
|
|
11923
|
+
mLine.addLine(new JmpSourceLine(mLine.mid, csi.toString()));
|
|
11924
|
+
}
|
|
11925
|
+
if (!mLine.otherLines.find(line => line instanceof JmpStreamIdModeLine)) {
|
|
11926
|
+
mLine.addLine(new JmpStreamIdModeLine(streamSignalingMode));
|
|
11927
|
+
}
|
|
11928
|
+
});
|
|
12854
11929
|
}
|
|
12855
|
-
class
|
|
12856
|
-
constructor(
|
|
12857
|
-
super(
|
|
12858
|
-
this.
|
|
12859
|
-
|
|
12860
|
-
|
|
11930
|
+
class SendOnlyTransceiver extends Transceiver {
|
|
11931
|
+
constructor(rtcpRtpTransceiver, csi) {
|
|
11932
|
+
super(rtcpRtpTransceiver);
|
|
11933
|
+
this.requested = false;
|
|
11934
|
+
this.csi = csi;
|
|
11935
|
+
this.handleTrackChange = this.handleTrackChange.bind(this);
|
|
11936
|
+
}
|
|
11937
|
+
handleTrackChange() {
|
|
11938
|
+
var _a;
|
|
11939
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
11940
|
+
if (this.requested) {
|
|
11941
|
+
yield this.sender.replaceTrack(((_a = this.publishedTrack) === null || _a === void 0 ? void 0 : _a.underlyingTrack) || null);
|
|
12861
11942
|
}
|
|
12862
|
-
|
|
12863
|
-
}, this._rtcRtpTransceiver.receiver.track);
|
|
11943
|
+
});
|
|
12864
11944
|
}
|
|
12865
|
-
|
|
12866
|
-
|
|
12867
|
-
this
|
|
11945
|
+
replacePublishedTrack(newTrack) {
|
|
11946
|
+
var _a, _b;
|
|
11947
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
11948
|
+
(_a = this.publishedTrack) === null || _a === void 0 ? void 0 : _a.off(LocalTrackEvents.UnderlyingTrackChange, this.handleTrackChange);
|
|
11949
|
+
(_b = this.publishedTrack) === null || _b === void 0 ? void 0 : _b.setPublished(false);
|
|
11950
|
+
if (this.requested) {
|
|
11951
|
+
yield this.sender.replaceTrack((newTrack === null || newTrack === void 0 ? void 0 : newTrack.underlyingTrack) || null);
|
|
11952
|
+
}
|
|
11953
|
+
this.publishedTrack = newTrack;
|
|
11954
|
+
newTrack === null || newTrack === void 0 ? void 0 : newTrack.on(LocalTrackEvents.UnderlyingTrackChange, this.handleTrackChange);
|
|
11955
|
+
newTrack === null || newTrack === void 0 ? void 0 : newTrack.setPublished(true);
|
|
11956
|
+
});
|
|
12868
11957
|
}
|
|
12869
|
-
|
|
12870
|
-
|
|
12871
|
-
this
|
|
11958
|
+
setTrackRequested(requested) {
|
|
11959
|
+
var _a;
|
|
11960
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
11961
|
+
if (this.requested !== requested) {
|
|
11962
|
+
this.requested = requested;
|
|
11963
|
+
var newTrack = requested ? ((_a = this.publishedTrack) === null || _a === void 0 ? void 0 : _a.underlyingTrack) || null : null;
|
|
11964
|
+
yield this.sender.replaceTrack(newTrack);
|
|
11965
|
+
}
|
|
11966
|
+
});
|
|
12872
11967
|
}
|
|
12873
|
-
|
|
12874
|
-
return this
|
|
11968
|
+
updateSimulcastStreamStates(requestedIdEncodingParamsMap) {
|
|
11969
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
11970
|
+
var sendParameters = this.sender.getParameters();
|
|
11971
|
+
sendParameters.encodings.forEach((encoding, index) => {
|
|
11972
|
+
var encodingParams = requestedIdEncodingParamsMap.get(index);
|
|
11973
|
+
encoding.active = Boolean(encodingParams);
|
|
11974
|
+
if (encodingParams) {
|
|
11975
|
+
if (encodingParams.scaleDownRatio >= 1 && encoding.scaleResolutionDownBy !== encodingParams.scaleDownRatio) {
|
|
11976
|
+
encoding.scaleResolutionDownBy = encodingParams.scaleDownRatio;
|
|
11977
|
+
}
|
|
11978
|
+
if (encodingParams.maxPayloadBitsPerSecond) {
|
|
11979
|
+
encoding.maxBitrate = encodingParams.maxPayloadBitsPerSecond;
|
|
11980
|
+
}
|
|
11981
|
+
}
|
|
11982
|
+
});
|
|
11983
|
+
yield this.sender.setParameters(sendParameters);
|
|
11984
|
+
});
|
|
12875
11985
|
}
|
|
12876
|
-
|
|
12877
|
-
|
|
12878
|
-
|
|
12879
|
-
|
|
12880
|
-
if (!JmpLine.regex.test(line)) {
|
|
12881
|
-
return undefined;
|
|
11986
|
+
getScaleDownRatio(expectedMaxFs) {
|
|
11987
|
+
var _a;
|
|
11988
|
+
if (!expectedMaxFs) {
|
|
11989
|
+
return -1;
|
|
12882
11990
|
}
|
|
12883
|
-
|
|
11991
|
+
if (!this.publishedTrack) {
|
|
11992
|
+
return -1;
|
|
11993
|
+
}
|
|
11994
|
+
var setting = (_a = this.publishedTrack) === null || _a === void 0 ? void 0 : _a.underlyingTrack.getSettings();
|
|
11995
|
+
var sourceHeight = setting === null || setting === void 0 ? void 0 : setting.height;
|
|
11996
|
+
var sourceWidth = setting === null || setting === void 0 ? void 0 : setting.width;
|
|
11997
|
+
if (!sourceWidth || !sourceHeight) {
|
|
11998
|
+
return -1;
|
|
11999
|
+
}
|
|
12000
|
+
return Math.max(getScaleDownRatio([sourceWidth, sourceHeight], sourceHeight, expectedMaxFs), 1.0);
|
|
12884
12001
|
}
|
|
12885
|
-
|
|
12886
|
-
return
|
|
12002
|
+
publishTrack(track) {
|
|
12003
|
+
return this.replacePublishedTrack(track);
|
|
12887
12004
|
}
|
|
12888
|
-
|
|
12889
|
-
|
|
12890
|
-
class JmpStreamIdModeLine extends Line {
|
|
12891
|
-
constructor(streamIdMode) {
|
|
12892
|
-
super();
|
|
12893
|
-
this.streamIdMode = streamIdMode;
|
|
12005
|
+
unpublishTrack() {
|
|
12006
|
+
return this.replacePublishedTrack();
|
|
12894
12007
|
}
|
|
12895
|
-
|
|
12896
|
-
|
|
12897
|
-
|
|
12008
|
+
setActive(enabled) {
|
|
12009
|
+
var direction = enabled ? 'sendrecv' : 'inactive';
|
|
12010
|
+
this._rtcRtpTransceiver.direction = direction;
|
|
12011
|
+
return this._rtcRtpTransceiver.direction !== this._rtcRtpTransceiver.currentDirection;
|
|
12012
|
+
}
|
|
12013
|
+
getIngressPayloadType(mimeType) {
|
|
12014
|
+
var senderCodecs = this.sender.getParameters().codecs.filter(codec => codec.mimeType === mimeType);
|
|
12015
|
+
var receiverCodecs = this.receiver.getParameters().codecs.filter(codec => codec.mimeType === mimeType);
|
|
12016
|
+
if (!senderCodecs || !receiverCodecs || senderCodecs.length === 0 || receiverCodecs.length === 0) {
|
|
12017
|
+
throw new Error("sender codecs or receiver codecs is undefined or empty");
|
|
12898
12018
|
}
|
|
12899
|
-
var
|
|
12900
|
-
var
|
|
12901
|
-
|
|
12019
|
+
var senderCodec = senderCodecs[0];
|
|
12020
|
+
var targetCodec = receiverCodecs.find(receiverCodec => {
|
|
12021
|
+
return areCodecsCompatible(senderCodec, receiverCodec);
|
|
12022
|
+
});
|
|
12023
|
+
if (!targetCodec || !targetCodec.payloadType) {
|
|
12024
|
+
throw new Error("ingress payload type is not well defined in receiver codecs");
|
|
12025
|
+
}
|
|
12026
|
+
return targetCodec.payloadType;
|
|
12902
12027
|
}
|
|
12903
|
-
|
|
12904
|
-
return
|
|
12028
|
+
getStats() {
|
|
12029
|
+
return this.sender.getStats();
|
|
12905
12030
|
}
|
|
12906
12031
|
}
|
|
12907
|
-
|
|
12908
|
-
|
|
12909
|
-
|
|
12910
|
-
|
|
12911
|
-
this.
|
|
12912
|
-
this.csi = csi;
|
|
12913
|
-
}
|
|
12914
|
-
static fromSdpLine(line) {
|
|
12915
|
-
if (!JmpSourceLine.regex.test(line)) {
|
|
12916
|
-
return undefined;
|
|
12917
|
-
}
|
|
12918
|
-
var tokens = line.match(JmpSourceLine.regex);
|
|
12919
|
-
var source = tokens[1];
|
|
12920
|
-
var csi = tokens[2];
|
|
12921
|
-
return new JmpSourceLine(source, csi);
|
|
12032
|
+
class StatsManager {
|
|
12033
|
+
constructor(statsGetter) {
|
|
12034
|
+
var statsPreprocessor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : () => __awaiter(this, void 0, void 0, function* () {});
|
|
12035
|
+
this.statsGetter = statsGetter;
|
|
12036
|
+
this.statsPreProcessor = statsPreprocessor;
|
|
12922
12037
|
}
|
|
12923
|
-
|
|
12924
|
-
|
|
12925
|
-
|
|
12926
|
-
|
|
12927
|
-
|
|
12928
|
-
|
|
12038
|
+
getStats() {
|
|
12039
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
12040
|
+
var statsReport = yield this.statsGetter();
|
|
12041
|
+
var statsObject = {};
|
|
12042
|
+
statsReport.forEach((value, key) => {
|
|
12043
|
+
statsObject[key] = value;
|
|
12044
|
+
});
|
|
12045
|
+
yield this.statsPreProcessor(statsObject);
|
|
12046
|
+
return statsObject;
|
|
12047
|
+
});
|
|
12929
12048
|
}
|
|
12930
12049
|
}
|
|
12931
|
-
|
|
12932
|
-
|
|
12933
|
-
|
|
12934
|
-
|
|
12935
|
-
|
|
12936
|
-
|
|
12937
|
-
|
|
12938
|
-
|
|
12939
|
-
return o;
|
|
12940
|
-
}, Object.create(Object.getPrototypeOf(source))) : source;
|
|
12941
|
-
}
|
|
12942
|
-
function getMediaTypeForMline(mLine) {
|
|
12943
|
-
var _a, _b;
|
|
12944
|
-
var mediaFamily;
|
|
12945
|
-
if (mLine.type.toLowerCase() === MediaFamily$1.Audio.toLowerCase()) {
|
|
12946
|
-
mediaFamily = MediaFamily$1.Audio;
|
|
12947
|
-
} else if (mLine.type.toLowerCase() === MediaFamily$1.Video.toLowerCase()) {
|
|
12948
|
-
mediaFamily = MediaFamily$1.Video;
|
|
12949
|
-
} else {
|
|
12950
|
-
throw Error("Mline type doesn't match any known MediaFamily: ".concat(mLine.type));
|
|
12050
|
+
var simulcastMaxFrameSizes = {
|
|
12051
|
+
0: '240',
|
|
12052
|
+
1: '2304',
|
|
12053
|
+
2: '8160'
|
|
12054
|
+
};
|
|
12055
|
+
class RidIngressStreamSignaler {
|
|
12056
|
+
constructor(mid) {
|
|
12057
|
+
this.mid = mid;
|
|
12951
12058
|
}
|
|
12952
|
-
|
|
12953
|
-
|
|
12954
|
-
|
|
12955
|
-
|
|
12956
|
-
|
|
12059
|
+
getReceiverId() {
|
|
12060
|
+
return {
|
|
12061
|
+
mid: this.mid,
|
|
12062
|
+
rid: '1'
|
|
12063
|
+
};
|
|
12957
12064
|
}
|
|
12958
|
-
|
|
12959
|
-
}
|
|
12960
|
-
function filterCodecs(parsedSdp, allowedCodecs) {
|
|
12961
|
-
var allowedLowerCase = allowedCodecs.map(s => s.toLowerCase());
|
|
12962
|
-
parsedSdp.avMedia.map(m => [...m.codecs.values()].map(c => c.name)).flat().filter(codecName => !allowedLowerCase.includes(codecName.toLowerCase())).forEach(c => removeCodec(parsedSdp, c));
|
|
12963
|
-
}
|
|
12964
|
-
function setMaxBandwidth(parsedSdp, maxBandwidth) {
|
|
12965
|
-
parsedSdp.avMedia.forEach(mline => {
|
|
12966
|
-
mline.bandwidth = new BandwidthLine('TIAS', maxBandwidth);
|
|
12967
|
-
});
|
|
12065
|
+
signalLocalStreams(mLine) {}
|
|
12066
|
+
signalRemoteStreams(mLine) {}
|
|
12968
12067
|
}
|
|
12969
|
-
|
|
12970
|
-
|
|
12971
|
-
|
|
12972
|
-
|
|
12973
|
-
parsedSdp.session.groups.splice(0, parsedSdp.session.groups.length);
|
|
12974
|
-
parsedSdp.session.groups.push(new BundleGroupLine(audioMids));
|
|
12975
|
-
parsedSdp.session.groups.push(new BundleGroupLine(videoMids));
|
|
12068
|
+
class RidEgressStreamSignaler {
|
|
12069
|
+
constructor(mid) {
|
|
12070
|
+
this.streamIds = [];
|
|
12071
|
+
this.mid = mid;
|
|
12976
12072
|
}
|
|
12977
|
-
|
|
12978
|
-
|
|
12979
|
-
|
|
12980
|
-
|
|
12981
|
-
|
|
12982
|
-
|
|
12983
|
-
|
|
12984
|
-
|
|
12985
|
-
|
|
12986
|
-
|
|
12987
|
-
|
|
12988
|
-
|
|
12989
|
-
|
|
12990
|
-
}
|
|
12991
|
-
|
|
12992
|
-
|
|
12993
|
-
|
|
12994
|
-
|
|
12995
|
-
throw new Error("Offer mline is missing MID");
|
|
12996
|
-
}
|
|
12997
|
-
var answerMline = parsedAnswer.media.find(m => m.mid === offerMline.mid);
|
|
12998
|
-
if (answerMline) {
|
|
12999
|
-
if (answerMline instanceof AvMediaDescription) {
|
|
13000
|
-
[...answerMline.codecs.values()].forEach(ci => {
|
|
13001
|
-
ci.fmtParams.push('x-google-start-bitrate=60000');
|
|
13002
|
-
});
|
|
12073
|
+
signalStreams(simulcastEnabled, _rtxEnabled, mLine) {
|
|
12074
|
+
mLine.ssrcGroups = [];
|
|
12075
|
+
if (this.streamIds.length === 0) {
|
|
12076
|
+
if (simulcastEnabled) {
|
|
12077
|
+
this.streamIds = [{
|
|
12078
|
+
mid: this.mid,
|
|
12079
|
+
rid: 'low'
|
|
12080
|
+
}, {
|
|
12081
|
+
mid: this.mid,
|
|
12082
|
+
rid: 'medium'
|
|
12083
|
+
}, {
|
|
12084
|
+
mid: this.mid,
|
|
12085
|
+
rid: 'high'
|
|
12086
|
+
}];
|
|
12087
|
+
} else {
|
|
12088
|
+
this.streamIds = [{
|
|
12089
|
+
mid: this.mid
|
|
12090
|
+
}];
|
|
13003
12091
|
}
|
|
13004
|
-
return answerMline;
|
|
13005
12092
|
}
|
|
13006
|
-
if (
|
|
13007
|
-
|
|
12093
|
+
if (simulcastEnabled) {
|
|
12094
|
+
mLine.rids = this.streamIds.map((streamId, index) => new RidLine(streamId.rid, 'send', "max-fs=".concat(simulcastMaxFrameSizes[index])));
|
|
12095
|
+
mLine.simulcast = new SimulcastLine(SimulcastLayerList.fromString('low;medium;high'), new SimulcastLayerList());
|
|
13008
12096
|
}
|
|
13009
|
-
|
|
13010
|
-
|
|
13011
|
-
|
|
12097
|
+
}
|
|
12098
|
+
getSenderIds() {
|
|
12099
|
+
return this.streamIds;
|
|
12100
|
+
}
|
|
12101
|
+
getEncodingIndexForStreamId(streamId) {
|
|
12102
|
+
return this.streamIds.findIndex(currStreamId => compareStreamIds(currStreamId, streamId));
|
|
12103
|
+
}
|
|
12104
|
+
}
|
|
12105
|
+
function generateSsrc() {
|
|
12106
|
+
return Math.floor(Math.random() * 0xffffffff);
|
|
12107
|
+
}
|
|
12108
|
+
class SsrcIngressStreamSignaler {
|
|
12109
|
+
constructor() {
|
|
12110
|
+
this.ssrc = generateSsrc();
|
|
12111
|
+
}
|
|
12112
|
+
getReceiverId() {
|
|
12113
|
+
return Object.assign({
|
|
12114
|
+
ssrc: this.ssrc
|
|
12115
|
+
}, this.rtxSsrc ? {
|
|
12116
|
+
rtxSsrc: this.rtxSsrc
|
|
12117
|
+
} : {});
|
|
12118
|
+
}
|
|
12119
|
+
signalLocalStreams(_mLine) {}
|
|
12120
|
+
signalRemoteStreams(mLine) {
|
|
12121
|
+
mLine.addLine(new SsrcLine(this.ssrc, 'cname', "".concat(this.ssrc, "-cname")));
|
|
12122
|
+
mLine.addLine(new SsrcLine(this.ssrc, 'msid', '-', '1'));
|
|
12123
|
+
if (hasCodec('rtx', mLine)) {
|
|
12124
|
+
this.rtxSsrc = generateSsrc();
|
|
12125
|
+
mLine.addLine(new SsrcLine(this.rtxSsrc, 'cname', "".concat(this.ssrc, "-cname")));
|
|
12126
|
+
mLine.addLine(new SsrcLine(this.rtxSsrc, 'msid', '-', '1'));
|
|
12127
|
+
mLine.addLine(new SsrcGroupLine('FID', [this.ssrc, this.rtxSsrc]));
|
|
13012
12128
|
}
|
|
13013
|
-
|
|
13014
|
-
|
|
13015
|
-
|
|
13016
|
-
|
|
13017
|
-
|
|
12129
|
+
}
|
|
12130
|
+
}
|
|
12131
|
+
class SsrcEgressStreamSignaler {
|
|
12132
|
+
constructor() {
|
|
12133
|
+
this.streamIds = [];
|
|
12134
|
+
}
|
|
12135
|
+
signalStreams(simulcastEnabled, rtxEnabled, mLine) {
|
|
12136
|
+
mLine.rids = [];
|
|
12137
|
+
mLine.simulcast = undefined;
|
|
12138
|
+
mLine.ssrcs = [];
|
|
12139
|
+
mLine.ssrcGroups = [];
|
|
12140
|
+
if (this.streamIds.length === 0) {
|
|
12141
|
+
var numStreams = simulcastEnabled ? 3 : 1;
|
|
12142
|
+
[...Array(numStreams).keys()].forEach(() => {
|
|
12143
|
+
var newStreamId = {
|
|
12144
|
+
ssrc: generateSsrc()
|
|
12145
|
+
};
|
|
12146
|
+
if (rtxEnabled) {
|
|
12147
|
+
newStreamId.rtxSsrc = generateSsrc();
|
|
12148
|
+
}
|
|
12149
|
+
this.streamIds.push(newStreamId);
|
|
12150
|
+
});
|
|
13018
12151
|
}
|
|
13019
|
-
|
|
13020
|
-
|
|
13021
|
-
|
|
13022
|
-
|
|
12152
|
+
this.streamIds.forEach(streamId => {
|
|
12153
|
+
var rtpSsrc = streamId.ssrc;
|
|
12154
|
+
mLine.addLine(new SsrcLine(rtpSsrc, 'cname', "".concat(rtpSsrc, "-cname")));
|
|
12155
|
+
mLine.addLine(new SsrcLine(rtpSsrc, 'msid', '-', '1'));
|
|
12156
|
+
if (rtxEnabled) {
|
|
12157
|
+
var rtxSsrc = streamId.rtxSsrc;
|
|
12158
|
+
mLine.addLine(new SsrcLine(rtxSsrc, 'cname', "".concat(rtpSsrc, "-cname")));
|
|
12159
|
+
mLine.addLine(new SsrcLine(rtxSsrc, 'msid', '-', '1'));
|
|
12160
|
+
mLine.addLine(new SsrcGroupLine('FID', [rtpSsrc, rtxSsrc]));
|
|
12161
|
+
}
|
|
12162
|
+
});
|
|
12163
|
+
if (simulcastEnabled) {
|
|
12164
|
+
mLine.addLine(new SsrcGroupLine('SIM', this.streamIds.map(streamId => streamId.ssrc)));
|
|
13023
12165
|
}
|
|
13024
|
-
|
|
13025
|
-
|
|
12166
|
+
}
|
|
12167
|
+
getSenderIds() {
|
|
12168
|
+
return this.streamIds;
|
|
12169
|
+
}
|
|
12170
|
+
getEncodingIndexForStreamId(streamId) {
|
|
12171
|
+
return this.streamIds.findIndex(currStreamId => compareStreamIds(currStreamId, streamId));
|
|
12172
|
+
}
|
|
13026
12173
|
}
|
|
13027
|
-
|
|
13028
|
-
|
|
13029
|
-
|
|
13030
|
-
|
|
13031
|
-
|
|
12174
|
+
class StreamSignalerManager {
|
|
12175
|
+
constructor(streamSignalingMode) {
|
|
12176
|
+
this.egressStreamSignalersByMid = new Map();
|
|
12177
|
+
this.ingressStreamsSignalersByMid = new Map();
|
|
12178
|
+
this.ingressStreamSignalingMode = streamSignalingMode;
|
|
12179
|
+
this.egressStreamSignalingMode = streamSignalingMode;
|
|
12180
|
+
}
|
|
12181
|
+
getOrCreateEgressStreamSignaler(mid) {
|
|
12182
|
+
var existing = this.getEgressStreamSignaler(mid);
|
|
12183
|
+
if (existing) {
|
|
12184
|
+
return existing;
|
|
13032
12185
|
}
|
|
13033
|
-
|
|
13034
|
-
|
|
12186
|
+
var newSignaler;
|
|
12187
|
+
if (this.egressStreamSignalingMode === 'MID-RID') {
|
|
12188
|
+
newSignaler = new RidEgressStreamSignaler(mid);
|
|
12189
|
+
} else {
|
|
12190
|
+
newSignaler = new SsrcEgressStreamSignaler();
|
|
13035
12191
|
}
|
|
13036
|
-
|
|
13037
|
-
|
|
13038
|
-
|
|
13039
|
-
|
|
13040
|
-
|
|
13041
|
-
|
|
12192
|
+
this.egressStreamSignalersByMid.set(mid, newSignaler);
|
|
12193
|
+
return newSignaler;
|
|
12194
|
+
}
|
|
12195
|
+
getEgressStreamSignalerOrThrow(mid) {
|
|
12196
|
+
var existing = this.getEgressStreamSignaler(mid);
|
|
12197
|
+
if (!existing) {
|
|
12198
|
+
throw new Error("Couldn't find EgressStreamSignaler for mid ".concat(mid));
|
|
13042
12199
|
}
|
|
13043
|
-
|
|
13044
|
-
|
|
13045
|
-
|
|
13046
|
-
|
|
13047
|
-
|
|
13048
|
-
|
|
13049
|
-
|
|
12200
|
+
return existing;
|
|
12201
|
+
}
|
|
12202
|
+
getEgressStreamSignaler(mid) {
|
|
12203
|
+
return this.egressStreamSignalersByMid.get(mid);
|
|
12204
|
+
}
|
|
12205
|
+
getOrCreateIngressStreamSignaler(mid) {
|
|
12206
|
+
var existing = this.getIngressStreamSignaler(mid);
|
|
12207
|
+
if (existing) {
|
|
12208
|
+
return existing;
|
|
13050
12209
|
}
|
|
13051
|
-
|
|
13052
|
-
|
|
12210
|
+
var newSignaler;
|
|
12211
|
+
if (this.ingressStreamSignalingMode === 'MID-RID') {
|
|
12212
|
+
newSignaler = new RidIngressStreamSignaler(mid);
|
|
12213
|
+
} else {
|
|
12214
|
+
newSignaler = new SsrcIngressStreamSignaler();
|
|
13053
12215
|
}
|
|
13054
|
-
|
|
13055
|
-
|
|
13056
|
-
class SendOnlyTransceiver extends Transceiver {
|
|
13057
|
-
constructor(rtcpRtpTransceiver, csi) {
|
|
13058
|
-
super(rtcpRtpTransceiver);
|
|
13059
|
-
this.requested = false;
|
|
13060
|
-
this.csi = csi;
|
|
13061
|
-
this.handleTrackChange = this.handleTrackChange.bind(this);
|
|
12216
|
+
this.ingressStreamsSignalersByMid.set(mid, newSignaler);
|
|
12217
|
+
return newSignaler;
|
|
13062
12218
|
}
|
|
13063
|
-
|
|
13064
|
-
|
|
13065
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
13066
|
-
if (this.requested) {
|
|
13067
|
-
yield this.sender.replaceTrack(((_a = this.publishedTrack) === null || _a === void 0 ? void 0 : _a.underlyingTrack) || null);
|
|
13068
|
-
}
|
|
13069
|
-
});
|
|
12219
|
+
getIngressStreamSignaler(mid) {
|
|
12220
|
+
return this.ingressStreamsSignalersByMid.get(mid);
|
|
13070
12221
|
}
|
|
13071
|
-
|
|
13072
|
-
var
|
|
13073
|
-
|
|
13074
|
-
|
|
13075
|
-
|
|
13076
|
-
|
|
13077
|
-
yield this.sender.replaceTrack((newTrack === null || newTrack === void 0 ? void 0 : newTrack.underlyingTrack) || null);
|
|
13078
|
-
}
|
|
13079
|
-
this.publishedTrack = newTrack;
|
|
13080
|
-
newTrack === null || newTrack === void 0 ? void 0 : newTrack.on(LocalTrackEvents.UnderlyingTrackChange, this.handleTrackChange);
|
|
13081
|
-
newTrack === null || newTrack === void 0 ? void 0 : newTrack.setPublished(true);
|
|
13082
|
-
});
|
|
12222
|
+
getIngressStreamSignalerOrThrow(mid) {
|
|
12223
|
+
var existing = this.getIngressStreamSignaler(mid);
|
|
12224
|
+
if (!existing) {
|
|
12225
|
+
throw new Error("Couldn't find IngressStreamSignaler for mid ".concat(mid));
|
|
12226
|
+
}
|
|
12227
|
+
return existing;
|
|
13083
12228
|
}
|
|
13084
|
-
|
|
13085
|
-
|
|
13086
|
-
|
|
13087
|
-
|
|
13088
|
-
|
|
13089
|
-
|
|
13090
|
-
|
|
12229
|
+
}
|
|
12230
|
+
var es5 = {
|
|
12231
|
+
exports: {}
|
|
12232
|
+
};
|
|
12233
|
+
(function (module, exports) {
|
|
12234
|
+
!function (e, t) {
|
|
12235
|
+
module.exports = t();
|
|
12236
|
+
}(commonjsGlobal$3, function () {
|
|
12237
|
+
return function (e) {
|
|
12238
|
+
var t = {};
|
|
12239
|
+
function r(n) {
|
|
12240
|
+
if (t[n]) return t[n].exports;
|
|
12241
|
+
var i = t[n] = {
|
|
12242
|
+
i: n,
|
|
12243
|
+
l: !1,
|
|
12244
|
+
exports: {}
|
|
12245
|
+
};
|
|
12246
|
+
return e[n].call(i.exports, i, i.exports, r), i.l = !0, i.exports;
|
|
13091
12247
|
}
|
|
13092
|
-
|
|
13093
|
-
|
|
13094
|
-
|
|
13095
|
-
|
|
13096
|
-
|
|
13097
|
-
|
|
13098
|
-
|
|
13099
|
-
|
|
13100
|
-
|
|
13101
|
-
|
|
13102
|
-
|
|
12248
|
+
return r.m = e, r.c = t, r.d = function (e, t, n) {
|
|
12249
|
+
r.o(e, t) || Object.defineProperty(e, t, {
|
|
12250
|
+
enumerable: !0,
|
|
12251
|
+
get: n
|
|
12252
|
+
});
|
|
12253
|
+
}, r.r = function (e) {
|
|
12254
|
+
"undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {
|
|
12255
|
+
value: "Module"
|
|
12256
|
+
}), Object.defineProperty(e, "__esModule", {
|
|
12257
|
+
value: !0
|
|
12258
|
+
});
|
|
12259
|
+
}, r.t = function (e, t) {
|
|
12260
|
+
if (1 & t && (e = r(e)), 8 & t) return e;
|
|
12261
|
+
if (4 & t && "object" == typeof e && e && e.__esModule) return e;
|
|
12262
|
+
var n = Object.create(null);
|
|
12263
|
+
if (r.r(n), Object.defineProperty(n, "default", {
|
|
12264
|
+
enumerable: !0,
|
|
12265
|
+
value: e
|
|
12266
|
+
}), 2 & t && "string" != typeof e) for (var i in e) {
|
|
12267
|
+
r.d(n, i, function (t) {
|
|
12268
|
+
return e[t];
|
|
12269
|
+
}.bind(null, i));
|
|
12270
|
+
}
|
|
12271
|
+
return n;
|
|
12272
|
+
}, r.n = function (e) {
|
|
12273
|
+
var t = e && e.__esModule ? function () {
|
|
12274
|
+
return e.default;
|
|
12275
|
+
} : function () {
|
|
12276
|
+
return e;
|
|
12277
|
+
};
|
|
12278
|
+
return r.d(t, "a", t), t;
|
|
12279
|
+
}, r.o = function (e, t) {
|
|
12280
|
+
return Object.prototype.hasOwnProperty.call(e, t);
|
|
12281
|
+
}, r.p = "", r(r.s = 90);
|
|
12282
|
+
}({
|
|
12283
|
+
17: function _(e, t, r) {
|
|
12284
|
+
t.__esModule = !0, t.default = void 0;
|
|
12285
|
+
var n = r(18),
|
|
12286
|
+
i = function () {
|
|
12287
|
+
function e() {}
|
|
12288
|
+
return e.getFirstMatch = function (e, t) {
|
|
12289
|
+
var r = t.match(e);
|
|
12290
|
+
return r && r.length > 0 && r[1] || "";
|
|
12291
|
+
}, e.getSecondMatch = function (e, t) {
|
|
12292
|
+
var r = t.match(e);
|
|
12293
|
+
return r && r.length > 1 && r[2] || "";
|
|
12294
|
+
}, e.matchAndReturnConst = function (e, t, r) {
|
|
12295
|
+
if (e.test(t)) return r;
|
|
12296
|
+
}, e.getWindowsVersionName = function (e) {
|
|
12297
|
+
switch (e) {
|
|
12298
|
+
case "NT":
|
|
12299
|
+
return "NT";
|
|
12300
|
+
case "XP":
|
|
12301
|
+
return "XP";
|
|
12302
|
+
case "NT 5.0":
|
|
12303
|
+
return "2000";
|
|
12304
|
+
case "NT 5.1":
|
|
12305
|
+
return "XP";
|
|
12306
|
+
case "NT 5.2":
|
|
12307
|
+
return "2003";
|
|
12308
|
+
case "NT 6.0":
|
|
12309
|
+
return "Vista";
|
|
12310
|
+
case "NT 6.1":
|
|
12311
|
+
return "7";
|
|
12312
|
+
case "NT 6.2":
|
|
12313
|
+
return "8";
|
|
12314
|
+
case "NT 6.3":
|
|
12315
|
+
return "8.1";
|
|
12316
|
+
case "NT 10.0":
|
|
12317
|
+
return "10";
|
|
12318
|
+
default:
|
|
12319
|
+
return;
|
|
12320
|
+
}
|
|
12321
|
+
}, e.getMacOSVersionName = function (e) {
|
|
12322
|
+
var t = e.split(".").splice(0, 2).map(function (e) {
|
|
12323
|
+
return parseInt(e, 10) || 0;
|
|
12324
|
+
});
|
|
12325
|
+
if (t.push(0), 10 === t[0]) switch (t[1]) {
|
|
12326
|
+
case 5:
|
|
12327
|
+
return "Leopard";
|
|
12328
|
+
case 6:
|
|
12329
|
+
return "Snow Leopard";
|
|
12330
|
+
case 7:
|
|
12331
|
+
return "Lion";
|
|
12332
|
+
case 8:
|
|
12333
|
+
return "Mountain Lion";
|
|
12334
|
+
case 9:
|
|
12335
|
+
return "Mavericks";
|
|
12336
|
+
case 10:
|
|
12337
|
+
return "Yosemite";
|
|
12338
|
+
case 11:
|
|
12339
|
+
return "El Capitan";
|
|
12340
|
+
case 12:
|
|
12341
|
+
return "Sierra";
|
|
12342
|
+
case 13:
|
|
12343
|
+
return "High Sierra";
|
|
12344
|
+
case 14:
|
|
12345
|
+
return "Mojave";
|
|
12346
|
+
case 15:
|
|
12347
|
+
return "Catalina";
|
|
12348
|
+
default:
|
|
12349
|
+
return;
|
|
12350
|
+
}
|
|
12351
|
+
}, e.getAndroidVersionName = function (e) {
|
|
12352
|
+
var t = e.split(".").splice(0, 2).map(function (e) {
|
|
12353
|
+
return parseInt(e, 10) || 0;
|
|
12354
|
+
});
|
|
12355
|
+
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;
|
|
12356
|
+
}, e.getVersionPrecision = function (e) {
|
|
12357
|
+
return e.split(".").length;
|
|
12358
|
+
}, e.compareVersions = function (t, r, n) {
|
|
12359
|
+
void 0 === n && (n = !1);
|
|
12360
|
+
var i = e.getVersionPrecision(t),
|
|
12361
|
+
s = e.getVersionPrecision(r),
|
|
12362
|
+
a = Math.max(i, s),
|
|
12363
|
+
o = 0,
|
|
12364
|
+
u = e.map([t, r], function (t) {
|
|
12365
|
+
var r = a - e.getVersionPrecision(t),
|
|
12366
|
+
n = t + new Array(r + 1).join(".0");
|
|
12367
|
+
return e.map(n.split("."), function (e) {
|
|
12368
|
+
return new Array(20 - e.length).join("0") + e;
|
|
12369
|
+
}).reverse();
|
|
12370
|
+
});
|
|
12371
|
+
for (n && (o = a - Math.min(i, s)), a -= 1; a >= o;) {
|
|
12372
|
+
if (u[0][a] > u[1][a]) return 1;
|
|
12373
|
+
if (u[0][a] === u[1][a]) {
|
|
12374
|
+
if (a === o) return 0;
|
|
12375
|
+
a -= 1;
|
|
12376
|
+
} else if (u[0][a] < u[1][a]) return -1;
|
|
12377
|
+
}
|
|
12378
|
+
}, e.map = function (e, t) {
|
|
12379
|
+
var r,
|
|
12380
|
+
n = [];
|
|
12381
|
+
if (Array.prototype.map) return Array.prototype.map.call(e, t);
|
|
12382
|
+
for (r = 0; r < e.length; r += 1) {
|
|
12383
|
+
n.push(t(e[r]));
|
|
12384
|
+
}
|
|
12385
|
+
return n;
|
|
12386
|
+
}, e.find = function (e, t) {
|
|
12387
|
+
var r, n;
|
|
12388
|
+
if (Array.prototype.find) return Array.prototype.find.call(e, t);
|
|
12389
|
+
for (r = 0, n = e.length; r < n; r += 1) {
|
|
12390
|
+
var i = e[r];
|
|
12391
|
+
if (t(i, r)) return i;
|
|
12392
|
+
}
|
|
12393
|
+
}, e.assign = function (e) {
|
|
12394
|
+
for (var t, r, n = e, i = arguments.length, s = new Array(i > 1 ? i - 1 : 0), a = 1; a < i; a++) {
|
|
12395
|
+
s[a - 1] = arguments[a];
|
|
12396
|
+
}
|
|
12397
|
+
if (Object.assign) return Object.assign.apply(Object, [e].concat(s));
|
|
12398
|
+
var o = function o() {
|
|
12399
|
+
var e = s[t];
|
|
12400
|
+
"object" == typeof e && null !== e && Object.keys(e).forEach(function (t) {
|
|
12401
|
+
n[t] = e[t];
|
|
12402
|
+
});
|
|
12403
|
+
};
|
|
12404
|
+
for (t = 0, r = s.length; t < r; t += 1) {
|
|
12405
|
+
o();
|
|
12406
|
+
}
|
|
12407
|
+
return e;
|
|
12408
|
+
}, e.getBrowserAlias = function (e) {
|
|
12409
|
+
return n.BROWSER_ALIASES_MAP[e];
|
|
12410
|
+
}, e.getBrowserTypeByAlias = function (e) {
|
|
12411
|
+
return n.BROWSER_MAP[e] || "";
|
|
12412
|
+
}, e;
|
|
12413
|
+
}();
|
|
12414
|
+
t.default = i, e.exports = t.default;
|
|
12415
|
+
},
|
|
12416
|
+
18: function _(e, t, r) {
|
|
12417
|
+
t.__esModule = !0, t.ENGINE_MAP = t.OS_MAP = t.PLATFORMS_MAP = t.BROWSER_MAP = t.BROWSER_ALIASES_MAP = void 0;
|
|
12418
|
+
t.BROWSER_ALIASES_MAP = {
|
|
12419
|
+
"Amazon Silk": "amazon_silk",
|
|
12420
|
+
"Android Browser": "android",
|
|
12421
|
+
Bada: "bada",
|
|
12422
|
+
BlackBerry: "blackberry",
|
|
12423
|
+
Chrome: "chrome",
|
|
12424
|
+
Chromium: "chromium",
|
|
12425
|
+
Electron: "electron",
|
|
12426
|
+
Epiphany: "epiphany",
|
|
12427
|
+
Firefox: "firefox",
|
|
12428
|
+
Focus: "focus",
|
|
12429
|
+
Generic: "generic",
|
|
12430
|
+
"Google Search": "google_search",
|
|
12431
|
+
Googlebot: "googlebot",
|
|
12432
|
+
"Internet Explorer": "ie",
|
|
12433
|
+
"K-Meleon": "k_meleon",
|
|
12434
|
+
Maxthon: "maxthon",
|
|
12435
|
+
"Microsoft Edge": "edge",
|
|
12436
|
+
"MZ Browser": "mz",
|
|
12437
|
+
"NAVER Whale Browser": "naver",
|
|
12438
|
+
Opera: "opera",
|
|
12439
|
+
"Opera Coast": "opera_coast",
|
|
12440
|
+
PhantomJS: "phantomjs",
|
|
12441
|
+
Puffin: "puffin",
|
|
12442
|
+
QupZilla: "qupzilla",
|
|
12443
|
+
QQ: "qq",
|
|
12444
|
+
QQLite: "qqlite",
|
|
12445
|
+
Safari: "safari",
|
|
12446
|
+
Sailfish: "sailfish",
|
|
12447
|
+
"Samsung Internet for Android": "samsung_internet",
|
|
12448
|
+
SeaMonkey: "seamonkey",
|
|
12449
|
+
Sleipnir: "sleipnir",
|
|
12450
|
+
Swing: "swing",
|
|
12451
|
+
Tizen: "tizen",
|
|
12452
|
+
"UC Browser": "uc",
|
|
12453
|
+
Vivaldi: "vivaldi",
|
|
12454
|
+
"WebOS Browser": "webos",
|
|
12455
|
+
WeChat: "wechat",
|
|
12456
|
+
"Yandex Browser": "yandex",
|
|
12457
|
+
Roku: "roku"
|
|
12458
|
+
};
|
|
12459
|
+
t.BROWSER_MAP = {
|
|
12460
|
+
amazon_silk: "Amazon Silk",
|
|
12461
|
+
android: "Android Browser",
|
|
12462
|
+
bada: "Bada",
|
|
12463
|
+
blackberry: "BlackBerry",
|
|
12464
|
+
chrome: "Chrome",
|
|
12465
|
+
chromium: "Chromium",
|
|
12466
|
+
electron: "Electron",
|
|
12467
|
+
epiphany: "Epiphany",
|
|
12468
|
+
firefox: "Firefox",
|
|
12469
|
+
focus: "Focus",
|
|
12470
|
+
generic: "Generic",
|
|
12471
|
+
googlebot: "Googlebot",
|
|
12472
|
+
google_search: "Google Search",
|
|
12473
|
+
ie: "Internet Explorer",
|
|
12474
|
+
k_meleon: "K-Meleon",
|
|
12475
|
+
maxthon: "Maxthon",
|
|
12476
|
+
edge: "Microsoft Edge",
|
|
12477
|
+
mz: "MZ Browser",
|
|
12478
|
+
naver: "NAVER Whale Browser",
|
|
12479
|
+
opera: "Opera",
|
|
12480
|
+
opera_coast: "Opera Coast",
|
|
12481
|
+
phantomjs: "PhantomJS",
|
|
12482
|
+
puffin: "Puffin",
|
|
12483
|
+
qupzilla: "QupZilla",
|
|
12484
|
+
qq: "QQ Browser",
|
|
12485
|
+
qqlite: "QQ Browser Lite",
|
|
12486
|
+
safari: "Safari",
|
|
12487
|
+
sailfish: "Sailfish",
|
|
12488
|
+
samsung_internet: "Samsung Internet for Android",
|
|
12489
|
+
seamonkey: "SeaMonkey",
|
|
12490
|
+
sleipnir: "Sleipnir",
|
|
12491
|
+
swing: "Swing",
|
|
12492
|
+
tizen: "Tizen",
|
|
12493
|
+
uc: "UC Browser",
|
|
12494
|
+
vivaldi: "Vivaldi",
|
|
12495
|
+
webos: "WebOS Browser",
|
|
12496
|
+
wechat: "WeChat",
|
|
12497
|
+
yandex: "Yandex Browser"
|
|
12498
|
+
};
|
|
12499
|
+
t.PLATFORMS_MAP = {
|
|
12500
|
+
tablet: "tablet",
|
|
12501
|
+
mobile: "mobile",
|
|
12502
|
+
desktop: "desktop",
|
|
12503
|
+
tv: "tv"
|
|
12504
|
+
};
|
|
12505
|
+
t.OS_MAP = {
|
|
12506
|
+
WindowsPhone: "Windows Phone",
|
|
12507
|
+
Windows: "Windows",
|
|
12508
|
+
MacOS: "macOS",
|
|
12509
|
+
iOS: "iOS",
|
|
12510
|
+
Android: "Android",
|
|
12511
|
+
WebOS: "WebOS",
|
|
12512
|
+
BlackBerry: "BlackBerry",
|
|
12513
|
+
Bada: "Bada",
|
|
12514
|
+
Tizen: "Tizen",
|
|
12515
|
+
Linux: "Linux",
|
|
12516
|
+
ChromeOS: "Chrome OS",
|
|
12517
|
+
PlayStation4: "PlayStation 4",
|
|
12518
|
+
Roku: "Roku"
|
|
12519
|
+
};
|
|
12520
|
+
t.ENGINE_MAP = {
|
|
12521
|
+
EdgeHTML: "EdgeHTML",
|
|
12522
|
+
Blink: "Blink",
|
|
12523
|
+
Trident: "Trident",
|
|
12524
|
+
Presto: "Presto",
|
|
12525
|
+
Gecko: "Gecko",
|
|
12526
|
+
WebKit: "WebKit"
|
|
12527
|
+
};
|
|
12528
|
+
},
|
|
12529
|
+
90: function _(e, t, r) {
|
|
12530
|
+
t.__esModule = !0, t.default = void 0;
|
|
12531
|
+
var n,
|
|
12532
|
+
i = (n = r(91)) && n.__esModule ? n : {
|
|
12533
|
+
default: n
|
|
12534
|
+
},
|
|
12535
|
+
s = r(18);
|
|
12536
|
+
function a(e, t) {
|
|
12537
|
+
for (var r = 0; r < t.length; r++) {
|
|
12538
|
+
var n = t[r];
|
|
12539
|
+
n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(e, n.key, n);
|
|
12540
|
+
}
|
|
12541
|
+
}
|
|
12542
|
+
var o = function () {
|
|
12543
|
+
function e() {}
|
|
12544
|
+
var t, r, n;
|
|
12545
|
+
return e.getParser = function (e, t) {
|
|
12546
|
+
if (void 0 === t && (t = !1), "string" != typeof e) throw new Error("UserAgent should be a string");
|
|
12547
|
+
return new i.default(e, t);
|
|
12548
|
+
}, e.parse = function (e) {
|
|
12549
|
+
return new i.default(e).getResult();
|
|
12550
|
+
}, t = e, n = [{
|
|
12551
|
+
key: "BROWSER_MAP",
|
|
12552
|
+
get: function get() {
|
|
12553
|
+
return s.BROWSER_MAP;
|
|
12554
|
+
}
|
|
12555
|
+
}, {
|
|
12556
|
+
key: "ENGINE_MAP",
|
|
12557
|
+
get: function get() {
|
|
12558
|
+
return s.ENGINE_MAP;
|
|
12559
|
+
}
|
|
12560
|
+
}, {
|
|
12561
|
+
key: "OS_MAP",
|
|
12562
|
+
get: function get() {
|
|
12563
|
+
return s.OS_MAP;
|
|
12564
|
+
}
|
|
12565
|
+
}, {
|
|
12566
|
+
key: "PLATFORMS_MAP",
|
|
12567
|
+
get: function get() {
|
|
12568
|
+
return s.PLATFORMS_MAP;
|
|
12569
|
+
}
|
|
12570
|
+
}], (r = null) && a(t.prototype, r), n && a(t, n), e;
|
|
12571
|
+
}();
|
|
12572
|
+
t.default = o, e.exports = t.default;
|
|
12573
|
+
},
|
|
12574
|
+
91: function _(e, t, r) {
|
|
12575
|
+
t.__esModule = !0, t.default = void 0;
|
|
12576
|
+
var n = u(r(92)),
|
|
12577
|
+
i = u(r(93)),
|
|
12578
|
+
s = u(r(94)),
|
|
12579
|
+
a = u(r(95)),
|
|
12580
|
+
o = u(r(17));
|
|
12581
|
+
function u(e) {
|
|
12582
|
+
return e && e.__esModule ? e : {
|
|
12583
|
+
default: e
|
|
12584
|
+
};
|
|
12585
|
+
}
|
|
12586
|
+
var d = function () {
|
|
12587
|
+
function e(e, t) {
|
|
12588
|
+
if (void 0 === t && (t = !1), null == e || "" === e) throw new Error("UserAgent parameter can't be empty");
|
|
12589
|
+
this._ua = e, this.parsedResult = {}, !0 !== t && this.parse();
|
|
12590
|
+
}
|
|
12591
|
+
var t = e.prototype;
|
|
12592
|
+
return t.getUA = function () {
|
|
12593
|
+
return this._ua;
|
|
12594
|
+
}, t.test = function (e) {
|
|
12595
|
+
return e.test(this._ua);
|
|
12596
|
+
}, t.parseBrowser = function () {
|
|
12597
|
+
var e = this;
|
|
12598
|
+
this.parsedResult.browser = {};
|
|
12599
|
+
var t = o.default.find(n.default, function (t) {
|
|
12600
|
+
if ("function" == typeof t.test) return t.test(e);
|
|
12601
|
+
if (t.test instanceof Array) return t.test.some(function (t) {
|
|
12602
|
+
return e.test(t);
|
|
12603
|
+
});
|
|
12604
|
+
throw new Error("Browser's test function is not valid");
|
|
12605
|
+
});
|
|
12606
|
+
return t && (this.parsedResult.browser = t.describe(this.getUA())), this.parsedResult.browser;
|
|
12607
|
+
}, t.getBrowser = function () {
|
|
12608
|
+
return this.parsedResult.browser ? this.parsedResult.browser : this.parseBrowser();
|
|
12609
|
+
}, t.getBrowserName = function (e) {
|
|
12610
|
+
return e ? String(this.getBrowser().name).toLowerCase() || "" : this.getBrowser().name || "";
|
|
12611
|
+
}, t.getBrowserVersion = function () {
|
|
12612
|
+
return this.getBrowser().version;
|
|
12613
|
+
}, t.getOS = function () {
|
|
12614
|
+
return this.parsedResult.os ? this.parsedResult.os : this.parseOS();
|
|
12615
|
+
}, t.parseOS = function () {
|
|
12616
|
+
var e = this;
|
|
12617
|
+
this.parsedResult.os = {};
|
|
12618
|
+
var t = o.default.find(i.default, function (t) {
|
|
12619
|
+
if ("function" == typeof t.test) return t.test(e);
|
|
12620
|
+
if (t.test instanceof Array) return t.test.some(function (t) {
|
|
12621
|
+
return e.test(t);
|
|
12622
|
+
});
|
|
12623
|
+
throw new Error("Browser's test function is not valid");
|
|
12624
|
+
});
|
|
12625
|
+
return t && (this.parsedResult.os = t.describe(this.getUA())), this.parsedResult.os;
|
|
12626
|
+
}, t.getOSName = function (e) {
|
|
12627
|
+
var t = this.getOS().name;
|
|
12628
|
+
return e ? String(t).toLowerCase() || "" : t || "";
|
|
12629
|
+
}, t.getOSVersion = function () {
|
|
12630
|
+
return this.getOS().version;
|
|
12631
|
+
}, t.getPlatform = function () {
|
|
12632
|
+
return this.parsedResult.platform ? this.parsedResult.platform : this.parsePlatform();
|
|
12633
|
+
}, t.getPlatformType = function (e) {
|
|
12634
|
+
void 0 === e && (e = !1);
|
|
12635
|
+
var t = this.getPlatform().type;
|
|
12636
|
+
return e ? String(t).toLowerCase() || "" : t || "";
|
|
12637
|
+
}, t.parsePlatform = function () {
|
|
12638
|
+
var e = this;
|
|
12639
|
+
this.parsedResult.platform = {};
|
|
12640
|
+
var t = o.default.find(s.default, function (t) {
|
|
12641
|
+
if ("function" == typeof t.test) return t.test(e);
|
|
12642
|
+
if (t.test instanceof Array) return t.test.some(function (t) {
|
|
12643
|
+
return e.test(t);
|
|
12644
|
+
});
|
|
12645
|
+
throw new Error("Browser's test function is not valid");
|
|
12646
|
+
});
|
|
12647
|
+
return t && (this.parsedResult.platform = t.describe(this.getUA())), this.parsedResult.platform;
|
|
12648
|
+
}, t.getEngine = function () {
|
|
12649
|
+
return this.parsedResult.engine ? this.parsedResult.engine : this.parseEngine();
|
|
12650
|
+
}, t.getEngineName = function (e) {
|
|
12651
|
+
return e ? String(this.getEngine().name).toLowerCase() || "" : this.getEngine().name || "";
|
|
12652
|
+
}, t.parseEngine = function () {
|
|
12653
|
+
var e = this;
|
|
12654
|
+
this.parsedResult.engine = {};
|
|
12655
|
+
var t = o.default.find(a.default, function (t) {
|
|
12656
|
+
if ("function" == typeof t.test) return t.test(e);
|
|
12657
|
+
if (t.test instanceof Array) return t.test.some(function (t) {
|
|
12658
|
+
return e.test(t);
|
|
12659
|
+
});
|
|
12660
|
+
throw new Error("Browser's test function is not valid");
|
|
12661
|
+
});
|
|
12662
|
+
return t && (this.parsedResult.engine = t.describe(this.getUA())), this.parsedResult.engine;
|
|
12663
|
+
}, t.parse = function () {
|
|
12664
|
+
return this.parseBrowser(), this.parseOS(), this.parsePlatform(), this.parseEngine(), this;
|
|
12665
|
+
}, t.getResult = function () {
|
|
12666
|
+
return o.default.assign({}, this.parsedResult);
|
|
12667
|
+
}, t.satisfies = function (e) {
|
|
12668
|
+
var t = this,
|
|
12669
|
+
r = {},
|
|
12670
|
+
n = 0,
|
|
12671
|
+
i = {},
|
|
12672
|
+
s = 0;
|
|
12673
|
+
if (Object.keys(e).forEach(function (t) {
|
|
12674
|
+
var a = e[t];
|
|
12675
|
+
"string" == typeof a ? (i[t] = a, s += 1) : "object" == typeof a && (r[t] = a, n += 1);
|
|
12676
|
+
}), n > 0) {
|
|
12677
|
+
var a = Object.keys(r),
|
|
12678
|
+
u = o.default.find(a, function (e) {
|
|
12679
|
+
return t.isOS(e);
|
|
12680
|
+
});
|
|
12681
|
+
if (u) {
|
|
12682
|
+
var d = this.satisfies(r[u]);
|
|
12683
|
+
if (void 0 !== d) return d;
|
|
12684
|
+
}
|
|
12685
|
+
var c = o.default.find(a, function (e) {
|
|
12686
|
+
return t.isPlatform(e);
|
|
12687
|
+
});
|
|
12688
|
+
if (c) {
|
|
12689
|
+
var f = this.satisfies(r[c]);
|
|
12690
|
+
if (void 0 !== f) return f;
|
|
12691
|
+
}
|
|
12692
|
+
}
|
|
12693
|
+
if (s > 0) {
|
|
12694
|
+
var l = Object.keys(i),
|
|
12695
|
+
h = o.default.find(l, function (e) {
|
|
12696
|
+
return t.isBrowser(e, !0);
|
|
12697
|
+
});
|
|
12698
|
+
if (void 0 !== h) return this.compareVersion(i[h]);
|
|
12699
|
+
}
|
|
12700
|
+
}, t.isBrowser = function (e, t) {
|
|
12701
|
+
void 0 === t && (t = !1);
|
|
12702
|
+
var r = this.getBrowserName().toLowerCase(),
|
|
12703
|
+
n = e.toLowerCase(),
|
|
12704
|
+
i = o.default.getBrowserTypeByAlias(n);
|
|
12705
|
+
return t && i && (n = i.toLowerCase()), n === r;
|
|
12706
|
+
}, t.compareVersion = function (e) {
|
|
12707
|
+
var t = [0],
|
|
12708
|
+
r = e,
|
|
12709
|
+
n = !1,
|
|
12710
|
+
i = this.getBrowserVersion();
|
|
12711
|
+
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;
|
|
12712
|
+
}, t.isOS = function (e) {
|
|
12713
|
+
return this.getOSName(!0) === String(e).toLowerCase();
|
|
12714
|
+
}, t.isPlatform = function (e) {
|
|
12715
|
+
return this.getPlatformType(!0) === String(e).toLowerCase();
|
|
12716
|
+
}, t.isEngine = function (e) {
|
|
12717
|
+
return this.getEngineName(!0) === String(e).toLowerCase();
|
|
12718
|
+
}, t.is = function (e, t) {
|
|
12719
|
+
return void 0 === t && (t = !1), this.isBrowser(e, t) || this.isOS(e) || this.isPlatform(e);
|
|
12720
|
+
}, t.some = function (e) {
|
|
12721
|
+
var t = this;
|
|
12722
|
+
return void 0 === e && (e = []), e.some(function (e) {
|
|
12723
|
+
return t.is(e);
|
|
12724
|
+
});
|
|
12725
|
+
}, e;
|
|
12726
|
+
}();
|
|
12727
|
+
t.default = d, e.exports = t.default;
|
|
12728
|
+
},
|
|
12729
|
+
92: function _(e, t, r) {
|
|
12730
|
+
t.__esModule = !0, t.default = void 0;
|
|
12731
|
+
var n,
|
|
12732
|
+
i = (n = r(17)) && n.__esModule ? n : {
|
|
12733
|
+
default: n
|
|
12734
|
+
};
|
|
12735
|
+
var s = /version\/(\d+(\.?_?\d+)+)/i,
|
|
12736
|
+
a = [{
|
|
12737
|
+
test: [/googlebot/i],
|
|
12738
|
+
describe: function describe(e) {
|
|
12739
|
+
var t = {
|
|
12740
|
+
name: "Googlebot"
|
|
12741
|
+
},
|
|
12742
|
+
r = i.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i, e) || i.default.getFirstMatch(s, e);
|
|
12743
|
+
return r && (t.version = r), t;
|
|
12744
|
+
}
|
|
12745
|
+
}, {
|
|
12746
|
+
test: [/opera/i],
|
|
12747
|
+
describe: function describe(e) {
|
|
12748
|
+
var t = {
|
|
12749
|
+
name: "Opera"
|
|
12750
|
+
},
|
|
12751
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12752
|
+
return r && (t.version = r), t;
|
|
12753
|
+
}
|
|
12754
|
+
}, {
|
|
12755
|
+
test: [/opr\/|opios/i],
|
|
12756
|
+
describe: function describe(e) {
|
|
12757
|
+
var t = {
|
|
12758
|
+
name: "Opera"
|
|
12759
|
+
},
|
|
12760
|
+
r = i.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12761
|
+
return r && (t.version = r), t;
|
|
12762
|
+
}
|
|
12763
|
+
}, {
|
|
12764
|
+
test: [/SamsungBrowser/i],
|
|
12765
|
+
describe: function describe(e) {
|
|
12766
|
+
var t = {
|
|
12767
|
+
name: "Samsung Internet for Android"
|
|
12768
|
+
},
|
|
12769
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12770
|
+
return r && (t.version = r), t;
|
|
12771
|
+
}
|
|
12772
|
+
}, {
|
|
12773
|
+
test: [/Whale/i],
|
|
12774
|
+
describe: function describe(e) {
|
|
12775
|
+
var t = {
|
|
12776
|
+
name: "NAVER Whale Browser"
|
|
12777
|
+
},
|
|
12778
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i, e);
|
|
12779
|
+
return r && (t.version = r), t;
|
|
12780
|
+
}
|
|
12781
|
+
}, {
|
|
12782
|
+
test: [/MZBrowser/i],
|
|
12783
|
+
describe: function describe(e) {
|
|
12784
|
+
var t = {
|
|
12785
|
+
name: "MZ Browser"
|
|
12786
|
+
},
|
|
12787
|
+
r = i.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12788
|
+
return r && (t.version = r), t;
|
|
12789
|
+
}
|
|
12790
|
+
}, {
|
|
12791
|
+
test: [/focus/i],
|
|
12792
|
+
describe: function describe(e) {
|
|
12793
|
+
var t = {
|
|
12794
|
+
name: "Focus"
|
|
12795
|
+
},
|
|
12796
|
+
r = i.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12797
|
+
return r && (t.version = r), t;
|
|
12798
|
+
}
|
|
12799
|
+
}, {
|
|
12800
|
+
test: [/swing/i],
|
|
12801
|
+
describe: function describe(e) {
|
|
12802
|
+
var t = {
|
|
12803
|
+
name: "Swing"
|
|
12804
|
+
},
|
|
12805
|
+
r = i.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12806
|
+
return r && (t.version = r), t;
|
|
12807
|
+
}
|
|
12808
|
+
}, {
|
|
12809
|
+
test: [/coast/i],
|
|
12810
|
+
describe: function describe(e) {
|
|
12811
|
+
var t = {
|
|
12812
|
+
name: "Opera Coast"
|
|
12813
|
+
},
|
|
12814
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12815
|
+
return r && (t.version = r), t;
|
|
12816
|
+
}
|
|
12817
|
+
}, {
|
|
12818
|
+
test: [/opt\/\d+(?:.?_?\d+)+/i],
|
|
12819
|
+
describe: function describe(e) {
|
|
12820
|
+
var t = {
|
|
12821
|
+
name: "Opera Touch"
|
|
12822
|
+
},
|
|
12823
|
+
r = i.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12824
|
+
return r && (t.version = r), t;
|
|
12825
|
+
}
|
|
12826
|
+
}, {
|
|
12827
|
+
test: [/yabrowser/i],
|
|
12828
|
+
describe: function describe(e) {
|
|
12829
|
+
var t = {
|
|
12830
|
+
name: "Yandex Browser"
|
|
12831
|
+
},
|
|
12832
|
+
r = i.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12833
|
+
return r && (t.version = r), t;
|
|
12834
|
+
}
|
|
12835
|
+
}, {
|
|
12836
|
+
test: [/ucbrowser/i],
|
|
12837
|
+
describe: function describe(e) {
|
|
12838
|
+
var t = {
|
|
12839
|
+
name: "UC Browser"
|
|
12840
|
+
},
|
|
12841
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12842
|
+
return r && (t.version = r), t;
|
|
12843
|
+
}
|
|
12844
|
+
}, {
|
|
12845
|
+
test: [/Maxthon|mxios/i],
|
|
12846
|
+
describe: function describe(e) {
|
|
12847
|
+
var t = {
|
|
12848
|
+
name: "Maxthon"
|
|
12849
|
+
},
|
|
12850
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12851
|
+
return r && (t.version = r), t;
|
|
12852
|
+
}
|
|
12853
|
+
}, {
|
|
12854
|
+
test: [/epiphany/i],
|
|
12855
|
+
describe: function describe(e) {
|
|
12856
|
+
var t = {
|
|
12857
|
+
name: "Epiphany"
|
|
12858
|
+
},
|
|
12859
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12860
|
+
return r && (t.version = r), t;
|
|
12861
|
+
}
|
|
12862
|
+
}, {
|
|
12863
|
+
test: [/puffin/i],
|
|
12864
|
+
describe: function describe(e) {
|
|
12865
|
+
var t = {
|
|
12866
|
+
name: "Puffin"
|
|
12867
|
+
},
|
|
12868
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12869
|
+
return r && (t.version = r), t;
|
|
12870
|
+
}
|
|
12871
|
+
}, {
|
|
12872
|
+
test: [/sleipnir/i],
|
|
12873
|
+
describe: function describe(e) {
|
|
12874
|
+
var t = {
|
|
12875
|
+
name: "Sleipnir"
|
|
12876
|
+
},
|
|
12877
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12878
|
+
return r && (t.version = r), t;
|
|
12879
|
+
}
|
|
12880
|
+
}, {
|
|
12881
|
+
test: [/k-meleon/i],
|
|
12882
|
+
describe: function describe(e) {
|
|
12883
|
+
var t = {
|
|
12884
|
+
name: "K-Meleon"
|
|
12885
|
+
},
|
|
12886
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12887
|
+
return r && (t.version = r), t;
|
|
12888
|
+
}
|
|
12889
|
+
}, {
|
|
12890
|
+
test: [/micromessenger/i],
|
|
12891
|
+
describe: function describe(e) {
|
|
12892
|
+
var t = {
|
|
12893
|
+
name: "WeChat"
|
|
12894
|
+
},
|
|
12895
|
+
r = i.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12896
|
+
return r && (t.version = r), t;
|
|
12897
|
+
}
|
|
12898
|
+
}, {
|
|
12899
|
+
test: [/qqbrowser/i],
|
|
12900
|
+
describe: function describe(e) {
|
|
12901
|
+
var t = {
|
|
12902
|
+
name: /qqbrowserlite/i.test(e) ? "QQ Browser Lite" : "QQ Browser"
|
|
12903
|
+
},
|
|
12904
|
+
r = i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12905
|
+
return r && (t.version = r), t;
|
|
12906
|
+
}
|
|
12907
|
+
}, {
|
|
12908
|
+
test: [/msie|trident/i],
|
|
12909
|
+
describe: function describe(e) {
|
|
12910
|
+
var t = {
|
|
12911
|
+
name: "Internet Explorer"
|
|
12912
|
+
},
|
|
12913
|
+
r = i.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i, e);
|
|
12914
|
+
return r && (t.version = r), t;
|
|
12915
|
+
}
|
|
12916
|
+
}, {
|
|
12917
|
+
test: [/\sedg\//i],
|
|
12918
|
+
describe: function describe(e) {
|
|
12919
|
+
var t = {
|
|
12920
|
+
name: "Microsoft Edge"
|
|
12921
|
+
},
|
|
12922
|
+
r = i.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i, e);
|
|
12923
|
+
return r && (t.version = r), t;
|
|
12924
|
+
}
|
|
12925
|
+
}, {
|
|
12926
|
+
test: [/edg([ea]|ios)/i],
|
|
12927
|
+
describe: function describe(e) {
|
|
12928
|
+
var t = {
|
|
12929
|
+
name: "Microsoft Edge"
|
|
12930
|
+
},
|
|
12931
|
+
r = i.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i, e);
|
|
12932
|
+
return r && (t.version = r), t;
|
|
12933
|
+
}
|
|
12934
|
+
}, {
|
|
12935
|
+
test: [/vivaldi/i],
|
|
12936
|
+
describe: function describe(e) {
|
|
12937
|
+
var t = {
|
|
12938
|
+
name: "Vivaldi"
|
|
12939
|
+
},
|
|
12940
|
+
r = i.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i, e);
|
|
12941
|
+
return r && (t.version = r), t;
|
|
12942
|
+
}
|
|
12943
|
+
}, {
|
|
12944
|
+
test: [/seamonkey/i],
|
|
12945
|
+
describe: function describe(e) {
|
|
12946
|
+
var t = {
|
|
12947
|
+
name: "SeaMonkey"
|
|
12948
|
+
},
|
|
12949
|
+
r = i.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i, e);
|
|
12950
|
+
return r && (t.version = r), t;
|
|
12951
|
+
}
|
|
12952
|
+
}, {
|
|
12953
|
+
test: [/sailfish/i],
|
|
12954
|
+
describe: function describe(e) {
|
|
12955
|
+
var t = {
|
|
12956
|
+
name: "Sailfish"
|
|
12957
|
+
},
|
|
12958
|
+
r = i.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i, e);
|
|
12959
|
+
return r && (t.version = r), t;
|
|
12960
|
+
}
|
|
12961
|
+
}, {
|
|
12962
|
+
test: [/silk/i],
|
|
12963
|
+
describe: function describe(e) {
|
|
12964
|
+
var t = {
|
|
12965
|
+
name: "Amazon Silk"
|
|
12966
|
+
},
|
|
12967
|
+
r = i.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i, e);
|
|
12968
|
+
return r && (t.version = r), t;
|
|
12969
|
+
}
|
|
12970
|
+
}, {
|
|
12971
|
+
test: [/phantom/i],
|
|
12972
|
+
describe: function describe(e) {
|
|
12973
|
+
var t = {
|
|
12974
|
+
name: "PhantomJS"
|
|
12975
|
+
},
|
|
12976
|
+
r = i.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i, e);
|
|
12977
|
+
return r && (t.version = r), t;
|
|
12978
|
+
}
|
|
12979
|
+
}, {
|
|
12980
|
+
test: [/slimerjs/i],
|
|
12981
|
+
describe: function describe(e) {
|
|
12982
|
+
var t = {
|
|
12983
|
+
name: "SlimerJS"
|
|
12984
|
+
},
|
|
12985
|
+
r = i.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i, e);
|
|
12986
|
+
return r && (t.version = r), t;
|
|
12987
|
+
}
|
|
12988
|
+
}, {
|
|
12989
|
+
test: [/blackberry|\bbb\d+/i, /rim\stablet/i],
|
|
12990
|
+
describe: function describe(e) {
|
|
12991
|
+
var t = {
|
|
12992
|
+
name: "BlackBerry"
|
|
12993
|
+
},
|
|
12994
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i, e);
|
|
12995
|
+
return r && (t.version = r), t;
|
|
12996
|
+
}
|
|
12997
|
+
}, {
|
|
12998
|
+
test: [/(web|hpw)[o0]s/i],
|
|
12999
|
+
describe: function describe(e) {
|
|
13000
|
+
var t = {
|
|
13001
|
+
name: "WebOS Browser"
|
|
13002
|
+
},
|
|
13003
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i, e);
|
|
13004
|
+
return r && (t.version = r), t;
|
|
13005
|
+
}
|
|
13006
|
+
}, {
|
|
13007
|
+
test: [/bada/i],
|
|
13008
|
+
describe: function describe(e) {
|
|
13009
|
+
var t = {
|
|
13010
|
+
name: "Bada"
|
|
13011
|
+
},
|
|
13012
|
+
r = i.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i, e);
|
|
13013
|
+
return r && (t.version = r), t;
|
|
13014
|
+
}
|
|
13015
|
+
}, {
|
|
13016
|
+
test: [/tizen/i],
|
|
13017
|
+
describe: function describe(e) {
|
|
13018
|
+
var t = {
|
|
13019
|
+
name: "Tizen"
|
|
13020
|
+
},
|
|
13021
|
+
r = i.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
13022
|
+
return r && (t.version = r), t;
|
|
13023
|
+
}
|
|
13024
|
+
}, {
|
|
13025
|
+
test: [/qupzilla/i],
|
|
13026
|
+
describe: function describe(e) {
|
|
13027
|
+
var t = {
|
|
13028
|
+
name: "QupZilla"
|
|
13029
|
+
},
|
|
13030
|
+
r = i.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
13031
|
+
return r && (t.version = r), t;
|
|
13032
|
+
}
|
|
13033
|
+
}, {
|
|
13034
|
+
test: [/firefox|iceweasel|fxios/i],
|
|
13035
|
+
describe: function describe(e) {
|
|
13036
|
+
var t = {
|
|
13037
|
+
name: "Firefox"
|
|
13038
|
+
},
|
|
13039
|
+
r = i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
13040
|
+
return r && (t.version = r), t;
|
|
13041
|
+
}
|
|
13042
|
+
}, {
|
|
13043
|
+
test: [/electron/i],
|
|
13044
|
+
describe: function describe(e) {
|
|
13045
|
+
var t = {
|
|
13046
|
+
name: "Electron"
|
|
13047
|
+
},
|
|
13048
|
+
r = i.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i, e);
|
|
13049
|
+
return r && (t.version = r), t;
|
|
13050
|
+
}
|
|
13051
|
+
}, {
|
|
13052
|
+
test: [/MiuiBrowser/i],
|
|
13053
|
+
describe: function describe(e) {
|
|
13054
|
+
var t = {
|
|
13055
|
+
name: "Miui"
|
|
13056
|
+
},
|
|
13057
|
+
r = i.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
13058
|
+
return r && (t.version = r), t;
|
|
13059
|
+
}
|
|
13060
|
+
}, {
|
|
13061
|
+
test: [/chromium/i],
|
|
13062
|
+
describe: function describe(e) {
|
|
13063
|
+
var t = {
|
|
13064
|
+
name: "Chromium"
|
|
13065
|
+
},
|
|
13066
|
+
r = i.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
13067
|
+
return r && (t.version = r), t;
|
|
13068
|
+
}
|
|
13069
|
+
}, {
|
|
13070
|
+
test: [/chrome|crios|crmo/i],
|
|
13071
|
+
describe: function describe(e) {
|
|
13072
|
+
var t = {
|
|
13073
|
+
name: "Chrome"
|
|
13074
|
+
},
|
|
13075
|
+
r = i.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i, e);
|
|
13076
|
+
return r && (t.version = r), t;
|
|
13077
|
+
}
|
|
13078
|
+
}, {
|
|
13079
|
+
test: [/GSA/i],
|
|
13080
|
+
describe: function describe(e) {
|
|
13081
|
+
var t = {
|
|
13082
|
+
name: "Google Search"
|
|
13083
|
+
},
|
|
13084
|
+
r = i.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i, e);
|
|
13085
|
+
return r && (t.version = r), t;
|
|
13086
|
+
}
|
|
13087
|
+
}, {
|
|
13088
|
+
test: function test(e) {
|
|
13089
|
+
var t = !e.test(/like android/i),
|
|
13090
|
+
r = e.test(/android/i);
|
|
13091
|
+
return t && r;
|
|
13092
|
+
},
|
|
13093
|
+
describe: function describe(e) {
|
|
13094
|
+
var t = {
|
|
13095
|
+
name: "Android Browser"
|
|
13096
|
+
},
|
|
13097
|
+
r = i.default.getFirstMatch(s, e);
|
|
13098
|
+
return r && (t.version = r), t;
|
|
13099
|
+
}
|
|
13100
|
+
}, {
|
|
13101
|
+
test: [/playstation 4/i],
|
|
13102
|
+
describe: function describe(e) {
|
|
13103
|
+
var t = {
|
|
13104
|
+
name: "PlayStation 4"
|
|
13105
|
+
},
|
|
13106
|
+
r = i.default.getFirstMatch(s, e);
|
|
13107
|
+
return r && (t.version = r), t;
|
|
13108
|
+
}
|
|
13109
|
+
}, {
|
|
13110
|
+
test: [/safari|applewebkit/i],
|
|
13111
|
+
describe: function describe(e) {
|
|
13112
|
+
var t = {
|
|
13113
|
+
name: "Safari"
|
|
13114
|
+
},
|
|
13115
|
+
r = i.default.getFirstMatch(s, e);
|
|
13116
|
+
return r && (t.version = r), t;
|
|
13117
|
+
}
|
|
13118
|
+
}, {
|
|
13119
|
+
test: [/.*/i],
|
|
13120
|
+
describe: function describe(e) {
|
|
13121
|
+
var t = -1 !== e.search("\\(") ? /^(.*)\/(.*)[ \t]\((.*)/ : /^(.*)\/(.*) /;
|
|
13122
|
+
return {
|
|
13123
|
+
name: i.default.getFirstMatch(t, e),
|
|
13124
|
+
version: i.default.getSecondMatch(t, e)
|
|
13125
|
+
};
|
|
13126
|
+
}
|
|
13127
|
+
}];
|
|
13128
|
+
t.default = a, e.exports = t.default;
|
|
13129
|
+
},
|
|
13130
|
+
93: function _(e, t, r) {
|
|
13131
|
+
t.__esModule = !0, t.default = void 0;
|
|
13132
|
+
var n,
|
|
13133
|
+
i = (n = r(17)) && n.__esModule ? n : {
|
|
13134
|
+
default: n
|
|
13135
|
+
},
|
|
13136
|
+
s = r(18);
|
|
13137
|
+
var a = [{
|
|
13138
|
+
test: [/Roku\/DVP/],
|
|
13139
|
+
describe: function describe(e) {
|
|
13140
|
+
var t = i.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i, e);
|
|
13141
|
+
return {
|
|
13142
|
+
name: s.OS_MAP.Roku,
|
|
13143
|
+
version: t
|
|
13144
|
+
};
|
|
13145
|
+
}
|
|
13146
|
+
}, {
|
|
13147
|
+
test: [/windows phone/i],
|
|
13148
|
+
describe: function describe(e) {
|
|
13149
|
+
var t = i.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i, e);
|
|
13150
|
+
return {
|
|
13151
|
+
name: s.OS_MAP.WindowsPhone,
|
|
13152
|
+
version: t
|
|
13153
|
+
};
|
|
13154
|
+
}
|
|
13155
|
+
}, {
|
|
13156
|
+
test: [/windows /i],
|
|
13157
|
+
describe: function describe(e) {
|
|
13158
|
+
var t = i.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i, e),
|
|
13159
|
+
r = i.default.getWindowsVersionName(t);
|
|
13160
|
+
return {
|
|
13161
|
+
name: s.OS_MAP.Windows,
|
|
13162
|
+
version: t,
|
|
13163
|
+
versionName: r
|
|
13164
|
+
};
|
|
13165
|
+
}
|
|
13166
|
+
}, {
|
|
13167
|
+
test: [/Macintosh(.*?) FxiOS(.*?)\//],
|
|
13168
|
+
describe: function describe(e) {
|
|
13169
|
+
var t = {
|
|
13170
|
+
name: s.OS_MAP.iOS
|
|
13171
|
+
},
|
|
13172
|
+
r = i.default.getSecondMatch(/(Version\/)(\d[\d.]+)/, e);
|
|
13173
|
+
return r && (t.version = r), t;
|
|
13174
|
+
}
|
|
13175
|
+
}, {
|
|
13176
|
+
test: [/macintosh/i],
|
|
13177
|
+
describe: function describe(e) {
|
|
13178
|
+
var t = i.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i, e).replace(/[_\s]/g, "."),
|
|
13179
|
+
r = i.default.getMacOSVersionName(t),
|
|
13180
|
+
n = {
|
|
13181
|
+
name: s.OS_MAP.MacOS,
|
|
13182
|
+
version: t
|
|
13183
|
+
};
|
|
13184
|
+
return r && (n.versionName = r), n;
|
|
13185
|
+
}
|
|
13186
|
+
}, {
|
|
13187
|
+
test: [/(ipod|iphone|ipad)/i],
|
|
13188
|
+
describe: function describe(e) {
|
|
13189
|
+
var t = i.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i, e).replace(/[_\s]/g, ".");
|
|
13190
|
+
return {
|
|
13191
|
+
name: s.OS_MAP.iOS,
|
|
13192
|
+
version: t
|
|
13193
|
+
};
|
|
13194
|
+
}
|
|
13195
|
+
}, {
|
|
13196
|
+
test: function test(e) {
|
|
13197
|
+
var t = !e.test(/like android/i),
|
|
13198
|
+
r = e.test(/android/i);
|
|
13199
|
+
return t && r;
|
|
13200
|
+
},
|
|
13201
|
+
describe: function describe(e) {
|
|
13202
|
+
var t = i.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i, e),
|
|
13203
|
+
r = i.default.getAndroidVersionName(t),
|
|
13204
|
+
n = {
|
|
13205
|
+
name: s.OS_MAP.Android,
|
|
13206
|
+
version: t
|
|
13207
|
+
};
|
|
13208
|
+
return r && (n.versionName = r), n;
|
|
13209
|
+
}
|
|
13210
|
+
}, {
|
|
13211
|
+
test: [/(web|hpw)[o0]s/i],
|
|
13212
|
+
describe: function describe(e) {
|
|
13213
|
+
var t = i.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i, e),
|
|
13214
|
+
r = {
|
|
13215
|
+
name: s.OS_MAP.WebOS
|
|
13216
|
+
};
|
|
13217
|
+
return t && t.length && (r.version = t), r;
|
|
13218
|
+
}
|
|
13219
|
+
}, {
|
|
13220
|
+
test: [/blackberry|\bbb\d+/i, /rim\stablet/i],
|
|
13221
|
+
describe: function describe(e) {
|
|
13222
|
+
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);
|
|
13223
|
+
return {
|
|
13224
|
+
name: s.OS_MAP.BlackBerry,
|
|
13225
|
+
version: t
|
|
13226
|
+
};
|
|
13227
|
+
}
|
|
13228
|
+
}, {
|
|
13229
|
+
test: [/bada/i],
|
|
13230
|
+
describe: function describe(e) {
|
|
13231
|
+
var t = i.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i, e);
|
|
13232
|
+
return {
|
|
13233
|
+
name: s.OS_MAP.Bada,
|
|
13234
|
+
version: t
|
|
13235
|
+
};
|
|
13236
|
+
}
|
|
13237
|
+
}, {
|
|
13238
|
+
test: [/tizen/i],
|
|
13239
|
+
describe: function describe(e) {
|
|
13240
|
+
var t = i.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i, e);
|
|
13241
|
+
return {
|
|
13242
|
+
name: s.OS_MAP.Tizen,
|
|
13243
|
+
version: t
|
|
13244
|
+
};
|
|
13245
|
+
}
|
|
13246
|
+
}, {
|
|
13247
|
+
test: [/linux/i],
|
|
13248
|
+
describe: function describe() {
|
|
13249
|
+
return {
|
|
13250
|
+
name: s.OS_MAP.Linux
|
|
13251
|
+
};
|
|
13252
|
+
}
|
|
13253
|
+
}, {
|
|
13254
|
+
test: [/CrOS/],
|
|
13255
|
+
describe: function describe() {
|
|
13256
|
+
return {
|
|
13257
|
+
name: s.OS_MAP.ChromeOS
|
|
13258
|
+
};
|
|
13259
|
+
}
|
|
13260
|
+
}, {
|
|
13261
|
+
test: [/PlayStation 4/],
|
|
13262
|
+
describe: function describe(e) {
|
|
13263
|
+
var t = i.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i, e);
|
|
13264
|
+
return {
|
|
13265
|
+
name: s.OS_MAP.PlayStation4,
|
|
13266
|
+
version: t
|
|
13267
|
+
};
|
|
13268
|
+
}
|
|
13269
|
+
}];
|
|
13270
|
+
t.default = a, e.exports = t.default;
|
|
13271
|
+
},
|
|
13272
|
+
94: function _(e, t, r) {
|
|
13273
|
+
t.__esModule = !0, t.default = void 0;
|
|
13274
|
+
var n,
|
|
13275
|
+
i = (n = r(17)) && n.__esModule ? n : {
|
|
13276
|
+
default: n
|
|
13277
|
+
},
|
|
13278
|
+
s = r(18);
|
|
13279
|
+
var a = [{
|
|
13280
|
+
test: [/googlebot/i],
|
|
13281
|
+
describe: function describe() {
|
|
13282
|
+
return {
|
|
13283
|
+
type: "bot",
|
|
13284
|
+
vendor: "Google"
|
|
13285
|
+
};
|
|
13286
|
+
}
|
|
13287
|
+
}, {
|
|
13288
|
+
test: [/huawei/i],
|
|
13289
|
+
describe: function describe(e) {
|
|
13290
|
+
var t = i.default.getFirstMatch(/(can-l01)/i, e) && "Nova",
|
|
13291
|
+
r = {
|
|
13292
|
+
type: s.PLATFORMS_MAP.mobile,
|
|
13293
|
+
vendor: "Huawei"
|
|
13294
|
+
};
|
|
13295
|
+
return t && (r.model = t), r;
|
|
13296
|
+
}
|
|
13297
|
+
}, {
|
|
13298
|
+
test: [/nexus\s*(?:7|8|9|10).*/i],
|
|
13299
|
+
describe: function describe() {
|
|
13300
|
+
return {
|
|
13301
|
+
type: s.PLATFORMS_MAP.tablet,
|
|
13302
|
+
vendor: "Nexus"
|
|
13303
|
+
};
|
|
13103
13304
|
}
|
|
13104
|
-
|
|
13105
|
-
|
|
13305
|
+
}, {
|
|
13306
|
+
test: [/ipad/i],
|
|
13307
|
+
describe: function describe() {
|
|
13308
|
+
return {
|
|
13309
|
+
type: s.PLATFORMS_MAP.tablet,
|
|
13310
|
+
vendor: "Apple",
|
|
13311
|
+
model: "iPad"
|
|
13312
|
+
};
|
|
13313
|
+
}
|
|
13314
|
+
}, {
|
|
13315
|
+
test: [/Macintosh(.*?) FxiOS(.*?)\//],
|
|
13316
|
+
describe: function describe() {
|
|
13317
|
+
return {
|
|
13318
|
+
type: s.PLATFORMS_MAP.tablet,
|
|
13319
|
+
vendor: "Apple",
|
|
13320
|
+
model: "iPad"
|
|
13321
|
+
};
|
|
13322
|
+
}
|
|
13323
|
+
}, {
|
|
13324
|
+
test: [/kftt build/i],
|
|
13325
|
+
describe: function describe() {
|
|
13326
|
+
return {
|
|
13327
|
+
type: s.PLATFORMS_MAP.tablet,
|
|
13328
|
+
vendor: "Amazon",
|
|
13329
|
+
model: "Kindle Fire HD 7"
|
|
13330
|
+
};
|
|
13331
|
+
}
|
|
13332
|
+
}, {
|
|
13333
|
+
test: [/silk/i],
|
|
13334
|
+
describe: function describe() {
|
|
13335
|
+
return {
|
|
13336
|
+
type: s.PLATFORMS_MAP.tablet,
|
|
13337
|
+
vendor: "Amazon"
|
|
13338
|
+
};
|
|
13339
|
+
}
|
|
13340
|
+
}, {
|
|
13341
|
+
test: [/tablet(?! pc)/i],
|
|
13342
|
+
describe: function describe() {
|
|
13343
|
+
return {
|
|
13344
|
+
type: s.PLATFORMS_MAP.tablet
|
|
13345
|
+
};
|
|
13346
|
+
}
|
|
13347
|
+
}, {
|
|
13348
|
+
test: function test(e) {
|
|
13349
|
+
var t = e.test(/ipod|iphone/i),
|
|
13350
|
+
r = e.test(/like (ipod|iphone)/i);
|
|
13351
|
+
return t && !r;
|
|
13352
|
+
},
|
|
13353
|
+
describe: function describe(e) {
|
|
13354
|
+
var t = i.default.getFirstMatch(/(ipod|iphone)/i, e);
|
|
13355
|
+
return {
|
|
13356
|
+
type: s.PLATFORMS_MAP.mobile,
|
|
13357
|
+
vendor: "Apple",
|
|
13358
|
+
model: t
|
|
13359
|
+
};
|
|
13360
|
+
}
|
|
13361
|
+
}, {
|
|
13362
|
+
test: [/nexus\s*[0-6].*/i, /galaxy nexus/i],
|
|
13363
|
+
describe: function describe() {
|
|
13364
|
+
return {
|
|
13365
|
+
type: s.PLATFORMS_MAP.mobile,
|
|
13366
|
+
vendor: "Nexus"
|
|
13367
|
+
};
|
|
13368
|
+
}
|
|
13369
|
+
}, {
|
|
13370
|
+
test: [/[^-]mobi/i],
|
|
13371
|
+
describe: function describe() {
|
|
13372
|
+
return {
|
|
13373
|
+
type: s.PLATFORMS_MAP.mobile
|
|
13374
|
+
};
|
|
13375
|
+
}
|
|
13376
|
+
}, {
|
|
13377
|
+
test: function test(e) {
|
|
13378
|
+
return "blackberry" === e.getBrowserName(!0);
|
|
13379
|
+
},
|
|
13380
|
+
describe: function describe() {
|
|
13381
|
+
return {
|
|
13382
|
+
type: s.PLATFORMS_MAP.mobile,
|
|
13383
|
+
vendor: "BlackBerry"
|
|
13384
|
+
};
|
|
13385
|
+
}
|
|
13386
|
+
}, {
|
|
13387
|
+
test: function test(e) {
|
|
13388
|
+
return "bada" === e.getBrowserName(!0);
|
|
13389
|
+
},
|
|
13390
|
+
describe: function describe() {
|
|
13391
|
+
return {
|
|
13392
|
+
type: s.PLATFORMS_MAP.mobile
|
|
13393
|
+
};
|
|
13394
|
+
}
|
|
13395
|
+
}, {
|
|
13396
|
+
test: function test(e) {
|
|
13397
|
+
return "windows phone" === e.getBrowserName();
|
|
13398
|
+
},
|
|
13399
|
+
describe: function describe() {
|
|
13400
|
+
return {
|
|
13401
|
+
type: s.PLATFORMS_MAP.mobile,
|
|
13402
|
+
vendor: "Microsoft"
|
|
13403
|
+
};
|
|
13404
|
+
}
|
|
13405
|
+
}, {
|
|
13406
|
+
test: function test(e) {
|
|
13407
|
+
var t = Number(String(e.getOSVersion()).split(".")[0]);
|
|
13408
|
+
return "android" === e.getOSName(!0) && t >= 3;
|
|
13409
|
+
},
|
|
13410
|
+
describe: function describe() {
|
|
13411
|
+
return {
|
|
13412
|
+
type: s.PLATFORMS_MAP.tablet
|
|
13413
|
+
};
|
|
13414
|
+
}
|
|
13415
|
+
}, {
|
|
13416
|
+
test: function test(e) {
|
|
13417
|
+
return "android" === e.getOSName(!0);
|
|
13418
|
+
},
|
|
13419
|
+
describe: function describe() {
|
|
13420
|
+
return {
|
|
13421
|
+
type: s.PLATFORMS_MAP.mobile
|
|
13422
|
+
};
|
|
13423
|
+
}
|
|
13424
|
+
}, {
|
|
13425
|
+
test: function test(e) {
|
|
13426
|
+
return "macos" === e.getOSName(!0);
|
|
13427
|
+
},
|
|
13428
|
+
describe: function describe() {
|
|
13429
|
+
return {
|
|
13430
|
+
type: s.PLATFORMS_MAP.desktop,
|
|
13431
|
+
vendor: "Apple"
|
|
13432
|
+
};
|
|
13433
|
+
}
|
|
13434
|
+
}, {
|
|
13435
|
+
test: function test(e) {
|
|
13436
|
+
return "windows" === e.getOSName(!0);
|
|
13437
|
+
},
|
|
13438
|
+
describe: function describe() {
|
|
13439
|
+
return {
|
|
13440
|
+
type: s.PLATFORMS_MAP.desktop
|
|
13441
|
+
};
|
|
13442
|
+
}
|
|
13443
|
+
}, {
|
|
13444
|
+
test: function test(e) {
|
|
13445
|
+
return "linux" === e.getOSName(!0);
|
|
13446
|
+
},
|
|
13447
|
+
describe: function describe() {
|
|
13448
|
+
return {
|
|
13449
|
+
type: s.PLATFORMS_MAP.desktop
|
|
13450
|
+
};
|
|
13451
|
+
}
|
|
13452
|
+
}, {
|
|
13453
|
+
test: function test(e) {
|
|
13454
|
+
return "playstation 4" === e.getOSName(!0);
|
|
13455
|
+
},
|
|
13456
|
+
describe: function describe() {
|
|
13457
|
+
return {
|
|
13458
|
+
type: s.PLATFORMS_MAP.tv
|
|
13459
|
+
};
|
|
13460
|
+
}
|
|
13461
|
+
}, {
|
|
13462
|
+
test: function test(e) {
|
|
13463
|
+
return "roku" === e.getOSName(!0);
|
|
13464
|
+
},
|
|
13465
|
+
describe: function describe() {
|
|
13466
|
+
return {
|
|
13467
|
+
type: s.PLATFORMS_MAP.tv
|
|
13468
|
+
};
|
|
13469
|
+
}
|
|
13470
|
+
}];
|
|
13471
|
+
t.default = a, e.exports = t.default;
|
|
13472
|
+
},
|
|
13473
|
+
95: function _(e, t, r) {
|
|
13474
|
+
t.__esModule = !0, t.default = void 0;
|
|
13475
|
+
var n,
|
|
13476
|
+
i = (n = r(17)) && n.__esModule ? n : {
|
|
13477
|
+
default: n
|
|
13478
|
+
},
|
|
13479
|
+
s = r(18);
|
|
13480
|
+
var a = [{
|
|
13481
|
+
test: function test(e) {
|
|
13482
|
+
return "microsoft edge" === e.getBrowserName(!0);
|
|
13483
|
+
},
|
|
13484
|
+
describe: function describe(e) {
|
|
13485
|
+
if (/\sedg\//i.test(e)) return {
|
|
13486
|
+
name: s.ENGINE_MAP.Blink
|
|
13487
|
+
};
|
|
13488
|
+
var t = i.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i, e);
|
|
13489
|
+
return {
|
|
13490
|
+
name: s.ENGINE_MAP.EdgeHTML,
|
|
13491
|
+
version: t
|
|
13492
|
+
};
|
|
13106
13493
|
}
|
|
13107
|
-
}
|
|
13108
|
-
});
|
|
13109
|
-
yield this.sender.setParameters(sendParameters);
|
|
13110
|
-
});
|
|
13111
|
-
}
|
|
13112
|
-
getScaleDownRatio(expectedMaxFs) {
|
|
13113
|
-
var _a;
|
|
13114
|
-
if (!expectedMaxFs) {
|
|
13115
|
-
return -1;
|
|
13116
|
-
}
|
|
13117
|
-
if (!this.publishedTrack) {
|
|
13118
|
-
return -1;
|
|
13119
|
-
}
|
|
13120
|
-
var setting = (_a = this.publishedTrack) === null || _a === void 0 ? void 0 : _a.underlyingTrack.getSettings();
|
|
13121
|
-
var sourceHeight = setting === null || setting === void 0 ? void 0 : setting.height;
|
|
13122
|
-
var sourceWidth = setting === null || setting === void 0 ? void 0 : setting.width;
|
|
13123
|
-
if (!sourceWidth || !sourceHeight) {
|
|
13124
|
-
return -1;
|
|
13125
|
-
}
|
|
13126
|
-
return getScaleDownRatio([sourceWidth, sourceHeight], sourceHeight, expectedMaxFs);
|
|
13127
|
-
}
|
|
13128
|
-
publishTrack(track) {
|
|
13129
|
-
return this.replacePublishedTrack(track);
|
|
13130
|
-
}
|
|
13131
|
-
unpublishTrack() {
|
|
13132
|
-
return this.replacePublishedTrack();
|
|
13133
|
-
}
|
|
13134
|
-
setActive(enabled) {
|
|
13135
|
-
var direction = enabled ? 'sendrecv' : 'inactive';
|
|
13136
|
-
this._rtcRtpTransceiver.direction = direction;
|
|
13137
|
-
return this._rtcRtpTransceiver.direction !== this._rtcRtpTransceiver.currentDirection;
|
|
13138
|
-
}
|
|
13139
|
-
getIngressPayloadType(mimeType) {
|
|
13140
|
-
var senderCodecs = this.sender.getParameters().codecs.filter(codec => codec.mimeType === mimeType);
|
|
13141
|
-
var receiverCodecs = this.receiver.getParameters().codecs.filter(codec => codec.mimeType === mimeType);
|
|
13142
|
-
if (!senderCodecs || !receiverCodecs || senderCodecs.length === 0 || receiverCodecs.length === 0) {
|
|
13143
|
-
throw new Error("sender codecs or receiver codecs is undefined or empty");
|
|
13144
|
-
}
|
|
13145
|
-
var senderCodec = senderCodecs[0];
|
|
13146
|
-
var targetCodec = receiverCodecs.find(receiverCodec => {
|
|
13147
|
-
return areCodecsCompatible(senderCodec, receiverCodec);
|
|
13148
|
-
});
|
|
13149
|
-
if (!targetCodec || !targetCodec.payloadType) {
|
|
13150
|
-
throw new Error("ingress payload type is not well defined in receiver codecs");
|
|
13151
|
-
}
|
|
13152
|
-
return targetCodec.payloadType;
|
|
13153
|
-
}
|
|
13154
|
-
}
|
|
13155
|
-
var simulcastMaxFrameSizes = {
|
|
13156
|
-
0: '240',
|
|
13157
|
-
1: '2304',
|
|
13158
|
-
2: '8160'
|
|
13159
|
-
};
|
|
13160
|
-
class RidIngressStreamSignaler {
|
|
13161
|
-
constructor(mid) {
|
|
13162
|
-
this.mid = mid;
|
|
13163
|
-
}
|
|
13164
|
-
getReceiverId() {
|
|
13165
|
-
return {
|
|
13166
|
-
mid: this.mid,
|
|
13167
|
-
rid: '1'
|
|
13168
|
-
};
|
|
13169
|
-
}
|
|
13170
|
-
signalLocalStreams(mLine) {}
|
|
13171
|
-
signalRemoteStreams(mLine) {}
|
|
13172
|
-
}
|
|
13173
|
-
class RidEgressStreamSignaler {
|
|
13174
|
-
constructor(mid) {
|
|
13175
|
-
this.streamIds = [];
|
|
13176
|
-
this.mid = mid;
|
|
13177
|
-
}
|
|
13178
|
-
signalStreams(simulcastEnabled, _rtxEnabled, mLine) {
|
|
13179
|
-
mLine.ssrcGroups = [];
|
|
13180
|
-
if (this.streamIds.length === 0) {
|
|
13181
|
-
if (simulcastEnabled) {
|
|
13182
|
-
this.streamIds = [{
|
|
13183
|
-
mid: this.mid,
|
|
13184
|
-
rid: 'low'
|
|
13185
13494
|
}, {
|
|
13186
|
-
|
|
13187
|
-
|
|
13495
|
+
test: [/trident/i],
|
|
13496
|
+
describe: function describe(e) {
|
|
13497
|
+
var t = {
|
|
13498
|
+
name: s.ENGINE_MAP.Trident
|
|
13499
|
+
},
|
|
13500
|
+
r = i.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i, e);
|
|
13501
|
+
return r && (t.version = r), t;
|
|
13502
|
+
}
|
|
13188
13503
|
}, {
|
|
13189
|
-
|
|
13190
|
-
|
|
13191
|
-
|
|
13192
|
-
|
|
13193
|
-
|
|
13194
|
-
|
|
13504
|
+
test: function test(e) {
|
|
13505
|
+
return e.test(/presto/i);
|
|
13506
|
+
},
|
|
13507
|
+
describe: function describe(e) {
|
|
13508
|
+
var t = {
|
|
13509
|
+
name: s.ENGINE_MAP.Presto
|
|
13510
|
+
},
|
|
13511
|
+
r = i.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i, e);
|
|
13512
|
+
return r && (t.version = r), t;
|
|
13513
|
+
}
|
|
13514
|
+
}, {
|
|
13515
|
+
test: function test(e) {
|
|
13516
|
+
var t = e.test(/gecko/i),
|
|
13517
|
+
r = e.test(/like gecko/i);
|
|
13518
|
+
return t && !r;
|
|
13519
|
+
},
|
|
13520
|
+
describe: function describe(e) {
|
|
13521
|
+
var t = {
|
|
13522
|
+
name: s.ENGINE_MAP.Gecko
|
|
13523
|
+
},
|
|
13524
|
+
r = i.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i, e);
|
|
13525
|
+
return r && (t.version = r), t;
|
|
13526
|
+
}
|
|
13527
|
+
}, {
|
|
13528
|
+
test: [/(apple)?webkit\/537\.36/i],
|
|
13529
|
+
describe: function describe() {
|
|
13530
|
+
return {
|
|
13531
|
+
name: s.ENGINE_MAP.Blink
|
|
13532
|
+
};
|
|
13533
|
+
}
|
|
13534
|
+
}, {
|
|
13535
|
+
test: [/(apple)?webkit/i],
|
|
13536
|
+
describe: function describe(e) {
|
|
13537
|
+
var t = {
|
|
13538
|
+
name: s.ENGINE_MAP.WebKit
|
|
13539
|
+
},
|
|
13540
|
+
r = i.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i, e);
|
|
13541
|
+
return r && (t.version = r), t;
|
|
13542
|
+
}
|
|
13195
13543
|
}];
|
|
13196
|
-
|
|
13197
|
-
}
|
|
13198
|
-
if (simulcastEnabled) {
|
|
13199
|
-
mLine.rids = this.streamIds.map((streamId, index) => new RidLine(streamId.rid, 'send', "max-fs=".concat(simulcastMaxFrameSizes[index])));
|
|
13200
|
-
mLine.simulcast = new SimulcastLine(SimulcastLayerList.fromString('low;medium;high'), new SimulcastLayerList());
|
|
13201
|
-
}
|
|
13202
|
-
}
|
|
13203
|
-
getSenderIds() {
|
|
13204
|
-
return this.streamIds;
|
|
13205
|
-
}
|
|
13206
|
-
getEncodingIndexForStreamId(streamId) {
|
|
13207
|
-
return this.streamIds.findIndex(currStreamId => compareStreamIds(currStreamId, streamId));
|
|
13208
|
-
}
|
|
13209
|
-
}
|
|
13210
|
-
function generateSsrc() {
|
|
13211
|
-
return Math.floor(Math.random() * 0xffffffff);
|
|
13212
|
-
}
|
|
13213
|
-
class SsrcIngressStreamSignaler {
|
|
13214
|
-
constructor() {
|
|
13215
|
-
this.ssrc = generateSsrc();
|
|
13216
|
-
}
|
|
13217
|
-
getReceiverId() {
|
|
13218
|
-
return Object.assign({
|
|
13219
|
-
ssrc: this.ssrc
|
|
13220
|
-
}, this.rtxSsrc ? {
|
|
13221
|
-
rtxSsrc: this.rtxSsrc
|
|
13222
|
-
} : {});
|
|
13223
|
-
}
|
|
13224
|
-
signalLocalStreams(_mLine) {}
|
|
13225
|
-
signalRemoteStreams(mLine) {
|
|
13226
|
-
mLine.addLine(new SsrcLine(this.ssrc, 'cname', "".concat(this.ssrc, "-cname")));
|
|
13227
|
-
mLine.addLine(new SsrcLine(this.ssrc, 'msid', '-', '1'));
|
|
13228
|
-
if (hasCodec('rtx', mLine)) {
|
|
13229
|
-
this.rtxSsrc = generateSsrc();
|
|
13230
|
-
mLine.addLine(new SsrcLine(this.rtxSsrc, 'cname', "".concat(this.ssrc, "-cname")));
|
|
13231
|
-
mLine.addLine(new SsrcLine(this.rtxSsrc, 'msid', '-', '1'));
|
|
13232
|
-
mLine.addLine(new SsrcGroupLine('FID', [this.ssrc, this.rtxSsrc]));
|
|
13233
|
-
}
|
|
13234
|
-
}
|
|
13235
|
-
}
|
|
13236
|
-
class SsrcEgressStreamSignaler {
|
|
13237
|
-
constructor() {
|
|
13238
|
-
this.streamIds = [];
|
|
13239
|
-
}
|
|
13240
|
-
signalStreams(simulcastEnabled, rtxEnabled, mLine) {
|
|
13241
|
-
mLine.rids = [];
|
|
13242
|
-
mLine.simulcast = undefined;
|
|
13243
|
-
mLine.ssrcs = [];
|
|
13244
|
-
mLine.ssrcGroups = [];
|
|
13245
|
-
if (this.streamIds.length === 0) {
|
|
13246
|
-
var numStreams = simulcastEnabled ? 3 : 1;
|
|
13247
|
-
[...Array(numStreams).keys()].forEach(() => {
|
|
13248
|
-
var newStreamId = {
|
|
13249
|
-
ssrc: generateSsrc()
|
|
13250
|
-
};
|
|
13251
|
-
if (rtxEnabled) {
|
|
13252
|
-
newStreamId.rtxSsrc = generateSsrc();
|
|
13253
|
-
}
|
|
13254
|
-
this.streamIds.push(newStreamId);
|
|
13255
|
-
});
|
|
13256
|
-
}
|
|
13257
|
-
this.streamIds.forEach((streamId, index) => {
|
|
13258
|
-
var rtpSsrc = streamId.ssrc;
|
|
13259
|
-
mLine.addLine(new SsrcLine(rtpSsrc, 'cname', "".concat(rtpSsrc, "-cname")));
|
|
13260
|
-
mLine.addLine(new SsrcLine(rtpSsrc, 'msid', '-', '1'));
|
|
13261
|
-
if (simulcastEnabled) {
|
|
13262
|
-
mLine.addLine(new SsrcLine(rtpSsrc, 'fmtp', "* max-fs=".concat(simulcastMaxFrameSizes[index])));
|
|
13263
|
-
}
|
|
13264
|
-
if (rtxEnabled) {
|
|
13265
|
-
var rtxSsrc = streamId.rtxSsrc;
|
|
13266
|
-
mLine.addLine(new SsrcLine(rtxSsrc, 'cname', "".concat(rtpSsrc, "-cname")));
|
|
13267
|
-
mLine.addLine(new SsrcLine(rtxSsrc, 'msid', '-', '1'));
|
|
13268
|
-
mLine.addLine(new SsrcGroupLine('FID', [rtpSsrc, rtxSsrc]));
|
|
13544
|
+
t.default = a, e.exports = t.default;
|
|
13269
13545
|
}
|
|
13270
13546
|
});
|
|
13271
|
-
|
|
13272
|
-
|
|
13273
|
-
|
|
13274
|
-
|
|
13275
|
-
|
|
13276
|
-
|
|
13277
|
-
}
|
|
13278
|
-
getEncodingIndexForStreamId(streamId) {
|
|
13279
|
-
return this.streamIds.findIndex(currStreamId => compareStreamIds(currStreamId, streamId));
|
|
13280
|
-
}
|
|
13281
|
-
}
|
|
13282
|
-
class StreamSignalerManager {
|
|
13283
|
-
constructor(streamSignalingMode) {
|
|
13284
|
-
this.egressStreamSignalersByMid = new Map();
|
|
13285
|
-
this.ingressStreamsSignalersByMid = new Map();
|
|
13286
|
-
this.ingressStreamSignalingMode = streamSignalingMode;
|
|
13287
|
-
this.egressStreamSignalingMode = streamSignalingMode;
|
|
13288
|
-
}
|
|
13289
|
-
getOrCreateEgressStreamSignaler(mid) {
|
|
13290
|
-
var existing = this.getEgressStreamSignaler(mid);
|
|
13291
|
-
if (existing) {
|
|
13292
|
-
return existing;
|
|
13293
|
-
}
|
|
13294
|
-
var newSignaler;
|
|
13295
|
-
if (this.egressStreamSignalingMode === 'MID-RID') {
|
|
13296
|
-
newSignaler = new RidEgressStreamSignaler(mid);
|
|
13297
|
-
} else {
|
|
13298
|
-
newSignaler = new SsrcEgressStreamSignaler();
|
|
13299
|
-
}
|
|
13300
|
-
this.egressStreamSignalersByMid.set(mid, newSignaler);
|
|
13301
|
-
return newSignaler;
|
|
13302
|
-
}
|
|
13303
|
-
getEgressStreamSignalerOrThrow(mid) {
|
|
13304
|
-
var existing = this.getEgressStreamSignaler(mid);
|
|
13305
|
-
if (!existing) {
|
|
13306
|
-
throw new Error("Couldn't find EgressStreamSignaler for mid ".concat(mid));
|
|
13307
|
-
}
|
|
13308
|
-
return existing;
|
|
13309
|
-
}
|
|
13310
|
-
getEgressStreamSignaler(mid) {
|
|
13311
|
-
return this.egressStreamSignalersByMid.get(mid);
|
|
13312
|
-
}
|
|
13313
|
-
getOrCreateIngressStreamSignaler(mid) {
|
|
13314
|
-
var existing = this.getIngressStreamSignaler(mid);
|
|
13315
|
-
if (existing) {
|
|
13316
|
-
return existing;
|
|
13317
|
-
}
|
|
13318
|
-
var newSignaler;
|
|
13319
|
-
if (this.ingressStreamSignalingMode === 'MID-RID') {
|
|
13320
|
-
newSignaler = new RidIngressStreamSignaler(mid);
|
|
13321
|
-
} else {
|
|
13322
|
-
newSignaler = new SsrcIngressStreamSignaler();
|
|
13323
|
-
}
|
|
13324
|
-
this.ingressStreamsSignalersByMid.set(mid, newSignaler);
|
|
13325
|
-
return newSignaler;
|
|
13326
|
-
}
|
|
13327
|
-
getIngressStreamSignaler(mid) {
|
|
13328
|
-
return this.ingressStreamsSignalersByMid.get(mid);
|
|
13329
|
-
}
|
|
13330
|
-
getIngressStreamSignalerOrThrow(mid) {
|
|
13331
|
-
var existing = this.getIngressStreamSignaler(mid);
|
|
13332
|
-
if (!existing) {
|
|
13333
|
-
throw new Error("Couldn't find IngressStreamSignaler for mid ".concat(mid));
|
|
13334
|
-
}
|
|
13335
|
-
return existing;
|
|
13336
|
-
}
|
|
13547
|
+
});
|
|
13548
|
+
})(es5);
|
|
13549
|
+
var Bowser = /*@__PURE__*/getDefaultExportFromCjs(es5.exports);
|
|
13550
|
+
function getBrowserDetails() {
|
|
13551
|
+
var browser = Bowser.getParser(window.navigator.userAgent);
|
|
13552
|
+
return browser.getBrowser();
|
|
13337
13553
|
}
|
|
13338
13554
|
var logger$1 = {
|
|
13339
13555
|
exports: {}
|
|
@@ -13626,7 +13842,7 @@ var MultistreamConnectionEventNames;
|
|
|
13626
13842
|
var defaultMultistreamConnectionOptions = {
|
|
13627
13843
|
floorControlledPresentation: false,
|
|
13628
13844
|
disableSimulcast: false,
|
|
13629
|
-
streamSignalingMode: '
|
|
13845
|
+
streamSignalingMode: 'SSRC',
|
|
13630
13846
|
bundlePolicy: 'compat'
|
|
13631
13847
|
};
|
|
13632
13848
|
class MultistreamConnection extends EventEmitter {
|
|
@@ -13638,43 +13854,49 @@ class MultistreamConnection extends EventEmitter {
|
|
|
13638
13854
|
this.jmpSessions = new Map();
|
|
13639
13855
|
this.pendingJmpTasks = [];
|
|
13640
13856
|
this.metricsCallback = () => {};
|
|
13857
|
+
this.overuseUpdateCallback = () => {};
|
|
13641
13858
|
this.options = Object.assign(Object.assign({}, defaultMultistreamConnectionOptions), userOptions);
|
|
13642
13859
|
logger$4.info("Creating multistream connection with options ".concat(JSON.stringify(this.options)));
|
|
13643
|
-
this.
|
|
13644
|
-
this.pc.on(PeerConnection.Events.ConnectionStateChange, state => this.emit(MultistreamConnectionEventNames.ConnectionStateUpdate, state));
|
|
13860
|
+
this.initializePeerConnection();
|
|
13645
13861
|
this.streamSignalerManager = new StreamSignalerManager(this.options.streamSignalingMode);
|
|
13646
|
-
this.
|
|
13862
|
+
this.overuseStateManager = new OveruseStateManager(overuseState => this.overuseUpdateCallback(overuseState));
|
|
13863
|
+
this.overuseStateManager.start();
|
|
13864
|
+
this.statsManager = new StatsManager(() => this.pc.getStats(), stats => this.preProcessStats(stats));
|
|
13647
13865
|
var mainSceneId = generateSceneId();
|
|
13648
|
-
var videoMainEncodingOptions =
|
|
13649
|
-
scaleResolutionDownBy: 4,
|
|
13650
|
-
active: true
|
|
13651
|
-
}, {
|
|
13652
|
-
scaleResolutionDownBy: 2,
|
|
13653
|
-
active: true
|
|
13654
|
-
}, {
|
|
13655
|
-
active: true
|
|
13656
|
-
}] : [];
|
|
13866
|
+
var videoMainEncodingOptions = this.getVideoEncodingOptions();
|
|
13657
13867
|
this.createSendTransceiver(MediaType$1.VideoMain, mainSceneId, videoMainEncodingOptions);
|
|
13658
13868
|
this.createSendTransceiver(MediaType$1.AudioMain, mainSceneId);
|
|
13659
13869
|
if (this.options.floorControlledPresentation) {
|
|
13660
|
-
var videoPresentationEncodingOptions =
|
|
13661
|
-
scaleResolutionDownBy: 4,
|
|
13662
|
-
active: true
|
|
13663
|
-
}, {
|
|
13664
|
-
scaleResolutionDownBy: 2,
|
|
13665
|
-
active: true
|
|
13666
|
-
}, {
|
|
13667
|
-
active: true
|
|
13668
|
-
}] : [];
|
|
13870
|
+
var videoPresentationEncodingOptions = this.getVideoEncodingOptions();
|
|
13669
13871
|
var contentSceneId = generateSceneId();
|
|
13670
13872
|
this.createSendTransceiver(MediaType$1.VideoSlides, contentSceneId, videoPresentationEncodingOptions);
|
|
13671
13873
|
this.createSendTransceiver(MediaType$1.AudioSlides, contentSceneId);
|
|
13672
13874
|
}
|
|
13875
|
+
}
|
|
13876
|
+
initializePeerConnection() {
|
|
13877
|
+
var _a;
|
|
13878
|
+
(_a = this.pc) === null || _a === void 0 ? void 0 : _a.close();
|
|
13879
|
+
this.pc = new PeerConnection();
|
|
13880
|
+
this.pc.on(PeerConnection.Events.ConnectionStateChange, state => this.emit(MultistreamConnectionEventNames.ConnectionStateUpdate, state));
|
|
13881
|
+
this.attachMetricsObserver();
|
|
13673
13882
|
this.createDataChannel();
|
|
13674
13883
|
}
|
|
13675
13884
|
getConnectionState() {
|
|
13676
13885
|
return this.pc.getConnectionState();
|
|
13677
13886
|
}
|
|
13887
|
+
getVideoEncodingOptions() {
|
|
13888
|
+
return !this.options.disableSimulcast ? [{
|
|
13889
|
+
scaleResolutionDownBy: 4,
|
|
13890
|
+
active: false
|
|
13891
|
+
}, {
|
|
13892
|
+
scaleResolutionDownBy: 2,
|
|
13893
|
+
active: false
|
|
13894
|
+
}, {
|
|
13895
|
+
active: false
|
|
13896
|
+
}] : [{
|
|
13897
|
+
active: false
|
|
13898
|
+
}];
|
|
13899
|
+
}
|
|
13678
13900
|
createSendTransceiver(mediaType, sceneId, sendEncodingsOptions) {
|
|
13679
13901
|
var rtcTransceiver = this.pc.addTransceiver(toMediaStreamTrackKind(mediaType), {
|
|
13680
13902
|
direction: 'sendrecv',
|
|
@@ -13682,6 +13904,9 @@ class MultistreamConnection extends EventEmitter {
|
|
|
13682
13904
|
});
|
|
13683
13905
|
var csi = generateCsi(getMediaFamily(mediaType), sceneId);
|
|
13684
13906
|
this.sendTransceivers.set(mediaType, new SendOnlyTransceiver(rtcTransceiver, csi));
|
|
13907
|
+
this.createJmpSession(mediaType);
|
|
13908
|
+
}
|
|
13909
|
+
createJmpSession(mediaType) {
|
|
13685
13910
|
var jmpSession = new JmpSession(getMediaFamily(mediaType), getMediaContent(mediaType));
|
|
13686
13911
|
jmpSession.setTxCallback(msg => {
|
|
13687
13912
|
var _a;
|
|
@@ -13800,14 +14025,16 @@ class MultistreamConnection extends EventEmitter {
|
|
|
13800
14025
|
maxPayloadBitsPerSecond
|
|
13801
14026
|
});
|
|
13802
14027
|
} else {
|
|
13803
|
-
logger$4.warn("Unable to get encoding index for stream ID: ".concat(JSON.stringify(id)));
|
|
14028
|
+
logger$4.warn("".concat(mediaType, ": Unable to get encoding index for stream ID: ").concat(JSON.stringify(id)));
|
|
13804
14029
|
}
|
|
13805
14030
|
} else {
|
|
13806
|
-
logger$4.warn("Unable to find matching stream ID for requested ID: ".concat(JSON.stringify(id)));
|
|
14031
|
+
logger$4.warn("".concat(mediaType, ": Unable to find matching stream ID for requested ID: ").concat(JSON.stringify(id)));
|
|
13807
14032
|
}
|
|
13808
14033
|
});
|
|
13809
14034
|
sendTransceiver.setTrackRequested(requestedIdEncodingParamsMap.size > 0);
|
|
13810
|
-
|
|
14035
|
+
if (getMediaFamily(mediaType) === MediaFamily$1.Video) {
|
|
14036
|
+
sendTransceiver.updateSimulcastStreamStates(requestedIdEncodingParamsMap);
|
|
14037
|
+
}
|
|
13811
14038
|
}
|
|
13812
14039
|
createDataChannel() {
|
|
13813
14040
|
var dataChannel = this.pc.createDataChannel('datachannel', {});
|
|
@@ -14049,8 +14276,8 @@ class MultistreamConnection extends EventEmitter {
|
|
|
14049
14276
|
egressSignaler.signalStreams(simulcastEnabled, rtxEnabled, av);
|
|
14050
14277
|
if (av.type === 'video') {
|
|
14051
14278
|
[...av.codecs.values()].filter(ci => ci.name === 'H264').forEach(ci => {
|
|
14052
|
-
ci.fmtParams.push("max-mbps=".concat(
|
|
14053
|
-
ci.fmtParams.push("max-fs=".concat(
|
|
14279
|
+
ci.fmtParams.push("max-mbps=".concat(defaultMaxVideoEncodeMbps));
|
|
14280
|
+
ci.fmtParams.push("max-fs=".concat(defaultMaxVideoEncodeFrameSize));
|
|
14054
14281
|
});
|
|
14055
14282
|
}
|
|
14056
14283
|
});
|
|
@@ -14072,6 +14299,14 @@ class MultistreamConnection extends EventEmitter {
|
|
|
14072
14299
|
});
|
|
14073
14300
|
injectJmpAttributes(parsed, csiMap, this.options.streamSignalingMode);
|
|
14074
14301
|
filterRecvOnlyMlines(parsed);
|
|
14302
|
+
parsed.avMedia.filter(av => av.direction === 'sendrecv' && av.type === 'video').forEach(av => {
|
|
14303
|
+
var ssrcGroup = av.ssrcGroups.find(sg => sg.semantics === 'SIM');
|
|
14304
|
+
if (ssrcGroup) {
|
|
14305
|
+
ssrcGroup.ssrcs.forEach((ssrc, index) => {
|
|
14306
|
+
av.addLine(new SsrcLine(ssrc, 'fmtp', "* max-fs=".concat(simulcastMaxFrameSizes[index])));
|
|
14307
|
+
});
|
|
14308
|
+
}
|
|
14309
|
+
});
|
|
14075
14310
|
return parsed.toString();
|
|
14076
14311
|
}
|
|
14077
14312
|
preProcessRemoteAnswer(answer) {
|
|
@@ -14114,13 +14349,24 @@ class MultistreamConnection extends EventEmitter {
|
|
|
14114
14349
|
this.pendingJmpTasks.push(task);
|
|
14115
14350
|
}
|
|
14116
14351
|
}
|
|
14117
|
-
renewPeerConnection() {
|
|
14118
|
-
|
|
14119
|
-
|
|
14120
|
-
|
|
14121
|
-
this.
|
|
14122
|
-
this.
|
|
14123
|
-
this.
|
|
14352
|
+
renewPeerConnection(userOptions) {
|
|
14353
|
+
if (userOptions) {
|
|
14354
|
+
this.options = Object.assign(Object.assign({}, defaultMultistreamConnectionOptions), userOptions);
|
|
14355
|
+
}
|
|
14356
|
+
logger$4.info("Renewing multistream connection with options ".concat(JSON.stringify(this.options)));
|
|
14357
|
+
this.initializePeerConnection();
|
|
14358
|
+
this.streamSignalerManager = new StreamSignalerManager(this.options.streamSignalingMode);
|
|
14359
|
+
var mainSceneId = generateSceneId();
|
|
14360
|
+
this.sendTransceivers.forEach((transceiver, mediaType) => {
|
|
14361
|
+
var _a;
|
|
14362
|
+
transceiver.replaceTransceiver(this.pc.addTransceiver(toMediaStreamTrackKind(mediaType), {
|
|
14363
|
+
direction: 'sendrecv',
|
|
14364
|
+
sendEncodings: getMediaFamily(mediaType) === MediaFamily$1.Video ? this.getVideoEncodingOptions() : undefined
|
|
14365
|
+
}));
|
|
14366
|
+
transceiver.csi = generateCsi(getMediaFamily(mediaType), mainSceneId);
|
|
14367
|
+
(_a = this.jmpSessions.get(mediaType)) === null || _a === void 0 ? void 0 : _a.close();
|
|
14368
|
+
this.createJmpSession(mediaType);
|
|
14369
|
+
});
|
|
14124
14370
|
this.recvTransceivers.forEach((transceivers, mediaType) => {
|
|
14125
14371
|
transceivers.forEach(t => {
|
|
14126
14372
|
t.replaceTransceiver(this.pc.addTransceiver(toMediaStreamTrackKind(mediaType), {
|
|
@@ -14135,17 +14381,25 @@ class MultistreamConnection extends EventEmitter {
|
|
|
14135
14381
|
return Object.keys(receiveSlotId).length === Object.keys(id).length && Object.keys(receiveSlotId).every(key => Object.prototype.hasOwnProperty.call(id, key) && receiveSlotId[key] === id[key]);
|
|
14136
14382
|
});
|
|
14137
14383
|
}
|
|
14384
|
+
getStats() {
|
|
14385
|
+
return this.statsManager.getStats();
|
|
14386
|
+
}
|
|
14138
14387
|
preProcessStats(stats) {
|
|
14139
14388
|
return __awaiter(this, void 0, void 0, function* () {
|
|
14140
14389
|
yield Promise.all([...this.sendTransceivers.entries()].map(_ref5 => {
|
|
14141
14390
|
var [mediaType, transceiver] = _ref5;
|
|
14142
14391
|
return __awaiter(this, void 0, void 0, function* () {
|
|
14143
|
-
(yield transceiver.
|
|
14392
|
+
(yield transceiver.getStats()).forEach(senderStats => {
|
|
14393
|
+
var _a;
|
|
14144
14394
|
if (senderStats.type === 'outbound-rtp') {
|
|
14145
14395
|
var statsToModify = stats[senderStats.id];
|
|
14146
14396
|
statsToModify.mid = transceiver.mid;
|
|
14147
14397
|
statsToModify.csi = transceiver.csi;
|
|
14148
14398
|
statsToModify.mediaType = mediaType;
|
|
14399
|
+
var trackSettings = (_a = transceiver.publishedTrack) === null || _a === void 0 ? void 0 : _a.underlyingTrack.getSettings();
|
|
14400
|
+
if (trackSettings === null || trackSettings === void 0 ? void 0 : trackSettings.frameRate) {
|
|
14401
|
+
statsToModify.targetFrameRate = trackSettings === null || trackSettings === void 0 ? void 0 : trackSettings.frameRate;
|
|
14402
|
+
}
|
|
14149
14403
|
}
|
|
14150
14404
|
});
|
|
14151
14405
|
});
|
|
@@ -14154,7 +14408,7 @@ class MultistreamConnection extends EventEmitter {
|
|
|
14154
14408
|
var [mediaType, transceivers] = _ref6;
|
|
14155
14409
|
return __awaiter(this, void 0, void 0, function* () {
|
|
14156
14410
|
yield Promise.all(transceivers.map(transceiver => __awaiter(this, void 0, void 0, function* () {
|
|
14157
|
-
(yield transceiver.
|
|
14411
|
+
(yield transceiver.getStats()).forEach(receiverStats => {
|
|
14158
14412
|
var _a;
|
|
14159
14413
|
if (receiverStats.type === 'inbound-rtp') {
|
|
14160
14414
|
var statsToModify = stats[receiverStats.id];
|
|
@@ -14178,6 +14432,9 @@ class MultistreamConnection extends EventEmitter {
|
|
|
14178
14432
|
setMetricsCallback(callback) {
|
|
14179
14433
|
this.metricsCallback = callback;
|
|
14180
14434
|
}
|
|
14435
|
+
setOveruseUpdateCallback(callback) {
|
|
14436
|
+
this.overuseUpdateCallback = callback;
|
|
14437
|
+
}
|
|
14181
14438
|
getCsiByMediaType(mediaType) {
|
|
14182
14439
|
var _a;
|
|
14183
14440
|
return (_a = this.sendTransceivers.get(mediaType)) === null || _a === void 0 ? void 0 : _a.csi;
|
|
@@ -23211,6 +23468,9 @@ class MultistreamRoapMediaConnection extends EventEmitter$4 {
|
|
|
23211
23468
|
this.log('getConnectionState()', "called, returning ".concat(connectionState));
|
|
23212
23469
|
return connectionState;
|
|
23213
23470
|
}
|
|
23471
|
+
getStats() {
|
|
23472
|
+
return this.multistreamConnection.getStats();
|
|
23473
|
+
}
|
|
23214
23474
|
roapMessageReceived(roapMessage) {
|
|
23215
23475
|
this.log('roapMessageReceived()', "called with messageType=".concat(roapMessage.messageType, ", seq=").concat(roapMessage.seq));
|
|
23216
23476
|
if (!this.sdpNegotiationStarted && roapMessage.messageType === 'OFFER') {
|