@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.
@@ -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: "core.rtcstatechange",
4297
- RTC_NETWORK: "core.rtcnetwork"
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: false,
5064
+ enableNetworkQuality: true,
4993
5065
  hackCreateOfferIssue: false,
4994
5066
  progressiveSetDelay: false,
4995
5067
  networkQuality: {
4996
5068
  networkQos: {
4997
5069
  1: {
4998
- "maxRtt": 250,
4999
- "maxLoss": 0.15
5070
+ maxRtt: 250,
5071
+ maxLoss: 0.15
5000
5072
  },
5001
5073
  2: {
5002
- "maxRtt": 500,
5003
- "maxLoss": 0.3,
5004
- "minRetransmittedRate": 0.2
5074
+ maxRtt: 500,
5075
+ maxLoss: 0.3,
5076
+ minRetransmittedRate: 0.2
5005
5077
  },
5006
5078
  3: {
5007
- "maxRtt": 750,
5008
- "maxLoss": 0.45,
5009
- "minRetransmittedRate": 0.35
5079
+ maxRtt: 750,
5080
+ maxLoss: 0.45,
5081
+ minRetransmittedRate: 0.35
5010
5082
  },
5011
5083
  4: {
5012
- "maxRtt": 1e3,
5013
- "maxLoss": 0.6,
5014
- "minRetransmittedRate": 0.5
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
- "jitterBuffer": null
5107
+ jitterBuffer: null
5036
5108
  },
5037
5109
  2: {
5038
- "jitterBuffer": 1.5
5110
+ jitterBuffer: 1.5
5039
5111
  },
5040
5112
  3: {
5041
- "jitterBuffer": 2
5113
+ jitterBuffer: 2
5042
5114
  },
5043
5115
  4: {
5044
- "jitterBuffer": 3
5116
+ jitterBuffer: 3
5045
5117
  },
5046
5118
  5: {
5047
- "jitterBuffer": 3
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(pc) {
5079
- return new Promise(function(resolve) {
5080
- var _pc$getStats;
5081
- (_pc$getStats = pc.getStats(null)) === null || _pc$getStats === void 0 ? void 0 : _pc$getStats.then(function(report) {
5082
- resolve(_getStats(report));
5083
- });
5084
- }).catch(function() {
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, interval) {
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
- _defineProperty$2(this, "_pc", null);
5159
- _defineProperty$2(this, "_lastVideoStats", null);
5160
- _defineProperty$2(this, "_lastRemoteVideoStats", null);
5161
- _defineProperty$2(this, "_timer", 0);
5162
- _defineProperty$2(this, "_timerInterval", 0);
5163
- _defineProperty$2(this, "_speedQueue", []);
5164
- _defineProperty$2(this, "_lostRateQueue", []);
5165
- _defineProperty$2(this, "_receivedRateQueue", []);
5166
- _defineProperty$2(this, "_currentSpeed", -1);
5167
- _defineProperty$2(this, "_currentLostRate", -1);
5168
- _defineProperty$2(this, "_currentReceivedRate", -1);
5169
- _defineProperty$2(this, "_evaluate", /* @__PURE__ */ _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee() {
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
- nowReceived = snapshoot.video.bytesReceived;
5196
- preReceived = _this._lastVideoStats.bytesReceived;
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
- _defineProperty$2(this, "_position", 0);
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 AudioStallObserver = /* @__PURE__ */ function() {
5934
- function AudioStallObserver2() {
5935
- _classCallCheck$3(this, AudioStallObserver2);
5936
- _defineProperty$2(this, "_audioStallTimer", null);
5937
- _defineProperty$2(this, "_preSample", null);
5938
- _defineProperty$2(this, "_isStallInPreReportEnd", false);
5939
- _defineProperty$2(this, "_stallList", []);
5940
- _defineProperty$2(this, "_audioTransceiver", null);
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 (AudioStallObserver2.interval >= 100) {
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 = null;
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 = null;
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, AudioStallObserver2.interval);
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, AudioStallObserver2.interval);
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 < AudioStallObserver2.interval * 0.5)) {
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 >= AudioStallObserver2.ratio * interval_samples_received;
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 AudioStallObserver2;
6229
+ return _AudioStallObserver2;
6134
6230
  }();
6135
- _defineProperty$2(AudioStallObserver, "interval", 100);
6136
- _defineProperty$2(AudioStallObserver, "ratio", 0.6);
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
- _defineProperty$2(this, "_handleVisibilityChange", function() {
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
- _defineProperty$2(this, "_framePause", function() {
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
- document.addEventListener("pagehide", this._framePause());
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
- document.removeEventListener("pagehide", this._framePause());
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(peer, networkQualityParams) {
6746
+ function NetworkQuality2(_peer, _networkQualityParams) {
6653
6747
  _classCallCheck$3(this, NetworkQuality2);
6654
- _defineProperty$2(this, "_preDownlinkStats", []);
6655
- this._peer = peer;
6656
- this._networkQualityParams = networkQualityParams;
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
- _defineProperty$2(_assertThisInitialized$1(_this), "_url", "");
6775
- _defineProperty$2(_assertThisInitialized$1(_this), "_pc", null);
6776
- _defineProperty$2(_assertThisInitialized$1(_this), "_audioTransceicer", null);
6777
- _defineProperty$2(_assertThisInitialized$1(_this), "_videoTransceicer", null);
6778
- _defineProperty$2(_assertThisInitialized$1(_this), "_mediaStream", null);
6779
- _defineProperty$2(_assertThisInitialized$1(_this), "_lastMediaStream", null);
6780
- _defineProperty$2(_assertThisInitialized$1(_this), "_media", null);
6781
- _defineProperty$2(_assertThisInitialized$1(_this), "_player", null);
6782
- _defineProperty$2(_assertThisInitialized$1(_this), "_opts", null);
6783
- _defineProperty$2(_assertThisInitialized$1(_this), "_loader", null);
6784
- _defineProperty$2(_assertThisInitialized$1(_this), "_networkEvaluate", null);
6785
- _defineProperty$2(_assertThisInitialized$1(_this), "_retry", 0);
6786
- _defineProperty$2(_assertThisInitialized$1(_this), "_waitingTimer", 0);
6787
- _defineProperty$2(_assertThisInitialized$1(_this), "_rctConnectStartTs", 0);
6788
- _defineProperty$2(_assertThisInitialized$1(_this), "_isReplacing", false);
6789
- _defineProperty$2(_assertThisInitialized$1(_this), "_checkStatsErrorTimer", null);
6790
- _defineProperty$2(_assertThisInitialized$1(_this), "_audioStallObserver", null);
6791
- _defineProperty$2(_assertThisInitialized$1(_this), "_videoStallObserver", null);
6792
- _defineProperty$2(_assertThisInitialized$1(_this), "_networkQuality", null);
6793
- _defineProperty$2(_assertThisInitialized$1(_this), "_preAudioStats", null);
6794
- _defineProperty$2(_assertThisInitialized$1(_this), "_preVideoStats", null);
6795
- _defineProperty$2(_assertThisInitialized$1(_this), "_rtcReportTimer", 0);
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
- _defineProperty$2(_assertThisInitialized$1(_this), "_onTrack", function(e) {
7226
+ }));
7227
+ _this._onTrack = function(e) {
6841
7228
  logger.log("addTrack: ", e.track, e.streams);
6842
- _this["_".concat(e.track.kind)] = e.track;
6843
- });
6844
- _defineProperty$2(_assertThisInitialized$1(_this), "_mockWaitingByTimeupdate", function() {
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
- _defineProperty$2(_assertThisInitialized$1(_this), "_onLoadedData", function() {
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
- _defineProperty$2(_assertThisInitialized$1(_this), "_setDelay", function(delayHint) {
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
- _defineProperty$2(_assertThisInitialized$1(_this), "_targetDelayHint", null);
6894
- _defineProperty$2(_assertThisInitialized$1(_this), "_setDelayTimer", null);
6895
- _defineProperty$2(_assertThisInitialized$1(_this), "_setDelayError", null);
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 = 9;
7309
+ _context4.next = 10;
6927
7310
  break;
6928
7311
  }
6929
7312
  return _context4.abrupt("return");
6930
- case 9:
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 14:
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
- _defineProperty$2(_assertThisInitialized$1(_this), "_getDelay", function() {
7413
+ }();
7414
+ _this._getDelay = function() {
7032
7415
  try {
7416
+ var _this$_audioTransceic6;
7033
7417
  var key = ["playoutDelayHint", "jitterBufferDelayHint", "jitterBufferTarget"].find(function(key2) {
7034
- return key2 in _this._videoTransceicer.receiver && key2 in _this._audioTransceicer.receiver;
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
- return _this._audioTransceicer.receiver[key];
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
- _defineProperty$2(_assertThisInitialized$1(_this), "_onLoaderRetry", function(error, retryTime) {
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 getStats$1() {
7096
- return getStats(this._pc);
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 _callee5(url) {
7519
+ var _load = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee6(url) {
7109
7520
  var _this2 = this;
7110
- var encodedTransformSupported, lastPc;
7111
- return _regeneratorRuntime$1().wrap(function _callee5$(_context5) {
7521
+ var lastPc, answerSdp, errorStr, preloadPromise, info, encodedTransformSupported;
7522
+ return _regeneratorRuntime$1().wrap(function _callee6$(_context6) {
7112
7523
  while (1)
7113
- switch (_context5.prev = _context5.next) {
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
- this._retry = this._opts.retryCount;
7529
+ lastPc = this._pc;
7118
7530
  if (!this._opts.hackCreateOfferIssue) {
7119
- _context5.next = 6;
7531
+ _context6.next = 7;
7120
7532
  break;
7121
7533
  }
7122
- _context5.next = 6;
7534
+ _context6.next = 7;
7123
7535
  return this._createEmptyPeer();
7124
- case 6:
7125
- encodedTransformSupported = isLegacyEncodedTransformSupported();
7126
- _context5.prev = 7;
7127
- lastPc = this._pc;
7128
- if (lastPc) {
7129
- lastPc.close();
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
- this._bindRTCEvents();
7135
- _context5.next = 14;
7136
- return this._connect(url);
7137
- case 14:
7138
- _context5.next = 19;
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 16:
7141
- _context5.prev = 16;
7142
- _context5.t0 = _context5["catch"](7);
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, _context5.t0));
7610
+ return _this2._emitError(StreamingError.create(ERR.OTHER, null, _context6.t1));
7145
7611
  });
7146
- case 19:
7612
+ case 54:
7147
7613
  case "end":
7148
- return _context5.stop();
7614
+ return _context6.stop();
7149
7615
  }
7150
- }, _callee5, this, [[7, 16]]);
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$_player$play;
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 = this._player.play()) === null || _this$_player$play === void 0 ? void 0 : _this$_player$play.finally(function() {
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
- this._media.addEventListener("timeupdate", this._mockWaitingByTimeupdate);
7285
- this._media.addEventListener("loadeddata", this._onLoadedData);
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: "_connect",
7750
+ key: "_getAnswerSdp",
7289
7751
  value: function() {
7290
- var _connect2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee6() {
7291
- var pc, offer, parsed, finnalUrl, _this$_opts, _answer$remoteSdp, _this$_opts2, _answer$remoteSdp2, _parsed$media, parseSession, sessionId, reqStart, res, answer, err, _parsed;
7292
- return _regeneratorRuntime$1().wrap(function _callee6$(_context6) {
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 (_context6.prev = _context6.next) {
7756
+ switch (_context7.prev = _context7.next) {
7295
7757
  case 0:
7296
- pc = this._pc;
7758
+ logger.log("_getAnswerSdp()");
7297
7759
  if (!pc.addTransceiver) {
7298
- _context6.next = 11;
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
- _context6.next = 8;
7774
+ _context7.next = 8;
7313
7775
  return pc.createOffer();
7314
7776
  case 8:
7315
- offer = _context6.sent;
7316
- _context6.next = 14;
7777
+ offer = _context7.sent;
7778
+ _context7.next = 14;
7317
7779
  break;
7318
7780
  case 11:
7319
- _context6.next = 13;
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 = _context6.sent;
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
- logger.log(offer.sdp);
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.sdp);
7355
- _context6.next = 23;
7830
+ logger.log("local offer modified:\n", offer);
7831
+ _context7.next = 25;
7356
7832
  return pc.setLocalDescription(offer);
7357
- case 23:
7833
+ case 25:
7358
7834
  finnalUrl = this._url;
7359
- _context6.prev = 24;
7835
+ _context7.prev = 26;
7360
7836
  if (this._opts.preProcessUrl) {
7361
7837
  finnalUrl = this._opts.preProcessUrl(finnalUrl).url;
7362
7838
  }
7363
- this._loader.finnalUrl = finnalUrl;
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
- _context6.next = 33;
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 33:
7381
- res = _context6.sent;
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
- _context6.next = 41;
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 _context6.abrupt("return");
7394
- case 41:
7871
+ return _context7.abrupt("return");
7872
+ case 45:
7395
7873
  if (!((answer === null || answer === void 0 ? void 0 : answer.code) !== 200)) {
7396
- _context6.next = 43;
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 43:
7401
- logger.log("answer:");
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 ? answer === null || answer === void 0 ? void 0 : (_answer$remoteSdp2 = answer.remoteSdp) === null || _answer$remoteSdp2 === void 0 ? void 0 : _answer$remoteSdp2.sdp : void 0,
7408
- parsedSdp: _parsed === null || _parsed === void 0 ? void 0 : (_parsed$media = _parsed.media) === null || _parsed$media === void 0 ? void 0 : _parsed$media.map(function(media) {
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
- _parsed.media.forEach(function(x) {
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
- x.fingerprint.hash = x.fingerprint.hash.toUpperCase();
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.remoteSdp.sdp = lib.write(_parsed);
7427
- logger.log("answer modified:\n", answer.remoteSdp.sdp);
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
- _context6.next = 53;
7949
+ _context8.next = 11;
7431
7950
  break;
7432
7951
  }
7433
- return _context6.abrupt("return");
7434
- case 53:
7435
- _context6.next = 55;
7436
- return pc.setRemoteDescription(answer.remoteSdp);
7437
- case 55:
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
- _context6.next = 62;
7441
- break;
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 _context6.stop();
7966
+ return _context8.stop();
7449
7967
  }
7450
- }, _callee6, this, [[24, 59]]);
7968
+ }, _callee8, this);
7451
7969
  }));
7452
- function _connect() {
7453
- return _connect2.apply(this, arguments);
7970
+ function _handleAnswerSdp(_x4, _x5) {
7971
+ return _handleAnswerSdp2.apply(this, arguments);
7454
7972
  }
7455
- return _connect;
7973
+ return _handleAnswerSdp;
7456
7974
  }()
7457
7975
  }, {
7458
7976
  key: "_listenPeerStateTimeout",
7459
7977
  value: function _listenPeerStateTimeout() {
7460
7978
  var _this6 = this;
7461
- this._peerStateTimer && this._clearPeerStateTimeout();
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
- clearTimeout(this._peerStateTimer);
7474
- this._peerStateTimer = null;
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
- this._rtcReportTimer = setInterval(/* @__PURE__ */ _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee7() {
7482
- var _this7$_audioTranscei, _this7$_videoTranscei;
7483
- var _yield$Promise$all3, _yield$Promise$all4, curAudioStats, curVideoStats, _this7$_audioStallObs, _this7$_videoStallObs, _this7$_networkQualit, _this7$_networkQualit2, audioStats, videoStats, audioStallInfo, videoStallInfo, _ref6, _ref7, quality, qualityInfo, av_sync_diff;
7484
- return _regeneratorRuntime$1().wrap(function _callee7$(_context7) {
7485
- while (1)
7486
- switch (_context7.prev = _context7.next) {
7487
- case 0:
7488
- 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))) {
7489
- _context7.next = 4;
7490
- break;
7491
- }
7492
- _this7._preAudioStats = null;
7493
- _this7._preVideoStats = null;
7494
- return _context7.abrupt("return");
7495
- case 4:
7496
- if (!_this7._audioStallObserver && _this7._audioTransceicer) {
7497
- _this7._audioStallObserver = new AudioStallObserver();
7498
- _this7._audioStallObserver.start(_this7._audioTransceicer);
7499
- }
7500
- if (!_this7._videoStallObserver && _this7._video) {
7501
- _this7._videoStallObserver = new VideoStallObserver();
7502
- _this7._videoStallObserver.start(_this7._media);
7503
- }
7504
- if (!_this7._networkQuality && _this7._opts.enableNetworkQuality) {
7505
- _this7._networkQuality = new NetworkQuality(_this7._pc, _this7._opts.networkQuality);
7506
- }
7507
- _context7.next = 9;
7508
- return Promise.all([getRecvAudioStats(_this7._audioTransceicer.receiver.getStats()), getRecvVideoStats(_this7._videoTransceicer.receiver.getStats())]);
7509
- case 9:
7510
- _yield$Promise$all3 = _context7.sent;
7511
- _yield$Promise$all4 = _slicedToArray(_yield$Promise$all3, 2);
7512
- curAudioStats = _yield$Promise$all4[0];
7513
- curVideoStats = _yield$Promise$all4[1];
7514
- if (!(_this7._preAudioStats && _this7._preVideoStats)) {
7515
- _context7.next = 26;
7516
- break;
7517
- }
7518
- audioStats = diffRecvAudioStats(_this7._preAudioStats, curAudioStats);
7519
- videoStats = diffRecvVideoStats(_this7._preVideoStats, curVideoStats);
7520
- _context7.next = 18;
7521
- return (_this7$_audioStallObs = _this7._audioStallObserver) === null || _this7$_audioStallObs === void 0 ? void 0 : _this7$_audioStallObs.getAudioStallInfo();
7522
- case 18:
7523
- audioStallInfo = _context7.sent;
7524
- _context7.next = 21;
7525
- return (_this7$_videoStallObs = _this7._videoStallObserver) === null || _this7$_videoStallObs === void 0 ? void 0 : _this7$_videoStallObs.getStallInfo({
7526
- interval: videoStats.statsInterval,
7527
- frameRateReceived: videoStats.frameRateReceived,
7528
- frameRateDecoded: videoStats.frameRateDecoded,
7529
- bitrate: videoStats.receivedKBitrate
7530
- });
7531
- case 21:
7532
- videoStallInfo = _context7.sent;
7533
- _ref6 = (_this7$_networkQualit = (_this7$_networkQualit2 = _this7._networkQuality) === null || _this7$_networkQualit2 === void 0 ? void 0 : _this7$_networkQualit2.getDownlinkQuality(_objectSpread2$2(_objectSpread2$2({}, audioStats), {}, {
7534
- stallDuration: audioStallInfo.stallDuration
7535
- }), _objectSpread2$2(_objectSpread2$2({}, videoStats), {}, {
7536
- stallDuration: videoStallInfo.stall.stallDuration100ms || videoStallInfo.stall.stallDuration500ms
7537
- }))) !== null && _this7$_networkQualit !== void 0 ? _this7$_networkQualit : [], _ref7 = _slicedToArray(_ref6, 2), quality = _ref7[0], qualityInfo = _ref7[1];
7538
- if (_this7._opts.enableAdaptiveJitterBuffer) {
7539
- _this7._handleJitterBuffer(qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.qualityQos, _this7._opts.adaptiveJitterBuffer, _this7._opts.networkStrategy);
7540
- }
7541
- if (videoStats.estimatedPlayoutTimestamp && audioStats.estimatedPlayoutTimestamp) {
7542
- av_sync_diff = videoStats.estimatedPlayoutTimestamp - audioStats.estimatedPlayoutTimestamp;
7543
- }
7544
- _this7.emit(EXTEND_EVENTS.RTC_NETWORK, {
7545
- interval: videoStats.statsInterval,
7546
- network_quality: quality,
7547
- audio_stall_duration: audioStallInfo.stallDuration,
7548
- audio_stall_count: audioStallInfo.stallCount,
7549
- audio_stall_time_per_100sec: audioStallInfo.stallDuration / audioStats.statsInterval * 100,
7550
- audio_stall_count_per_100sec: audioStallInfo.stallCount / audioStats.statsInterval * 100 * 1e3,
7551
- video_stall_duration: videoStallInfo.stall.stallDuration500ms,
7552
- video_stall_count: videoStallInfo.stall.stallCount500ms,
7553
- video_stall_duration_100ms: videoStallInfo.stall.stallDuration100ms,
7554
- video_stall_count_100ms: videoStallInfo.stall.stallCount100ms,
7555
- video_stall_time_per_100sec: videoStallInfo.stall.stallDuration500ms / videoStats.statsInterval * 100,
7556
- video_stall_count_per_100sec: videoStallInfo.stall.stallCount500ms / videoStats.statsInterval * 100 * 1e3,
7557
- rtt: videoStats.rtt,
7558
- video_jb_delay: videoStats.jitterBufferDelay,
7559
- audio_jb_delay: audioStats.jitterBufferDelay,
7560
- audio_lost_rate: audioStats.audioLossRate,
7561
- video_lost_rate: videoStats.videoLossRate,
7562
- video_retransmitted_rate: videoStats.retransmittedRate,
7563
- quality_audio_level: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.audioLevel,
7564
- quality_video_level: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.videoLevel,
7565
- quality_audio_qos: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.audioQos,
7566
- quality_video_qos: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.videoQos,
7567
- quality_qos: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.qualityQos,
7568
- quality_audio_qoe: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.audioQoe,
7569
- quality_video_qoe: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.videoQoe,
7570
- current_delay: _this7._getDelay(),
7571
- visibility_state: document.visibilityState,
7572
- target_delay: _this7._targetDelayHint,
7573
- av_sync_diff,
7574
- set_delay_error: _this7._setDelayError || null
7575
- });
7576
- case 26:
7577
- _this7._preAudioStats = curAudioStats;
7578
- _this7._preVideoStats = curVideoStats;
7579
- _this7.set_delay_error = null;
7580
- case 29:
7581
- case "end":
7582
- return _context7.stop();
7583
- }
7584
- }, _callee7);
7585
- })), 2e3);
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(Boolean);
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 = null;
7623
- this._videoStallObserver = null;
7624
- this._networkQuality = null;
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$_loader, _this$_networkEvaluat2;
7636
- (_this$_loader = this._loader) === null || _this$_loader === void 0 ? void 0 : _this$_loader.cancel();
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 _callee8() {
8216
+ var _createEmptyPeer2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee10() {
7664
8217
  var pc;
7665
- return _regeneratorRuntime$1().wrap(function _callee8$(_context8) {
8218
+ return _regeneratorRuntime$1().wrap(function _callee10$(_context10) {
7666
8219
  while (1)
7667
- switch (_context8.prev = _context8.next) {
8220
+ switch (_context10.prev = _context10.next) {
7668
8221
  case 0:
7669
8222
  pc = new RTCPeerConnection();
7670
- _context8.next = 3;
8223
+ _context10.next = 3;
7671
8224
  return pc.createOffer();
7672
8225
  case 3:
7673
8226
  pc.close();
7674
- pc = null;
7675
- case 5:
8227
+ case 4:
7676
8228
  case "end":
7677
- return _context8.stop();
8229
+ return _context10.stop();
7678
8230
  }
7679
- }, _callee8);
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
- originalDescriptor.set.call(this, val);
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$_media;
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$_media = this._media) === null || _this$_media === void 0 ? void 0 : _this$_media.removeEventListener("timeupdate", this._mockWaitingByTimeupdate);
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
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
7763
- args[_key] = arguments[_key];
7764
- }
7765
- _this = _super.call.apply(_super, [this].concat(args));
7766
- _defineProperty$2(_assertThisInitialized$1(_this), "_rts", null);
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
- _defineProperty$2(_assertThisInitialized$1(_this), "_reInit", function() {
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
- _defineProperty$2(_assertThisInitialized$1(_this), "_init", function() {
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
- _defineProperty$2(_assertThisInitialized$1(_this), "_onSwitchURL", function(url) {
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
- _defineProperty$2(_assertThisInitialized$1(_this), "destroy", function() {
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: "videoTrack",
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.videoTack;
8425
+ return ((_this$_rts5 = this._rts) === null || _this$_rts5 === void 0 ? void 0 : _this$_rts5.getJitterBufferDelay()) || 0;
7838
8426
  }
7839
8427
  }, {
7840
- key: "audioTrack",
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.audioTrack;
8431
+ return (_this$_rts6 = this._rts) === null || _this$_rts6 === void 0 ? void 0 : _this$_rts6.loader;
7844
8432
  }
7845
8433
  }, {
7846
- key: "core",
8434
+ key: "videoTrack",
7847
8435
  get: function get() {
7848
- return this._rts;
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: "loader",
8440
+ key: "audioTrack",
7852
8441
  get: function get() {
7853
- var _this$_rts7;
7854
- return (_this$_rts7 = this._rts) === null || _this$_rts7 === void 0 ? void 0 : _this$_rts7.loader;
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.47";
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
- this._originSwitchFn = this.player.switchURL.bind(this.player);
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$_rts8;
7910
- return (_this$_rts8 = this._rts) === null || _this$_rts8 === void 0 ? void 0 : _this$_rts8.getStats();
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$_rts9;
7916
- return (_this$_rts9 = this._rts) === null || _this$_rts9 === void 0 ? void 0 : _this$_rts9.getStatsSnapshoot();
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$_rts10;
7922
- return (_this$_rts10 = this._rts) === null || _this$_rts10 === void 0 ? void 0 : _this$_rts10.networkStats;
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$_rts11;
7928
- (_this$_rts11 = this._rts) === null || _this$_rts11 === void 0 ? void 0 : _this$_rts11._setDelay(delayHint);
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$_rts12, _this$config, _this$_rts14;
7940
- if (!((_this$_rts12 = this._rts) !== null && _this$_rts12 !== void 0 && _this$_rts12._pc)) {
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$_rts13;
7945
- this._mediaStream = (_this$_rts13 = this._rts) === null || _this$_rts13 === void 0 ? void 0 : _this$_rts13._mediaStream;
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$_rts14 = this._rts) === null || _this$_rts14 === void 0 ? void 0 : _this$_rts14.destroy(true);
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 _this3$_rtsOpts = _this3._rtsOpts, backupConstruct = _this3$_rtsOpts.backupConstruct, backupURL = _this3$_rtsOpts.backupURL;
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
- return x.codec === "H264" && (!targetProfileLevel || x.config.indexOf(targetProfileLevel) !== -1);
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
- return x.codec === "H264" && (!targetProfileLevel || x.config.indexOf(targetProfileLevel) !== -1);
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);