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