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