@byteplus/veplayer-plugin 2.10.0 → 2.10.1
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/esm/index.development.js +1038 -440
- package/esm/index.production.js +1 -1
- package/esm/veplayer.plugin.rtm.development.js +1037 -439
- package/esm/veplayer.plugin.rtm.production.js +1 -1
- package/package.json +1 -1
- package/umd/veplayer.plugin.rtm.development.js +1037 -439
- package/umd/veplayer.plugin.rtm.production.js +1 -1
|
@@ -581,6 +581,60 @@
|
|
|
581
581
|
function _nonIterableRest() {
|
|
582
582
|
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
583
583
|
}
|
|
584
|
+
function _createForOfIteratorHelper$1(o, allowArrayLike) {
|
|
585
|
+
var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
|
|
586
|
+
if (!it) {
|
|
587
|
+
if (Array.isArray(o) || (it = _unsupportedIterableToArray$2(o)) || allowArrayLike && o && typeof o.length === "number") {
|
|
588
|
+
if (it)
|
|
589
|
+
o = it;
|
|
590
|
+
var i = 0;
|
|
591
|
+
var F = function() {
|
|
592
|
+
};
|
|
593
|
+
return {
|
|
594
|
+
s: F,
|
|
595
|
+
n: function() {
|
|
596
|
+
if (i >= o.length)
|
|
597
|
+
return {
|
|
598
|
+
done: true
|
|
599
|
+
};
|
|
600
|
+
return {
|
|
601
|
+
done: false,
|
|
602
|
+
value: o[i++]
|
|
603
|
+
};
|
|
604
|
+
},
|
|
605
|
+
e: function(e) {
|
|
606
|
+
throw e;
|
|
607
|
+
},
|
|
608
|
+
f: F
|
|
609
|
+
};
|
|
610
|
+
}
|
|
611
|
+
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
612
|
+
}
|
|
613
|
+
var normalCompletion = true, didErr = false, err;
|
|
614
|
+
return {
|
|
615
|
+
s: function() {
|
|
616
|
+
it = it.call(o);
|
|
617
|
+
},
|
|
618
|
+
n: function() {
|
|
619
|
+
var step = it.next();
|
|
620
|
+
normalCompletion = step.done;
|
|
621
|
+
return step;
|
|
622
|
+
},
|
|
623
|
+
e: function(e) {
|
|
624
|
+
didErr = true;
|
|
625
|
+
err = e;
|
|
626
|
+
},
|
|
627
|
+
f: function() {
|
|
628
|
+
try {
|
|
629
|
+
if (!normalCompletion && it.return != null)
|
|
630
|
+
it.return();
|
|
631
|
+
} finally {
|
|
632
|
+
if (didErr)
|
|
633
|
+
throw err;
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
};
|
|
637
|
+
}
|
|
584
638
|
function _toPrimitive$3(input, hint) {
|
|
585
639
|
if (typeof input !== "object" || input === null)
|
|
586
640
|
return input;
|
|
@@ -4296,10 +4350,28 @@
|
|
|
4296
4350
|
}]);
|
|
4297
4351
|
return NetLoader2;
|
|
4298
4352
|
}(EventEmitter);
|
|
4299
|
-
var EXTEND_EVENTS = {
|
|
4300
|
-
RTC_STATE_CHANGE
|
|
4301
|
-
RTC_NETWORK
|
|
4302
|
-
|
|
4353
|
+
var EXTEND_EVENTS = /* @__PURE__ */ function(EXTEND_EVENTS2) {
|
|
4354
|
+
EXTEND_EVENTS2["RTC_STATE_CHANGE"] = "core.rtcstatechange";
|
|
4355
|
+
EXTEND_EVENTS2["RTC_NETWORK"] = "core.rtcnetwork";
|
|
4356
|
+
EXTEND_EVENTS2["RTC_FIRST_FRAME"] = "core.rtcfirstframe";
|
|
4357
|
+
return EXTEND_EVENTS2;
|
|
4358
|
+
}(EXTEND_EVENTS || {});
|
|
4359
|
+
var RTC_FIRST_FRAME_STATE = /* @__PURE__ */ function(RTC_FIRST_FRAME_STATE2) {
|
|
4360
|
+
RTC_FIRST_FRAME_STATE2["LOAD_START"] = "start_load";
|
|
4361
|
+
RTC_FIRST_FRAME_STATE2["OFFER_SDP_READY"] = "offer_sdp_ready";
|
|
4362
|
+
RTC_FIRST_FRAME_STATE2["ANSWER_SDP_RECV"] = "answer_sdp_recv";
|
|
4363
|
+
RTC_FIRST_FRAME_STATE2["ANSWER_SDP_READY"] = "answer_sdp_ready";
|
|
4364
|
+
RTC_FIRST_FRAME_STATE2["ICE_CONNECTED"] = "ice_connected";
|
|
4365
|
+
RTC_FIRST_FRAME_STATE2["DTLS_CONNECTED"] = "dtls_connected";
|
|
4366
|
+
RTC_FIRST_FRAME_STATE2["PEER_CONNECTED"] = "peer_connected";
|
|
4367
|
+
RTC_FIRST_FRAME_STATE2["FIRST_PACKET_RECV"] = "first_packet_recv";
|
|
4368
|
+
RTC_FIRST_FRAME_STATE2["FIRST_FRAME_RECV"] = "first_frame_recv";
|
|
4369
|
+
RTC_FIRST_FRAME_STATE2["FIRST_FRAME_DECODED"] = "first_frame_decoded";
|
|
4370
|
+
RTC_FIRST_FRAME_STATE2["VIDEO_PLAYING"] = "video_playing";
|
|
4371
|
+
RTC_FIRST_FRAME_STATE2["VIDEO_CANPLAY"] = "video_canplay";
|
|
4372
|
+
RTC_FIRST_FRAME_STATE2["VIDEO_LOADEDDATA"] = "video_loadeddata";
|
|
4373
|
+
return RTC_FIRST_FRAME_STATE2;
|
|
4374
|
+
}(RTC_FIRST_FRAME_STATE || {});
|
|
4303
4375
|
var lib = {};
|
|
4304
4376
|
var parser$1 = {};
|
|
4305
4377
|
var grammar$2 = { exports: {} };
|
|
@@ -4993,29 +5065,29 @@
|
|
|
4993
5065
|
enableOriginSdpLogger: false,
|
|
4994
5066
|
checkStatsErrorDelay: 5e3,
|
|
4995
5067
|
connectionStateChangeTimeout: 5e3,
|
|
4996
|
-
enableNetworkQuality:
|
|
5068
|
+
enableNetworkQuality: true,
|
|
4997
5069
|
hackCreateOfferIssue: false,
|
|
4998
5070
|
progressiveSetDelay: false,
|
|
4999
5071
|
networkQuality: {
|
|
5000
5072
|
networkQos: {
|
|
5001
5073
|
1: {
|
|
5002
|
-
|
|
5003
|
-
|
|
5074
|
+
maxRtt: 250,
|
|
5075
|
+
maxLoss: 0.15
|
|
5004
5076
|
},
|
|
5005
5077
|
2: {
|
|
5006
|
-
|
|
5007
|
-
|
|
5008
|
-
|
|
5078
|
+
maxRtt: 500,
|
|
5079
|
+
maxLoss: 0.3,
|
|
5080
|
+
minRetransmittedRate: 0.2
|
|
5009
5081
|
},
|
|
5010
5082
|
3: {
|
|
5011
|
-
|
|
5012
|
-
|
|
5013
|
-
|
|
5083
|
+
maxRtt: 750,
|
|
5084
|
+
maxLoss: 0.45,
|
|
5085
|
+
minRetransmittedRate: 0.35
|
|
5014
5086
|
},
|
|
5015
5087
|
4: {
|
|
5016
|
-
|
|
5017
|
-
|
|
5018
|
-
|
|
5088
|
+
maxRtt: 1e3,
|
|
5089
|
+
maxLoss: 0.6,
|
|
5090
|
+
minRetransmittedRate: 0.5
|
|
5019
5091
|
}
|
|
5020
5092
|
},
|
|
5021
5093
|
networkQoe: {
|
|
@@ -5036,19 +5108,19 @@
|
|
|
5036
5108
|
}, adaptiveJitterBuffer),
|
|
5037
5109
|
networkStrategy: {
|
|
5038
5110
|
1: {
|
|
5039
|
-
|
|
5111
|
+
jitterBuffer: null
|
|
5040
5112
|
},
|
|
5041
5113
|
2: {
|
|
5042
|
-
|
|
5114
|
+
jitterBuffer: 1.5
|
|
5043
5115
|
},
|
|
5044
5116
|
3: {
|
|
5045
|
-
|
|
5117
|
+
jitterBuffer: 2
|
|
5046
5118
|
},
|
|
5047
5119
|
4: {
|
|
5048
|
-
|
|
5120
|
+
jitterBuffer: 3
|
|
5049
5121
|
},
|
|
5050
5122
|
5: {
|
|
5051
|
-
|
|
5123
|
+
jitterBuffer: 3
|
|
5052
5124
|
}
|
|
5053
5125
|
}
|
|
5054
5126
|
}, opts);
|
|
@@ -5079,14 +5151,36 @@
|
|
|
5079
5151
|
};
|
|
5080
5152
|
});
|
|
5081
5153
|
}
|
|
5082
|
-
function getStats(
|
|
5083
|
-
return
|
|
5084
|
-
|
|
5085
|
-
|
|
5086
|
-
|
|
5087
|
-
|
|
5088
|
-
|
|
5089
|
-
|
|
5154
|
+
function getStats(_x) {
|
|
5155
|
+
return _getStats2.apply(this, arguments);
|
|
5156
|
+
}
|
|
5157
|
+
function _getStats2() {
|
|
5158
|
+
_getStats2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee2(pc) {
|
|
5159
|
+
return _regeneratorRuntime$1().wrap(function _callee2$(_context2) {
|
|
5160
|
+
while (1)
|
|
5161
|
+
switch (_context2.prev = _context2.next) {
|
|
5162
|
+
case 0:
|
|
5163
|
+
if (pc) {
|
|
5164
|
+
_context2.next = 2;
|
|
5165
|
+
break;
|
|
5166
|
+
}
|
|
5167
|
+
return _context2.abrupt("return", []);
|
|
5168
|
+
case 2:
|
|
5169
|
+
return _context2.abrupt("return", new Promise(function(resolve) {
|
|
5170
|
+
var _pc$getStats;
|
|
5171
|
+
(_pc$getStats = pc.getStats(null)) === null || _pc$getStats === void 0 ? void 0 : _pc$getStats.then(function(report) {
|
|
5172
|
+
resolve(_getStats(report));
|
|
5173
|
+
});
|
|
5174
|
+
}).catch(function() {
|
|
5175
|
+
return [];
|
|
5176
|
+
}));
|
|
5177
|
+
case 3:
|
|
5178
|
+
case "end":
|
|
5179
|
+
return _context2.stop();
|
|
5180
|
+
}
|
|
5181
|
+
}, _callee2);
|
|
5182
|
+
}));
|
|
5183
|
+
return _getStats2.apply(this, arguments);
|
|
5090
5184
|
}
|
|
5091
5185
|
function getStatsSnapshoot(stats) {
|
|
5092
5186
|
var _v$inboundRtp, _v$codec, _v$codec2, _v$codec3, _v$inboundRtp4, _v$inboundRtp5, _v$inboundRtp6, _v$inboundRtp7, _v$inboundRtp8, _v$inboundRtp9, _v$inboundRtp10, _v$inboundRtp11, _v$inboundRtp$framesR, _v$inboundRtp12, _v$track, _v$inboundRtp13, _v$inboundRtp14, _v$inboundRtp15, _v$inboundRtp16, _v$inboundRtp17, _v$inboundRtp18, _a$codec, _a$codec2, _a$codec3, _a$inboundRtp, _a$inboundRtp2, _a$inboundRtp3, _a$inboundRtp4, _a$inboundRtp5, _a$inboundRtp6, _a$inboundRtp7, _a$inboundRtp8;
|
|
@@ -5156,22 +5250,23 @@
|
|
|
5156
5250
|
}
|
|
5157
5251
|
var QUEUE_SIZE = 5;
|
|
5158
5252
|
var NetworkEvaluate = /* @__PURE__ */ function() {
|
|
5159
|
-
function NetworkEvaluate2(pc
|
|
5253
|
+
function NetworkEvaluate2(pc) {
|
|
5160
5254
|
var _this = this;
|
|
5255
|
+
var interval = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 1e3;
|
|
5161
5256
|
_classCallCheck$3(this, NetworkEvaluate2);
|
|
5162
|
-
|
|
5163
|
-
|
|
5164
|
-
|
|
5165
|
-
|
|
5166
|
-
|
|
5167
|
-
|
|
5168
|
-
|
|
5169
|
-
|
|
5170
|
-
|
|
5171
|
-
|
|
5172
|
-
|
|
5173
|
-
|
|
5174
|
-
var snapshoot, _snapshoot$video, nowBytes, nowPkgLost, nowPkg, _this$_lastVideoStats, preBytes, prePkgLost, prePkg, lost, pkgReceived, nowReceived, preReceived, _snapshoot$videoRemot, nowRemoteSent, preRemoteSent;
|
|
5257
|
+
this._pc = null;
|
|
5258
|
+
this._lastVideoStats = null;
|
|
5259
|
+
this._lastRemoteVideoStats = null;
|
|
5260
|
+
this._timer = 0;
|
|
5261
|
+
this._timerInterval = 0;
|
|
5262
|
+
this._speedQueue = [];
|
|
5263
|
+
this._lostRateQueue = [];
|
|
5264
|
+
this._receivedRateQueue = [];
|
|
5265
|
+
this._currentSpeed = -1;
|
|
5266
|
+
this._currentLostRate = -1;
|
|
5267
|
+
this._currentReceivedRate = -1;
|
|
5268
|
+
this._evaluate = /* @__PURE__ */ _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee() {
|
|
5269
|
+
var snapshoot, _snapshoot$video, nowBytes, nowPkgLost, nowPkg, _this$_lastVideoStats, preBytes, prePkgLost, prePkg, lost, pkgReceived, _ref2, _ref2$bytesReceived, nowReceived, _ref3, _ref3$bytesReceived, preReceived, _snapshoot$videoRemot, nowRemoteSent, preRemoteSent;
|
|
5175
5270
|
return _regeneratorRuntime$1().wrap(function _callee$(_context) {
|
|
5176
5271
|
while (1)
|
|
5177
5272
|
switch (_context.prev = _context.next) {
|
|
@@ -5196,8 +5291,8 @@
|
|
|
5196
5291
|
}
|
|
5197
5292
|
}
|
|
5198
5293
|
if (_this._lastRemoteVideoStats && snapshoot !== null && snapshoot !== void 0 && snapshoot.videoRemote) {
|
|
5199
|
-
|
|
5200
|
-
|
|
5294
|
+
_ref2 = snapshoot.video || {}, _ref2$bytesReceived = _ref2.bytesReceived, nowReceived = _ref2$bytesReceived === void 0 ? 0 : _ref2$bytesReceived;
|
|
5295
|
+
_ref3 = _this._lastVideoStats || {}, _ref3$bytesReceived = _ref3.bytesReceived, preReceived = _ref3$bytesReceived === void 0 ? 0 : _ref3$bytesReceived;
|
|
5201
5296
|
_snapshoot$videoRemot = snapshoot === null || snapshoot === void 0 ? void 0 : snapshoot.videoRemote, nowRemoteSent = _snapshoot$videoRemot.bytesSent;
|
|
5202
5297
|
preRemoteSent = _this._lastRemoteVideoStats.bytesSent;
|
|
5203
5298
|
if (preRemoteSent && nowRemoteSent && nowRemoteSent - preRemoteSent > 0) {
|
|
@@ -5216,7 +5311,7 @@
|
|
|
5216
5311
|
return _context.stop();
|
|
5217
5312
|
}
|
|
5218
5313
|
}, _callee, null, [[0, 10]]);
|
|
5219
|
-
}))
|
|
5314
|
+
}));
|
|
5220
5315
|
this._pc = pc;
|
|
5221
5316
|
this._timerInterval = interval;
|
|
5222
5317
|
this.start(interval);
|
|
@@ -5331,6 +5426,9 @@
|
|
|
5331
5426
|
return pc.createOffer().then(function(offer) {
|
|
5332
5427
|
var _sdpJson$media, _sdpJson$media2, _vMedia$rtp, _aMedia$rtp;
|
|
5333
5428
|
logger.log(offer.sdp);
|
|
5429
|
+
if (!offer.sdp) {
|
|
5430
|
+
return Promise.reject("createOffer no sdp");
|
|
5431
|
+
}
|
|
5334
5432
|
var sdpJson = lib.parse(offer.sdp);
|
|
5335
5433
|
var vMedia = (_sdpJson$media = sdpJson.media) === null || _sdpJson$media === void 0 ? void 0 : _sdpJson$media.filter(function(x) {
|
|
5336
5434
|
return x.type === "video";
|
|
@@ -5518,7 +5616,7 @@
|
|
|
5518
5616
|
var RTCDataView = /* @__PURE__ */ function() {
|
|
5519
5617
|
function RTCDataView2(buffer) {
|
|
5520
5618
|
_classCallCheck$3(this, RTCDataView2);
|
|
5521
|
-
|
|
5619
|
+
this._position = 0;
|
|
5522
5620
|
this._dataview = new DataView(buffer);
|
|
5523
5621
|
}
|
|
5524
5622
|
_createClass$3(RTCDataView2, [{
|
|
@@ -5920,7 +6018,7 @@
|
|
|
5920
6018
|
transformer.readable.pipeThrough(transform).pipeTo(event.transformer.writable);
|
|
5921
6019
|
});
|
|
5922
6020
|
}
|
|
5923
|
-
var encodedJs = "IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBlPXtnZXROQUxVbml0czpmdW5jdGlvbih0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2lmKHQubGVuZ3RoLXQucG9zaXRpb248NClyZXR1cm5bXTt2YXIgcj10LnBvc2l0aW9uO3JldHVybiAxPT09dC5nZXRJbnQzMihyKXx8MD09PXQuZ2V0SW50MTYocikmJjE9PT10LmdldEludDgocisyKT9lLmdldEFubmV4Yk5hbHModCxuKTplLmdldEF2Y2NOYWxzKHQsbil9LGdldEFubmV4Yk5hbHM6ZnVuY3Rpb24odCxuKXtmb3IodmFyIHI9W10saT1lLmdldEhlYWRlclBvc2l0aW9uQW5uZXhCKHQpLGE9aS5wb3Msbz1hO2E8dC5sZW5ndGgtNDspe3ZhciB1PW5ldyBVaW50OEFycmF5KHQuYnVmZmVyLnNsaWNlKGEsYStpLmhlYWRlckxlbmd0aCkpO2kucG9zPT09dC5wb3NpdGlvbiYmdC5za2lwKGkuaGVhZGVyTGVuZ3RoKSxvPShpPWUuZ2V0SGVhZGVyUG9zaXRpb25Bbm5leEIodCkpLnBvczt2YXIgcz17aGVhZGVyOnUsYm9keTpuZXcgVWludDhBcnJheSh0LmJ1ZmZlci5zbGljZShhK3UuYnl0ZUxlbmd0aCxvKSksdHlwZTotMX07bj9lLmFuYWx5c2VIMjY1TmFsKHMpOmUuYW5hbHlzZU5hbChzKSwocy50eXBlPD05fHxuJiZzLnR5cGU8PTQwKSYmMCE9PXMudHlwZSYmci5wdXNoKHMpLHQuc2tpcChvLXQucG9zaXRpb24pLGE9b31yZXR1cm4gcn0sZ2V0QXZjY05hbHM6ZnVuY3Rpb24odCxuKXtmb3IodmFyIHI9W107dC5wb3NpdGlvbjx0Lmxlbmd0aC00Oyl7dmFyIGk9dC5nZXRJbnQzMih0LnBvc2l0aW9uKTtpZighKHQubGVuZ3RoLXQucG9zaXRpb24+PWkpKWJyZWFrO3ZhciBhPW5ldyBVaW50OEFycmF5KHQuYnVmZmVyLnNsaWNlKHQucG9zaXRpb24sdC5wb3NpdGlvbis0KSk7dC5za2lwKDQpO3ZhciBvPW5ldyBVaW50OEFycmF5KHQuYnVmZmVyLnNsaWNlKHQucG9zaXRpb24sdC5wb3NpdGlvbitpKSk7dC5za2lwKGkpO3ZhciB1PXtoZWFkZXI6YSxib2R5Om8sdHlwZTotMX07bj9lLmFuYWx5c2VIMjY1TmFsKHUpOmUuYW5hbHlzZU5hbCh1KSx1LnR5cGU8PTkmJjAhPT11LnR5cGUmJnIucHVzaCh1KX1yZXR1cm4gcn0sYW5hbHlzZU5hbDpmdW5jdGlvbihlKXt2YXIgdD0zMSZlLmJvZHlbMF07c3dpdGNoKGUudHlwZT10LHQpe2Nhc2UgMTplLm5kcj0hMDticmVhaztjYXNlIDU6ZS5pZHI9ITA7YnJlYWs7Y2FzZSA2OmUuc2VpPSEwO2JyZWFrO2Nhc2UgNzplLnNwcz0hMDticmVhaztjYXNlIDg6ZS5wcHM9ITB9fSxhbmFseXNlSDI2NU5hbDpmdW5jdGlvbihlKXt2YXIgdD0oMTI2JmUuYm9keVswXSk+PjE7c3dpdGNoKGUudHlwZT10LHQpe2Nhc2UgMzk6Y2FzZSA0MDplLnNlaT0hMH19LGdldEhlYWRlclBvc2l0aW9uQW5uZXhCOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLnBvc2l0aW9uLG49MCxyPWUubGVuZ3RoOzMhPT1uJiY0IT09biYmdDxyLTQ7KTA9PT1lLmdldEludDE2KHQpPzE9PT1lLmdldEludDE2KHQrMik/bj00OjE9PT1lLmdldEludDgodCsyKT9uPTM6dCsrOnQrKztyZXR1cm4gdD09PXItNCYmKDA9PT1lLmdldEludDE2KHQpPzE9PT1lLmdldEludDE2KHQrMik/bj00OnQ9cjoodCsrLDA9PT1lLmdldEludDE2KHQpJiYxPT09ZS5nZXRJbnQ4KHQpP249Mzp0PXIpKSx7cG9zOnQsaGVhZGVyTGVuZ3RoOm59fSxpc0gyNjVWaWRlb0ZyYW1lOmZ1bmN0aW9uKGUpe3ZhciB0LG47cmV0dXJuKChudWxsPT09KHQ9ZS5nZXRNZXRhZGF0YSl8fHZvaWQgMD09PXR8fG51bGw9PT0obj10LmNhbGwoZSkpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLm1pbWVUeXBlKXx8IiIpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoImgyNjUiKX19O2Z1bmN0aW9uIHQoZSl7cmV0dXJuKHQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBuKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl07aS5lbnVtZXJhYmxlPWkuZW51bWVyYWJsZXx8ITEsaS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGkmJihpLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyKGkua2V5KSxpKX19ZnVuY3Rpb24gcihlKXt2YXIgdD1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT10eXBlb2YgZXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIG49ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PW4pe3ZhciByPW4uY2FsbChlLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShlKX0oZSwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6U3RyaW5nKHQpfXZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt2YXIgbixpLGE7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksbj10aGlzLGE9MCwoaT1yKGk9Il9wb3NpdGlvbiIpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4saSx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5baV09YSx0aGlzLl9kYXRhdmlldz1uZXcgRGF0YVZpZXcodCl9dmFyIHQsaSxhO3JldHVybiB0PWUsYT1be2tleToicmVhZEJ5dGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtzd2l0Y2godCl7Y2FzZSAxOnI9bj9lLmdldEludDgoZS5wb3NpdGlvbik6ZS5nZXRVaW50OChlLnBvc2l0aW9uKTticmVhaztjYXNlIDI6cj1uP2UuZ2V0SW50MTYoZS5wb3NpdGlvbik6ZS5nZXRVaW50MTYoZS5wb3NpdGlvbik7YnJlYWs7Y2FzZSAzOmlmKG4pdGhyb3cgbmV3IEVycm9yKCJub3Qgc3VwcG9ydGVkIGZvciByZWFkQnl0ZSAzIik7cj1lLmdldFVpbnQ4KGUucG9zaXRpb24pPDwxNixyfD1lLmdldFVpbnQ4KGUucG9zaXRpb24rMSk8PDgscnw9ZS5nZXRVaW50OChlLnBvc2l0aW9uKzIpO2JyZWFrO2Nhc2UgNDpyPW4/ZS5nZXRJbnQzMihlLnBvc2l0aW9uKTplLmdldFVpbnQzMihlLnBvc2l0aW9uKTticmVhaztjYXNlIDg6aWYobil0aHJvdyBuZXcgRXJyb3IoIm5vdCBzdXBwb3J0ZWQgZm9yIHJlYWRCb2R5IDgiKTtyPWUuZ2V0VWludDMyKGUucG9zaXRpb24pPDwzMixyfD1lLmdldFVpbnQzMihlLnBvc2l0aW9uKzQpO2JyZWFrO2RlZmF1bHQ6cj0iIn1yZXR1cm4gZS5wb3NpdGlvbis9dCxyfX1dLChpPVt7a2V5OiJsZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJ1ZmZlci5ieXRlTGVuZ3RofX0se2tleToiYnVmZmVyIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YXZpZXcuYnVmZmVyfX0se2tleToicG9zaXRpb24iLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3NpdGlvbn0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3Bvc2l0aW9uPWV9fSx7a2V5OiJiYWNrIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnBvc2l0aW9uLT1lfX0se2tleToiZ2V0VWludDgiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9kYXRhdmlldy5nZXRVaW50OChlKX19LHtrZXk6ImdldEludDgiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9kYXRhdmlldy5nZXRJbnQ4KGUpfX0se2tleToiZ2V0SW50MTYiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9kYXRhdmlldy5nZXRJbnQxNihlKX19LHtrZXk6ImdldFVpbnQxNiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2RhdGF2aWV3LmdldFVpbnQxNihlKX19LHtrZXk6ImdldFVpbnQzMiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2RhdGF2aWV3LmdldFVpbnQzMihlKX19LHtrZXk6ImdldEludDMyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fZGF0YXZpZXcuZ2V0SW50MzIoZSl9fSx7a2V5OiJza2lwIix2YWx1ZTpmdW5jdGlvbih0KXtmb3IodmFyIG49TWF0aC5mbG9vcih0LzQpLHI9dCU0LGk9MDtpPG47aSsrKWUucmVhZEJ5dGUodGhpcyw0KTtyPjAmJmUucmVhZEJ5dGUodGhpcyxyKX19LHtrZXk6InJlYWRVaW50OCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDEpfX0se2tleToicmVhZFVpbnQxNiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDIpfX0se2tleToicmVhZFVpbnQyNCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDMpfX0se2tleToicmVhZFVpbnQzMiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDQpfX0se2tleToicmVhZFVpbnQ2NCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDgpfX0se2tleToicmVhZEludDgiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGUucmVhZEJ5dGUodGhpcywxLCEwKX19LHtrZXk6InJlYWRJbnQxNiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDIsITApfX0se2tleToicmVhZEludDMyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBlLnJlYWRCeXRlKHRoaXMsNCwhMCl9fSx7a2V5OiJ3cml0ZVVpbnQzMiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KFtlPj4+MjQmMjU1LGU+Pj4xNiYyNTUsZT4+PjgmMjU1LDI1NSZlXSl9fV0pJiZuKHQucHJvdG90eXBlLGkpLGEmJm4odCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO2Z1bmN0aW9uIGEoZSxuKXtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIGk9bltyXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLChhPWkua2V5LG89dm9pZCAwLG89ZnVuY3Rpb24oZSxuKXtpZigib2JqZWN0IiE9PXQoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgaT1yLmNhbGwoZSxufHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09dChpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PW4/U3RyaW5nOk51bWJlcikoZSl9KGEsInN0cmluZyIpLCJzeW1ib2wiPT09dChvKT9vOlN0cmluZyhvKSksaSl9dmFyIGEsb31mdW5jdGlvbiBvKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3JldHVybihlW3RdPDwyND4+PjApKyhlW3QrMV08PDE2KSsoZVt0KzJdPDw4KSsoZVt0KzNdfHwwKX12YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKX12YXIgdCxuLHI7cmV0dXJuIHQ9ZSxyPVt7a2V5OiJwYXJzZUFubmV4QiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ieXRlTGVuZ3RoLTEsbj0wO2Rve2lmKDAhPT1lW3RdKWJyZWFrO24rKyx0LS19d2hpbGUodD4wKTtuPj0zJiYoZT1lLnN1YmFycmF5KDAsdCsxKSk7Zm9yKHZhciByPWUubGVuZ3RoLGk9MixhPTA7bnVsbCE9PWVbaV0mJnZvaWQgMCE9PWVbaV0mJjEhPT1lW2ldOylpKys7aWYoKGE9MisgKytpKT49cilyZXR1cm5bXTtmb3IodmFyIG89W107YTxyOylzd2l0Y2goZVthXSl7Y2FzZSAwOmlmKDAhPT1lW2EtMV0pe2ErPTI7YnJlYWt9aWYoMCE9PWVbYS0yXSl7YSsrO2JyZWFrfWlmKGE8ci0xJiYxIT09ZVthKzFdKXthKys7YnJlYWt9aSE9PWEtMiYmby5wdXNoKGUuc3ViYXJyYXkoaSxhLTIpKTtkb3thKyt9d2hpbGUoMSE9PWVbYV0mJmE8cik7YT0oaT1hKzEpKzI7YnJlYWs7Y2FzZSAxOmlmKDAhPT1lW2EtMV18fDAhPT1lW2EtMl0pe2ErPTM7YnJlYWt9aSE9PWEtMiYmby5wdXNoKGUuc3ViYXJyYXkoaSxhLTIpKSxhPShpPWErMSkrMjticmVhaztkZWZhdWx0OmErPTN9cmV0dXJuIGk8ciYmby5wdXNoKGUuc3ViYXJyYXkoaSkpLG99fSx7a2V5OiJwYXJzZUF2Y0MiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTo0O2lmKCEoZS5sZW5ndGg8NCkpe2Zvcih2YXIgbixyPWUubGVuZ3RoLGk9W10sYT0wO2ErdDxyOylpZihuPW8oZSxhKSwzPT09dCYmKG4+Pj49OCksYSs9dCxuKXtpZihhK24+cilicmVhaztpLnB1c2goZS5zdWJhcnJheShhLGErbikpLGErPW59cmV0dXJuIGl9fX0se2tleToicGFyc2VTRUkiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoLHI9dD8yOjEsaT0wLGE9MCxvPSIiOzI1NT09PWVbcl07KWkrPTI1NSxyKys7Zm9yKGkrPWVbcisrXTsyNTU9PT1lW3JdOylhKz0yNTUscisrO2lmKGErPWVbcisrXSw1PT09aSYmbj5yKzE2KWZvcih2YXIgdT0wO3U8MTY7dSsrKW8rPWVbcl0udG9TdHJpbmcoMTYpLHIrKztyZXR1cm57cGF5bG9hZDplLnN1YmFycmF5KHIscithKSx0eXBlOmksc2l6ZTphLHV1aWQ6b319fSx7a2V5OiJyZW1vdmVFUEIiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmJ5dGVMZW5ndGgsbj1bXSxyPTE7cjx0LTI7KTA9PT1lW3JdJiYwPT09ZVtyKzFdJiYzPT09ZVtyKzJdPyhuLnB1c2gocisyKSxyKz0yKTpyKys7aWYoIW4ubGVuZ3RoKXJldHVybiBlO3ZhciBpPXQtbi5sZW5ndGgsYT1uZXcgVWludDhBcnJheShpKSxvPTA7Zm9yKHI9MDtyPGk7bysrLHIrKylvPT09blswXSYmKG8rKyxuLnNoaWZ0KCkpLGFbcl09ZVtvXTtyZXR1cm4gYX19XSwobj1udWxsKSYmYSh0LnByb3RvdHlwZSxuKSxyJiZhKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTsidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJiJEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSI9PT1zZWxmLmNvbnN0cnVjdG9yLm5hbWUmJnNlbGYuYWRkRXZlbnRMaXN0ZW5lcigicnRjdHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7dmFyIG4scj10LnRyYW5zZm9ybWVyLGE9ci5vcHRpb25zLnBvcnQsbz0obj1mdW5jdGlvbihlKXthLnBvc3RNZXNzYWdlKGUpfSxuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm06ZnVuY3Rpb24odCxyKXt2YXIgYT1lLmlzSDI2NVZpZGVvRnJhbWUodCk7ZS5nZXROQUxVbml0cyhuZXcgaSh0LmRhdGEpLGEpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKGUuc2VpKXt2YXIgdD11LnBhcnNlU0VJKHUucmVtb3ZlRVBCKGUuYm9keSksITEpO3QmJm4oe2RhdGE6dCxzZWk6e2NvZGU6dC50eXBlLGNvbnRlbnQ6dC5wYXlsb2FkfX0pfX0pKSxyLmVucXVldWUodCl9fSkpO3IucmVhZGFibGUucGlwZVRocm91Z2gobykucGlwZVRvKHQudHJhbnNmb3JtZXIud3JpdGFibGUpfSkpfSgpOwo=";
|
|
6021
|
+
var encodedJs = "IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBlPXtnZXROQUxVbml0czpmdW5jdGlvbih0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2lmKHQubGVuZ3RoLXQucG9zaXRpb248NClyZXR1cm5bXTt2YXIgcj10LnBvc2l0aW9uO3JldHVybiAxPT09dC5nZXRJbnQzMihyKXx8MD09PXQuZ2V0SW50MTYocikmJjE9PT10LmdldEludDgocisyKT9lLmdldEFubmV4Yk5hbHModCxuKTplLmdldEF2Y2NOYWxzKHQsbil9LGdldEFubmV4Yk5hbHM6ZnVuY3Rpb24odCxuKXtmb3IodmFyIHI9W10saT1lLmdldEhlYWRlclBvc2l0aW9uQW5uZXhCKHQpLGE9aS5wb3Msbz1hO2E8dC5sZW5ndGgtNDspe3ZhciB1PW5ldyBVaW50OEFycmF5KHQuYnVmZmVyLnNsaWNlKGEsYStpLmhlYWRlckxlbmd0aCkpO2kucG9zPT09dC5wb3NpdGlvbiYmdC5za2lwKGkuaGVhZGVyTGVuZ3RoKSxvPShpPWUuZ2V0SGVhZGVyUG9zaXRpb25Bbm5leEIodCkpLnBvczt2YXIgcz17aGVhZGVyOnUsYm9keTpuZXcgVWludDhBcnJheSh0LmJ1ZmZlci5zbGljZShhK3UuYnl0ZUxlbmd0aCxvKSksdHlwZTotMX07bj9lLmFuYWx5c2VIMjY1TmFsKHMpOmUuYW5hbHlzZU5hbChzKSwocy50eXBlPD05fHxuJiZzLnR5cGU8PTQwKSYmMCE9PXMudHlwZSYmci5wdXNoKHMpLHQuc2tpcChvLXQucG9zaXRpb24pLGE9b31yZXR1cm4gcn0sZ2V0QXZjY05hbHM6ZnVuY3Rpb24odCxuKXtmb3IodmFyIHI9W107dC5wb3NpdGlvbjx0Lmxlbmd0aC00Oyl7dmFyIGk9dC5nZXRJbnQzMih0LnBvc2l0aW9uKTtpZighKHQubGVuZ3RoLXQucG9zaXRpb24+PWkpKWJyZWFrO3ZhciBhPW5ldyBVaW50OEFycmF5KHQuYnVmZmVyLnNsaWNlKHQucG9zaXRpb24sdC5wb3NpdGlvbis0KSk7dC5za2lwKDQpO3ZhciBvPW5ldyBVaW50OEFycmF5KHQuYnVmZmVyLnNsaWNlKHQucG9zaXRpb24sdC5wb3NpdGlvbitpKSk7dC5za2lwKGkpO3ZhciB1PXtoZWFkZXI6YSxib2R5Om8sdHlwZTotMX07bj9lLmFuYWx5c2VIMjY1TmFsKHUpOmUuYW5hbHlzZU5hbCh1KSx1LnR5cGU8PTkmJjAhPT11LnR5cGUmJnIucHVzaCh1KX1yZXR1cm4gcn0sYW5hbHlzZU5hbDpmdW5jdGlvbihlKXt2YXIgdD0zMSZlLmJvZHlbMF07c3dpdGNoKGUudHlwZT10LHQpe2Nhc2UgMTplLm5kcj0hMDticmVhaztjYXNlIDU6ZS5pZHI9ITA7YnJlYWs7Y2FzZSA2OmUuc2VpPSEwO2JyZWFrO2Nhc2UgNzplLnNwcz0hMDticmVhaztjYXNlIDg6ZS5wcHM9ITB9fSxhbmFseXNlSDI2NU5hbDpmdW5jdGlvbihlKXt2YXIgdD0oMTI2JmUuYm9keVswXSk+PjE7c3dpdGNoKGUudHlwZT10LHQpe2Nhc2UgMzk6Y2FzZSA0MDplLnNlaT0hMH19LGdldEhlYWRlclBvc2l0aW9uQW5uZXhCOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLnBvc2l0aW9uLG49MCxyPWUubGVuZ3RoOzMhPT1uJiY0IT09biYmdDxyLTQ7KTA9PT1lLmdldEludDE2KHQpPzE9PT1lLmdldEludDE2KHQrMik/bj00OjE9PT1lLmdldEludDgodCsyKT9uPTM6dCsrOnQrKztyZXR1cm4gdD09PXItNCYmKDA9PT1lLmdldEludDE2KHQpPzE9PT1lLmdldEludDE2KHQrMik/bj00OnQ9cjoodCsrLDA9PT1lLmdldEludDE2KHQpJiYxPT09ZS5nZXRJbnQ4KHQpP249Mzp0PXIpKSx7cG9zOnQsaGVhZGVyTGVuZ3RoOm59fSxpc0gyNjVWaWRlb0ZyYW1lOmZ1bmN0aW9uKGUpe3ZhciB0LG47cmV0dXJuKChudWxsPT09KHQ9ZS5nZXRNZXRhZGF0YSl8fHZvaWQgMD09PXR8fG51bGw9PT0obj10LmNhbGwoZSkpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLm1pbWVUeXBlKXx8IiIpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoImgyNjUiKX19O2Z1bmN0aW9uIHQoZSl7cmV0dXJuKHQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBuKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwoaT1yLmtleSxhPXZvaWQgMCwic3ltYm9sIj09dHlwZW9mKGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9dHlwZW9mIGV8fG51bGw9PT1lKXJldHVybiBlO3ZhciBuPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1uKXt2YXIgcj1uLmNhbGwoZSx0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikoZSl9KGksInN0cmluZyIpKT9hOlN0cmluZyhhKSkscil9dmFyIGksYX12YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5fcG9zaXRpb249MCx0aGlzLl9kYXRhdmlldz1uZXcgRGF0YVZpZXcodCl9dmFyIHQscixpO3JldHVybiB0PWUsaT1be2tleToicmVhZEJ5dGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtzd2l0Y2godCl7Y2FzZSAxOnI9bj9lLmdldEludDgoZS5wb3NpdGlvbik6ZS5nZXRVaW50OChlLnBvc2l0aW9uKTticmVhaztjYXNlIDI6cj1uP2UuZ2V0SW50MTYoZS5wb3NpdGlvbik6ZS5nZXRVaW50MTYoZS5wb3NpdGlvbik7YnJlYWs7Y2FzZSAzOmlmKG4pdGhyb3cgbmV3IEVycm9yKCJub3Qgc3VwcG9ydGVkIGZvciByZWFkQnl0ZSAzIik7cj1lLmdldFVpbnQ4KGUucG9zaXRpb24pPDwxNixyfD1lLmdldFVpbnQ4KGUucG9zaXRpb24rMSk8PDgscnw9ZS5nZXRVaW50OChlLnBvc2l0aW9uKzIpO2JyZWFrO2Nhc2UgNDpyPW4/ZS5nZXRJbnQzMihlLnBvc2l0aW9uKTplLmdldFVpbnQzMihlLnBvc2l0aW9uKTticmVhaztjYXNlIDg6aWYobil0aHJvdyBuZXcgRXJyb3IoIm5vdCBzdXBwb3J0ZWQgZm9yIHJlYWRCb2R5IDgiKTtyPWUuZ2V0VWludDMyKGUucG9zaXRpb24pPDwzMixyfD1lLmdldFVpbnQzMihlLnBvc2l0aW9uKzQpO2JyZWFrO2RlZmF1bHQ6cj0iIn1yZXR1cm4gZS5wb3NpdGlvbis9dCxyfX1dLChyPVt7a2V5OiJsZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJ1ZmZlci5ieXRlTGVuZ3RofX0se2tleToiYnVmZmVyIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YXZpZXcuYnVmZmVyfX0se2tleToicG9zaXRpb24iLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3NpdGlvbn0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3Bvc2l0aW9uPWV9fSx7a2V5OiJiYWNrIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnBvc2l0aW9uLT1lfX0se2tleToiZ2V0VWludDgiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9kYXRhdmlldy5nZXRVaW50OChlKX19LHtrZXk6ImdldEludDgiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9kYXRhdmlldy5nZXRJbnQ4KGUpfX0se2tleToiZ2V0SW50MTYiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9kYXRhdmlldy5nZXRJbnQxNihlKX19LHtrZXk6ImdldFVpbnQxNiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2RhdGF2aWV3LmdldFVpbnQxNihlKX19LHtrZXk6ImdldFVpbnQzMiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2RhdGF2aWV3LmdldFVpbnQzMihlKX19LHtrZXk6ImdldEludDMyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fZGF0YXZpZXcuZ2V0SW50MzIoZSl9fSx7a2V5OiJza2lwIix2YWx1ZTpmdW5jdGlvbih0KXtmb3IodmFyIG49TWF0aC5mbG9vcih0LzQpLHI9dCU0LGk9MDtpPG47aSsrKWUucmVhZEJ5dGUodGhpcyw0KTtyPjAmJmUucmVhZEJ5dGUodGhpcyxyKX19LHtrZXk6InJlYWRVaW50OCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDEpfX0se2tleToicmVhZFVpbnQxNiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDIpfX0se2tleToicmVhZFVpbnQyNCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDMpfX0se2tleToicmVhZFVpbnQzMiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDQpfX0se2tleToicmVhZFVpbnQ2NCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDgpfX0se2tleToicmVhZEludDgiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGUucmVhZEJ5dGUodGhpcywxLCEwKX19LHtrZXk6InJlYWRJbnQxNiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDIsITApfX0se2tleToicmVhZEludDMyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBlLnJlYWRCeXRlKHRoaXMsNCwhMCl9fSx7a2V5OiJ3cml0ZVVpbnQzMiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KFtlPj4+MjQmMjU1LGU+Pj4xNiYyNTUsZT4+PjgmMjU1LDI1NSZlXSl9fV0pJiZuKHQucHJvdG90eXBlLHIpLGkmJm4odCxpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO2Z1bmN0aW9uIGkoZSxuKXtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIGk9bltyXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLChhPWkua2V5LG89dm9pZCAwLG89ZnVuY3Rpb24oZSxuKXtpZigib2JqZWN0IiE9PXQoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgaT1yLmNhbGwoZSxufHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09dChpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PW4/U3RyaW5nOk51bWJlcikoZSl9KGEsInN0cmluZyIpLCJzeW1ib2wiPT09dChvKT9vOlN0cmluZyhvKSksaSl9dmFyIGEsb31mdW5jdGlvbiBhKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3JldHVybihlW3RdPDwyND4+PjApKyhlW3QrMV08PDE2KSsoZVt0KzJdPDw4KSsoZVt0KzNdfHwwKX12YXIgbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKX12YXIgdCxuLHI7cmV0dXJuIHQ9ZSxyPVt7a2V5OiJwYXJzZUFubmV4QiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ieXRlTGVuZ3RoLTEsbj0wO2Rve2lmKDAhPT1lW3RdKWJyZWFrO24rKyx0LS19d2hpbGUodD4wKTtuPj0zJiYoZT1lLnN1YmFycmF5KDAsdCsxKSk7Zm9yKHZhciByPWUubGVuZ3RoLGk9MixhPTA7bnVsbCE9PWVbaV0mJnZvaWQgMCE9PWVbaV0mJjEhPT1lW2ldOylpKys7aWYoKGE9MisgKytpKT49cilyZXR1cm5bXTtmb3IodmFyIG89W107YTxyOylzd2l0Y2goZVthXSl7Y2FzZSAwOmlmKDAhPT1lW2EtMV0pe2ErPTI7YnJlYWt9aWYoMCE9PWVbYS0yXSl7YSsrO2JyZWFrfWlmKGE8ci0xJiYxIT09ZVthKzFdKXthKys7YnJlYWt9aSE9PWEtMiYmby5wdXNoKGUuc3ViYXJyYXkoaSxhLTIpKTtkb3thKyt9d2hpbGUoMSE9PWVbYV0mJmE8cik7YT0oaT1hKzEpKzI7YnJlYWs7Y2FzZSAxOmlmKDAhPT1lW2EtMV18fDAhPT1lW2EtMl0pe2ErPTM7YnJlYWt9aSE9PWEtMiYmby5wdXNoKGUuc3ViYXJyYXkoaSxhLTIpKSxhPShpPWErMSkrMjticmVhaztkZWZhdWx0OmErPTN9cmV0dXJuIGk8ciYmby5wdXNoKGUuc3ViYXJyYXkoaSkpLG99fSx7a2V5OiJwYXJzZUF2Y0MiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTo0O2lmKCEoZS5sZW5ndGg8NCkpe2Zvcih2YXIgbixyPWUubGVuZ3RoLGk9W10sbz0wO28rdDxyOylpZihuPWEoZSxvKSwzPT09dCYmKG4+Pj49OCksbys9dCxuKXtpZihvK24+cilicmVhaztpLnB1c2goZS5zdWJhcnJheShvLG8rbikpLG8rPW59cmV0dXJuIGl9fX0se2tleToicGFyc2VTRUkiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoLHI9dD8yOjEsaT0wLGE9MCxvPSIiOzI1NT09PWVbcl07KWkrPTI1NSxyKys7Zm9yKGkrPWVbcisrXTsyNTU9PT1lW3JdOylhKz0yNTUscisrO2lmKGErPWVbcisrXSw1PT09aSYmbj5yKzE2KWZvcih2YXIgdT0wO3U8MTY7dSsrKW8rPWVbcl0udG9TdHJpbmcoMTYpLHIrKztyZXR1cm57cGF5bG9hZDplLnN1YmFycmF5KHIscithKSx0eXBlOmksc2l6ZTphLHV1aWQ6b319fSx7a2V5OiJyZW1vdmVFUEIiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmJ5dGVMZW5ndGgsbj1bXSxyPTE7cjx0LTI7KTA9PT1lW3JdJiYwPT09ZVtyKzFdJiYzPT09ZVtyKzJdPyhuLnB1c2gocisyKSxyKz0yKTpyKys7aWYoIW4ubGVuZ3RoKXJldHVybiBlO3ZhciBpPXQtbi5sZW5ndGgsYT1uZXcgVWludDhBcnJheShpKSxvPTA7Zm9yKHI9MDtyPGk7bysrLHIrKylvPT09blswXSYmKG8rKyxuLnNoaWZ0KCkpLGFbcl09ZVtvXTtyZXR1cm4gYX19XSwobj1udWxsKSYmaSh0LnByb3RvdHlwZSxuKSxyJiZpKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTsidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJiJEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSI9PT1zZWxmLmNvbnN0cnVjdG9yLm5hbWUmJnNlbGYuYWRkRXZlbnRMaXN0ZW5lcigicnRjdHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7dmFyIG4saT10LnRyYW5zZm9ybWVyLGE9aS5vcHRpb25zLnBvcnQsdT0obj1mdW5jdGlvbihlKXthLnBvc3RNZXNzYWdlKGUpfSxuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm06ZnVuY3Rpb24odCxpKXt2YXIgYT1lLmlzSDI2NVZpZGVvRnJhbWUodCk7ZS5nZXROQUxVbml0cyhuZXcgcih0LmRhdGEpLGEpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKGUuc2VpKXt2YXIgdD1vLnBhcnNlU0VJKG8ucmVtb3ZlRVBCKGUuYm9keSksITEpO3QmJm4oe2RhdGE6dCxzZWk6e2NvZGU6dC50eXBlLGNvbnRlbnQ6dC5wYXlsb2FkfX0pfX0pKSxpLmVucXVldWUodCl9fSkpO2kucmVhZGFibGUucGlwZVRocm91Z2godSkucGlwZVRvKHQudHJhbnNmb3JtZXIud3JpdGFibGUpfSkpfSgpOwo=";
|
|
5924
6022
|
var blob = typeof window !== "undefined" && window.Blob && new Blob([atob(encodedJs)], {
|
|
5925
6023
|
type: "text/javascript;charset=utf-8"
|
|
5926
6024
|
});
|
|
@@ -5934,21 +6032,19 @@
|
|
|
5934
6032
|
objURL && (window.URL || window.webkitURL).revokeObjectURL(objURL);
|
|
5935
6033
|
}
|
|
5936
6034
|
}
|
|
5937
|
-
var
|
|
5938
|
-
function
|
|
5939
|
-
_classCallCheck$3(this,
|
|
5940
|
-
|
|
5941
|
-
|
|
5942
|
-
|
|
5943
|
-
|
|
5944
|
-
|
|
5945
|
-
}
|
|
5946
|
-
_createClass$3(AudioStallObserver2, [{
|
|
6035
|
+
var _AudioStallObserver = /* @__PURE__ */ function() {
|
|
6036
|
+
function _AudioStallObserver2() {
|
|
6037
|
+
_classCallCheck$3(this, _AudioStallObserver2);
|
|
6038
|
+
this._isStallInPreReportEnd = false;
|
|
6039
|
+
this._stallList = [];
|
|
6040
|
+
this._audioTransceiver = null;
|
|
6041
|
+
}
|
|
6042
|
+
_createClass$3(_AudioStallObserver2, [{
|
|
5947
6043
|
key: "start",
|
|
5948
6044
|
value: function start(transceiver) {
|
|
5949
6045
|
this.stop();
|
|
5950
6046
|
this._audioTransceiver = transceiver;
|
|
5951
|
-
if (
|
|
6047
|
+
if (_AudioStallObserver2.interval >= 100) {
|
|
5952
6048
|
this._startStallCountInterval();
|
|
5953
6049
|
}
|
|
5954
6050
|
}
|
|
@@ -5958,7 +6054,7 @@
|
|
|
5958
6054
|
this._stallList = [];
|
|
5959
6055
|
if (this._audioStallTimer) {
|
|
5960
6056
|
clearTimeout(this._audioStallTimer);
|
|
5961
|
-
this._audioStallTimer
|
|
6057
|
+
delete this._audioStallTimer;
|
|
5962
6058
|
}
|
|
5963
6059
|
}
|
|
5964
6060
|
}, {
|
|
@@ -6024,12 +6120,12 @@
|
|
|
6024
6120
|
switch (_context2.prev = _context2.next) {
|
|
6025
6121
|
case 0:
|
|
6026
6122
|
clearTimeout(_this._audioStallTimer);
|
|
6027
|
-
_this._audioStallTimer
|
|
6123
|
+
delete _this._audioStallTimer;
|
|
6028
6124
|
_context2.next = 4;
|
|
6029
6125
|
return _this._audioStallCount();
|
|
6030
6126
|
case 4:
|
|
6031
6127
|
if (!_this._audioStallTimer) {
|
|
6032
|
-
_this._audioStallTimer = setTimeout(loop,
|
|
6128
|
+
_this._audioStallTimer = setTimeout(loop, _AudioStallObserver2.interval);
|
|
6033
6129
|
}
|
|
6034
6130
|
case 5:
|
|
6035
6131
|
case "end":
|
|
@@ -6041,7 +6137,7 @@
|
|
|
6041
6137
|
return _ref.apply(this, arguments);
|
|
6042
6138
|
};
|
|
6043
6139
|
}();
|
|
6044
|
-
this._audioStallTimer = setTimeout(loop,
|
|
6140
|
+
this._audioStallTimer = setTimeout(loop, _AudioStallObserver2.interval);
|
|
6045
6141
|
}
|
|
6046
6142
|
}, {
|
|
6047
6143
|
key: "_audioStallCount",
|
|
@@ -6052,7 +6148,7 @@
|
|
|
6052
6148
|
while (1)
|
|
6053
6149
|
switch (_context3.prev = _context3.next) {
|
|
6054
6150
|
case 0:
|
|
6055
|
-
if (!(this._preSample && Date.now() - this._preSample.ts <
|
|
6151
|
+
if (!(this._preSample && Date.now() - this._preSample.ts < _AudioStallObserver2.interval * 0.5)) {
|
|
6056
6152
|
_context3.next = 2;
|
|
6057
6153
|
break;
|
|
6058
6154
|
}
|
|
@@ -6106,7 +6202,7 @@
|
|
|
6106
6202
|
_inboundRTP3 = inboundRTP, concealedSamples = _inboundRTP3.concealedSamples, totalSamplesReceived = _inboundRTP3.totalSamplesReceived;
|
|
6107
6203
|
interval_concealed_samples = concealedSamples - this._preSample.concealedSamples;
|
|
6108
6204
|
interval_samples_received = totalSamplesReceived - this._preSample.totalSamplesReceived;
|
|
6109
|
-
is_stall = interval_concealed_samples >= 0 && interval_samples_received >= 0 && interval_concealed_samples >=
|
|
6205
|
+
is_stall = interval_concealed_samples >= 0 && interval_samples_received >= 0 && interval_concealed_samples >= _AudioStallObserver2.ratio * interval_samples_received;
|
|
6110
6206
|
this._stallList.push({
|
|
6111
6207
|
concealed: interval_concealed_samples,
|
|
6112
6208
|
received: interval_samples_received,
|
|
@@ -6134,10 +6230,11 @@
|
|
|
6134
6230
|
return _audioStallCount;
|
|
6135
6231
|
}()
|
|
6136
6232
|
}]);
|
|
6137
|
-
return
|
|
6233
|
+
return _AudioStallObserver2;
|
|
6138
6234
|
}();
|
|
6139
|
-
|
|
6140
|
-
|
|
6235
|
+
var AudioStallObserver = _AudioStallObserver;
|
|
6236
|
+
AudioStallObserver.interval = 100;
|
|
6237
|
+
AudioStallObserver.ratio = 0.6;
|
|
6141
6238
|
var computeStallInfo = function computeStallInfo2(list, times, isStallInPreEnd) {
|
|
6142
6239
|
var _list$;
|
|
6143
6240
|
var res = {
|
|
@@ -6206,13 +6303,22 @@
|
|
|
6206
6303
|
function VideoStallObserver2() {
|
|
6207
6304
|
var _this = this;
|
|
6208
6305
|
_classCallCheck$3(this, VideoStallObserver2);
|
|
6209
|
-
|
|
6306
|
+
this._videoInWaiting100ms = false;
|
|
6307
|
+
this._videoInWaiting500ms = false;
|
|
6308
|
+
this._pauseStart = 0;
|
|
6309
|
+
this._pauseDuration = 0;
|
|
6310
|
+
this._stallTimeThreshold = {
|
|
6311
|
+
stall500ms: isSafari() || isFirefox() ? 550 : 500,
|
|
6312
|
+
stall100ms: 100
|
|
6313
|
+
};
|
|
6314
|
+
this._support100msStall = checkVideoFrameCallback();
|
|
6315
|
+
this._handleVisibilityChange = function() {
|
|
6210
6316
|
if (document.visibilityState === "hidden") {
|
|
6211
6317
|
_this._framePause();
|
|
6212
6318
|
}
|
|
6213
|
-
}
|
|
6214
|
-
|
|
6215
|
-
if (_this._prePts) {
|
|
6319
|
+
};
|
|
6320
|
+
this._framePause = function() {
|
|
6321
|
+
if (_this._prePts && _this._stallList) {
|
|
6216
6322
|
var current = performance.now();
|
|
6217
6323
|
var delta = current - _this._prePts;
|
|
6218
6324
|
_this._stallList.push({
|
|
@@ -6221,23 +6327,7 @@
|
|
|
6221
6327
|
});
|
|
6222
6328
|
_this._prePts = void 0;
|
|
6223
6329
|
}
|
|
6224
|
-
});
|
|
6225
|
-
this._removeHandler = void 0;
|
|
6226
|
-
this._remotePlayPauseHandler = void 0;
|
|
6227
|
-
this._prePts = void 0;
|
|
6228
|
-
this._stallList = void 0;
|
|
6229
|
-
this._videoInWaiting100ms = false;
|
|
6230
|
-
this._videoInWaiting500ms = false;
|
|
6231
|
-
this._isPaused = void 0;
|
|
6232
|
-
this._pauseStart = 0;
|
|
6233
|
-
this._pauseDuration = 0;
|
|
6234
|
-
this._requestVideoFrameCallbackTimer = void 0;
|
|
6235
|
-
this._player = void 0;
|
|
6236
|
-
this._stallTimeThreshold = {
|
|
6237
|
-
stall500ms: isSafari() || isFirefox() ? 550 : 500,
|
|
6238
|
-
stall100ms: 100
|
|
6239
6330
|
};
|
|
6240
|
-
this._support100msStall = checkVideoFrameCallback();
|
|
6241
6331
|
}
|
|
6242
6332
|
_createClass$3(VideoStallObserver2, [{
|
|
6243
6333
|
key: "start",
|
|
@@ -6275,7 +6365,7 @@
|
|
|
6275
6365
|
player.removeEventListener("play", handlePlay);
|
|
6276
6366
|
};
|
|
6277
6367
|
document.addEventListener("visibilitychange", this._handleVisibilityChange);
|
|
6278
|
-
|
|
6368
|
+
window.addEventListener("pagehide", this._framePause);
|
|
6279
6369
|
}
|
|
6280
6370
|
}, {
|
|
6281
6371
|
key: "stop",
|
|
@@ -6294,7 +6384,7 @@
|
|
|
6294
6384
|
this._videoInWaiting100ms = false;
|
|
6295
6385
|
this._videoInWaiting500ms = false;
|
|
6296
6386
|
document.removeEventListener("visibilitychange", this._handleVisibilityChange);
|
|
6297
|
-
|
|
6387
|
+
window.removeEventListener("pagehide", this._framePause);
|
|
6298
6388
|
}
|
|
6299
6389
|
}, {
|
|
6300
6390
|
key: "destroy",
|
|
@@ -6363,7 +6453,7 @@
|
|
|
6363
6453
|
}
|
|
6364
6454
|
var _stallInfo$stall = stallInfo.stall, stallDuration500ms = _stallInfo$stall.stallDuration500ms, stallDuration100ms = _stallInfo$stall.stallDuration100ms;
|
|
6365
6455
|
stallInfo.stall.stallRate500ms = Math.min(Number((stallDuration500ms / interval).toFixed(4)), 1);
|
|
6366
|
-
if (this._support100msStall) {
|
|
6456
|
+
if (this._support100msStall && stallDuration100ms) {
|
|
6367
6457
|
stallInfo.stall.stallRate100ms = Math.min(Number((stallDuration100ms / interval).toFixed(4)), 1);
|
|
6368
6458
|
} else {
|
|
6369
6459
|
delete stallInfo.stall.stallRate100ms;
|
|
@@ -6529,7 +6619,7 @@
|
|
|
6529
6619
|
receivedSampleRate: diffNumber(oldStats, newStats, "totalSamplesReceived") / statsInterval,
|
|
6530
6620
|
concealedSamples: Math.round(diffNumber(oldStats, newStats, "concealedSamples")),
|
|
6531
6621
|
concealmentEvent: Math.round(diffNumber(oldStats, newStats, "concealmentEvents")),
|
|
6532
|
-
e2eDelay: Math.round(newStats.rtt + jitterBufferDelay)
|
|
6622
|
+
e2eDelay: Math.round((newStats.rtt || 0) + jitterBufferDelay)
|
|
6533
6623
|
};
|
|
6534
6624
|
}
|
|
6535
6625
|
function getRecvVideoStats(_x2) {
|
|
@@ -6600,8 +6690,12 @@
|
|
|
6600
6690
|
var nackCount = diffNumber(oldStats, newStats, "nackCount");
|
|
6601
6691
|
var packetsReceived = diffNumber(oldStats, newStats, "packetsReceived");
|
|
6602
6692
|
var jitterBufferDelay = Math.round(diffNumber(oldStats, newStats, "jitterBufferDelay") / diffNumber(oldStats, newStats, "jitterBufferEmittedCount") * 1e3);
|
|
6693
|
+
var newResolution = (newStats.width || 0) * (newStats.height || 0);
|
|
6694
|
+
var oldResolution = (oldStats.width || 0) * (oldStats.height || 0);
|
|
6695
|
+
var abrState = newResolution === 0 || oldResolution === 0 ? "none" : newResolution > oldResolution ? "upgrade" : newResolution < oldResolution ? "degrade" : "none";
|
|
6603
6696
|
return {
|
|
6604
6697
|
statsInterval,
|
|
6698
|
+
abrState,
|
|
6605
6699
|
width: newStats.width || 0,
|
|
6606
6700
|
height: newStats.height || 0,
|
|
6607
6701
|
estimatedPlayoutTimestamp: newStats.estimatedPlayoutTimestamp,
|
|
@@ -6620,7 +6714,7 @@
|
|
|
6620
6714
|
firCount: diffNumber(oldStats, newStats, "firCount"),
|
|
6621
6715
|
nackCount,
|
|
6622
6716
|
pliCount: diffNumber(oldStats, newStats, "pliCount"),
|
|
6623
|
-
e2eDelay: Math.round(newStats.rtt + jitterBufferDelay),
|
|
6717
|
+
e2eDelay: Math.round((newStats.rtt || 0) + jitterBufferDelay),
|
|
6624
6718
|
retransmittedRate: +(nackCount / (packetsReceived + packetsLostDiff)).toFixed(2)
|
|
6625
6719
|
};
|
|
6626
6720
|
}
|
|
@@ -6653,11 +6747,11 @@
|
|
|
6653
6747
|
DOWN: 6
|
|
6654
6748
|
};
|
|
6655
6749
|
var NetworkQuality = /* @__PURE__ */ function() {
|
|
6656
|
-
function NetworkQuality2(
|
|
6750
|
+
function NetworkQuality2(_peer, _networkQualityParams) {
|
|
6657
6751
|
_classCallCheck$3(this, NetworkQuality2);
|
|
6658
|
-
|
|
6659
|
-
this.
|
|
6660
|
-
this.
|
|
6752
|
+
this._peer = _peer;
|
|
6753
|
+
this._networkQualityParams = _networkQualityParams;
|
|
6754
|
+
this._preDownlinkStats = [];
|
|
6661
6755
|
}
|
|
6662
6756
|
_createClass$3(NetworkQuality2, [{
|
|
6663
6757
|
key: "getDownlinkQuality",
|
|
@@ -6712,11 +6806,11 @@
|
|
|
6712
6806
|
} else {
|
|
6713
6807
|
quality = QosLevel.VBAD;
|
|
6714
6808
|
}
|
|
6715
|
-
if (retransmittedRate > qosQualityParams[QosLevel.BAD].minRetransmittedRate) {
|
|
6809
|
+
if (retransmittedRate > (qosQualityParams[QosLevel.BAD].minRetransmittedRate || 0.5)) {
|
|
6716
6810
|
quality = Math.max(quality, QosLevel.BAD);
|
|
6717
|
-
} else if (retransmittedRate > qosQualityParams[QosLevel.POOR].minRetransmittedRate) {
|
|
6811
|
+
} else if (retransmittedRate > (qosQualityParams[QosLevel.POOR].minRetransmittedRate || 0.35)) {
|
|
6718
6812
|
quality = Math.max(quality, QosLevel.POOR);
|
|
6719
|
-
} else if (retransmittedRate > qosQualityParams[QosLevel.GOOD].minRetransmittedRate) {
|
|
6813
|
+
} else if (retransmittedRate > (qosQualityParams[QosLevel.GOOD].minRetransmittedRate || 0.2)) {
|
|
6720
6814
|
quality = Math.max(quality, QosLevel.GOOD);
|
|
6721
6815
|
}
|
|
6722
6816
|
return quality;
|
|
@@ -6757,6 +6851,249 @@
|
|
|
6757
6851
|
}]);
|
|
6758
6852
|
return NetworkQuality2;
|
|
6759
6853
|
}();
|
|
6854
|
+
var FIRST_FRAME_STATE_ORDER = [RTC_FIRST_FRAME_STATE.LOAD_START, RTC_FIRST_FRAME_STATE.OFFER_SDP_READY, RTC_FIRST_FRAME_STATE.ANSWER_SDP_RECV, RTC_FIRST_FRAME_STATE.ANSWER_SDP_READY, RTC_FIRST_FRAME_STATE.ICE_CONNECTED, RTC_FIRST_FRAME_STATE.DTLS_CONNECTED, RTC_FIRST_FRAME_STATE.PEER_CONNECTED, RTC_FIRST_FRAME_STATE.FIRST_PACKET_RECV, RTC_FIRST_FRAME_STATE.FIRST_FRAME_RECV, RTC_FIRST_FRAME_STATE.FIRST_FRAME_DECODED, RTC_FIRST_FRAME_STATE.VIDEO_LOADEDDATA, RTC_FIRST_FRAME_STATE.VIDEO_CANPLAY, RTC_FIRST_FRAME_STATE.VIDEO_PLAYING];
|
|
6855
|
+
var FirstFrameObserver = /* @__PURE__ */ function() {
|
|
6856
|
+
function FirstFrameObserver2(_emitFirstFrameState) {
|
|
6857
|
+
var _this = this;
|
|
6858
|
+
_classCallCheck$3(this, FirstFrameObserver2);
|
|
6859
|
+
this._emitFirstFrameState = _emitFirstFrameState;
|
|
6860
|
+
this._startConnectTs = 0;
|
|
6861
|
+
this._firstVideoFrameInterval = null;
|
|
6862
|
+
this._preState = null;
|
|
6863
|
+
this._state = {};
|
|
6864
|
+
this._pc = null;
|
|
6865
|
+
this._video = null;
|
|
6866
|
+
this._videoTransceiver = null;
|
|
6867
|
+
this._extraInfo = {
|
|
6868
|
+
is_preload: false
|
|
6869
|
+
};
|
|
6870
|
+
this._handleConnectionStateChange = function() {
|
|
6871
|
+
var _this$_pc;
|
|
6872
|
+
if (((_this$_pc = _this._pc) === null || _this$_pc === void 0 ? void 0 : _this$_pc.connectionState) === "connected" && _this._videoTransceiver) {
|
|
6873
|
+
_this.changeFirstFrameState(RTC_FIRST_FRAME_STATE.PEER_CONNECTED);
|
|
6874
|
+
_this._watchForFirstVideoFrameRecv(_this._videoTransceiver);
|
|
6875
|
+
}
|
|
6876
|
+
};
|
|
6877
|
+
this._handleICEConnectionStateChange = function() {
|
|
6878
|
+
var _this$_pc2;
|
|
6879
|
+
if (((_this$_pc2 = _this._pc) === null || _this$_pc2 === void 0 ? void 0 : _this$_pc2.iceConnectionState) === "connected") {
|
|
6880
|
+
_this.changeFirstFrameState(RTC_FIRST_FRAME_STATE.ICE_CONNECTED);
|
|
6881
|
+
}
|
|
6882
|
+
};
|
|
6883
|
+
this._handlePlaying = function() {
|
|
6884
|
+
_this.changeFirstFrameState(RTC_FIRST_FRAME_STATE.VIDEO_PLAYING);
|
|
6885
|
+
_this.reset();
|
|
6886
|
+
};
|
|
6887
|
+
this._handleCanplay = function() {
|
|
6888
|
+
_this.changeFirstFrameState(RTC_FIRST_FRAME_STATE.VIDEO_CANPLAY);
|
|
6889
|
+
};
|
|
6890
|
+
this._handleLoadeddata = function() {
|
|
6891
|
+
_this.changeFirstFrameState(RTC_FIRST_FRAME_STATE.VIDEO_LOADEDDATA);
|
|
6892
|
+
};
|
|
6893
|
+
this._handleError = function() {
|
|
6894
|
+
_this.reset();
|
|
6895
|
+
};
|
|
6896
|
+
}
|
|
6897
|
+
_createClass$3(FirstFrameObserver2, [{
|
|
6898
|
+
key: "start",
|
|
6899
|
+
value: function start() {
|
|
6900
|
+
this.reset();
|
|
6901
|
+
this._startConnectTs = Date.now();
|
|
6902
|
+
this.changeFirstFrameState(RTC_FIRST_FRAME_STATE.LOAD_START);
|
|
6903
|
+
}
|
|
6904
|
+
}, {
|
|
6905
|
+
key: "changeFirstFrameState",
|
|
6906
|
+
value: function changeFirstFrameState(state) {
|
|
6907
|
+
var _ref, _this2 = this;
|
|
6908
|
+
var preIdx = (_ref = this._preState && FIRST_FRAME_STATE_ORDER.indexOf(this._preState)) !== null && _ref !== void 0 ? _ref : -1;
|
|
6909
|
+
var curIdx = FIRST_FRAME_STATE_ORDER.indexOf(state);
|
|
6910
|
+
var elapsed = Date.now() - this._startConnectTs;
|
|
6911
|
+
if (curIdx > preIdx) {
|
|
6912
|
+
FIRST_FRAME_STATE_ORDER.slice(preIdx + 1, curIdx + 1).forEach(function(s) {
|
|
6913
|
+
_this2._state[s] = elapsed;
|
|
6914
|
+
});
|
|
6915
|
+
this._preState = state;
|
|
6916
|
+
}
|
|
6917
|
+
}
|
|
6918
|
+
}, {
|
|
6919
|
+
key: "setIsPreload",
|
|
6920
|
+
value: function setIsPreload(isPreload) {
|
|
6921
|
+
this._extraInfo.is_preload = isPreload;
|
|
6922
|
+
}
|
|
6923
|
+
}, {
|
|
6924
|
+
key: "setFailureReason",
|
|
6925
|
+
value: function setFailureReason(reason) {
|
|
6926
|
+
this._extraInfo.failure_reason = reason;
|
|
6927
|
+
}
|
|
6928
|
+
}, {
|
|
6929
|
+
key: "bindEvents",
|
|
6930
|
+
value: function bindEvents(pc, videoTransceiver, video) {
|
|
6931
|
+
var _this3 = this;
|
|
6932
|
+
this._pc = pc;
|
|
6933
|
+
this._video = video;
|
|
6934
|
+
this._videoTransceiver = videoTransceiver;
|
|
6935
|
+
pc.addEventListener("connectionstatechange", this._handleConnectionStateChange);
|
|
6936
|
+
pc.addEventListener("iceconnectionstatechange", this._handleICEConnectionStateChange);
|
|
6937
|
+
var _ref2 = (videoTransceiver === null || videoTransceiver === void 0 ? void 0 : videoTransceiver.receiver) || {}, transport = _ref2.transport;
|
|
6938
|
+
if (transport) {
|
|
6939
|
+
transport.onstatechange = function() {
|
|
6940
|
+
transport.state === "connected" && _this3.changeFirstFrameState(RTC_FIRST_FRAME_STATE.DTLS_CONNECTED);
|
|
6941
|
+
};
|
|
6942
|
+
}
|
|
6943
|
+
video === null || video === void 0 ? void 0 : video.addEventListener("playing", this._handlePlaying);
|
|
6944
|
+
video === null || video === void 0 ? void 0 : video.addEventListener("canplay", this._handleCanplay);
|
|
6945
|
+
video === null || video === void 0 ? void 0 : video.addEventListener("loadeddata", this._handleLoadeddata);
|
|
6946
|
+
video === null || video === void 0 ? void 0 : video.addEventListener("error", this._handleError);
|
|
6947
|
+
}
|
|
6948
|
+
}, {
|
|
6949
|
+
key: "_watchForFirstVideoFrameRecv",
|
|
6950
|
+
value: function _watchForFirstVideoFrameRecv(videoTransceiver) {
|
|
6951
|
+
var _this4 = this;
|
|
6952
|
+
var hasPacketsReceived = false;
|
|
6953
|
+
var hasFrameReceived = false;
|
|
6954
|
+
var hasFrameDecoded = false;
|
|
6955
|
+
this._cancelWatchForFirstVideoFrameRecv();
|
|
6956
|
+
this._firstVideoFrameInterval = window.setInterval(/* @__PURE__ */ _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee() {
|
|
6957
|
+
var receiver, reports, inboundRtpStats;
|
|
6958
|
+
return _regeneratorRuntime$1().wrap(function _callee$(_context) {
|
|
6959
|
+
while (1)
|
|
6960
|
+
switch (_context.prev = _context.next) {
|
|
6961
|
+
case 0:
|
|
6962
|
+
receiver = videoTransceiver.receiver;
|
|
6963
|
+
_context.next = 3;
|
|
6964
|
+
return receiver.getStats();
|
|
6965
|
+
case 3:
|
|
6966
|
+
reports = _context.sent;
|
|
6967
|
+
reports.forEach(function(report) {
|
|
6968
|
+
if (report.type === "inbound-rtp") {
|
|
6969
|
+
inboundRtpStats = report;
|
|
6970
|
+
}
|
|
6971
|
+
});
|
|
6972
|
+
if (!hasPacketsReceived && inboundRtpStats.packetsReceived > 0) {
|
|
6973
|
+
hasPacketsReceived = true;
|
|
6974
|
+
_this4.changeFirstFrameState(RTC_FIRST_FRAME_STATE.FIRST_PACKET_RECV);
|
|
6975
|
+
}
|
|
6976
|
+
if (!hasFrameReceived && inboundRtpStats.framesReceived > 0) {
|
|
6977
|
+
hasFrameReceived = true;
|
|
6978
|
+
_this4.changeFirstFrameState(RTC_FIRST_FRAME_STATE.FIRST_FRAME_RECV);
|
|
6979
|
+
}
|
|
6980
|
+
if (!hasFrameDecoded && inboundRtpStats.framesDecoded > 0) {
|
|
6981
|
+
hasFrameDecoded = true;
|
|
6982
|
+
_this4.changeFirstFrameState(RTC_FIRST_FRAME_STATE.FIRST_FRAME_DECODED);
|
|
6983
|
+
_this4._cancelWatchForFirstVideoFrameRecv();
|
|
6984
|
+
}
|
|
6985
|
+
case 8:
|
|
6986
|
+
case "end":
|
|
6987
|
+
return _context.stop();
|
|
6988
|
+
}
|
|
6989
|
+
}, _callee);
|
|
6990
|
+
})), 200);
|
|
6991
|
+
}
|
|
6992
|
+
}, {
|
|
6993
|
+
key: "_cancelWatchForFirstVideoFrameRecv",
|
|
6994
|
+
value: function _cancelWatchForFirstVideoFrameRecv() {
|
|
6995
|
+
if (this._firstVideoFrameInterval) {
|
|
6996
|
+
window.clearInterval(this._firstVideoFrameInterval);
|
|
6997
|
+
this._firstVideoFrameInterval = null;
|
|
6998
|
+
}
|
|
6999
|
+
}
|
|
7000
|
+
}, {
|
|
7001
|
+
key: "_getTransportInfo",
|
|
7002
|
+
value: function() {
|
|
7003
|
+
var _getTransportInfo2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee2() {
|
|
7004
|
+
var _this$_videoTransceiv, _this$_videoTransceiv2;
|
|
7005
|
+
var reports, candidatePairStats, localCandidateStats, remoteCandidateStats;
|
|
7006
|
+
return _regeneratorRuntime$1().wrap(function _callee2$(_context2) {
|
|
7007
|
+
while (1)
|
|
7008
|
+
switch (_context2.prev = _context2.next) {
|
|
7009
|
+
case 0:
|
|
7010
|
+
_context2.next = 2;
|
|
7011
|
+
return (_this$_videoTransceiv = this._videoTransceiver) === null || _this$_videoTransceiv === void 0 ? void 0 : (_this$_videoTransceiv2 = _this$_videoTransceiv.receiver) === null || _this$_videoTransceiv2 === void 0 ? void 0 : _this$_videoTransceiv2.getStats();
|
|
7012
|
+
case 2:
|
|
7013
|
+
reports = _context2.sent;
|
|
7014
|
+
reports === null || reports === void 0 ? void 0 : reports.forEach(function(report) {
|
|
7015
|
+
if (report.type === "candidate-pair") {
|
|
7016
|
+
candidatePairStats = report;
|
|
7017
|
+
localCandidateStats = reports.get(report.localCandidateId);
|
|
7018
|
+
remoteCandidateStats = reports.get(report.remoteCandidateId);
|
|
7019
|
+
}
|
|
7020
|
+
});
|
|
7021
|
+
if (remoteCandidateStats) {
|
|
7022
|
+
this._extraInfo.remote_ip = remoteCandidateStats.ip || remoteCandidateStats.address;
|
|
7023
|
+
this._extraInfo.remote_port = remoteCandidateStats.port;
|
|
7024
|
+
this._extraInfo.remote_candidate_type = remoteCandidateStats.candidateType;
|
|
7025
|
+
this._extraInfo.protocol = remoteCandidateStats.protocol;
|
|
7026
|
+
}
|
|
7027
|
+
if (localCandidateStats) {
|
|
7028
|
+
this._extraInfo.local_ip = localCandidateStats.ip || localCandidateStats.address;
|
|
7029
|
+
this._extraInfo.local_port = localCandidateStats.port;
|
|
7030
|
+
this._extraInfo.local_candidate_type = localCandidateStats.candidateType;
|
|
7031
|
+
}
|
|
7032
|
+
if (candidatePairStats) {
|
|
7033
|
+
this._extraInfo.rtt = candidatePairStats.currentRoundTripTime;
|
|
7034
|
+
this._extraInfo.stun_requests_sent = candidatePairStats.requestsSent;
|
|
7035
|
+
this._extraInfo.stun_requests_received = candidatePairStats.requestsReceived;
|
|
7036
|
+
this._extraInfo.stun_responses_sent = candidatePairStats.responsesSent;
|
|
7037
|
+
this._extraInfo.stun_responses_received = candidatePairStats.responsesReceived;
|
|
7038
|
+
}
|
|
7039
|
+
case 7:
|
|
7040
|
+
case "end":
|
|
7041
|
+
return _context2.stop();
|
|
7042
|
+
}
|
|
7043
|
+
}, _callee2, this);
|
|
7044
|
+
}));
|
|
7045
|
+
function _getTransportInfo() {
|
|
7046
|
+
return _getTransportInfo2.apply(this, arguments);
|
|
7047
|
+
}
|
|
7048
|
+
return _getTransportInfo;
|
|
7049
|
+
}()
|
|
7050
|
+
}, {
|
|
7051
|
+
key: "reset",
|
|
7052
|
+
value: function() {
|
|
7053
|
+
var _reset = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee3() {
|
|
7054
|
+
var _this$_video, _this$_video2, _this$_video3, _this$_video4, _this$_pc3, _this$_pc4;
|
|
7055
|
+
return _regeneratorRuntime$1().wrap(function _callee3$(_context3) {
|
|
7056
|
+
while (1)
|
|
7057
|
+
switch (_context3.prev = _context3.next) {
|
|
7058
|
+
case 0:
|
|
7059
|
+
if (!(Object.keys(this._state).length > 0)) {
|
|
7060
|
+
_context3.next = 4;
|
|
7061
|
+
break;
|
|
7062
|
+
}
|
|
7063
|
+
_context3.next = 3;
|
|
7064
|
+
return this._getTransportInfo();
|
|
7065
|
+
case 3:
|
|
7066
|
+
this._emitFirstFrameState(this._state, this._extraInfo);
|
|
7067
|
+
case 4:
|
|
7068
|
+
this._preState = null;
|
|
7069
|
+
this._extraInfo = {
|
|
7070
|
+
is_preload: false
|
|
7071
|
+
};
|
|
7072
|
+
this._state = {};
|
|
7073
|
+
(_this$_video = this._video) === null || _this$_video === void 0 ? void 0 : _this$_video.removeEventListener("playing", this._handlePlaying);
|
|
7074
|
+
(_this$_video2 = this._video) === null || _this$_video2 === void 0 ? void 0 : _this$_video2.removeEventListener("canplay", this._handleCanplay);
|
|
7075
|
+
(_this$_video3 = this._video) === null || _this$_video3 === void 0 ? void 0 : _this$_video3.removeEventListener("loadeddata", this._handleLoadeddata);
|
|
7076
|
+
(_this$_video4 = this._video) === null || _this$_video4 === void 0 ? void 0 : _this$_video4.removeEventListener("error", this._handleError);
|
|
7077
|
+
(_this$_pc3 = this._pc) === null || _this$_pc3 === void 0 ? void 0 : _this$_pc3.removeEventListener("connectionstatechange", this._handleConnectionStateChange);
|
|
7078
|
+
(_this$_pc4 = this._pc) === null || _this$_pc4 === void 0 ? void 0 : _this$_pc4.removeEventListener("iceconnectionstatechange", this._handleICEConnectionStateChange);
|
|
7079
|
+
this._cancelWatchForFirstVideoFrameRecv();
|
|
7080
|
+
this._pc = null;
|
|
7081
|
+
this._video = null;
|
|
7082
|
+
this._videoTransceiver = null;
|
|
7083
|
+
case 17:
|
|
7084
|
+
case "end":
|
|
7085
|
+
return _context3.stop();
|
|
7086
|
+
}
|
|
7087
|
+
}, _callee3, this);
|
|
7088
|
+
}));
|
|
7089
|
+
function reset() {
|
|
7090
|
+
return _reset.apply(this, arguments);
|
|
7091
|
+
}
|
|
7092
|
+
return reset;
|
|
7093
|
+
}()
|
|
7094
|
+
}]);
|
|
7095
|
+
return FirstFrameObserver2;
|
|
7096
|
+
}();
|
|
6760
7097
|
function changeNumberInRange(source, min, max, delta) {
|
|
6761
7098
|
var target = source + delta;
|
|
6762
7099
|
if (target > max) {
|
|
@@ -6767,6 +7104,59 @@
|
|
|
6767
7104
|
function isHarmonyOS() {
|
|
6768
7105
|
return /(HarmonyOS|OpenHarmony|ArkWeb)/i.test(navigator.userAgent);
|
|
6769
7106
|
}
|
|
7107
|
+
function compareURL(url1, url2) {
|
|
7108
|
+
var queryKeys = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : [];
|
|
7109
|
+
if (typeof url1 !== "string" || typeof url2 !== "string") {
|
|
7110
|
+
return false;
|
|
7111
|
+
}
|
|
7112
|
+
if (!url1.includes("://")) {
|
|
7113
|
+
url1 = window.location.protocol + "//" + url1;
|
|
7114
|
+
}
|
|
7115
|
+
if (!url2.includes("://")) {
|
|
7116
|
+
url2 = window.location.protocol + "//" + url2;
|
|
7117
|
+
}
|
|
7118
|
+
var url1Obj;
|
|
7119
|
+
var url2Obj;
|
|
7120
|
+
try {
|
|
7121
|
+
url1Obj = new URL(url1);
|
|
7122
|
+
url2Obj = new URL(url2);
|
|
7123
|
+
} catch (e) {
|
|
7124
|
+
return false;
|
|
7125
|
+
}
|
|
7126
|
+
if (url1Obj.host + url1Obj.pathname !== url2Obj.host + url2Obj.pathname) {
|
|
7127
|
+
return false;
|
|
7128
|
+
}
|
|
7129
|
+
var _iterator = _createForOfIteratorHelper$1(queryKeys), _step;
|
|
7130
|
+
try {
|
|
7131
|
+
for (_iterator.s(); !(_step = _iterator.n()).done; ) {
|
|
7132
|
+
var key = _step.value;
|
|
7133
|
+
if (url1Obj.searchParams.get(key) !== url2Obj.searchParams.get(key)) {
|
|
7134
|
+
return false;
|
|
7135
|
+
}
|
|
7136
|
+
}
|
|
7137
|
+
} catch (err) {
|
|
7138
|
+
_iterator.e(err);
|
|
7139
|
+
} finally {
|
|
7140
|
+
_iterator.f();
|
|
7141
|
+
}
|
|
7142
|
+
return true;
|
|
7143
|
+
}
|
|
7144
|
+
function addUrlParams(url, params) {
|
|
7145
|
+
if (!params || Object.keys(params).length === 0) {
|
|
7146
|
+
return url;
|
|
7147
|
+
}
|
|
7148
|
+
var urlParams = url.includes("?") ? new URLSearchParams(url.split("?")[1]) : new URLSearchParams();
|
|
7149
|
+
Object.keys(params).forEach(function(key) {
|
|
7150
|
+
urlParams.set(key, params[key]);
|
|
7151
|
+
});
|
|
7152
|
+
return url.split("?")[0] + "?" + urlParams.toString();
|
|
7153
|
+
}
|
|
7154
|
+
function isHeyTapBrowser() {
|
|
7155
|
+
return /(HeyTapBrowser)/i.test(navigator.userAgent);
|
|
7156
|
+
}
|
|
7157
|
+
function isVivoBrowser() {
|
|
7158
|
+
return /(VivoBrowser)/i.test(navigator.userAgent);
|
|
7159
|
+
}
|
|
6770
7160
|
var logger = new Logger("rts");
|
|
6771
7161
|
var Rts = /* @__PURE__ */ function(_EventEmitter) {
|
|
6772
7162
|
_inherits$1(Rts2, _EventEmitter);
|
|
@@ -6775,31 +7165,28 @@
|
|
|
6775
7165
|
var _this;
|
|
6776
7166
|
_classCallCheck$3(this, Rts2);
|
|
6777
7167
|
_this = _super.call(this);
|
|
6778
|
-
|
|
6779
|
-
|
|
6780
|
-
|
|
6781
|
-
|
|
6782
|
-
|
|
6783
|
-
|
|
6784
|
-
|
|
6785
|
-
|
|
6786
|
-
|
|
6787
|
-
|
|
6788
|
-
|
|
6789
|
-
|
|
6790
|
-
|
|
6791
|
-
|
|
6792
|
-
|
|
6793
|
-
|
|
6794
|
-
|
|
6795
|
-
|
|
6796
|
-
|
|
6797
|
-
|
|
6798
|
-
|
|
6799
|
-
|
|
6800
|
-
_defineProperty$2(_assertThisInitialized$1(_this), "_networkQualityResult", []);
|
|
6801
|
-
_defineProperty$2(_assertThisInitialized$1(_this), "_peerStateTimer", null);
|
|
6802
|
-
_defineProperty$2(_assertThisInitialized$1(_this), "_checkStatsError", /* @__PURE__ */ _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee2() {
|
|
7168
|
+
_this._url = "";
|
|
7169
|
+
_this._pc = null;
|
|
7170
|
+
_this._audioTransceicer = null;
|
|
7171
|
+
_this._videoTransceicer = null;
|
|
7172
|
+
_this._mediaStream = null;
|
|
7173
|
+
_this._lastMediaStream = null;
|
|
7174
|
+
_this._loader = null;
|
|
7175
|
+
_this._networkEvaluate = null;
|
|
7176
|
+
_this._retry = 0;
|
|
7177
|
+
_this._player = null;
|
|
7178
|
+
_this._waitingTimer = 0;
|
|
7179
|
+
_this._rctConnectStartTs = 0;
|
|
7180
|
+
_this._isReplacing = false;
|
|
7181
|
+
_this._firstFrameObserver = new FirstFrameObserver(_this._emitFirstFrameState.bind(_assertThisInitialized$1(_this)));
|
|
7182
|
+
_this._audio = null;
|
|
7183
|
+
_this._video = null;
|
|
7184
|
+
_this._preAudioStats = null;
|
|
7185
|
+
_this._preVideoStats = null;
|
|
7186
|
+
_this._rtcReportTimer = null;
|
|
7187
|
+
_this._networkQualityResult = [];
|
|
7188
|
+
_this._videoJitterBufferDelay = 0;
|
|
7189
|
+
_this._checkStatsError = /* @__PURE__ */ _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee2() {
|
|
6803
7190
|
return _regeneratorRuntime$1().wrap(function _callee2$(_context2) {
|
|
6804
7191
|
while (1)
|
|
6805
7192
|
switch (_context2.prev = _context2.next) {
|
|
@@ -6840,12 +7227,16 @@
|
|
|
6840
7227
|
return _context2.stop();
|
|
6841
7228
|
}
|
|
6842
7229
|
}, _callee2);
|
|
6843
|
-
}))
|
|
6844
|
-
|
|
7230
|
+
}));
|
|
7231
|
+
_this._onTrack = function(e) {
|
|
6845
7232
|
logger.log("addTrack: ", e.track, e.streams);
|
|
6846
|
-
|
|
6847
|
-
|
|
6848
|
-
|
|
7233
|
+
if (e.track.kind === "audio") {
|
|
7234
|
+
_this._audio = e.track;
|
|
7235
|
+
} else {
|
|
7236
|
+
_this._video = e.track;
|
|
7237
|
+
}
|
|
7238
|
+
};
|
|
7239
|
+
_this._mockWaitingByTimeupdate = function() {
|
|
6849
7240
|
var _this$_pc, _this$_pc2;
|
|
6850
7241
|
if (!(((_this$_pc = _this._pc) === null || _this$_pc === void 0 ? void 0 : _this$_pc.connectionState) === "connected" || ((_this$_pc2 = _this._pc) === null || _this$_pc2 === void 0 ? void 0 : _this$_pc2.iceConnectionState) === "connected"))
|
|
6851
7242
|
return;
|
|
@@ -6856,8 +7247,8 @@
|
|
|
6856
7247
|
return;
|
|
6857
7248
|
_this.emit("waiting");
|
|
6858
7249
|
}, _this._opts.stallInterval);
|
|
6859
|
-
}
|
|
6860
|
-
|
|
7250
|
+
};
|
|
7251
|
+
_this._onLoadedData = function() {
|
|
6861
7252
|
logger.log("loadeddata emit");
|
|
6862
7253
|
_this.getStatsSnapshoot().then(function(snap) {
|
|
6863
7254
|
_this.emit(EVENT.METADATA_PARSED, {
|
|
@@ -6871,19 +7262,15 @@
|
|
|
6871
7262
|
meta: snap.audio
|
|
6872
7263
|
});
|
|
6873
7264
|
});
|
|
6874
|
-
}
|
|
6875
|
-
|
|
7265
|
+
};
|
|
7266
|
+
_this._setDelay = function(delayHint) {
|
|
6876
7267
|
if (_this._opts.progressiveSetDelay) {
|
|
6877
7268
|
_this._startSetDelayLoop(delayHint);
|
|
6878
7269
|
} else {
|
|
6879
7270
|
var _this$_audioTransceic2;
|
|
6880
|
-
var key = [
|
|
6881
|
-
"playoutDelayHint",
|
|
6882
|
-
"jitterBufferDelayHint",
|
|
6883
|
-
"jitterBufferTarget"
|
|
6884
|
-
].find(function(key2) {
|
|
7271
|
+
var key = ["playoutDelayHint", "jitterBufferDelayHint", "jitterBufferTarget"].find(function(key2) {
|
|
6885
7272
|
var _this$_audioTransceic, _this$_videoTransceic;
|
|
6886
|
-
return key2 in ((_this$_audioTransceic = _this._audioTransceicer) === null || _this$_audioTransceic === void 0 ? void 0 : _this$_audioTransceic.receiver) && key2 in ((_this$_videoTransceic = _this._videoTransceicer) === null || _this$_videoTransceic === void 0 ? void 0 : _this$_videoTransceic.receiver);
|
|
7273
|
+
return key2 in (((_this$_audioTransceic = _this._audioTransceicer) === null || _this$_audioTransceic === void 0 ? void 0 : _this$_audioTransceic.receiver) || {}) && key2 in (((_this$_videoTransceic = _this._videoTransceicer) === null || _this$_videoTransceic === void 0 ? void 0 : _this$_videoTransceic.receiver) || {});
|
|
6887
7274
|
});
|
|
6888
7275
|
if (!key)
|
|
6889
7276
|
return;
|
|
@@ -6893,24 +7280,19 @@
|
|
|
6893
7280
|
_this._audioTransceicer.receiver[key] = delayHint;
|
|
6894
7281
|
_this._videoTransceicer.receiver[key] = delayHint;
|
|
6895
7282
|
}
|
|
6896
|
-
}
|
|
6897
|
-
|
|
6898
|
-
|
|
6899
|
-
|
|
6900
|
-
_defineProperty$2(_assertThisInitialized$1(_this), "_startSetDelayLoop", /* @__PURE__ */ function() {
|
|
7283
|
+
};
|
|
7284
|
+
_this._targetDelayHint = null;
|
|
7285
|
+
_this._setDelayError = null;
|
|
7286
|
+
_this._startSetDelayLoop = /* @__PURE__ */ function() {
|
|
6901
7287
|
var _ref3 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee4(delayHint) {
|
|
6902
7288
|
var key, preAudioStats, preVideoStats, _this$_opts$adaptiveJ, loopInterval, maxAvSyncDelay, maxJitterBufferDiff, maxStep, avDiffTooMuchCount;
|
|
6903
7289
|
return _regeneratorRuntime$1().wrap(function _callee4$(_context4) {
|
|
6904
7290
|
while (1)
|
|
6905
7291
|
switch (_context4.prev = _context4.next) {
|
|
6906
7292
|
case 0:
|
|
6907
|
-
key = [
|
|
6908
|
-
"playoutDelayHint",
|
|
6909
|
-
"jitterBufferDelayHint",
|
|
6910
|
-
"jitterBufferTarget"
|
|
6911
|
-
].find(function(key2) {
|
|
7293
|
+
key = ["playoutDelayHint", "jitterBufferDelayHint", "jitterBufferTarget"].find(function(key2) {
|
|
6912
7294
|
var _this$_audioTransceic3, _this$_videoTransceic2;
|
|
6913
|
-
return key2 in ((_this$_audioTransceic3 = _this._audioTransceicer) === null || _this$_audioTransceic3 === void 0 ? void 0 : _this$_audioTransceic3.receiver) && key2 in ((_this$_videoTransceic2 = _this._videoTransceicer) === null || _this$_videoTransceic2 === void 0 ? void 0 : _this$_videoTransceic2.receiver);
|
|
7295
|
+
return key2 in (((_this$_audioTransceic3 = _this._audioTransceicer) === null || _this$_audioTransceic3 === void 0 ? void 0 : _this$_audioTransceic3.receiver) || {}) && key2 in (((_this$_videoTransceic2 = _this._videoTransceicer) === null || _this$_videoTransceic2 === void 0 ? void 0 : _this$_videoTransceic2.receiver) || {});
|
|
6914
7296
|
});
|
|
6915
7297
|
if (key) {
|
|
6916
7298
|
_context4.next = 3;
|
|
@@ -6925,13 +7307,14 @@
|
|
|
6925
7307
|
}
|
|
6926
7308
|
return _context4.abrupt("return");
|
|
6927
7309
|
case 6:
|
|
7310
|
+
logger.log("_startSetDelayLoop()", "invoked, delayHint: ".concat(delayHint));
|
|
6928
7311
|
_this._targetDelayHint = delayHint;
|
|
6929
7312
|
if (!_this._setDelayTimer) {
|
|
6930
|
-
_context4.next =
|
|
7313
|
+
_context4.next = 10;
|
|
6931
7314
|
break;
|
|
6932
7315
|
}
|
|
6933
7316
|
return _context4.abrupt("return");
|
|
6934
|
-
case
|
|
7317
|
+
case 10:
|
|
6935
7318
|
preAudioStats = null;
|
|
6936
7319
|
preVideoStats = null;
|
|
6937
7320
|
_this$_opts$adaptiveJ = _this._opts.adaptiveJitterBuffer, loopInterval = _this$_opts$adaptiveJ.loopInterval, maxAvSyncDelay = _this$_opts$adaptiveJ.maxAvSyncDelay, maxJitterBufferDiff = _this$_opts$adaptiveJ.maxJitterBufferDiff, maxStep = _this$_opts$adaptiveJ.maxStep;
|
|
@@ -6958,7 +7341,7 @@
|
|
|
6958
7341
|
}
|
|
6959
7342
|
return _context3.abrupt("return");
|
|
6960
7343
|
case 8:
|
|
6961
|
-
targetDelayMs = _this._targetDelayHint * 1e3;
|
|
7344
|
+
targetDelayMs = (_this._targetDelayHint || 0) * 1e3;
|
|
6962
7345
|
currentTargetDelayMs = currentTargetDelay * 1e3;
|
|
6963
7346
|
_context3.next = 12;
|
|
6964
7347
|
return Promise.all([getRecvAudioStats(_this._audioTransceicer.receiver.getStats()), getRecvVideoStats(_this._videoTransceicer.receiver.getStats())]);
|
|
@@ -6987,7 +7370,7 @@
|
|
|
6987
7370
|
break;
|
|
6988
7371
|
}
|
|
6989
7372
|
if (avDiffTooMuchCount++ > 8 && currentVideoDelay > currentAudioDelay) {
|
|
6990
|
-
_this._audioTransceicer.receiver[key] = Math.min(currentVideoDelay / 1e3, _this._targetDelayHint);
|
|
7373
|
+
_this._audioTransceicer.receiver[key] = Math.min(currentVideoDelay / 1e3, _this._targetDelayHint || 0);
|
|
6991
7374
|
avDiffTooMuchCount = 0;
|
|
6992
7375
|
}
|
|
6993
7376
|
logger.log("av_jb_diff(".concat(currentAudioDelay - currentVideoDelay, "=").concat(currentAudioDelay, "-").concat(currentVideoDelay, ") or av_sync_diff(").concat(av_sync_diff, ") too much, skip setting"));
|
|
@@ -7022,7 +7405,7 @@
|
|
|
7022
7405
|
}
|
|
7023
7406
|
}, _callee3, null, [[0, 40]]);
|
|
7024
7407
|
})), loopInterval);
|
|
7025
|
-
case
|
|
7408
|
+
case 15:
|
|
7026
7409
|
case "end":
|
|
7027
7410
|
return _context4.stop();
|
|
7028
7411
|
}
|
|
@@ -7031,26 +7414,31 @@
|
|
|
7031
7414
|
return function(_x) {
|
|
7032
7415
|
return _ref3.apply(this, arguments);
|
|
7033
7416
|
};
|
|
7034
|
-
}()
|
|
7035
|
-
|
|
7417
|
+
}();
|
|
7418
|
+
_this._getDelay = function() {
|
|
7036
7419
|
try {
|
|
7420
|
+
var _this$_audioTransceic6;
|
|
7037
7421
|
var key = ["playoutDelayHint", "jitterBufferDelayHint", "jitterBufferTarget"].find(function(key2) {
|
|
7038
|
-
|
|
7422
|
+
var _this$_videoTransceic4, _this$_audioTransceic5;
|
|
7423
|
+
return key2 in (((_this$_videoTransceic4 = _this._videoTransceicer) === null || _this$_videoTransceic4 === void 0 ? void 0 : _this$_videoTransceic4.receiver) || {}) && key2 in (((_this$_audioTransceic5 = _this._audioTransceicer) === null || _this$_audioTransceic5 === void 0 ? void 0 : _this$_audioTransceic5.receiver) || {});
|
|
7039
7424
|
});
|
|
7040
|
-
|
|
7425
|
+
if (!key)
|
|
7426
|
+
return;
|
|
7427
|
+
return (_this$_audioTransceic6 = _this._audioTransceicer) === null || _this$_audioTransceic6 === void 0 ? void 0 : _this$_audioTransceic6.receiver[key];
|
|
7041
7428
|
} catch (error) {
|
|
7042
7429
|
logger.error("get delay error");
|
|
7043
7430
|
}
|
|
7044
|
-
}
|
|
7045
|
-
|
|
7431
|
+
};
|
|
7432
|
+
_this._onLoaderRetry = function(error, retryTime) {
|
|
7433
|
+
console.log(error, "retryTime", retryTime);
|
|
7046
7434
|
_this.emit(EVENT.LOAD_RETRY, {
|
|
7047
7435
|
error: StreamingError.network(error),
|
|
7048
7436
|
retryTime
|
|
7049
7437
|
});
|
|
7050
|
-
}
|
|
7438
|
+
};
|
|
7051
7439
|
_this._opts = getOption(opts);
|
|
7052
7440
|
_this._media = _this._opts.media;
|
|
7053
|
-
_this._player = _this._opts.player;
|
|
7441
|
+
_this._player = _this._opts.player || null;
|
|
7054
7442
|
_this._loader = new NetLoader(_objectSpread2$2(_objectSpread2$2({}, opts.fetchOptions), {}, {
|
|
7055
7443
|
responseType: "json",
|
|
7056
7444
|
method: "POST",
|
|
@@ -7060,9 +7448,12 @@
|
|
|
7060
7448
|
onRetryError: _this._onLoaderRetry,
|
|
7061
7449
|
logger
|
|
7062
7450
|
}));
|
|
7063
|
-
_this._retry = _this._opts.retryCount;
|
|
7451
|
+
_this._retry = _this._opts.retryCount || 0;
|
|
7452
|
+
_this._preloadPromise = _this._opts.preloadPromise;
|
|
7064
7453
|
_this._bindMediaEvent();
|
|
7454
|
+
logger.log("constructor()", opts);
|
|
7065
7455
|
_this._changeVolumeInHarmonyWorkaround();
|
|
7456
|
+
_this._mutedBeforePlayingWorkaround();
|
|
7066
7457
|
if (_this._opts.mediaStream && _this._opts.seamlesslyReload) {
|
|
7067
7458
|
_this._lastMediaStream = _this._opts.mediaStream;
|
|
7068
7459
|
}
|
|
@@ -7083,6 +7474,11 @@
|
|
|
7083
7474
|
get: function get() {
|
|
7084
7475
|
return this._video;
|
|
7085
7476
|
}
|
|
7477
|
+
}, {
|
|
7478
|
+
key: "getJitterBufferDelay",
|
|
7479
|
+
value: function getJitterBufferDelay() {
|
|
7480
|
+
return this._videoJitterBufferDelay;
|
|
7481
|
+
}
|
|
7086
7482
|
}, {
|
|
7087
7483
|
key: "loader",
|
|
7088
7484
|
get: function get() {
|
|
@@ -7096,9 +7492,24 @@
|
|
|
7096
7492
|
}
|
|
7097
7493
|
}, {
|
|
7098
7494
|
key: "getStats",
|
|
7099
|
-
value: function
|
|
7100
|
-
|
|
7101
|
-
|
|
7495
|
+
value: function() {
|
|
7496
|
+
var _getStats22 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee5() {
|
|
7497
|
+
return _regeneratorRuntime$1().wrap(function _callee5$(_context5) {
|
|
7498
|
+
while (1)
|
|
7499
|
+
switch (_context5.prev = _context5.next) {
|
|
7500
|
+
case 0:
|
|
7501
|
+
return _context5.abrupt("return", getStats(this._pc));
|
|
7502
|
+
case 1:
|
|
7503
|
+
case "end":
|
|
7504
|
+
return _context5.stop();
|
|
7505
|
+
}
|
|
7506
|
+
}, _callee5, this);
|
|
7507
|
+
}));
|
|
7508
|
+
function getStats$1() {
|
|
7509
|
+
return _getStats22.apply(this, arguments);
|
|
7510
|
+
}
|
|
7511
|
+
return getStats$1;
|
|
7512
|
+
}()
|
|
7102
7513
|
}, {
|
|
7103
7514
|
key: "getStatsSnapshoot",
|
|
7104
7515
|
value: function getStatsSnapshoot$1() {
|
|
@@ -7109,49 +7520,104 @@
|
|
|
7109
7520
|
}, {
|
|
7110
7521
|
key: "load",
|
|
7111
7522
|
value: function() {
|
|
7112
|
-
var _load = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function
|
|
7523
|
+
var _load = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee6(url) {
|
|
7113
7524
|
var _this2 = this;
|
|
7114
|
-
var
|
|
7115
|
-
return _regeneratorRuntime$1().wrap(function
|
|
7525
|
+
var lastPc, answerSdp, errorStr, preloadPromise, info, encodedTransformSupported;
|
|
7526
|
+
return _regeneratorRuntime$1().wrap(function _callee6$(_context6) {
|
|
7116
7527
|
while (1)
|
|
7117
|
-
switch (
|
|
7528
|
+
switch (_context6.prev = _context6.next) {
|
|
7118
7529
|
case 0:
|
|
7530
|
+
logger.log("load()", 'invoked, url: "'.concat(url, '"'));
|
|
7119
7531
|
this._disconnect();
|
|
7120
7532
|
this._url = url;
|
|
7121
|
-
|
|
7533
|
+
lastPc = this._pc;
|
|
7122
7534
|
if (!this._opts.hackCreateOfferIssue) {
|
|
7123
|
-
|
|
7535
|
+
_context6.next = 7;
|
|
7124
7536
|
break;
|
|
7125
7537
|
}
|
|
7126
|
-
|
|
7538
|
+
_context6.next = 7;
|
|
7127
7539
|
return this._createEmptyPeer();
|
|
7128
|
-
case
|
|
7129
|
-
|
|
7130
|
-
|
|
7131
|
-
|
|
7132
|
-
|
|
7133
|
-
|
|
7540
|
+
case 7:
|
|
7541
|
+
_context6.prev = 7;
|
|
7542
|
+
this._firstFrameObserver.start();
|
|
7543
|
+
if (!this._preloadPromise) {
|
|
7544
|
+
_context6.next = 39;
|
|
7545
|
+
break;
|
|
7546
|
+
}
|
|
7547
|
+
logger.log("load()", "in preload process...");
|
|
7548
|
+
_context6.prev = 11;
|
|
7549
|
+
this._firstFrameObserver.setIsPreload(true);
|
|
7550
|
+
if (compareURL(this._url, this._preloadPromise.url, ["tabr_start_bitrate"])) {
|
|
7551
|
+
_context6.next = 17;
|
|
7552
|
+
break;
|
|
7134
7553
|
}
|
|
7554
|
+
errorStr = "preload url not match, current url: ".concat(this._url, ", preload url: ").concat(this._preloadPromise.url);
|
|
7555
|
+
delete this._preloadPromise;
|
|
7556
|
+
throw new Error(errorStr);
|
|
7557
|
+
case 17:
|
|
7558
|
+
preloadPromise = this._preloadPromise.promise;
|
|
7559
|
+
delete this._preloadPromise;
|
|
7560
|
+
_context6.next = 21;
|
|
7561
|
+
return preloadPromise;
|
|
7562
|
+
case 21:
|
|
7563
|
+
info = _context6.sent;
|
|
7564
|
+
if (!(info.pc.signalingState !== "have-local-offer")) {
|
|
7565
|
+
_context6.next = 24;
|
|
7566
|
+
break;
|
|
7567
|
+
}
|
|
7568
|
+
throw new Error('pc.signalingState not equal "have-local-offer", current state is '.concat(info.pc.signalingState));
|
|
7569
|
+
case 24:
|
|
7570
|
+
this._pc = info.pc;
|
|
7571
|
+
answerSdp = info.answerSdp;
|
|
7572
|
+
this._videoTransceicer = info.videoTransceiver;
|
|
7573
|
+
this._audioTransceicer = info.audioTransceiver;
|
|
7574
|
+
if (this._opts.enableSei) {
|
|
7575
|
+
this.initVideoEncodedTransform();
|
|
7576
|
+
this.initAudioEncodedTransform();
|
|
7577
|
+
}
|
|
7578
|
+
_context6.next = 37;
|
|
7579
|
+
break;
|
|
7580
|
+
case 31:
|
|
7581
|
+
_context6.prev = 31;
|
|
7582
|
+
_context6.t0 = _context6["catch"](11);
|
|
7583
|
+
logger.warn("load()", "preload failed, ".concat(_context6.t0.message || _context6.t0.toString()));
|
|
7584
|
+
this._firstFrameObserver.setFailureReason(_context6.t0.message || _context6.t0.toString());
|
|
7585
|
+
this.load(url);
|
|
7586
|
+
return _context6.abrupt("return");
|
|
7587
|
+
case 37:
|
|
7588
|
+
_context6.next = 45;
|
|
7589
|
+
break;
|
|
7590
|
+
case 39:
|
|
7591
|
+
encodedTransformSupported = isLegacyEncodedTransformSupported();
|
|
7592
|
+
logger.log("load()", "isLegacyEncodedTransformSupported: ".concat(encodedTransformSupported));
|
|
7135
7593
|
this._pc = new RTCPeerConnection({
|
|
7136
7594
|
encodedInsertableStreams: encodedTransformSupported && this._opts.enableSei ? true : void 0
|
|
7137
7595
|
});
|
|
7138
|
-
|
|
7139
|
-
|
|
7140
|
-
|
|
7141
|
-
|
|
7142
|
-
|
|
7596
|
+
_context6.next = 44;
|
|
7597
|
+
return this._getAnswerSdp(this._pc);
|
|
7598
|
+
case 44:
|
|
7599
|
+
answerSdp = _context6.sent;
|
|
7600
|
+
case 45:
|
|
7601
|
+
this._bindRTCEvents(this._pc);
|
|
7602
|
+
_context6.next = 48;
|
|
7603
|
+
return this._handleAnswerSdp(this._pc, answerSdp);
|
|
7604
|
+
case 48:
|
|
7605
|
+
if (lastPc) {
|
|
7606
|
+
lastPc.close();
|
|
7607
|
+
}
|
|
7608
|
+
_context6.next = 54;
|
|
7143
7609
|
break;
|
|
7144
|
-
case
|
|
7145
|
-
|
|
7146
|
-
|
|
7610
|
+
case 51:
|
|
7611
|
+
_context6.prev = 51;
|
|
7612
|
+
_context6.t1 = _context6["catch"](7);
|
|
7147
7613
|
setTimeout(function() {
|
|
7148
|
-
return _this2._emitError(StreamingError.create(ERR.OTHER, null,
|
|
7614
|
+
return _this2._emitError(StreamingError.create(ERR.OTHER, null, _context6.t1));
|
|
7149
7615
|
});
|
|
7150
|
-
case
|
|
7616
|
+
case 54:
|
|
7151
7617
|
case "end":
|
|
7152
|
-
return
|
|
7618
|
+
return _context6.stop();
|
|
7153
7619
|
}
|
|
7154
|
-
},
|
|
7620
|
+
}, _callee6, this, [[7, 51], [11, 31]]);
|
|
7155
7621
|
}));
|
|
7156
7622
|
function load(_x2) {
|
|
7157
7623
|
return _load.apply(this, arguments);
|
|
@@ -7161,13 +7627,13 @@
|
|
|
7161
7627
|
}, {
|
|
7162
7628
|
key: "switchURL",
|
|
7163
7629
|
value: function switchURL(url) {
|
|
7630
|
+
logger.log("switchURL()", 'invoked, url: "'.concat(url, '"'));
|
|
7164
7631
|
this.load(url || this._url);
|
|
7165
7632
|
}
|
|
7166
7633
|
}, {
|
|
7167
7634
|
key: "_bindRTCEvents",
|
|
7168
|
-
value: function _bindRTCEvents() {
|
|
7635
|
+
value: function _bindRTCEvents(pc) {
|
|
7169
7636
|
var _this3 = this;
|
|
7170
|
-
var pc = this._pc;
|
|
7171
7637
|
pc.addEventListener("track", this._onTrack);
|
|
7172
7638
|
pc.addEventListener("connectionstatechange", function() {
|
|
7173
7639
|
logger.warn("onconnectionstatechange:", pc.connectionState);
|
|
@@ -7205,7 +7671,7 @@
|
|
|
7205
7671
|
value: function _handleMediaStream() {
|
|
7206
7672
|
var _this4 = this;
|
|
7207
7673
|
if (this._lastMediaStream) {
|
|
7208
|
-
var _this$
|
|
7674
|
+
var _this$_player2, _this$_player3, _this$_player3$play;
|
|
7209
7675
|
var videoTrack = this._lastMediaStream.getVideoTracks()[0];
|
|
7210
7676
|
var audioTrack = this._lastMediaStream.getAudioTracks()[0];
|
|
7211
7677
|
if (videoTrack) {
|
|
@@ -7218,20 +7684,15 @@
|
|
|
7218
7684
|
this._audio && this._mediaStream.addTrack(this._audio);
|
|
7219
7685
|
this._video && this._mediaStream.addTrack(this._video);
|
|
7220
7686
|
this._isReplacing = true;
|
|
7221
|
-
this._player.pause();
|
|
7222
|
-
(_this$_player$play =
|
|
7687
|
+
(_this$_player2 = this._player) === null || _this$_player2 === void 0 ? void 0 : _this$_player2.pause();
|
|
7688
|
+
(_this$_player3 = this._player) === null || _this$_player3 === void 0 ? void 0 : (_this$_player3$play = _this$_player3.play()) === null || _this$_player3$play === void 0 ? void 0 : _this$_player3$play.finally(function() {
|
|
7223
7689
|
_this4._isReplacing = false;
|
|
7224
7690
|
});
|
|
7225
7691
|
} else {
|
|
7226
7692
|
this._mediaStream = new MediaStream();
|
|
7227
7693
|
this._audio && this._mediaStream.addTrack(this._audio);
|
|
7228
7694
|
this._video && this._mediaStream.addTrack(this._video);
|
|
7229
|
-
this._media.srcObject = this._mediaStream;
|
|
7230
|
-
var req = this._player.play();
|
|
7231
|
-
if (req && req.catch) {
|
|
7232
|
-
req.catch(function(e) {
|
|
7233
|
-
});
|
|
7234
|
-
}
|
|
7695
|
+
this._media && (this._media.srcObject = this._mediaStream);
|
|
7235
7696
|
}
|
|
7236
7697
|
}
|
|
7237
7698
|
}, {
|
|
@@ -7285,21 +7746,22 @@
|
|
|
7285
7746
|
}, {
|
|
7286
7747
|
key: "_bindMediaEvent",
|
|
7287
7748
|
value: function _bindMediaEvent() {
|
|
7288
|
-
|
|
7289
|
-
this._media.addEventListener("
|
|
7749
|
+
var _this$_media, _this$_media2;
|
|
7750
|
+
(_this$_media = this._media) === null || _this$_media === void 0 ? void 0 : _this$_media.addEventListener("timeupdate", this._mockWaitingByTimeupdate);
|
|
7751
|
+
(_this$_media2 = this._media) === null || _this$_media2 === void 0 ? void 0 : _this$_media2.addEventListener("loadeddata", this._onLoadedData);
|
|
7290
7752
|
}
|
|
7291
7753
|
}, {
|
|
7292
|
-
key: "
|
|
7754
|
+
key: "_getAnswerSdp",
|
|
7293
7755
|
value: function() {
|
|
7294
|
-
var
|
|
7295
|
-
var
|
|
7296
|
-
return _regeneratorRuntime$1().wrap(function
|
|
7756
|
+
var _getAnswerSdp2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee7(pc) {
|
|
7757
|
+
var offer, answerSdp, parsed, finnalUrl, _this$_opts, _this$_loader, _this$_opts2, _parsed$media, parseSession, sessionId, reqStart, res, answer, err;
|
|
7758
|
+
return _regeneratorRuntime$1().wrap(function _callee7$(_context7) {
|
|
7297
7759
|
while (1)
|
|
7298
|
-
switch (
|
|
7760
|
+
switch (_context7.prev = _context7.next) {
|
|
7299
7761
|
case 0:
|
|
7300
|
-
|
|
7762
|
+
logger.log("_getAnswerSdp()");
|
|
7301
7763
|
if (!pc.addTransceiver) {
|
|
7302
|
-
|
|
7764
|
+
_context7.next = 11;
|
|
7303
7765
|
break;
|
|
7304
7766
|
}
|
|
7305
7767
|
this._audioTransceicer = pc.addTransceiver("audio", {
|
|
@@ -7308,32 +7770,37 @@
|
|
|
7308
7770
|
this._videoTransceicer = pc.addTransceiver("video", {
|
|
7309
7771
|
direction: "recvonly"
|
|
7310
7772
|
});
|
|
7311
|
-
this._setDelay(this._opts.delayHint);
|
|
7773
|
+
this._setDelay(this._opts.delayHint || null);
|
|
7312
7774
|
if (this._opts.enableSei) {
|
|
7313
7775
|
this.initVideoEncodedTransform();
|
|
7314
7776
|
this.initAudioEncodedTransform();
|
|
7315
7777
|
}
|
|
7316
|
-
|
|
7778
|
+
_context7.next = 8;
|
|
7317
7779
|
return pc.createOffer();
|
|
7318
7780
|
case 8:
|
|
7319
|
-
offer =
|
|
7320
|
-
|
|
7781
|
+
offer = _context7.sent;
|
|
7782
|
+
_context7.next = 14;
|
|
7321
7783
|
break;
|
|
7322
7784
|
case 11:
|
|
7323
|
-
|
|
7785
|
+
_context7.next = 13;
|
|
7324
7786
|
return pc.createOffer({
|
|
7325
7787
|
iceRestart: true,
|
|
7326
7788
|
offerToReceiveAudio: true,
|
|
7327
7789
|
offerToReceiveVideo: true
|
|
7328
7790
|
});
|
|
7329
7791
|
case 13:
|
|
7330
|
-
offer =
|
|
7792
|
+
offer = _context7.sent;
|
|
7331
7793
|
case 14:
|
|
7332
7794
|
if (this._opts.hackCreateOfferIssue) {
|
|
7333
7795
|
this._createEmptyPeer();
|
|
7334
7796
|
}
|
|
7335
|
-
logger.log("local offer");
|
|
7336
|
-
|
|
7797
|
+
logger.log("local offer", offer);
|
|
7798
|
+
if (offer.sdp) {
|
|
7799
|
+
_context7.next = 18;
|
|
7800
|
+
break;
|
|
7801
|
+
}
|
|
7802
|
+
throw new Error("create offer failed");
|
|
7803
|
+
case 18:
|
|
7337
7804
|
parsed = lib.parse(offer.sdp);
|
|
7338
7805
|
parsed.media.filter(function(x) {
|
|
7339
7806
|
return x.type === "audio";
|
|
@@ -7354,62 +7821,71 @@
|
|
|
7354
7821
|
type: "nack"
|
|
7355
7822
|
});
|
|
7356
7823
|
});
|
|
7824
|
+
parsed.media.filter(function(x) {
|
|
7825
|
+
return x.type === "video";
|
|
7826
|
+
}).forEach(function(x) {
|
|
7827
|
+
x.fmtp.forEach(function(x2) {
|
|
7828
|
+
if (x2.config.indexOf("profile-level-id") !== -1) {
|
|
7829
|
+
x2.config = "".concat(x2.config, ";sps-pps-idr-in-keyframe=1");
|
|
7830
|
+
}
|
|
7831
|
+
});
|
|
7832
|
+
});
|
|
7357
7833
|
offer.sdp = lib.write(parsed);
|
|
7358
|
-
logger.log("local offer modified:\n", offer
|
|
7359
|
-
|
|
7834
|
+
logger.log("local offer modified:\n", offer);
|
|
7835
|
+
_context7.next = 25;
|
|
7360
7836
|
return pc.setLocalDescription(offer);
|
|
7361
|
-
case
|
|
7837
|
+
case 25:
|
|
7362
7838
|
finnalUrl = this._url;
|
|
7363
|
-
|
|
7839
|
+
_context7.prev = 26;
|
|
7364
7840
|
if (this._opts.preProcessUrl) {
|
|
7365
7841
|
finnalUrl = this._opts.preProcessUrl(finnalUrl).url;
|
|
7366
7842
|
}
|
|
7367
|
-
|
|
7843
|
+
finnalUrl = addUrlParams(finnalUrl, this._opts.urlParams);
|
|
7844
|
+
this._loader && (this._loader.finnalUrl = finnalUrl);
|
|
7368
7845
|
parseSession = /_?session_id=([^&$]+)/.exec(finnalUrl);
|
|
7369
7846
|
sessionId = parseSession ? parseSession[1] : Date.now() + "666";
|
|
7847
|
+
this._firstFrameObserver.changeFirstFrameState(RTC_FIRST_FRAME_STATE.OFFER_SDP_READY);
|
|
7370
7848
|
this.emit(EVENT.LOAD_START, {
|
|
7371
7849
|
url: finnalUrl,
|
|
7372
7850
|
offersdp: (_this$_opts = this._opts) !== null && _this$_opts !== void 0 && _this$_opts.enableOriginSdpLogger ? offer.sdp : void 0,
|
|
7373
7851
|
sessionId
|
|
7374
7852
|
});
|
|
7375
7853
|
reqStart = Date.now();
|
|
7376
|
-
|
|
7377
|
-
return this._loader.load(finnalUrl, {
|
|
7854
|
+
_context7.next = 37;
|
|
7855
|
+
return (_this$_loader = this._loader) === null || _this$_loader === void 0 ? void 0 : _this$_loader.load(finnalUrl, {
|
|
7378
7856
|
body: JSON.stringify({
|
|
7379
7857
|
sessionId,
|
|
7380
7858
|
version: "1.0-html",
|
|
7381
7859
|
localSdp: offer
|
|
7382
7860
|
})
|
|
7383
7861
|
});
|
|
7384
|
-
case
|
|
7385
|
-
res =
|
|
7862
|
+
case 37:
|
|
7863
|
+
res = _context7.sent;
|
|
7386
7864
|
this.emit(EVENT.LOAD_RESPONSE_HEADERS, {
|
|
7387
7865
|
headers: res.response.headers
|
|
7388
7866
|
});
|
|
7389
7867
|
answer = res === null || res === void 0 ? void 0 : res.data;
|
|
7390
7868
|
if (!((answer === null || answer === void 0 ? void 0 : answer.code) === 404 || (answer === null || answer === void 0 ? void 0 : answer.code) === 403)) {
|
|
7391
|
-
|
|
7869
|
+
_context7.next = 45;
|
|
7392
7870
|
break;
|
|
7393
7871
|
}
|
|
7394
7872
|
err = StreamingError.create(answer.code === 404 ? ERR.NETWORK_NOTFOUND : ERR.NETWORK_FORBIDDEN, null, answer);
|
|
7395
7873
|
err.errorType = ERR.NETWORK;
|
|
7396
7874
|
this._emitError(err);
|
|
7397
|
-
return
|
|
7398
|
-
case
|
|
7875
|
+
return _context7.abrupt("return");
|
|
7876
|
+
case 45:
|
|
7399
7877
|
if (!((answer === null || answer === void 0 ? void 0 : answer.code) !== 200)) {
|
|
7400
|
-
|
|
7878
|
+
_context7.next = 47;
|
|
7401
7879
|
break;
|
|
7402
7880
|
}
|
|
7403
7881
|
throw new Error("code: ".concat(answer === null || answer === void 0 ? void 0 : answer.code, ", message:").concat(answer === null || answer === void 0 ? void 0 : answer.message));
|
|
7404
|
-
case
|
|
7405
|
-
|
|
7406
|
-
logger.log((_answer$remoteSdp = answer.remoteSdp) === null || _answer$remoteSdp === void 0 ? void 0 : _answer$remoteSdp.sdp);
|
|
7407
|
-
_parsed = lib.parse(answer.remoteSdp.sdp);
|
|
7882
|
+
case 47:
|
|
7883
|
+
answerSdp = res.data.remoteSdp.sdp;
|
|
7408
7884
|
this.emit(EVENT.LOAD_COMPLETE, {
|
|
7409
7885
|
url: finnalUrl,
|
|
7410
7886
|
elapsed: Date.now() - reqStart,
|
|
7411
|
-
answersdp: (_this$_opts2 = this._opts) !== null && _this$_opts2 !== void 0 && _this$_opts2.enableOriginSdpLogger ?
|
|
7412
|
-
parsedSdp:
|
|
7887
|
+
answersdp: (_this$_opts2 = this._opts) !== null && _this$_opts2 !== void 0 && _this$_opts2.enableOriginSdpLogger ? answerSdp : void 0,
|
|
7888
|
+
parsedSdp: parsed === null || parsed === void 0 ? void 0 : (_parsed$media = parsed.media) === null || _parsed$media === void 0 ? void 0 : _parsed$media.map(function(media) {
|
|
7413
7889
|
return {
|
|
7414
7890
|
candidates: media.candidates,
|
|
7415
7891
|
rtp: media.rtp,
|
|
@@ -7417,9 +7893,50 @@
|
|
|
7417
7893
|
};
|
|
7418
7894
|
})
|
|
7419
7895
|
});
|
|
7420
|
-
|
|
7896
|
+
_context7.next = 54;
|
|
7897
|
+
break;
|
|
7898
|
+
case 51:
|
|
7899
|
+
_context7.prev = 51;
|
|
7900
|
+
_context7.t0 = _context7["catch"](26);
|
|
7901
|
+
this._emitError(StreamingError.network(_context7.t0));
|
|
7902
|
+
case 54:
|
|
7903
|
+
return _context7.abrupt("return", answerSdp);
|
|
7904
|
+
case 55:
|
|
7905
|
+
case "end":
|
|
7906
|
+
return _context7.stop();
|
|
7907
|
+
}
|
|
7908
|
+
}, _callee7, this, [[26, 51]]);
|
|
7909
|
+
}));
|
|
7910
|
+
function _getAnswerSdp(_x3) {
|
|
7911
|
+
return _getAnswerSdp2.apply(this, arguments);
|
|
7912
|
+
}
|
|
7913
|
+
return _getAnswerSdp;
|
|
7914
|
+
}()
|
|
7915
|
+
}, {
|
|
7916
|
+
key: "_handleAnswerSdp",
|
|
7917
|
+
value: function() {
|
|
7918
|
+
var _handleAnswerSdp2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee8(pc, answerSdp) {
|
|
7919
|
+
var parsed, answer;
|
|
7920
|
+
return _regeneratorRuntime$1().wrap(function _callee8$(_context8) {
|
|
7921
|
+
while (1)
|
|
7922
|
+
switch (_context8.prev = _context8.next) {
|
|
7923
|
+
case 0:
|
|
7924
|
+
logger.log("_handleAnswerSdp()", "invoked, answerSdp:", {
|
|
7925
|
+
answerSdp
|
|
7926
|
+
});
|
|
7927
|
+
if (answerSdp) {
|
|
7928
|
+
_context8.next = 3;
|
|
7929
|
+
break;
|
|
7930
|
+
}
|
|
7931
|
+
return _context8.abrupt("return");
|
|
7932
|
+
case 3:
|
|
7933
|
+
this._firstFrameObserver.changeFirstFrameState(RTC_FIRST_FRAME_STATE.ANSWER_SDP_RECV);
|
|
7934
|
+
parsed = lib.parse(answerSdp);
|
|
7935
|
+
parsed.media.forEach(function(x) {
|
|
7421
7936
|
var _x$ssrcs, _x$ssrcs$find;
|
|
7422
|
-
|
|
7937
|
+
if (x.fingerprint) {
|
|
7938
|
+
x.fingerprint.hash = x.fingerprint.hash.toUpperCase();
|
|
7939
|
+
}
|
|
7423
7940
|
var msid = (_x$ssrcs = x.ssrcs) === null || _x$ssrcs === void 0 ? void 0 : (_x$ssrcs$find = _x$ssrcs.find(function(s) {
|
|
7424
7941
|
return s.attribute === "msid";
|
|
7425
7942
|
})) === null || _x$ssrcs$find === void 0 ? void 0 : _x$ssrcs$find.value;
|
|
@@ -7427,42 +7944,43 @@
|
|
|
7427
7944
|
x.msid = msid;
|
|
7428
7945
|
}
|
|
7429
7946
|
});
|
|
7430
|
-
answer
|
|
7431
|
-
logger.log("answer modified:\n",
|
|
7947
|
+
answer = lib.write(parsed);
|
|
7948
|
+
logger.log("answer modified:\n", {
|
|
7949
|
+
answer
|
|
7950
|
+
});
|
|
7432
7951
|
this._rctConnectStartTs = Date.now();
|
|
7433
7952
|
if (!(pc.signalingState === "closed")) {
|
|
7434
|
-
|
|
7953
|
+
_context8.next = 11;
|
|
7435
7954
|
break;
|
|
7436
7955
|
}
|
|
7437
|
-
return
|
|
7438
|
-
case
|
|
7439
|
-
|
|
7440
|
-
return pc.setRemoteDescription(
|
|
7441
|
-
|
|
7956
|
+
return _context8.abrupt("return");
|
|
7957
|
+
case 11:
|
|
7958
|
+
_context8.next = 13;
|
|
7959
|
+
return pc.setRemoteDescription({
|
|
7960
|
+
type: "answer",
|
|
7961
|
+
sdp: answer
|
|
7962
|
+
});
|
|
7963
|
+
case 13:
|
|
7964
|
+
this._firstFrameObserver.changeFirstFrameState(RTC_FIRST_FRAME_STATE.ANSWER_SDP_READY);
|
|
7442
7965
|
this._networkEvaluate = new NetworkEvaluate(pc, this._opts.networkEvaluateInterval);
|
|
7443
7966
|
this._listenPeerStateTimeout();
|
|
7444
|
-
|
|
7445
|
-
|
|
7446
|
-
case 59:
|
|
7447
|
-
_context6.prev = 59;
|
|
7448
|
-
_context6.t0 = _context6["catch"](24);
|
|
7449
|
-
this._emitError(StreamingError.network(_context6.t0));
|
|
7450
|
-
case 62:
|
|
7967
|
+
this._firstFrameObserver.bindEvents(pc, this._videoTransceicer, this._media);
|
|
7968
|
+
case 17:
|
|
7451
7969
|
case "end":
|
|
7452
|
-
return
|
|
7970
|
+
return _context8.stop();
|
|
7453
7971
|
}
|
|
7454
|
-
},
|
|
7972
|
+
}, _callee8, this);
|
|
7455
7973
|
}));
|
|
7456
|
-
function
|
|
7457
|
-
return
|
|
7974
|
+
function _handleAnswerSdp(_x4, _x5) {
|
|
7975
|
+
return _handleAnswerSdp2.apply(this, arguments);
|
|
7458
7976
|
}
|
|
7459
|
-
return
|
|
7977
|
+
return _handleAnswerSdp;
|
|
7460
7978
|
}()
|
|
7461
7979
|
}, {
|
|
7462
7980
|
key: "_listenPeerStateTimeout",
|
|
7463
7981
|
value: function _listenPeerStateTimeout() {
|
|
7464
7982
|
var _this6 = this;
|
|
7465
|
-
this.
|
|
7983
|
+
this._clearPeerStateTimeout();
|
|
7466
7984
|
if (this._opts.connectionStateChangeTimeout) {
|
|
7467
7985
|
this._peerStateTimer = setTimeout(function() {
|
|
7468
7986
|
_this6._emitError(StreamingError.create(ERR.MEDIA, ERR.SUB_TYPES.MEDIA_ERR_SRC_NOT_SUPPORTED, {
|
|
@@ -7474,128 +7992,148 @@
|
|
|
7474
7992
|
}, {
|
|
7475
7993
|
key: "_clearPeerStateTimeout",
|
|
7476
7994
|
value: function _clearPeerStateTimeout() {
|
|
7477
|
-
|
|
7478
|
-
|
|
7995
|
+
if (this._peerStateTimer) {
|
|
7996
|
+
clearTimeout(this._peerStateTimer);
|
|
7997
|
+
delete this._peerStateTimer;
|
|
7998
|
+
}
|
|
7479
7999
|
}
|
|
7480
8000
|
}, {
|
|
7481
8001
|
key: "_startRtcReport",
|
|
7482
8002
|
value: function _startRtcReport() {
|
|
7483
8003
|
var _this7 = this;
|
|
7484
8004
|
this._stopRtcReport();
|
|
7485
|
-
|
|
7486
|
-
var
|
|
7487
|
-
|
|
7488
|
-
|
|
7489
|
-
|
|
7490
|
-
|
|
7491
|
-
|
|
7492
|
-
|
|
7493
|
-
|
|
7494
|
-
|
|
7495
|
-
|
|
7496
|
-
|
|
7497
|
-
|
|
7498
|
-
|
|
7499
|
-
|
|
7500
|
-
|
|
7501
|
-
_this7._audioStallObserver
|
|
7502
|
-
|
|
7503
|
-
|
|
7504
|
-
|
|
7505
|
-
_this7._videoStallObserver
|
|
7506
|
-
|
|
7507
|
-
|
|
7508
|
-
|
|
7509
|
-
_this7._networkQuality
|
|
7510
|
-
|
|
7511
|
-
|
|
7512
|
-
|
|
7513
|
-
|
|
7514
|
-
|
|
7515
|
-
|
|
7516
|
-
|
|
7517
|
-
|
|
7518
|
-
|
|
7519
|
-
|
|
7520
|
-
|
|
7521
|
-
|
|
7522
|
-
|
|
7523
|
-
|
|
7524
|
-
|
|
7525
|
-
|
|
7526
|
-
|
|
7527
|
-
|
|
7528
|
-
|
|
7529
|
-
|
|
7530
|
-
|
|
7531
|
-
|
|
7532
|
-
|
|
7533
|
-
|
|
7534
|
-
|
|
7535
|
-
|
|
7536
|
-
|
|
7537
|
-
|
|
7538
|
-
|
|
7539
|
-
|
|
7540
|
-
|
|
7541
|
-
|
|
7542
|
-
|
|
7543
|
-
|
|
7544
|
-
|
|
7545
|
-
|
|
7546
|
-
|
|
7547
|
-
|
|
7548
|
-
|
|
7549
|
-
|
|
7550
|
-
|
|
7551
|
-
|
|
7552
|
-
|
|
7553
|
-
|
|
7554
|
-
|
|
7555
|
-
|
|
7556
|
-
|
|
7557
|
-
|
|
7558
|
-
|
|
7559
|
-
|
|
7560
|
-
|
|
7561
|
-
|
|
7562
|
-
|
|
7563
|
-
|
|
7564
|
-
|
|
7565
|
-
|
|
7566
|
-
|
|
7567
|
-
|
|
7568
|
-
|
|
7569
|
-
|
|
7570
|
-
|
|
7571
|
-
|
|
7572
|
-
|
|
7573
|
-
|
|
7574
|
-
|
|
7575
|
-
|
|
7576
|
-
|
|
7577
|
-
|
|
7578
|
-
|
|
7579
|
-
|
|
7580
|
-
|
|
7581
|
-
|
|
7582
|
-
|
|
7583
|
-
|
|
7584
|
-
|
|
7585
|
-
|
|
7586
|
-
|
|
7587
|
-
|
|
7588
|
-
|
|
7589
|
-
|
|
8005
|
+
var report = /* @__PURE__ */ function() {
|
|
8006
|
+
var _ref5 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee9() {
|
|
8007
|
+
var _this7$_audioTranscei, _this7$_videoTranscei;
|
|
8008
|
+
var _yield$Promise$all3, _yield$Promise$all4, curAudioStats, curVideoStats, _this7$_audioStallObs, _this7$_videoStallObs, _this7$_networkQualit, _this7$_networkQualit2, _this7$_media, _this7$_media2, audioStats, videoStats, audioStallInfo, videoStallInfo, _ref6, _ref7, quality, qualityInfo, av_sync_diff;
|
|
8009
|
+
return _regeneratorRuntime$1().wrap(function _callee9$(_context9) {
|
|
8010
|
+
while (1)
|
|
8011
|
+
switch (_context9.prev = _context9.next) {
|
|
8012
|
+
case 0:
|
|
8013
|
+
if (!(!((_this7$_audioTranscei = _this7._audioTransceicer) !== null && _this7$_audioTranscei !== void 0 && _this7$_audioTranscei.receiver) || !((_this7$_videoTranscei = _this7._videoTransceicer) !== null && _this7$_videoTranscei !== void 0 && _this7$_videoTranscei.receiver))) {
|
|
8014
|
+
_context9.next = 4;
|
|
8015
|
+
break;
|
|
8016
|
+
}
|
|
8017
|
+
_this7._preAudioStats = null;
|
|
8018
|
+
_this7._preVideoStats = null;
|
|
8019
|
+
return _context9.abrupt("return");
|
|
8020
|
+
case 4:
|
|
8021
|
+
if (!_this7._audioStallObserver && _this7._audioTransceicer) {
|
|
8022
|
+
_this7._audioStallObserver = new AudioStallObserver();
|
|
8023
|
+
_this7._audioStallObserver.start(_this7._audioTransceicer);
|
|
8024
|
+
}
|
|
8025
|
+
if (!_this7._videoStallObserver && _this7._video && _this7._media) {
|
|
8026
|
+
_this7._videoStallObserver = new VideoStallObserver();
|
|
8027
|
+
_this7._videoStallObserver.start(_this7._media);
|
|
8028
|
+
}
|
|
8029
|
+
if (_this7._pc && !_this7._networkQuality && _this7._opts.enableNetworkQuality && _this7._opts.networkQuality) {
|
|
8030
|
+
_this7._networkQuality = new NetworkQuality(_this7._pc, _this7._opts.networkQuality);
|
|
8031
|
+
}
|
|
8032
|
+
_context9.next = 9;
|
|
8033
|
+
return Promise.all([getRecvAudioStats(_this7._audioTransceicer.receiver.getStats()), getRecvVideoStats(_this7._videoTransceicer.receiver.getStats())]);
|
|
8034
|
+
case 9:
|
|
8035
|
+
_yield$Promise$all3 = _context9.sent;
|
|
8036
|
+
_yield$Promise$all4 = _slicedToArray(_yield$Promise$all3, 2);
|
|
8037
|
+
curAudioStats = _yield$Promise$all4[0];
|
|
8038
|
+
curVideoStats = _yield$Promise$all4[1];
|
|
8039
|
+
if (!(_this7._preAudioStats && _this7._preVideoStats)) {
|
|
8040
|
+
_context9.next = 27;
|
|
8041
|
+
break;
|
|
8042
|
+
}
|
|
8043
|
+
audioStats = diffRecvAudioStats(_this7._preAudioStats, curAudioStats);
|
|
8044
|
+
videoStats = diffRecvVideoStats(_this7._preVideoStats, curVideoStats);
|
|
8045
|
+
_this7._videoJitterBufferDelay = videoStats.jitterBufferDelay;
|
|
8046
|
+
_context9.next = 19;
|
|
8047
|
+
return (_this7$_audioStallObs = _this7._audioStallObserver) === null || _this7$_audioStallObs === void 0 ? void 0 : _this7$_audioStallObs.getAudioStallInfo();
|
|
8048
|
+
case 19:
|
|
8049
|
+
audioStallInfo = _context9.sent;
|
|
8050
|
+
_context9.next = 22;
|
|
8051
|
+
return (_this7$_videoStallObs = _this7._videoStallObserver) === null || _this7$_videoStallObs === void 0 ? void 0 : _this7$_videoStallObs.getStallInfo({
|
|
8052
|
+
interval: videoStats.statsInterval,
|
|
8053
|
+
frameRateReceived: videoStats.receivedFrameRate,
|
|
8054
|
+
frameRateDecoded: videoStats.decoderOutputFrameRate,
|
|
8055
|
+
bitrate: videoStats.receivedKBitrate
|
|
8056
|
+
});
|
|
8057
|
+
case 22:
|
|
8058
|
+
videoStallInfo = _context9.sent;
|
|
8059
|
+
_ref6 = (_this7$_networkQualit = (_this7$_networkQualit2 = _this7._networkQuality) === null || _this7$_networkQualit2 === void 0 ? void 0 : _this7$_networkQualit2.getDownlinkQuality(_objectSpread2$2(_objectSpread2$2({}, audioStats), {}, {
|
|
8060
|
+
stallDuration: (audioStallInfo === null || audioStallInfo === void 0 ? void 0 : audioStallInfo.stallDuration) || 0
|
|
8061
|
+
}), _objectSpread2$2(_objectSpread2$2({}, videoStats), {}, {
|
|
8062
|
+
stallDuration: (videoStallInfo === null || videoStallInfo === void 0 ? void 0 : videoStallInfo.stall.stallDuration100ms) || (videoStallInfo === null || videoStallInfo === void 0 ? void 0 : videoStallInfo.stall.stallDuration500ms) || 0
|
|
8063
|
+
}))) !== null && _this7$_networkQualit !== void 0 ? _this7$_networkQualit : [], _ref7 = _slicedToArray(_ref6, 2), quality = _ref7[0], qualityInfo = _ref7[1];
|
|
8064
|
+
if (_this7._opts.enableAdaptiveJitterBuffer) {
|
|
8065
|
+
_this7._handleJitterBuffer(qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.qualityQos, _this7._opts.adaptiveJitterBuffer, _this7._opts.networkStrategy);
|
|
8066
|
+
}
|
|
8067
|
+
if (videoStats.estimatedPlayoutTimestamp && audioStats.estimatedPlayoutTimestamp) {
|
|
8068
|
+
av_sync_diff = videoStats.estimatedPlayoutTimestamp - audioStats.estimatedPlayoutTimestamp;
|
|
8069
|
+
}
|
|
8070
|
+
_this7.emit(EXTEND_EVENTS.RTC_NETWORK, {
|
|
8071
|
+
interval: videoStats.statsInterval,
|
|
8072
|
+
network_quality: quality,
|
|
8073
|
+
audio_stall_duration: audioStallInfo === null || audioStallInfo === void 0 ? void 0 : audioStallInfo.stallDuration,
|
|
8074
|
+
audio_stall_count: audioStallInfo === null || audioStallInfo === void 0 ? void 0 : audioStallInfo.stallCount,
|
|
8075
|
+
audio_stall_time_per_100sec: ((audioStallInfo === null || audioStallInfo === void 0 ? void 0 : audioStallInfo.stallDuration) || 0) / audioStats.statsInterval * 100,
|
|
8076
|
+
audio_stall_count_per_100sec: ((audioStallInfo === null || audioStallInfo === void 0 ? void 0 : audioStallInfo.stallCount) || 0) / audioStats.statsInterval * 100 * 1e3,
|
|
8077
|
+
video_stall_duration: videoStallInfo === null || videoStallInfo === void 0 ? void 0 : videoStallInfo.stall.stallDuration500ms,
|
|
8078
|
+
video_stall_count: videoStallInfo === null || videoStallInfo === void 0 ? void 0 : videoStallInfo.stall.stallCount500ms,
|
|
8079
|
+
video_stall_duration_100ms: videoStallInfo === null || videoStallInfo === void 0 ? void 0 : videoStallInfo.stall.stallDuration100ms,
|
|
8080
|
+
video_stall_count_100ms: videoStallInfo === null || videoStallInfo === void 0 ? void 0 : videoStallInfo.stall.stallCount100ms,
|
|
8081
|
+
video_stall_time_per_100sec: ((videoStallInfo === null || videoStallInfo === void 0 ? void 0 : videoStallInfo.stall.stallDuration500ms) || 0) / videoStats.statsInterval * 100,
|
|
8082
|
+
video_stall_count_per_100sec: ((videoStallInfo === null || videoStallInfo === void 0 ? void 0 : videoStallInfo.stall.stallCount500ms) || 0) / videoStats.statsInterval * 100 * 1e3,
|
|
8083
|
+
rtt: videoStats.rtt,
|
|
8084
|
+
video_jb_delay: videoStats.jitterBufferDelay,
|
|
8085
|
+
audio_jb_delay: audioStats.jitterBufferDelay,
|
|
8086
|
+
audio_lost_rate: audioStats.audioLossRate,
|
|
8087
|
+
video_lost_rate: videoStats.videoLossRate,
|
|
8088
|
+
video_retransmitted_rate: videoStats.retransmittedRate,
|
|
8089
|
+
quality_audio_level: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.audioLevel,
|
|
8090
|
+
quality_video_level: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.videoLevel,
|
|
8091
|
+
quality_audio_qos: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.audioQos,
|
|
8092
|
+
quality_video_qos: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.videoQos,
|
|
8093
|
+
quality_qos: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.qualityQos,
|
|
8094
|
+
quality_audio_qoe: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.audioQoe,
|
|
8095
|
+
quality_video_qoe: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.videoQoe,
|
|
8096
|
+
current_delay: _this7._getDelay(),
|
|
8097
|
+
visibility_state: document.visibilityState,
|
|
8098
|
+
target_delay: _this7._targetDelayHint,
|
|
8099
|
+
av_sync_diff,
|
|
8100
|
+
set_delay_error: _this7._setDelayError || null,
|
|
8101
|
+
video_width: ((_this7$_media = _this7._media) === null || _this7$_media === void 0 ? void 0 : _this7$_media.videoWidth) || 0,
|
|
8102
|
+
video_height: ((_this7$_media2 = _this7._media) === null || _this7$_media2 === void 0 ? void 0 : _this7$_media2.videoHeight) || 0,
|
|
8103
|
+
abr_state: videoStats.abrState || "none"
|
|
8104
|
+
});
|
|
8105
|
+
case 27:
|
|
8106
|
+
_this7._preAudioStats = curAudioStats;
|
|
8107
|
+
_this7._preVideoStats = curVideoStats;
|
|
8108
|
+
_this7._setDelayError = null;
|
|
8109
|
+
case 30:
|
|
8110
|
+
case "end":
|
|
8111
|
+
return _context9.stop();
|
|
8112
|
+
}
|
|
8113
|
+
}, _callee9);
|
|
8114
|
+
}));
|
|
8115
|
+
return function report2() {
|
|
8116
|
+
return _ref5.apply(this, arguments);
|
|
8117
|
+
};
|
|
8118
|
+
}();
|
|
8119
|
+
this._rtcReportTimer = setInterval(function() {
|
|
8120
|
+
return report();
|
|
8121
|
+
}, 2e3);
|
|
8122
|
+
report();
|
|
7590
8123
|
}
|
|
7591
8124
|
}, {
|
|
7592
8125
|
key: "_handleJitterBuffer",
|
|
7593
8126
|
value: function _handleJitterBuffer(quality, adaptiveJitterBuffer, networkStrategy) {
|
|
8127
|
+
if (!adaptiveJitterBuffer || !networkStrategy) {
|
|
8128
|
+
return;
|
|
8129
|
+
}
|
|
7594
8130
|
this._networkQualityResult.push(quality);
|
|
7595
8131
|
if (this._networkQualityResult.length > adaptiveJitterBuffer.networkWindow) {
|
|
7596
8132
|
this._networkQualityResult.shift();
|
|
7597
8133
|
}
|
|
7598
|
-
var validNetworkQualityResult = this._networkQualityResult.filter(
|
|
8134
|
+
var validNetworkQualityResult = this._networkQualityResult.filter(function(v) {
|
|
8135
|
+
return typeof v === "number";
|
|
8136
|
+
});
|
|
7599
8137
|
if (validNetworkQualityResult.length === adaptiveJitterBuffer.networkWindow) {
|
|
7600
8138
|
var _networkStrategy$aver;
|
|
7601
8139
|
var averageQuality;
|
|
@@ -7623,9 +8161,9 @@
|
|
|
7623
8161
|
(_this$_audioStallObse = this._audioStallObserver) === null || _this$_audioStallObse === void 0 ? void 0 : _this$_audioStallObse.destroy();
|
|
7624
8162
|
(_this$_videoStallObse = this._videoStallObserver) === null || _this$_videoStallObse === void 0 ? void 0 : _this$_videoStallObse.destroy();
|
|
7625
8163
|
(_this$_networkQuality = this._networkQuality) === null || _this$_networkQuality === void 0 ? void 0 : _this$_networkQuality.destroy();
|
|
7626
|
-
this._audioStallObserver
|
|
7627
|
-
this._videoStallObserver
|
|
7628
|
-
this._networkQuality
|
|
8164
|
+
delete this._audioStallObserver;
|
|
8165
|
+
delete this._videoStallObserver;
|
|
8166
|
+
delete this._networkQuality;
|
|
7629
8167
|
this._preAudioStats = null;
|
|
7630
8168
|
this._preVideoStats = null;
|
|
7631
8169
|
if (this._rtcReportTimer) {
|
|
@@ -7633,23 +8171,38 @@
|
|
|
7633
8171
|
this._rtcReportTimer = 0;
|
|
7634
8172
|
}
|
|
7635
8173
|
}
|
|
8174
|
+
}, {
|
|
8175
|
+
key: "_clearDelay",
|
|
8176
|
+
value: function _clearDelay() {
|
|
8177
|
+
if (this._setDelayTimer) {
|
|
8178
|
+
clearInterval(this._setDelayTimer);
|
|
8179
|
+
delete this._setDelayTimer;
|
|
8180
|
+
}
|
|
8181
|
+
this._targetDelayHint = null;
|
|
8182
|
+
this._setDelayError = null;
|
|
8183
|
+
}
|
|
7636
8184
|
}, {
|
|
7637
8185
|
key: "_disconnect",
|
|
7638
8186
|
value: function _disconnect() {
|
|
7639
|
-
var _this$
|
|
7640
|
-
|
|
8187
|
+
var _this$_loader2, _this$_networkEvaluat2;
|
|
8188
|
+
this._clearDelay();
|
|
8189
|
+
(_this$_loader2 = this._loader) === null || _this$_loader2 === void 0 ? void 0 : _this$_loader2.cancel();
|
|
7641
8190
|
(_this$_networkEvaluat2 = this._networkEvaluate) === null || _this$_networkEvaluat2 === void 0 ? void 0 : _this$_networkEvaluat2.destroy();
|
|
7642
8191
|
this._stopRtcReport();
|
|
7643
8192
|
clearTimeout(this._checkStatsErrorTimer);
|
|
7644
8193
|
this._clearPeerStateTimeout();
|
|
8194
|
+
this._firstFrameObserver.reset();
|
|
7645
8195
|
this._audioTransceicer = null;
|
|
7646
8196
|
this._videoTransceicer = null;
|
|
7647
8197
|
this._mediaStream = null;
|
|
7648
|
-
this._networkEvaluate = null;
|
|
7649
8198
|
}
|
|
7650
8199
|
}, {
|
|
7651
8200
|
key: "_emitError",
|
|
7652
8201
|
value: function _emitError(error) {
|
|
8202
|
+
var _error$originError;
|
|
8203
|
+
this._clearDelay();
|
|
8204
|
+
this._firstFrameObserver.setFailureReason((error === null || error === void 0 ? void 0 : (_error$originError = error.originError) === null || _error$originError === void 0 ? void 0 : _error$originError.message) || (error === null || error === void 0 ? void 0 : error.originError) || error);
|
|
8205
|
+
this._firstFrameObserver.reset();
|
|
7653
8206
|
this.emit(EVENT.ERROR, error);
|
|
7654
8207
|
clearTimeout(this._checkStatsErrorTimer);
|
|
7655
8208
|
this._clearPeerStateTimeout();
|
|
@@ -7664,29 +8217,35 @@
|
|
|
7664
8217
|
}, {
|
|
7665
8218
|
key: "_createEmptyPeer",
|
|
7666
8219
|
value: function() {
|
|
7667
|
-
var _createEmptyPeer2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function
|
|
8220
|
+
var _createEmptyPeer2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee10() {
|
|
7668
8221
|
var pc;
|
|
7669
|
-
return _regeneratorRuntime$1().wrap(function
|
|
8222
|
+
return _regeneratorRuntime$1().wrap(function _callee10$(_context10) {
|
|
7670
8223
|
while (1)
|
|
7671
|
-
switch (
|
|
8224
|
+
switch (_context10.prev = _context10.next) {
|
|
7672
8225
|
case 0:
|
|
7673
8226
|
pc = new RTCPeerConnection();
|
|
7674
|
-
|
|
8227
|
+
_context10.next = 3;
|
|
7675
8228
|
return pc.createOffer();
|
|
7676
8229
|
case 3:
|
|
7677
8230
|
pc.close();
|
|
7678
|
-
|
|
7679
|
-
case 5:
|
|
8231
|
+
case 4:
|
|
7680
8232
|
case "end":
|
|
7681
|
-
return
|
|
8233
|
+
return _context10.stop();
|
|
7682
8234
|
}
|
|
7683
|
-
},
|
|
8235
|
+
}, _callee10);
|
|
7684
8236
|
}));
|
|
7685
8237
|
function _createEmptyPeer() {
|
|
7686
8238
|
return _createEmptyPeer2.apply(this, arguments);
|
|
7687
8239
|
}
|
|
7688
8240
|
return _createEmptyPeer;
|
|
7689
8241
|
}()
|
|
8242
|
+
}, {
|
|
8243
|
+
key: "_emitFirstFrameState",
|
|
8244
|
+
value: function _emitFirstFrameState(info, extra) {
|
|
8245
|
+
this.emit(EXTEND_EVENTS.RTC_FIRST_FRAME, _objectSpread2$2(_objectSpread2$2(_objectSpread2$2({}, info), extra), {}, {
|
|
8246
|
+
initOptionsIncludePreload: !!this._opts.preloadPromise
|
|
8247
|
+
}));
|
|
8248
|
+
}
|
|
7690
8249
|
}, {
|
|
7691
8250
|
key: "_changeVolumeInHarmonyWorkaround",
|
|
7692
8251
|
value: function _changeVolumeInHarmonyWorkaround() {
|
|
@@ -7700,7 +8259,8 @@
|
|
|
7700
8259
|
enumerable: true,
|
|
7701
8260
|
get: originalDescriptor.get,
|
|
7702
8261
|
set: function set(val) {
|
|
7703
|
-
|
|
8262
|
+
var _originalDescriptor$s;
|
|
8263
|
+
(_originalDescriptor$s = originalDescriptor.set) === null || _originalDescriptor$s === void 0 ? void 0 : _originalDescriptor$s.call(this, val);
|
|
7704
8264
|
var _changeNumberInRange = changeNumberInRange(this.volume, 0, 1, 0.01), _changeNumberInRange2 = _slicedToArray(_changeNumberInRange, 2), sourceVolume = _changeNumberInRange2[0], targetVolume = _changeNumberInRange2[1];
|
|
7705
8265
|
this.volume = targetVolume;
|
|
7706
8266
|
this.volume = sourceVolume;
|
|
@@ -7716,14 +8276,47 @@
|
|
|
7716
8276
|
}
|
|
7717
8277
|
}
|
|
7718
8278
|
}
|
|
8279
|
+
}, {
|
|
8280
|
+
key: "_mutedBeforePlayingWorkaround",
|
|
8281
|
+
value: function _mutedBeforePlayingWorkaround() {
|
|
8282
|
+
var _this9 = this;
|
|
8283
|
+
if (isHeyTapBrowser() || isVivoBrowser()) {
|
|
8284
|
+
var originalDescriptor = Object.getOwnPropertyDescriptor(HTMLMediaElement.prototype, "muted");
|
|
8285
|
+
if (this._media && originalDescriptor) {
|
|
8286
|
+
logger.log("apply muted workaround for vivo & oppo");
|
|
8287
|
+
var originalMuted = this._media.muted;
|
|
8288
|
+
this._media.muted = true;
|
|
8289
|
+
Object.defineProperty(this._media, "muted", {
|
|
8290
|
+
configurable: true,
|
|
8291
|
+
enumerable: true,
|
|
8292
|
+
get: function get() {
|
|
8293
|
+
return originalMuted;
|
|
8294
|
+
},
|
|
8295
|
+
set: function set(val) {
|
|
8296
|
+
logger.log("muted workaround. set muted =", val);
|
|
8297
|
+
originalMuted = val;
|
|
8298
|
+
}
|
|
8299
|
+
});
|
|
8300
|
+
var revertMutedProxy = function revertMutedProxy2() {
|
|
8301
|
+
logger.log("revert muted workaround. muted:", originalMuted);
|
|
8302
|
+
if (_this9._media) {
|
|
8303
|
+
Object.defineProperty(_this9._media, "muted", originalDescriptor);
|
|
8304
|
+
_this9._media.muted = originalMuted;
|
|
8305
|
+
_this9._media.removeEventListener("playing", revertMutedProxy2);
|
|
8306
|
+
}
|
|
8307
|
+
};
|
|
8308
|
+
this._media.addEventListener("playing", revertMutedProxy);
|
|
8309
|
+
}
|
|
8310
|
+
}
|
|
8311
|
+
}
|
|
7719
8312
|
}, {
|
|
7720
8313
|
key: "destroy",
|
|
7721
8314
|
value: function destroy(keepClearMediaStream) {
|
|
7722
|
-
var _this$_revertVolumeWo, _this$
|
|
8315
|
+
var _this$_revertVolumeWo, _this$_media3;
|
|
7723
8316
|
this._disconnect();
|
|
7724
8317
|
(_this$_revertVolumeWo = this._revertVolumeWorkaround) === null || _this$_revertVolumeWo === void 0 ? void 0 : _this$_revertVolumeWo.call(this);
|
|
7725
8318
|
delete this._revertVolumeWorkaround;
|
|
7726
|
-
(_this$
|
|
8319
|
+
(_this$_media3 = this._media) === null || _this$_media3 === void 0 ? void 0 : _this$_media3.removeEventListener("timeupdate", this._mockWaitingByTimeupdate);
|
|
7727
8320
|
if (this._media && !keepClearMediaStream) {
|
|
7728
8321
|
this._media.srcObject = null;
|
|
7729
8322
|
}
|
|
@@ -7734,7 +8327,6 @@
|
|
|
7734
8327
|
this._media = null;
|
|
7735
8328
|
this._player = null;
|
|
7736
8329
|
this._pc = null;
|
|
7737
|
-
this._opts = null;
|
|
7738
8330
|
}
|
|
7739
8331
|
}], [{
|
|
7740
8332
|
key: "enableLogger",
|
|
@@ -7763,15 +8355,11 @@
|
|
|
7763
8355
|
function RtsPlugin2() {
|
|
7764
8356
|
var _this;
|
|
7765
8357
|
_classCallCheck$3(this, RtsPlugin2);
|
|
7766
|
-
|
|
7767
|
-
|
|
7768
|
-
|
|
7769
|
-
_this =
|
|
7770
|
-
|
|
7771
|
-
_defineProperty$2(_assertThisInitialized$1(_this), "_mediaStream", null);
|
|
7772
|
-
_defineProperty$2(_assertThisInitialized$1(_this), "_disconnectTimer", void 0);
|
|
7773
|
-
_defineProperty$2(_assertThisInitialized$1(_this), "_rtsOpts", null);
|
|
7774
|
-
_defineProperty$2(_assertThisInitialized$1(_this), "_onPause", function() {
|
|
8358
|
+
_this = _super.apply(this, arguments);
|
|
8359
|
+
_this._rts = null;
|
|
8360
|
+
_this._rtsOpts = null;
|
|
8361
|
+
_this._mediaStream = null;
|
|
8362
|
+
_this._onPause = function() {
|
|
7775
8363
|
if (_this._disconnectTimer) {
|
|
7776
8364
|
return;
|
|
7777
8365
|
}
|
|
@@ -7779,8 +8367,8 @@
|
|
|
7779
8367
|
_this._closeAfterPause();
|
|
7780
8368
|
_this._clearDisconnectTimer();
|
|
7781
8369
|
}, _this.config.disconnectTime * 1e3);
|
|
7782
|
-
}
|
|
7783
|
-
|
|
8370
|
+
};
|
|
8371
|
+
_this._reInit = function() {
|
|
7784
8372
|
var _this$_rts;
|
|
7785
8373
|
_this._clearDisconnectTimer();
|
|
7786
8374
|
if ((_this$_rts = _this._rts) !== null && _this$_rts !== void 0 && _this$_rts._pc) {
|
|
@@ -7788,8 +8376,8 @@
|
|
|
7788
8376
|
}
|
|
7789
8377
|
_this._init();
|
|
7790
8378
|
_this._bindRtsEvents();
|
|
7791
|
-
}
|
|
7792
|
-
|
|
8379
|
+
};
|
|
8380
|
+
_this._init = function() {
|
|
7793
8381
|
var _this$_rts2;
|
|
7794
8382
|
(_this$_rts2 = _this._rts) === null || _this$_rts2 === void 0 ? void 0 : _this$_rts2.destroy();
|
|
7795
8383
|
var config = _this.player.config;
|
|
@@ -7808,8 +8396,8 @@
|
|
|
7808
8396
|
}
|
|
7809
8397
|
}, rtsOpts));
|
|
7810
8398
|
_this._rts.load(config.url);
|
|
7811
|
-
}
|
|
7812
|
-
|
|
8399
|
+
};
|
|
8400
|
+
_this._onSwitchURL = function(url) {
|
|
7813
8401
|
if (url) {
|
|
7814
8402
|
_this.player.config.url = url;
|
|
7815
8403
|
}
|
|
@@ -7818,14 +8406,14 @@
|
|
|
7818
8406
|
} else {
|
|
7819
8407
|
_this._reInit();
|
|
7820
8408
|
}
|
|
7821
|
-
}
|
|
7822
|
-
|
|
8409
|
+
};
|
|
8410
|
+
_this.destroy = function() {
|
|
7823
8411
|
var _this$_rts3;
|
|
7824
8412
|
_this.player.switchURL = _this._originSwitchFn;
|
|
7825
8413
|
_this._clearDisconnectTimer();
|
|
7826
8414
|
(_this$_rts3 = _this._rts) === null || _this$_rts3 === void 0 ? void 0 : _this$_rts3.destroy();
|
|
7827
8415
|
_this._rts = null;
|
|
7828
|
-
}
|
|
8416
|
+
};
|
|
7829
8417
|
return _this;
|
|
7830
8418
|
}
|
|
7831
8419
|
_createClass$3(RtsPlugin2, [{
|
|
@@ -7835,32 +8423,38 @@
|
|
|
7835
8423
|
return (_this$_rts4 = this._rts) === null || _this$_rts4 === void 0 ? void 0 : _this$_rts4.pc;
|
|
7836
8424
|
}
|
|
7837
8425
|
}, {
|
|
7838
|
-
key: "
|
|
8426
|
+
key: "jitterBufferDelay",
|
|
7839
8427
|
get: function get() {
|
|
7840
8428
|
var _this$_rts5;
|
|
7841
|
-
return (_this$_rts5 = this._rts) === null || _this$_rts5 === void 0 ? void 0 : _this$_rts5.
|
|
8429
|
+
return ((_this$_rts5 = this._rts) === null || _this$_rts5 === void 0 ? void 0 : _this$_rts5.getJitterBufferDelay()) || 0;
|
|
7842
8430
|
}
|
|
7843
8431
|
}, {
|
|
7844
|
-
key: "
|
|
8432
|
+
key: "loader",
|
|
7845
8433
|
get: function get() {
|
|
7846
8434
|
var _this$_rts6;
|
|
7847
|
-
return (_this$_rts6 = this._rts) === null || _this$_rts6 === void 0 ? void 0 : _this$_rts6.
|
|
8435
|
+
return (_this$_rts6 = this._rts) === null || _this$_rts6 === void 0 ? void 0 : _this$_rts6.loader;
|
|
7848
8436
|
}
|
|
7849
8437
|
}, {
|
|
7850
|
-
key: "
|
|
8438
|
+
key: "videoTrack",
|
|
7851
8439
|
get: function get() {
|
|
7852
|
-
|
|
8440
|
+
var _this$_rts7;
|
|
8441
|
+
return (_this$_rts7 = this._rts) === null || _this$_rts7 === void 0 ? void 0 : _this$_rts7.videoTack;
|
|
7853
8442
|
}
|
|
7854
8443
|
}, {
|
|
7855
|
-
key: "
|
|
8444
|
+
key: "audioTrack",
|
|
7856
8445
|
get: function get() {
|
|
7857
|
-
var _this$
|
|
7858
|
-
return (_this$
|
|
8446
|
+
var _this$_rts8;
|
|
8447
|
+
return (_this$_rts8 = this._rts) === null || _this$_rts8 === void 0 ? void 0 : _this$_rts8.audioTrack;
|
|
8448
|
+
}
|
|
8449
|
+
}, {
|
|
8450
|
+
key: "core",
|
|
8451
|
+
get: function get() {
|
|
8452
|
+
return this._rts;
|
|
7859
8453
|
}
|
|
7860
8454
|
}, {
|
|
7861
8455
|
key: "version",
|
|
7862
8456
|
get: function get() {
|
|
7863
|
-
return "0.2.1-alpha.
|
|
8457
|
+
return "0.2.1-alpha.51";
|
|
7864
8458
|
}
|
|
7865
8459
|
}, {
|
|
7866
8460
|
key: "beforePlayerInit",
|
|
@@ -7868,7 +8462,8 @@
|
|
|
7868
8462
|
var _this$player2, _this$player$config, _this$player$config$r, _this2 = this;
|
|
7869
8463
|
this._init();
|
|
7870
8464
|
if (!this._originSwitchFn) {
|
|
7871
|
-
|
|
8465
|
+
var _this$player$switchUR;
|
|
8466
|
+
this._originSwitchFn = (_this$player$switchUR = this.player.switchURL) === null || _this$player$switchUR === void 0 ? void 0 : _this$player$switchUR.bind(this.player);
|
|
7872
8467
|
}
|
|
7873
8468
|
this.player.switchURL = this._onSwitchURL;
|
|
7874
8469
|
(_this$player2 = this.player) === null || _this$player2 === void 0 ? void 0 : _this$player2.useHooks("replay", this._onSwitchURL);
|
|
@@ -7910,26 +8505,26 @@
|
|
|
7910
8505
|
}, {
|
|
7911
8506
|
key: "getStats",
|
|
7912
8507
|
value: function getStats2() {
|
|
7913
|
-
var _this$
|
|
7914
|
-
return (_this$
|
|
8508
|
+
var _this$_rts9;
|
|
8509
|
+
return (_this$_rts9 = this._rts) === null || _this$_rts9 === void 0 ? void 0 : _this$_rts9.getStats();
|
|
7915
8510
|
}
|
|
7916
8511
|
}, {
|
|
7917
8512
|
key: "getStatsSnapshoot",
|
|
7918
8513
|
value: function getStatsSnapshoot2() {
|
|
7919
|
-
var _this$
|
|
7920
|
-
return (_this$
|
|
8514
|
+
var _this$_rts10;
|
|
8515
|
+
return (_this$_rts10 = this._rts) === null || _this$_rts10 === void 0 ? void 0 : _this$_rts10.getStatsSnapshoot();
|
|
7921
8516
|
}
|
|
7922
8517
|
}, {
|
|
7923
8518
|
key: "getNetWorkInfo",
|
|
7924
8519
|
value: function getNetWorkInfo() {
|
|
7925
|
-
var _this$
|
|
7926
|
-
return (_this$
|
|
8520
|
+
var _this$_rts11;
|
|
8521
|
+
return (_this$_rts11 = this._rts) === null || _this$_rts11 === void 0 ? void 0 : _this$_rts11.networkStats;
|
|
7927
8522
|
}
|
|
7928
8523
|
}, {
|
|
7929
8524
|
key: "setDelay",
|
|
7930
8525
|
value: function setDelay(delayHint) {
|
|
7931
|
-
var _this$
|
|
7932
|
-
(_this$
|
|
8526
|
+
var _this$_rts12;
|
|
8527
|
+
(_this$_rts12 = this._rts) === null || _this$_rts12 === void 0 ? void 0 : _this$_rts12._setDelay(delayHint);
|
|
7933
8528
|
}
|
|
7934
8529
|
}, {
|
|
7935
8530
|
key: "_clearDisconnectTimer",
|
|
@@ -7940,15 +8535,15 @@
|
|
|
7940
8535
|
}, {
|
|
7941
8536
|
key: "_closeAfterPause",
|
|
7942
8537
|
value: function _closeAfterPause() {
|
|
7943
|
-
var _this$
|
|
7944
|
-
if (!((_this$
|
|
8538
|
+
var _this$_rts13, _this$config, _this$_rts15;
|
|
8539
|
+
if (!((_this$_rts13 = this._rts) !== null && _this$_rts13 !== void 0 && _this$_rts13._pc)) {
|
|
7945
8540
|
return;
|
|
7946
8541
|
}
|
|
7947
8542
|
if ((_this$config = this.config) !== null && _this$config !== void 0 && _this$config.seamlesslyReload) {
|
|
7948
|
-
var _this$
|
|
7949
|
-
this._mediaStream = (_this$
|
|
8543
|
+
var _this$_rts14;
|
|
8544
|
+
this._mediaStream = (_this$_rts14 = this._rts) === null || _this$_rts14 === void 0 ? void 0 : _this$_rts14._mediaStream;
|
|
7950
8545
|
}
|
|
7951
|
-
(_this$
|
|
8546
|
+
(_this$_rts15 = this._rts) === null || _this$_rts15 === void 0 ? void 0 : _this$_rts15.destroy(true);
|
|
7952
8547
|
this._rts = null;
|
|
7953
8548
|
}
|
|
7954
8549
|
}, {
|
|
@@ -7964,16 +8559,17 @@
|
|
|
7964
8559
|
this._transCoreEvent(EVENT.SEI);
|
|
7965
8560
|
this._transCoreEvent(EXTEND_EVENTS.RTC_STATE_CHANGE);
|
|
7966
8561
|
this._transCoreEvent(EXTEND_EVENTS.RTC_NETWORK);
|
|
8562
|
+
this._transCoreEvent(EXTEND_EVENTS.RTC_FIRST_FRAME);
|
|
7967
8563
|
}
|
|
7968
8564
|
}, {
|
|
7969
8565
|
key: "_transErrorEvent",
|
|
7970
8566
|
value: function _transErrorEvent() {
|
|
7971
|
-
var _this3 = this;
|
|
7972
|
-
this._rts.on(EVENT.ERROR, function(err) {
|
|
8567
|
+
var _this$_rts16, _this3 = this, _this$_rts17;
|
|
8568
|
+
(_this$_rts16 = this._rts) === null || _this$_rts16 === void 0 ? void 0 : _this$_rts16.on(EVENT.ERROR, function(err) {
|
|
7973
8569
|
if (!_this3.player)
|
|
7974
8570
|
return;
|
|
7975
8571
|
var e = new Errors(_this3.player, err);
|
|
7976
|
-
var
|
|
8572
|
+
var _ref = _this3._rtsOpts || {}, backupConstruct = _ref.backupConstruct, backupURL = _ref.backupURL;
|
|
7977
8573
|
if (backupURL) {
|
|
7978
8574
|
var _player$video;
|
|
7979
8575
|
var player = _this3.player;
|
|
@@ -8009,7 +8605,7 @@
|
|
|
8009
8605
|
}
|
|
8010
8606
|
_this3.player.emit(ERROR, e);
|
|
8011
8607
|
});
|
|
8012
|
-
this._rts.on("waiting", function() {
|
|
8608
|
+
(_this$_rts17 = this._rts) === null || _this$_rts17 === void 0 ? void 0 : _this$_rts17.on("waiting", function() {
|
|
8013
8609
|
var _this3$player;
|
|
8014
8610
|
(_this3$player = _this3.player) === null || _this3$player === void 0 ? void 0 : _this3$player.emit("waiting");
|
|
8015
8611
|
});
|
|
@@ -8017,8 +8613,8 @@
|
|
|
8017
8613
|
}, {
|
|
8018
8614
|
key: "_transCoreEvent",
|
|
8019
8615
|
value: function _transCoreEvent(eventName) {
|
|
8020
|
-
var _this4 = this;
|
|
8021
|
-
this._rts.on(eventName, function(e) {
|
|
8616
|
+
var _this$_rts18, _this4 = this;
|
|
8617
|
+
(_this$_rts18 = this._rts) === null || _this$_rts18 === void 0 ? void 0 : _this$_rts18.on(eventName, function(e) {
|
|
8022
8618
|
if (_this4.player) {
|
|
8023
8619
|
_this4.player.emit("core_event", _objectSpread2$2(_objectSpread2$2({}, e), {}, {
|
|
8024
8620
|
eventName
|
|
@@ -8056,7 +8652,8 @@
|
|
|
8056
8652
|
case 3:
|
|
8057
8653
|
res = _context.sent;
|
|
8058
8654
|
hasH264 = (_res$video = res.video) === null || _res$video === void 0 ? void 0 : _res$video.filter(function(x) {
|
|
8059
|
-
|
|
8655
|
+
var _x$config;
|
|
8656
|
+
return x.codec === "H264" && (!targetProfileLevel || ((_x$config = x.config) === null || _x$config === void 0 ? void 0 : _x$config.indexOf(targetProfileLevel)) !== -1);
|
|
8060
8657
|
}).length;
|
|
8061
8658
|
if (hasH264) {
|
|
8062
8659
|
_context.next = 10;
|
|
@@ -8067,7 +8664,8 @@
|
|
|
8067
8664
|
case 8:
|
|
8068
8665
|
res1 = _context.sent;
|
|
8069
8666
|
hasH264 = (_res1$video = res1.video) === null || _res1$video === void 0 ? void 0 : _res1$video.filter(function(x) {
|
|
8070
|
-
|
|
8667
|
+
var _x$config2;
|
|
8668
|
+
return x.codec === "H264" && (!targetProfileLevel || ((_x$config2 = x.config) === null || _x$config2 === void 0 ? void 0 : _x$config2.indexOf(targetProfileLevel)) !== -1);
|
|
8071
8669
|
}).length;
|
|
8072
8670
|
case 10:
|
|
8073
8671
|
return _context.abrupt("return", !!hasH264);
|