@volcengine/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.
@@ -2854,7 +2854,7 @@ function _arrayLikeToArray$f(arr, len) {
2854
2854
  arr2[i2] = arr[i2];
2855
2855
  return arr2;
2856
2856
  }
2857
- function _createForOfIteratorHelper$4(o2, allowArrayLike) {
2857
+ function _createForOfIteratorHelper$5(o2, allowArrayLike) {
2858
2858
  var it = typeof Symbol !== "undefined" && o2[Symbol.iterator] || o2["@@iterator"];
2859
2859
  if (!it) {
2860
2860
  if (Array.isArray(o2) || (it = _unsupportedIterableToArray$f(o2)) || allowArrayLike && o2 && typeof o2.length === "number") {
@@ -4990,7 +4990,7 @@ var XhrLoader$4 = /* @__PURE__ */ function(_EventEmitter) {
4990
4990
  value: function _getHeaders(xhr) {
4991
4991
  var headerLines = xhr.getAllResponseHeaders().trim().split("\r\n");
4992
4992
  var headers = {};
4993
- var _iterator = _createForOfIteratorHelper$4(headerLines), _step;
4993
+ var _iterator = _createForOfIteratorHelper$5(headerLines), _step;
4994
4994
  try {
4995
4995
  for (_iterator.s(); !(_step = _iterator.n()).done; ) {
4996
4996
  var header = _step.value;
@@ -28067,6 +28067,60 @@ function _nonIterableSpread$9() {
28067
28067
  function _nonIterableRest$7() {
28068
28068
  throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
28069
28069
  }
28070
+ function _createForOfIteratorHelper$4(o2, allowArrayLike) {
28071
+ var it = typeof Symbol !== "undefined" && o2[Symbol.iterator] || o2["@@iterator"];
28072
+ if (!it) {
28073
+ if (Array.isArray(o2) || (it = _unsupportedIterableToArray$d(o2)) || allowArrayLike && o2 && typeof o2.length === "number") {
28074
+ if (it)
28075
+ o2 = it;
28076
+ var i2 = 0;
28077
+ var F2 = function() {
28078
+ };
28079
+ return {
28080
+ s: F2,
28081
+ n: function() {
28082
+ if (i2 >= o2.length)
28083
+ return {
28084
+ done: true
28085
+ };
28086
+ return {
28087
+ done: false,
28088
+ value: o2[i2++]
28089
+ };
28090
+ },
28091
+ e: function(e4) {
28092
+ throw e4;
28093
+ },
28094
+ f: F2
28095
+ };
28096
+ }
28097
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
28098
+ }
28099
+ var normalCompletion = true, didErr = false, err;
28100
+ return {
28101
+ s: function() {
28102
+ it = it.call(o2);
28103
+ },
28104
+ n: function() {
28105
+ var step = it.next();
28106
+ normalCompletion = step.done;
28107
+ return step;
28108
+ },
28109
+ e: function(e4) {
28110
+ didErr = true;
28111
+ err = e4;
28112
+ },
28113
+ f: function() {
28114
+ try {
28115
+ if (!normalCompletion && it.return != null)
28116
+ it.return();
28117
+ } finally {
28118
+ if (didErr)
28119
+ throw err;
28120
+ }
28121
+ }
28122
+ };
28123
+ }
28070
28124
  function _toPrimitive$b(input, hint) {
28071
28125
  if (typeof input !== "object" || input === null)
28072
28126
  return input;
@@ -30248,10 +30302,28 @@ var NetLoader$2 = /* @__PURE__ */ function(_EventEmitter) {
30248
30302
  }]);
30249
30303
  return NetLoader2;
30250
30304
  }(EventEmitter$2);
30251
- var EXTEND_EVENTS = {
30252
- RTC_STATE_CHANGE: "core.rtcstatechange",
30253
- RTC_NETWORK: "core.rtcnetwork"
30254
- };
30305
+ var EXTEND_EVENTS = /* @__PURE__ */ function(EXTEND_EVENTS2) {
30306
+ EXTEND_EVENTS2["RTC_STATE_CHANGE"] = "core.rtcstatechange";
30307
+ EXTEND_EVENTS2["RTC_NETWORK"] = "core.rtcnetwork";
30308
+ EXTEND_EVENTS2["RTC_FIRST_FRAME"] = "core.rtcfirstframe";
30309
+ return EXTEND_EVENTS2;
30310
+ }(EXTEND_EVENTS || {});
30311
+ var RTC_FIRST_FRAME_STATE = /* @__PURE__ */ function(RTC_FIRST_FRAME_STATE2) {
30312
+ RTC_FIRST_FRAME_STATE2["LOAD_START"] = "start_load";
30313
+ RTC_FIRST_FRAME_STATE2["OFFER_SDP_READY"] = "offer_sdp_ready";
30314
+ RTC_FIRST_FRAME_STATE2["ANSWER_SDP_RECV"] = "answer_sdp_recv";
30315
+ RTC_FIRST_FRAME_STATE2["ANSWER_SDP_READY"] = "answer_sdp_ready";
30316
+ RTC_FIRST_FRAME_STATE2["ICE_CONNECTED"] = "ice_connected";
30317
+ RTC_FIRST_FRAME_STATE2["DTLS_CONNECTED"] = "dtls_connected";
30318
+ RTC_FIRST_FRAME_STATE2["PEER_CONNECTED"] = "peer_connected";
30319
+ RTC_FIRST_FRAME_STATE2["FIRST_PACKET_RECV"] = "first_packet_recv";
30320
+ RTC_FIRST_FRAME_STATE2["FIRST_FRAME_RECV"] = "first_frame_recv";
30321
+ RTC_FIRST_FRAME_STATE2["FIRST_FRAME_DECODED"] = "first_frame_decoded";
30322
+ RTC_FIRST_FRAME_STATE2["VIDEO_PLAYING"] = "video_playing";
30323
+ RTC_FIRST_FRAME_STATE2["VIDEO_CANPLAY"] = "video_canplay";
30324
+ RTC_FIRST_FRAME_STATE2["VIDEO_LOADEDDATA"] = "video_loadeddata";
30325
+ return RTC_FIRST_FRAME_STATE2;
30326
+ }(RTC_FIRST_FRAME_STATE || {});
30255
30327
  var lib$1 = {};
30256
30328
  var parser$1 = {};
30257
30329
  var grammar$2 = { exports: {} };
@@ -30945,29 +31017,29 @@ function getOption(options) {
30945
31017
  enableOriginSdpLogger: false,
30946
31018
  checkStatsErrorDelay: 5e3,
30947
31019
  connectionStateChangeTimeout: 5e3,
30948
- enableNetworkQuality: false,
31020
+ enableNetworkQuality: true,
30949
31021
  hackCreateOfferIssue: false,
30950
31022
  progressiveSetDelay: false,
30951
31023
  networkQuality: {
30952
31024
  networkQos: {
30953
31025
  1: {
30954
- "maxRtt": 250,
30955
- "maxLoss": 0.15
31026
+ maxRtt: 250,
31027
+ maxLoss: 0.15
30956
31028
  },
30957
31029
  2: {
30958
- "maxRtt": 500,
30959
- "maxLoss": 0.3,
30960
- "minRetransmittedRate": 0.2
31030
+ maxRtt: 500,
31031
+ maxLoss: 0.3,
31032
+ minRetransmittedRate: 0.2
30961
31033
  },
30962
31034
  3: {
30963
- "maxRtt": 750,
30964
- "maxLoss": 0.45,
30965
- "minRetransmittedRate": 0.35
31035
+ maxRtt: 750,
31036
+ maxLoss: 0.45,
31037
+ minRetransmittedRate: 0.35
30966
31038
  },
30967
31039
  4: {
30968
- "maxRtt": 1e3,
30969
- "maxLoss": 0.6,
30970
- "minRetransmittedRate": 0.5
31040
+ maxRtt: 1e3,
31041
+ maxLoss: 0.6,
31042
+ minRetransmittedRate: 0.5
30971
31043
  }
30972
31044
  },
30973
31045
  networkQoe: {
@@ -30988,19 +31060,19 @@ function getOption(options) {
30988
31060
  }, adaptiveJitterBuffer),
30989
31061
  networkStrategy: {
30990
31062
  1: {
30991
- "jitterBuffer": null
31063
+ jitterBuffer: null
30992
31064
  },
30993
31065
  2: {
30994
- "jitterBuffer": 1.5
31066
+ jitterBuffer: 1.5
30995
31067
  },
30996
31068
  3: {
30997
- "jitterBuffer": 2
31069
+ jitterBuffer: 2
30998
31070
  },
30999
31071
  4: {
31000
- "jitterBuffer": 3
31072
+ jitterBuffer: 3
31001
31073
  },
31002
31074
  5: {
31003
- "jitterBuffer": 3
31075
+ jitterBuffer: 3
31004
31076
  }
31005
31077
  }
31006
31078
  }, opts);
@@ -31031,14 +31103,36 @@ function _getStats(stats) {
31031
31103
  };
31032
31104
  });
31033
31105
  }
31034
- function getStats(pc) {
31035
- return new Promise(function(resolve3) {
31036
- var _pc$getStats;
31037
- (_pc$getStats = pc.getStats(null)) === null || _pc$getStats === void 0 ? void 0 : _pc$getStats.then(function(report) {
31038
- resolve3(_getStats(report));
31039
- });
31040
- }).catch(function() {
31041
- });
31106
+ function getStats(_x) {
31107
+ return _getStats2.apply(this, arguments);
31108
+ }
31109
+ function _getStats2() {
31110
+ _getStats2 = _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee2(pc) {
31111
+ return _regeneratorRuntime$a().wrap(function _callee2$(_context2) {
31112
+ while (1)
31113
+ switch (_context2.prev = _context2.next) {
31114
+ case 0:
31115
+ if (pc) {
31116
+ _context2.next = 2;
31117
+ break;
31118
+ }
31119
+ return _context2.abrupt("return", []);
31120
+ case 2:
31121
+ return _context2.abrupt("return", new Promise(function(resolve3) {
31122
+ var _pc$getStats;
31123
+ (_pc$getStats = pc.getStats(null)) === null || _pc$getStats === void 0 ? void 0 : _pc$getStats.then(function(report) {
31124
+ resolve3(_getStats(report));
31125
+ });
31126
+ }).catch(function() {
31127
+ return [];
31128
+ }));
31129
+ case 3:
31130
+ case "end":
31131
+ return _context2.stop();
31132
+ }
31133
+ }, _callee2);
31134
+ }));
31135
+ return _getStats2.apply(this, arguments);
31042
31136
  }
31043
31137
  function getStatsSnapshoot(stats) {
31044
31138
  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;
@@ -31108,22 +31202,23 @@ function getStatsSnapshoot(stats) {
31108
31202
  }
31109
31203
  var QUEUE_SIZE = 5;
31110
31204
  var NetworkEvaluate = /* @__PURE__ */ function() {
31111
- function NetworkEvaluate2(pc, interval) {
31205
+ function NetworkEvaluate2(pc) {
31112
31206
  var _this = this;
31207
+ var interval = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 1e3;
31113
31208
  _classCallCheck$k(this, NetworkEvaluate2);
31114
- _defineProperty$i(this, "_pc", null);
31115
- _defineProperty$i(this, "_lastVideoStats", null);
31116
- _defineProperty$i(this, "_lastRemoteVideoStats", null);
31117
- _defineProperty$i(this, "_timer", 0);
31118
- _defineProperty$i(this, "_timerInterval", 0);
31119
- _defineProperty$i(this, "_speedQueue", []);
31120
- _defineProperty$i(this, "_lostRateQueue", []);
31121
- _defineProperty$i(this, "_receivedRateQueue", []);
31122
- _defineProperty$i(this, "_currentSpeed", -1);
31123
- _defineProperty$i(this, "_currentLostRate", -1);
31124
- _defineProperty$i(this, "_currentReceivedRate", -1);
31125
- _defineProperty$i(this, "_evaluate", /* @__PURE__ */ _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee() {
31126
- var snapshoot, _snapshoot$video, nowBytes, nowPkgLost, nowPkg, _this$_lastVideoStats, preBytes, prePkgLost, prePkg, lost, pkgReceived, nowReceived, preReceived, _snapshoot$videoRemot, nowRemoteSent, preRemoteSent;
31209
+ this._pc = null;
31210
+ this._lastVideoStats = null;
31211
+ this._lastRemoteVideoStats = null;
31212
+ this._timer = 0;
31213
+ this._timerInterval = 0;
31214
+ this._speedQueue = [];
31215
+ this._lostRateQueue = [];
31216
+ this._receivedRateQueue = [];
31217
+ this._currentSpeed = -1;
31218
+ this._currentLostRate = -1;
31219
+ this._currentReceivedRate = -1;
31220
+ this._evaluate = /* @__PURE__ */ _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee() {
31221
+ var snapshoot, _snapshoot$video, nowBytes, nowPkgLost, nowPkg, _this$_lastVideoStats, preBytes, prePkgLost, prePkg, lost, pkgReceived, _ref22, _ref2$bytesReceived, nowReceived, _ref32, _ref3$bytesReceived, preReceived, _snapshoot$videoRemot, nowRemoteSent, preRemoteSent;
31127
31222
  return _regeneratorRuntime$a().wrap(function _callee$(_context) {
31128
31223
  while (1)
31129
31224
  switch (_context.prev = _context.next) {
@@ -31148,8 +31243,8 @@ var NetworkEvaluate = /* @__PURE__ */ function() {
31148
31243
  }
31149
31244
  }
31150
31245
  if (_this._lastRemoteVideoStats && snapshoot !== null && snapshoot !== void 0 && snapshoot.videoRemote) {
31151
- nowReceived = snapshoot.video.bytesReceived;
31152
- preReceived = _this._lastVideoStats.bytesReceived;
31246
+ _ref22 = snapshoot.video || {}, _ref2$bytesReceived = _ref22.bytesReceived, nowReceived = _ref2$bytesReceived === void 0 ? 0 : _ref2$bytesReceived;
31247
+ _ref32 = _this._lastVideoStats || {}, _ref3$bytesReceived = _ref32.bytesReceived, preReceived = _ref3$bytesReceived === void 0 ? 0 : _ref3$bytesReceived;
31153
31248
  _snapshoot$videoRemot = snapshoot === null || snapshoot === void 0 ? void 0 : snapshoot.videoRemote, nowRemoteSent = _snapshoot$videoRemot.bytesSent;
31154
31249
  preRemoteSent = _this._lastRemoteVideoStats.bytesSent;
31155
31250
  if (preRemoteSent && nowRemoteSent && nowRemoteSent - preRemoteSent > 0) {
@@ -31168,7 +31263,7 @@ var NetworkEvaluate = /* @__PURE__ */ function() {
31168
31263
  return _context.stop();
31169
31264
  }
31170
31265
  }, _callee, null, [[0, 10]]);
31171
- })));
31266
+ }));
31172
31267
  this._pc = pc;
31173
31268
  this._timerInterval = interval;
31174
31269
  this.start(interval);
@@ -31283,6 +31378,9 @@ function getCapacity() {
31283
31378
  return pc.createOffer().then(function(offer) {
31284
31379
  var _sdpJson$media, _sdpJson$media2, _vMedia$rtp, _aMedia$rtp;
31285
31380
  logger$b.log(offer.sdp);
31381
+ if (!offer.sdp) {
31382
+ return Promise.reject("createOffer no sdp");
31383
+ }
31286
31384
  var sdpJson = lib$1.parse(offer.sdp);
31287
31385
  var vMedia = (_sdpJson$media = sdpJson.media) === null || _sdpJson$media === void 0 ? void 0 : _sdpJson$media.filter(function(x2) {
31288
31386
  return x2.type === "video";
@@ -31470,7 +31568,7 @@ var Nalunit = {
31470
31568
  var RTCDataView = /* @__PURE__ */ function() {
31471
31569
  function RTCDataView2(buffer2) {
31472
31570
  _classCallCheck$k(this, RTCDataView2);
31473
- _defineProperty$i(this, "_position", 0);
31571
+ this._position = 0;
31474
31572
  this._dataview = new DataView(buffer2);
31475
31573
  }
31476
31574
  _createClass$k(RTCDataView2, [{
@@ -31872,7 +31970,7 @@ if (typeof self !== "undefined" && self.constructor.name === "DedicatedWorkerGlo
31872
31970
  transformer.readable.pipeThrough(transform).pipeTo(event.transformer.writable);
31873
31971
  });
31874
31972
  }
31875
- var encodedJs$5 = "IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBlPXtnZXROQUxVbml0czpmdW5jdGlvbih0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2lmKHQubGVuZ3RoLXQucG9zaXRpb248NClyZXR1cm5bXTt2YXIgcj10LnBvc2l0aW9uO3JldHVybiAxPT09dC5nZXRJbnQzMihyKXx8MD09PXQuZ2V0SW50MTYocikmJjE9PT10LmdldEludDgocisyKT9lLmdldEFubmV4Yk5hbHModCxuKTplLmdldEF2Y2NOYWxzKHQsbil9LGdldEFubmV4Yk5hbHM6ZnVuY3Rpb24odCxuKXtmb3IodmFyIHI9W10saT1lLmdldEhlYWRlclBvc2l0aW9uQW5uZXhCKHQpLGE9aS5wb3Msbz1hO2E8dC5sZW5ndGgtNDspe3ZhciB1PW5ldyBVaW50OEFycmF5KHQuYnVmZmVyLnNsaWNlKGEsYStpLmhlYWRlckxlbmd0aCkpO2kucG9zPT09dC5wb3NpdGlvbiYmdC5za2lwKGkuaGVhZGVyTGVuZ3RoKSxvPShpPWUuZ2V0SGVhZGVyUG9zaXRpb25Bbm5leEIodCkpLnBvczt2YXIgcz17aGVhZGVyOnUsYm9keTpuZXcgVWludDhBcnJheSh0LmJ1ZmZlci5zbGljZShhK3UuYnl0ZUxlbmd0aCxvKSksdHlwZTotMX07bj9lLmFuYWx5c2VIMjY1TmFsKHMpOmUuYW5hbHlzZU5hbChzKSwocy50eXBlPD05fHxuJiZzLnR5cGU8PTQwKSYmMCE9PXMudHlwZSYmci5wdXNoKHMpLHQuc2tpcChvLXQucG9zaXRpb24pLGE9b31yZXR1cm4gcn0sZ2V0QXZjY05hbHM6ZnVuY3Rpb24odCxuKXtmb3IodmFyIHI9W107dC5wb3NpdGlvbjx0Lmxlbmd0aC00Oyl7dmFyIGk9dC5nZXRJbnQzMih0LnBvc2l0aW9uKTtpZighKHQubGVuZ3RoLXQucG9zaXRpb24+PWkpKWJyZWFrO3ZhciBhPW5ldyBVaW50OEFycmF5KHQuYnVmZmVyLnNsaWNlKHQucG9zaXRpb24sdC5wb3NpdGlvbis0KSk7dC5za2lwKDQpO3ZhciBvPW5ldyBVaW50OEFycmF5KHQuYnVmZmVyLnNsaWNlKHQucG9zaXRpb24sdC5wb3NpdGlvbitpKSk7dC5za2lwKGkpO3ZhciB1PXtoZWFkZXI6YSxib2R5Om8sdHlwZTotMX07bj9lLmFuYWx5c2VIMjY1TmFsKHUpOmUuYW5hbHlzZU5hbCh1KSx1LnR5cGU8PTkmJjAhPT11LnR5cGUmJnIucHVzaCh1KX1yZXR1cm4gcn0sYW5hbHlzZU5hbDpmdW5jdGlvbihlKXt2YXIgdD0zMSZlLmJvZHlbMF07c3dpdGNoKGUudHlwZT10LHQpe2Nhc2UgMTplLm5kcj0hMDticmVhaztjYXNlIDU6ZS5pZHI9ITA7YnJlYWs7Y2FzZSA2OmUuc2VpPSEwO2JyZWFrO2Nhc2UgNzplLnNwcz0hMDticmVhaztjYXNlIDg6ZS5wcHM9ITB9fSxhbmFseXNlSDI2NU5hbDpmdW5jdGlvbihlKXt2YXIgdD0oMTI2JmUuYm9keVswXSk+PjE7c3dpdGNoKGUudHlwZT10LHQpe2Nhc2UgMzk6Y2FzZSA0MDplLnNlaT0hMH19LGdldEhlYWRlclBvc2l0aW9uQW5uZXhCOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLnBvc2l0aW9uLG49MCxyPWUubGVuZ3RoOzMhPT1uJiY0IT09biYmdDxyLTQ7KTA9PT1lLmdldEludDE2KHQpPzE9PT1lLmdldEludDE2KHQrMik/bj00OjE9PT1lLmdldEludDgodCsyKT9uPTM6dCsrOnQrKztyZXR1cm4gdD09PXItNCYmKDA9PT1lLmdldEludDE2KHQpPzE9PT1lLmdldEludDE2KHQrMik/bj00OnQ9cjoodCsrLDA9PT1lLmdldEludDE2KHQpJiYxPT09ZS5nZXRJbnQ4KHQpP249Mzp0PXIpKSx7cG9zOnQsaGVhZGVyTGVuZ3RoOm59fSxpc0gyNjVWaWRlb0ZyYW1lOmZ1bmN0aW9uKGUpe3ZhciB0LG47cmV0dXJuKChudWxsPT09KHQ9ZS5nZXRNZXRhZGF0YSl8fHZvaWQgMD09PXR8fG51bGw9PT0obj10LmNhbGwoZSkpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLm1pbWVUeXBlKXx8IiIpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoImgyNjUiKX19O2Z1bmN0aW9uIHQoZSl7cmV0dXJuKHQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBuKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl07aS5lbnVtZXJhYmxlPWkuZW51bWVyYWJsZXx8ITEsaS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGkmJihpLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyKGkua2V5KSxpKX19ZnVuY3Rpb24gcihlKXt2YXIgdD1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT10eXBlb2YgZXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIG49ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PW4pe3ZhciByPW4uY2FsbChlLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShlKX0oZSwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6U3RyaW5nKHQpfXZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt2YXIgbixpLGE7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksbj10aGlzLGE9MCwoaT1yKGk9Il9wb3NpdGlvbiIpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4saSx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5baV09YSx0aGlzLl9kYXRhdmlldz1uZXcgRGF0YVZpZXcodCl9dmFyIHQsaSxhO3JldHVybiB0PWUsYT1be2tleToicmVhZEJ5dGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtzd2l0Y2godCl7Y2FzZSAxOnI9bj9lLmdldEludDgoZS5wb3NpdGlvbik6ZS5nZXRVaW50OChlLnBvc2l0aW9uKTticmVhaztjYXNlIDI6cj1uP2UuZ2V0SW50MTYoZS5wb3NpdGlvbik6ZS5nZXRVaW50MTYoZS5wb3NpdGlvbik7YnJlYWs7Y2FzZSAzOmlmKG4pdGhyb3cgbmV3IEVycm9yKCJub3Qgc3VwcG9ydGVkIGZvciByZWFkQnl0ZSAzIik7cj1lLmdldFVpbnQ4KGUucG9zaXRpb24pPDwxNixyfD1lLmdldFVpbnQ4KGUucG9zaXRpb24rMSk8PDgscnw9ZS5nZXRVaW50OChlLnBvc2l0aW9uKzIpO2JyZWFrO2Nhc2UgNDpyPW4/ZS5nZXRJbnQzMihlLnBvc2l0aW9uKTplLmdldFVpbnQzMihlLnBvc2l0aW9uKTticmVhaztjYXNlIDg6aWYobil0aHJvdyBuZXcgRXJyb3IoIm5vdCBzdXBwb3J0ZWQgZm9yIHJlYWRCb2R5IDgiKTtyPWUuZ2V0VWludDMyKGUucG9zaXRpb24pPDwzMixyfD1lLmdldFVpbnQzMihlLnBvc2l0aW9uKzQpO2JyZWFrO2RlZmF1bHQ6cj0iIn1yZXR1cm4gZS5wb3NpdGlvbis9dCxyfX1dLChpPVt7a2V5OiJsZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJ1ZmZlci5ieXRlTGVuZ3RofX0se2tleToiYnVmZmVyIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YXZpZXcuYnVmZmVyfX0se2tleToicG9zaXRpb24iLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3NpdGlvbn0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3Bvc2l0aW9uPWV9fSx7a2V5OiJiYWNrIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnBvc2l0aW9uLT1lfX0se2tleToiZ2V0VWludDgiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9kYXRhdmlldy5nZXRVaW50OChlKX19LHtrZXk6ImdldEludDgiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9kYXRhdmlldy5nZXRJbnQ4KGUpfX0se2tleToiZ2V0SW50MTYiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9kYXRhdmlldy5nZXRJbnQxNihlKX19LHtrZXk6ImdldFVpbnQxNiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2RhdGF2aWV3LmdldFVpbnQxNihlKX19LHtrZXk6ImdldFVpbnQzMiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2RhdGF2aWV3LmdldFVpbnQzMihlKX19LHtrZXk6ImdldEludDMyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fZGF0YXZpZXcuZ2V0SW50MzIoZSl9fSx7a2V5OiJza2lwIix2YWx1ZTpmdW5jdGlvbih0KXtmb3IodmFyIG49TWF0aC5mbG9vcih0LzQpLHI9dCU0LGk9MDtpPG47aSsrKWUucmVhZEJ5dGUodGhpcyw0KTtyPjAmJmUucmVhZEJ5dGUodGhpcyxyKX19LHtrZXk6InJlYWRVaW50OCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDEpfX0se2tleToicmVhZFVpbnQxNiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDIpfX0se2tleToicmVhZFVpbnQyNCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDMpfX0se2tleToicmVhZFVpbnQzMiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDQpfX0se2tleToicmVhZFVpbnQ2NCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDgpfX0se2tleToicmVhZEludDgiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGUucmVhZEJ5dGUodGhpcywxLCEwKX19LHtrZXk6InJlYWRJbnQxNiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDIsITApfX0se2tleToicmVhZEludDMyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBlLnJlYWRCeXRlKHRoaXMsNCwhMCl9fSx7a2V5OiJ3cml0ZVVpbnQzMiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KFtlPj4+MjQmMjU1LGU+Pj4xNiYyNTUsZT4+PjgmMjU1LDI1NSZlXSl9fV0pJiZuKHQucHJvdG90eXBlLGkpLGEmJm4odCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO2Z1bmN0aW9uIGEoZSxuKXtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIGk9bltyXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLChhPWkua2V5LG89dm9pZCAwLG89ZnVuY3Rpb24oZSxuKXtpZigib2JqZWN0IiE9PXQoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgaT1yLmNhbGwoZSxufHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09dChpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PW4/U3RyaW5nOk51bWJlcikoZSl9KGEsInN0cmluZyIpLCJzeW1ib2wiPT09dChvKT9vOlN0cmluZyhvKSksaSl9dmFyIGEsb31mdW5jdGlvbiBvKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3JldHVybihlW3RdPDwyND4+PjApKyhlW3QrMV08PDE2KSsoZVt0KzJdPDw4KSsoZVt0KzNdfHwwKX12YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKX12YXIgdCxuLHI7cmV0dXJuIHQ9ZSxyPVt7a2V5OiJwYXJzZUFubmV4QiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ieXRlTGVuZ3RoLTEsbj0wO2Rve2lmKDAhPT1lW3RdKWJyZWFrO24rKyx0LS19d2hpbGUodD4wKTtuPj0zJiYoZT1lLnN1YmFycmF5KDAsdCsxKSk7Zm9yKHZhciByPWUubGVuZ3RoLGk9MixhPTA7bnVsbCE9PWVbaV0mJnZvaWQgMCE9PWVbaV0mJjEhPT1lW2ldOylpKys7aWYoKGE9MisgKytpKT49cilyZXR1cm5bXTtmb3IodmFyIG89W107YTxyOylzd2l0Y2goZVthXSl7Y2FzZSAwOmlmKDAhPT1lW2EtMV0pe2ErPTI7YnJlYWt9aWYoMCE9PWVbYS0yXSl7YSsrO2JyZWFrfWlmKGE8ci0xJiYxIT09ZVthKzFdKXthKys7YnJlYWt9aSE9PWEtMiYmby5wdXNoKGUuc3ViYXJyYXkoaSxhLTIpKTtkb3thKyt9d2hpbGUoMSE9PWVbYV0mJmE8cik7YT0oaT1hKzEpKzI7YnJlYWs7Y2FzZSAxOmlmKDAhPT1lW2EtMV18fDAhPT1lW2EtMl0pe2ErPTM7YnJlYWt9aSE9PWEtMiYmby5wdXNoKGUuc3ViYXJyYXkoaSxhLTIpKSxhPShpPWErMSkrMjticmVhaztkZWZhdWx0OmErPTN9cmV0dXJuIGk8ciYmby5wdXNoKGUuc3ViYXJyYXkoaSkpLG99fSx7a2V5OiJwYXJzZUF2Y0MiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTo0O2lmKCEoZS5sZW5ndGg8NCkpe2Zvcih2YXIgbixyPWUubGVuZ3RoLGk9W10sYT0wO2ErdDxyOylpZihuPW8oZSxhKSwzPT09dCYmKG4+Pj49OCksYSs9dCxuKXtpZihhK24+cilicmVhaztpLnB1c2goZS5zdWJhcnJheShhLGErbikpLGErPW59cmV0dXJuIGl9fX0se2tleToicGFyc2VTRUkiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoLHI9dD8yOjEsaT0wLGE9MCxvPSIiOzI1NT09PWVbcl07KWkrPTI1NSxyKys7Zm9yKGkrPWVbcisrXTsyNTU9PT1lW3JdOylhKz0yNTUscisrO2lmKGErPWVbcisrXSw1PT09aSYmbj5yKzE2KWZvcih2YXIgdT0wO3U8MTY7dSsrKW8rPWVbcl0udG9TdHJpbmcoMTYpLHIrKztyZXR1cm57cGF5bG9hZDplLnN1YmFycmF5KHIscithKSx0eXBlOmksc2l6ZTphLHV1aWQ6b319fSx7a2V5OiJyZW1vdmVFUEIiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmJ5dGVMZW5ndGgsbj1bXSxyPTE7cjx0LTI7KTA9PT1lW3JdJiYwPT09ZVtyKzFdJiYzPT09ZVtyKzJdPyhuLnB1c2gocisyKSxyKz0yKTpyKys7aWYoIW4ubGVuZ3RoKXJldHVybiBlO3ZhciBpPXQtbi5sZW5ndGgsYT1uZXcgVWludDhBcnJheShpKSxvPTA7Zm9yKHI9MDtyPGk7bysrLHIrKylvPT09blswXSYmKG8rKyxuLnNoaWZ0KCkpLGFbcl09ZVtvXTtyZXR1cm4gYX19XSwobj1udWxsKSYmYSh0LnByb3RvdHlwZSxuKSxyJiZhKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTsidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJiJEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSI9PT1zZWxmLmNvbnN0cnVjdG9yLm5hbWUmJnNlbGYuYWRkRXZlbnRMaXN0ZW5lcigicnRjdHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7dmFyIG4scj10LnRyYW5zZm9ybWVyLGE9ci5vcHRpb25zLnBvcnQsbz0obj1mdW5jdGlvbihlKXthLnBvc3RNZXNzYWdlKGUpfSxuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm06ZnVuY3Rpb24odCxyKXt2YXIgYT1lLmlzSDI2NVZpZGVvRnJhbWUodCk7ZS5nZXROQUxVbml0cyhuZXcgaSh0LmRhdGEpLGEpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKGUuc2VpKXt2YXIgdD11LnBhcnNlU0VJKHUucmVtb3ZlRVBCKGUuYm9keSksITEpO3QmJm4oe2RhdGE6dCxzZWk6e2NvZGU6dC50eXBlLGNvbnRlbnQ6dC5wYXlsb2FkfX0pfX0pKSxyLmVucXVldWUodCl9fSkpO3IucmVhZGFibGUucGlwZVRocm91Z2gobykucGlwZVRvKHQudHJhbnNmb3JtZXIud3JpdGFibGUpfSkpfSgpOwo=";
31973
+ var encodedJs$5 = "IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBlPXtnZXROQUxVbml0czpmdW5jdGlvbih0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2lmKHQubGVuZ3RoLXQucG9zaXRpb248NClyZXR1cm5bXTt2YXIgcj10LnBvc2l0aW9uO3JldHVybiAxPT09dC5nZXRJbnQzMihyKXx8MD09PXQuZ2V0SW50MTYocikmJjE9PT10LmdldEludDgocisyKT9lLmdldEFubmV4Yk5hbHModCxuKTplLmdldEF2Y2NOYWxzKHQsbil9LGdldEFubmV4Yk5hbHM6ZnVuY3Rpb24odCxuKXtmb3IodmFyIHI9W10saT1lLmdldEhlYWRlclBvc2l0aW9uQW5uZXhCKHQpLGE9aS5wb3Msbz1hO2E8dC5sZW5ndGgtNDspe3ZhciB1PW5ldyBVaW50OEFycmF5KHQuYnVmZmVyLnNsaWNlKGEsYStpLmhlYWRlckxlbmd0aCkpO2kucG9zPT09dC5wb3NpdGlvbiYmdC5za2lwKGkuaGVhZGVyTGVuZ3RoKSxvPShpPWUuZ2V0SGVhZGVyUG9zaXRpb25Bbm5leEIodCkpLnBvczt2YXIgcz17aGVhZGVyOnUsYm9keTpuZXcgVWludDhBcnJheSh0LmJ1ZmZlci5zbGljZShhK3UuYnl0ZUxlbmd0aCxvKSksdHlwZTotMX07bj9lLmFuYWx5c2VIMjY1TmFsKHMpOmUuYW5hbHlzZU5hbChzKSwocy50eXBlPD05fHxuJiZzLnR5cGU8PTQwKSYmMCE9PXMudHlwZSYmci5wdXNoKHMpLHQuc2tpcChvLXQucG9zaXRpb24pLGE9b31yZXR1cm4gcn0sZ2V0QXZjY05hbHM6ZnVuY3Rpb24odCxuKXtmb3IodmFyIHI9W107dC5wb3NpdGlvbjx0Lmxlbmd0aC00Oyl7dmFyIGk9dC5nZXRJbnQzMih0LnBvc2l0aW9uKTtpZighKHQubGVuZ3RoLXQucG9zaXRpb24+PWkpKWJyZWFrO3ZhciBhPW5ldyBVaW50OEFycmF5KHQuYnVmZmVyLnNsaWNlKHQucG9zaXRpb24sdC5wb3NpdGlvbis0KSk7dC5za2lwKDQpO3ZhciBvPW5ldyBVaW50OEFycmF5KHQuYnVmZmVyLnNsaWNlKHQucG9zaXRpb24sdC5wb3NpdGlvbitpKSk7dC5za2lwKGkpO3ZhciB1PXtoZWFkZXI6YSxib2R5Om8sdHlwZTotMX07bj9lLmFuYWx5c2VIMjY1TmFsKHUpOmUuYW5hbHlzZU5hbCh1KSx1LnR5cGU8PTkmJjAhPT11LnR5cGUmJnIucHVzaCh1KX1yZXR1cm4gcn0sYW5hbHlzZU5hbDpmdW5jdGlvbihlKXt2YXIgdD0zMSZlLmJvZHlbMF07c3dpdGNoKGUudHlwZT10LHQpe2Nhc2UgMTplLm5kcj0hMDticmVhaztjYXNlIDU6ZS5pZHI9ITA7YnJlYWs7Y2FzZSA2OmUuc2VpPSEwO2JyZWFrO2Nhc2UgNzplLnNwcz0hMDticmVhaztjYXNlIDg6ZS5wcHM9ITB9fSxhbmFseXNlSDI2NU5hbDpmdW5jdGlvbihlKXt2YXIgdD0oMTI2JmUuYm9keVswXSk+PjE7c3dpdGNoKGUudHlwZT10LHQpe2Nhc2UgMzk6Y2FzZSA0MDplLnNlaT0hMH19LGdldEhlYWRlclBvc2l0aW9uQW5uZXhCOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLnBvc2l0aW9uLG49MCxyPWUubGVuZ3RoOzMhPT1uJiY0IT09biYmdDxyLTQ7KTA9PT1lLmdldEludDE2KHQpPzE9PT1lLmdldEludDE2KHQrMik/bj00OjE9PT1lLmdldEludDgodCsyKT9uPTM6dCsrOnQrKztyZXR1cm4gdD09PXItNCYmKDA9PT1lLmdldEludDE2KHQpPzE9PT1lLmdldEludDE2KHQrMik/bj00OnQ9cjoodCsrLDA9PT1lLmdldEludDE2KHQpJiYxPT09ZS5nZXRJbnQ4KHQpP249Mzp0PXIpKSx7cG9zOnQsaGVhZGVyTGVuZ3RoOm59fSxpc0gyNjVWaWRlb0ZyYW1lOmZ1bmN0aW9uKGUpe3ZhciB0LG47cmV0dXJuKChudWxsPT09KHQ9ZS5nZXRNZXRhZGF0YSl8fHZvaWQgMD09PXR8fG51bGw9PT0obj10LmNhbGwoZSkpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLm1pbWVUeXBlKXx8IiIpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoImgyNjUiKX19O2Z1bmN0aW9uIHQoZSl7cmV0dXJuKHQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBuKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwoaT1yLmtleSxhPXZvaWQgMCwic3ltYm9sIj09dHlwZW9mKGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9dHlwZW9mIGV8fG51bGw9PT1lKXJldHVybiBlO3ZhciBuPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1uKXt2YXIgcj1uLmNhbGwoZSx0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikoZSl9KGksInN0cmluZyIpKT9hOlN0cmluZyhhKSkscil9dmFyIGksYX12YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5fcG9zaXRpb249MCx0aGlzLl9kYXRhdmlldz1uZXcgRGF0YVZpZXcodCl9dmFyIHQscixpO3JldHVybiB0PWUsaT1be2tleToicmVhZEJ5dGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtzd2l0Y2godCl7Y2FzZSAxOnI9bj9lLmdldEludDgoZS5wb3NpdGlvbik6ZS5nZXRVaW50OChlLnBvc2l0aW9uKTticmVhaztjYXNlIDI6cj1uP2UuZ2V0SW50MTYoZS5wb3NpdGlvbik6ZS5nZXRVaW50MTYoZS5wb3NpdGlvbik7YnJlYWs7Y2FzZSAzOmlmKG4pdGhyb3cgbmV3IEVycm9yKCJub3Qgc3VwcG9ydGVkIGZvciByZWFkQnl0ZSAzIik7cj1lLmdldFVpbnQ4KGUucG9zaXRpb24pPDwxNixyfD1lLmdldFVpbnQ4KGUucG9zaXRpb24rMSk8PDgscnw9ZS5nZXRVaW50OChlLnBvc2l0aW9uKzIpO2JyZWFrO2Nhc2UgNDpyPW4/ZS5nZXRJbnQzMihlLnBvc2l0aW9uKTplLmdldFVpbnQzMihlLnBvc2l0aW9uKTticmVhaztjYXNlIDg6aWYobil0aHJvdyBuZXcgRXJyb3IoIm5vdCBzdXBwb3J0ZWQgZm9yIHJlYWRCb2R5IDgiKTtyPWUuZ2V0VWludDMyKGUucG9zaXRpb24pPDwzMixyfD1lLmdldFVpbnQzMihlLnBvc2l0aW9uKzQpO2JyZWFrO2RlZmF1bHQ6cj0iIn1yZXR1cm4gZS5wb3NpdGlvbis9dCxyfX1dLChyPVt7a2V5OiJsZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJ1ZmZlci5ieXRlTGVuZ3RofX0se2tleToiYnVmZmVyIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YXZpZXcuYnVmZmVyfX0se2tleToicG9zaXRpb24iLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3NpdGlvbn0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3Bvc2l0aW9uPWV9fSx7a2V5OiJiYWNrIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnBvc2l0aW9uLT1lfX0se2tleToiZ2V0VWludDgiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9kYXRhdmlldy5nZXRVaW50OChlKX19LHtrZXk6ImdldEludDgiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9kYXRhdmlldy5nZXRJbnQ4KGUpfX0se2tleToiZ2V0SW50MTYiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9kYXRhdmlldy5nZXRJbnQxNihlKX19LHtrZXk6ImdldFVpbnQxNiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2RhdGF2aWV3LmdldFVpbnQxNihlKX19LHtrZXk6ImdldFVpbnQzMiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2RhdGF2aWV3LmdldFVpbnQzMihlKX19LHtrZXk6ImdldEludDMyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fZGF0YXZpZXcuZ2V0SW50MzIoZSl9fSx7a2V5OiJza2lwIix2YWx1ZTpmdW5jdGlvbih0KXtmb3IodmFyIG49TWF0aC5mbG9vcih0LzQpLHI9dCU0LGk9MDtpPG47aSsrKWUucmVhZEJ5dGUodGhpcyw0KTtyPjAmJmUucmVhZEJ5dGUodGhpcyxyKX19LHtrZXk6InJlYWRVaW50OCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDEpfX0se2tleToicmVhZFVpbnQxNiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDIpfX0se2tleToicmVhZFVpbnQyNCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDMpfX0se2tleToicmVhZFVpbnQzMiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDQpfX0se2tleToicmVhZFVpbnQ2NCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDgpfX0se2tleToicmVhZEludDgiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGUucmVhZEJ5dGUodGhpcywxLCEwKX19LHtrZXk6InJlYWRJbnQxNiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDIsITApfX0se2tleToicmVhZEludDMyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBlLnJlYWRCeXRlKHRoaXMsNCwhMCl9fSx7a2V5OiJ3cml0ZVVpbnQzMiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KFtlPj4+MjQmMjU1LGU+Pj4xNiYyNTUsZT4+PjgmMjU1LDI1NSZlXSl9fV0pJiZuKHQucHJvdG90eXBlLHIpLGkmJm4odCxpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO2Z1bmN0aW9uIGkoZSxuKXtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIGk9bltyXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLChhPWkua2V5LG89dm9pZCAwLG89ZnVuY3Rpb24oZSxuKXtpZigib2JqZWN0IiE9PXQoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgaT1yLmNhbGwoZSxufHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09dChpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PW4/U3RyaW5nOk51bWJlcikoZSl9KGEsInN0cmluZyIpLCJzeW1ib2wiPT09dChvKT9vOlN0cmluZyhvKSksaSl9dmFyIGEsb31mdW5jdGlvbiBhKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3JldHVybihlW3RdPDwyND4+PjApKyhlW3QrMV08PDE2KSsoZVt0KzJdPDw4KSsoZVt0KzNdfHwwKX12YXIgbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKX12YXIgdCxuLHI7cmV0dXJuIHQ9ZSxyPVt7a2V5OiJwYXJzZUFubmV4QiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ieXRlTGVuZ3RoLTEsbj0wO2Rve2lmKDAhPT1lW3RdKWJyZWFrO24rKyx0LS19d2hpbGUodD4wKTtuPj0zJiYoZT1lLnN1YmFycmF5KDAsdCsxKSk7Zm9yKHZhciByPWUubGVuZ3RoLGk9MixhPTA7bnVsbCE9PWVbaV0mJnZvaWQgMCE9PWVbaV0mJjEhPT1lW2ldOylpKys7aWYoKGE9MisgKytpKT49cilyZXR1cm5bXTtmb3IodmFyIG89W107YTxyOylzd2l0Y2goZVthXSl7Y2FzZSAwOmlmKDAhPT1lW2EtMV0pe2ErPTI7YnJlYWt9aWYoMCE9PWVbYS0yXSl7YSsrO2JyZWFrfWlmKGE8ci0xJiYxIT09ZVthKzFdKXthKys7YnJlYWt9aSE9PWEtMiYmby5wdXNoKGUuc3ViYXJyYXkoaSxhLTIpKTtkb3thKyt9d2hpbGUoMSE9PWVbYV0mJmE8cik7YT0oaT1hKzEpKzI7YnJlYWs7Y2FzZSAxOmlmKDAhPT1lW2EtMV18fDAhPT1lW2EtMl0pe2ErPTM7YnJlYWt9aSE9PWEtMiYmby5wdXNoKGUuc3ViYXJyYXkoaSxhLTIpKSxhPShpPWErMSkrMjticmVhaztkZWZhdWx0OmErPTN9cmV0dXJuIGk8ciYmby5wdXNoKGUuc3ViYXJyYXkoaSkpLG99fSx7a2V5OiJwYXJzZUF2Y0MiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTo0O2lmKCEoZS5sZW5ndGg8NCkpe2Zvcih2YXIgbixyPWUubGVuZ3RoLGk9W10sbz0wO28rdDxyOylpZihuPWEoZSxvKSwzPT09dCYmKG4+Pj49OCksbys9dCxuKXtpZihvK24+cilicmVhaztpLnB1c2goZS5zdWJhcnJheShvLG8rbikpLG8rPW59cmV0dXJuIGl9fX0se2tleToicGFyc2VTRUkiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoLHI9dD8yOjEsaT0wLGE9MCxvPSIiOzI1NT09PWVbcl07KWkrPTI1NSxyKys7Zm9yKGkrPWVbcisrXTsyNTU9PT1lW3JdOylhKz0yNTUscisrO2lmKGErPWVbcisrXSw1PT09aSYmbj5yKzE2KWZvcih2YXIgdT0wO3U8MTY7dSsrKW8rPWVbcl0udG9TdHJpbmcoMTYpLHIrKztyZXR1cm57cGF5bG9hZDplLnN1YmFycmF5KHIscithKSx0eXBlOmksc2l6ZTphLHV1aWQ6b319fSx7a2V5OiJyZW1vdmVFUEIiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmJ5dGVMZW5ndGgsbj1bXSxyPTE7cjx0LTI7KTA9PT1lW3JdJiYwPT09ZVtyKzFdJiYzPT09ZVtyKzJdPyhuLnB1c2gocisyKSxyKz0yKTpyKys7aWYoIW4ubGVuZ3RoKXJldHVybiBlO3ZhciBpPXQtbi5sZW5ndGgsYT1uZXcgVWludDhBcnJheShpKSxvPTA7Zm9yKHI9MDtyPGk7bysrLHIrKylvPT09blswXSYmKG8rKyxuLnNoaWZ0KCkpLGFbcl09ZVtvXTtyZXR1cm4gYX19XSwobj1udWxsKSYmaSh0LnByb3RvdHlwZSxuKSxyJiZpKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTsidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJiJEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSI9PT1zZWxmLmNvbnN0cnVjdG9yLm5hbWUmJnNlbGYuYWRkRXZlbnRMaXN0ZW5lcigicnRjdHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7dmFyIG4saT10LnRyYW5zZm9ybWVyLGE9aS5vcHRpb25zLnBvcnQsdT0obj1mdW5jdGlvbihlKXthLnBvc3RNZXNzYWdlKGUpfSxuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm06ZnVuY3Rpb24odCxpKXt2YXIgYT1lLmlzSDI2NVZpZGVvRnJhbWUodCk7ZS5nZXROQUxVbml0cyhuZXcgcih0LmRhdGEpLGEpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKGUuc2VpKXt2YXIgdD1vLnBhcnNlU0VJKG8ucmVtb3ZlRVBCKGUuYm9keSksITEpO3QmJm4oe2RhdGE6dCxzZWk6e2NvZGU6dC50eXBlLGNvbnRlbnQ6dC5wYXlsb2FkfX0pfX0pKSxpLmVucXVldWUodCl9fSkpO2kucmVhZGFibGUucGlwZVRocm91Z2godSkucGlwZVRvKHQudHJhbnNmb3JtZXIud3JpdGFibGUpfSkpfSgpOwo=";
31876
31974
  var blob$5 = typeof window !== "undefined" && window.Blob && new Blob([atob(encodedJs$5)], {
31877
31975
  type: "text/javascript;charset=utf-8"
31878
31976
  });
@@ -31886,21 +31984,19 @@ function WorkerWrapper$5() {
31886
31984
  objURL && (window.URL || window.webkitURL).revokeObjectURL(objURL);
31887
31985
  }
31888
31986
  }
31889
- var AudioStallObserver = /* @__PURE__ */ function() {
31890
- function AudioStallObserver2() {
31891
- _classCallCheck$k(this, AudioStallObserver2);
31892
- _defineProperty$i(this, "_audioStallTimer", null);
31893
- _defineProperty$i(this, "_preSample", null);
31894
- _defineProperty$i(this, "_isStallInPreReportEnd", false);
31895
- _defineProperty$i(this, "_stallList", []);
31896
- _defineProperty$i(this, "_audioTransceiver", null);
31987
+ var _AudioStallObserver = /* @__PURE__ */ function() {
31988
+ function _AudioStallObserver2() {
31989
+ _classCallCheck$k(this, _AudioStallObserver2);
31990
+ this._isStallInPreReportEnd = false;
31991
+ this._stallList = [];
31992
+ this._audioTransceiver = null;
31897
31993
  }
31898
- _createClass$k(AudioStallObserver2, [{
31994
+ _createClass$k(_AudioStallObserver2, [{
31899
31995
  key: "start",
31900
31996
  value: function start(transceiver) {
31901
31997
  this.stop();
31902
31998
  this._audioTransceiver = transceiver;
31903
- if (AudioStallObserver2.interval >= 100) {
31999
+ if (_AudioStallObserver2.interval >= 100) {
31904
32000
  this._startStallCountInterval();
31905
32001
  }
31906
32002
  }
@@ -31910,7 +32006,7 @@ var AudioStallObserver = /* @__PURE__ */ function() {
31910
32006
  this._stallList = [];
31911
32007
  if (this._audioStallTimer) {
31912
32008
  clearTimeout(this._audioStallTimer);
31913
- this._audioStallTimer = null;
32009
+ delete this._audioStallTimer;
31914
32010
  }
31915
32011
  }
31916
32012
  }, {
@@ -31976,12 +32072,12 @@ var AudioStallObserver = /* @__PURE__ */ function() {
31976
32072
  switch (_context2.prev = _context2.next) {
31977
32073
  case 0:
31978
32074
  clearTimeout(_this._audioStallTimer);
31979
- _this._audioStallTimer = null;
32075
+ delete _this._audioStallTimer;
31980
32076
  _context2.next = 4;
31981
32077
  return _this._audioStallCount();
31982
32078
  case 4:
31983
32079
  if (!_this._audioStallTimer) {
31984
- _this._audioStallTimer = setTimeout(loop, AudioStallObserver2.interval);
32080
+ _this._audioStallTimer = setTimeout(loop, _AudioStallObserver2.interval);
31985
32081
  }
31986
32082
  case 5:
31987
32083
  case "end":
@@ -31993,7 +32089,7 @@ var AudioStallObserver = /* @__PURE__ */ function() {
31993
32089
  return _ref6.apply(this, arguments);
31994
32090
  };
31995
32091
  }();
31996
- this._audioStallTimer = setTimeout(loop, AudioStallObserver2.interval);
32092
+ this._audioStallTimer = setTimeout(loop, _AudioStallObserver2.interval);
31997
32093
  }
31998
32094
  }, {
31999
32095
  key: "_audioStallCount",
@@ -32004,7 +32100,7 @@ var AudioStallObserver = /* @__PURE__ */ function() {
32004
32100
  while (1)
32005
32101
  switch (_context3.prev = _context3.next) {
32006
32102
  case 0:
32007
- if (!(this._preSample && Date.now() - this._preSample.ts < AudioStallObserver2.interval * 0.5)) {
32103
+ if (!(this._preSample && Date.now() - this._preSample.ts < _AudioStallObserver2.interval * 0.5)) {
32008
32104
  _context3.next = 2;
32009
32105
  break;
32010
32106
  }
@@ -32058,7 +32154,7 @@ var AudioStallObserver = /* @__PURE__ */ function() {
32058
32154
  _inboundRTP3 = inboundRTP, concealedSamples = _inboundRTP3.concealedSamples, totalSamplesReceived = _inboundRTP3.totalSamplesReceived;
32059
32155
  interval_concealed_samples = concealedSamples - this._preSample.concealedSamples;
32060
32156
  interval_samples_received = totalSamplesReceived - this._preSample.totalSamplesReceived;
32061
- is_stall = interval_concealed_samples >= 0 && interval_samples_received >= 0 && interval_concealed_samples >= AudioStallObserver2.ratio * interval_samples_received;
32157
+ is_stall = interval_concealed_samples >= 0 && interval_samples_received >= 0 && interval_concealed_samples >= _AudioStallObserver2.ratio * interval_samples_received;
32062
32158
  this._stallList.push({
32063
32159
  concealed: interval_concealed_samples,
32064
32160
  received: interval_samples_received,
@@ -32086,10 +32182,11 @@ var AudioStallObserver = /* @__PURE__ */ function() {
32086
32182
  return _audioStallCount;
32087
32183
  }()
32088
32184
  }]);
32089
- return AudioStallObserver2;
32185
+ return _AudioStallObserver2;
32090
32186
  }();
32091
- _defineProperty$i(AudioStallObserver, "interval", 100);
32092
- _defineProperty$i(AudioStallObserver, "ratio", 0.6);
32187
+ var AudioStallObserver = _AudioStallObserver;
32188
+ AudioStallObserver.interval = 100;
32189
+ AudioStallObserver.ratio = 0.6;
32093
32190
  var computeStallInfo = function computeStallInfo2(list, times, isStallInPreEnd) {
32094
32191
  var _list$;
32095
32192
  var res = {
@@ -32158,13 +32255,22 @@ var VideoStallObserver = /* @__PURE__ */ function() {
32158
32255
  function VideoStallObserver2() {
32159
32256
  var _this = this;
32160
32257
  _classCallCheck$k(this, VideoStallObserver2);
32161
- _defineProperty$i(this, "_handleVisibilityChange", function() {
32258
+ this._videoInWaiting100ms = false;
32259
+ this._videoInWaiting500ms = false;
32260
+ this._pauseStart = 0;
32261
+ this._pauseDuration = 0;
32262
+ this._stallTimeThreshold = {
32263
+ stall500ms: isSafari$1() || isFirefox$2() ? 550 : 500,
32264
+ stall100ms: 100
32265
+ };
32266
+ this._support100msStall = checkVideoFrameCallback();
32267
+ this._handleVisibilityChange = function() {
32162
32268
  if (document.visibilityState === "hidden") {
32163
32269
  _this._framePause();
32164
32270
  }
32165
- });
32166
- _defineProperty$i(this, "_framePause", function() {
32167
- if (_this._prePts) {
32271
+ };
32272
+ this._framePause = function() {
32273
+ if (_this._prePts && _this._stallList) {
32168
32274
  var current = performance.now();
32169
32275
  var delta = current - _this._prePts;
32170
32276
  _this._stallList.push({
@@ -32173,23 +32279,7 @@ var VideoStallObserver = /* @__PURE__ */ function() {
32173
32279
  });
32174
32280
  _this._prePts = void 0;
32175
32281
  }
32176
- });
32177
- this._removeHandler = void 0;
32178
- this._remotePlayPauseHandler = void 0;
32179
- this._prePts = void 0;
32180
- this._stallList = void 0;
32181
- this._videoInWaiting100ms = false;
32182
- this._videoInWaiting500ms = false;
32183
- this._isPaused = void 0;
32184
- this._pauseStart = 0;
32185
- this._pauseDuration = 0;
32186
- this._requestVideoFrameCallbackTimer = void 0;
32187
- this._player = void 0;
32188
- this._stallTimeThreshold = {
32189
- stall500ms: isSafari$1() || isFirefox$2() ? 550 : 500,
32190
- stall100ms: 100
32191
32282
  };
32192
- this._support100msStall = checkVideoFrameCallback();
32193
32283
  }
32194
32284
  _createClass$k(VideoStallObserver2, [{
32195
32285
  key: "start",
@@ -32227,7 +32317,7 @@ var VideoStallObserver = /* @__PURE__ */ function() {
32227
32317
  player.removeEventListener("play", handlePlay);
32228
32318
  };
32229
32319
  document.addEventListener("visibilitychange", this._handleVisibilityChange);
32230
- document.addEventListener("pagehide", this._framePause());
32320
+ window.addEventListener("pagehide", this._framePause);
32231
32321
  }
32232
32322
  }, {
32233
32323
  key: "stop",
@@ -32246,7 +32336,7 @@ var VideoStallObserver = /* @__PURE__ */ function() {
32246
32336
  this._videoInWaiting100ms = false;
32247
32337
  this._videoInWaiting500ms = false;
32248
32338
  document.removeEventListener("visibilitychange", this._handleVisibilityChange);
32249
- document.removeEventListener("pagehide", this._framePause());
32339
+ window.removeEventListener("pagehide", this._framePause);
32250
32340
  }
32251
32341
  }, {
32252
32342
  key: "destroy",
@@ -32315,7 +32405,7 @@ var VideoStallObserver = /* @__PURE__ */ function() {
32315
32405
  }
32316
32406
  var _stallInfo$stall = stallInfo.stall, stallDuration500ms = _stallInfo$stall.stallDuration500ms, stallDuration100ms = _stallInfo$stall.stallDuration100ms;
32317
32407
  stallInfo.stall.stallRate500ms = Math.min(Number((stallDuration500ms / interval).toFixed(4)), 1);
32318
- if (this._support100msStall) {
32408
+ if (this._support100msStall && stallDuration100ms) {
32319
32409
  stallInfo.stall.stallRate100ms = Math.min(Number((stallDuration100ms / interval).toFixed(4)), 1);
32320
32410
  } else {
32321
32411
  delete stallInfo.stall.stallRate100ms;
@@ -32481,7 +32571,7 @@ function diffRecvAudioStats(oldStats, newStats) {
32481
32571
  receivedSampleRate: diffNumber(oldStats, newStats, "totalSamplesReceived") / statsInterval,
32482
32572
  concealedSamples: Math.round(diffNumber(oldStats, newStats, "concealedSamples")),
32483
32573
  concealmentEvent: Math.round(diffNumber(oldStats, newStats, "concealmentEvents")),
32484
- e2eDelay: Math.round(newStats.rtt + jitterBufferDelay)
32574
+ e2eDelay: Math.round((newStats.rtt || 0) + jitterBufferDelay)
32485
32575
  };
32486
32576
  }
32487
32577
  function getRecvVideoStats(_x2) {
@@ -32552,8 +32642,12 @@ function diffRecvVideoStats(oldStats, newStats) {
32552
32642
  var nackCount = diffNumber(oldStats, newStats, "nackCount");
32553
32643
  var packetsReceived = diffNumber(oldStats, newStats, "packetsReceived");
32554
32644
  var jitterBufferDelay = Math.round(diffNumber(oldStats, newStats, "jitterBufferDelay") / diffNumber(oldStats, newStats, "jitterBufferEmittedCount") * 1e3);
32645
+ var newResolution = (newStats.width || 0) * (newStats.height || 0);
32646
+ var oldResolution = (oldStats.width || 0) * (oldStats.height || 0);
32647
+ var abrState = newResolution === 0 || oldResolution === 0 ? "none" : newResolution > oldResolution ? "upgrade" : newResolution < oldResolution ? "degrade" : "none";
32555
32648
  return {
32556
32649
  statsInterval,
32650
+ abrState,
32557
32651
  width: newStats.width || 0,
32558
32652
  height: newStats.height || 0,
32559
32653
  estimatedPlayoutTimestamp: newStats.estimatedPlayoutTimestamp,
@@ -32572,7 +32666,7 @@ function diffRecvVideoStats(oldStats, newStats) {
32572
32666
  firCount: diffNumber(oldStats, newStats, "firCount"),
32573
32667
  nackCount,
32574
32668
  pliCount: diffNumber(oldStats, newStats, "pliCount"),
32575
- e2eDelay: Math.round(newStats.rtt + jitterBufferDelay),
32669
+ e2eDelay: Math.round((newStats.rtt || 0) + jitterBufferDelay),
32576
32670
  retransmittedRate: +(nackCount / (packetsReceived + packetsLostDiff)).toFixed(2)
32577
32671
  };
32578
32672
  }
@@ -32605,11 +32699,11 @@ var Quality = {
32605
32699
  DOWN: 6
32606
32700
  };
32607
32701
  var NetworkQuality = /* @__PURE__ */ function() {
32608
- function NetworkQuality2(peer, networkQualityParams) {
32702
+ function NetworkQuality2(_peer, _networkQualityParams) {
32609
32703
  _classCallCheck$k(this, NetworkQuality2);
32610
- _defineProperty$i(this, "_preDownlinkStats", []);
32611
- this._peer = peer;
32612
- this._networkQualityParams = networkQualityParams;
32704
+ this._peer = _peer;
32705
+ this._networkQualityParams = _networkQualityParams;
32706
+ this._preDownlinkStats = [];
32613
32707
  }
32614
32708
  _createClass$k(NetworkQuality2, [{
32615
32709
  key: "getDownlinkQuality",
@@ -32664,11 +32758,11 @@ var NetworkQuality = /* @__PURE__ */ function() {
32664
32758
  } else {
32665
32759
  quality = QosLevel.VBAD;
32666
32760
  }
32667
- if (retransmittedRate > qosQualityParams[QosLevel.BAD].minRetransmittedRate) {
32761
+ if (retransmittedRate > (qosQualityParams[QosLevel.BAD].minRetransmittedRate || 0.5)) {
32668
32762
  quality = Math.max(quality, QosLevel.BAD);
32669
- } else if (retransmittedRate > qosQualityParams[QosLevel.POOR].minRetransmittedRate) {
32763
+ } else if (retransmittedRate > (qosQualityParams[QosLevel.POOR].minRetransmittedRate || 0.35)) {
32670
32764
  quality = Math.max(quality, QosLevel.POOR);
32671
- } else if (retransmittedRate > qosQualityParams[QosLevel.GOOD].minRetransmittedRate) {
32765
+ } else if (retransmittedRate > (qosQualityParams[QosLevel.GOOD].minRetransmittedRate || 0.2)) {
32672
32766
  quality = Math.max(quality, QosLevel.GOOD);
32673
32767
  }
32674
32768
  return quality;
@@ -32709,6 +32803,249 @@ var NetworkQuality = /* @__PURE__ */ function() {
32709
32803
  }]);
32710
32804
  return NetworkQuality2;
32711
32805
  }();
32806
+ 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];
32807
+ var FirstFrameObserver = /* @__PURE__ */ function() {
32808
+ function FirstFrameObserver2(_emitFirstFrameState) {
32809
+ var _this = this;
32810
+ _classCallCheck$k(this, FirstFrameObserver2);
32811
+ this._emitFirstFrameState = _emitFirstFrameState;
32812
+ this._startConnectTs = 0;
32813
+ this._firstVideoFrameInterval = null;
32814
+ this._preState = null;
32815
+ this._state = {};
32816
+ this._pc = null;
32817
+ this._video = null;
32818
+ this._videoTransceiver = null;
32819
+ this._extraInfo = {
32820
+ is_preload: false
32821
+ };
32822
+ this._handleConnectionStateChange = function() {
32823
+ var _this$_pc;
32824
+ if (((_this$_pc = _this._pc) === null || _this$_pc === void 0 ? void 0 : _this$_pc.connectionState) === "connected" && _this._videoTransceiver) {
32825
+ _this.changeFirstFrameState(RTC_FIRST_FRAME_STATE.PEER_CONNECTED);
32826
+ _this._watchForFirstVideoFrameRecv(_this._videoTransceiver);
32827
+ }
32828
+ };
32829
+ this._handleICEConnectionStateChange = function() {
32830
+ var _this$_pc2;
32831
+ if (((_this$_pc2 = _this._pc) === null || _this$_pc2 === void 0 ? void 0 : _this$_pc2.iceConnectionState) === "connected") {
32832
+ _this.changeFirstFrameState(RTC_FIRST_FRAME_STATE.ICE_CONNECTED);
32833
+ }
32834
+ };
32835
+ this._handlePlaying = function() {
32836
+ _this.changeFirstFrameState(RTC_FIRST_FRAME_STATE.VIDEO_PLAYING);
32837
+ _this.reset();
32838
+ };
32839
+ this._handleCanplay = function() {
32840
+ _this.changeFirstFrameState(RTC_FIRST_FRAME_STATE.VIDEO_CANPLAY);
32841
+ };
32842
+ this._handleLoadeddata = function() {
32843
+ _this.changeFirstFrameState(RTC_FIRST_FRAME_STATE.VIDEO_LOADEDDATA);
32844
+ };
32845
+ this._handleError = function() {
32846
+ _this.reset();
32847
+ };
32848
+ }
32849
+ _createClass$k(FirstFrameObserver2, [{
32850
+ key: "start",
32851
+ value: function start() {
32852
+ this.reset();
32853
+ this._startConnectTs = Date.now();
32854
+ this.changeFirstFrameState(RTC_FIRST_FRAME_STATE.LOAD_START);
32855
+ }
32856
+ }, {
32857
+ key: "changeFirstFrameState",
32858
+ value: function changeFirstFrameState(state) {
32859
+ var _ref6, _this2 = this;
32860
+ var preIdx = (_ref6 = this._preState && FIRST_FRAME_STATE_ORDER.indexOf(this._preState)) !== null && _ref6 !== void 0 ? _ref6 : -1;
32861
+ var curIdx = FIRST_FRAME_STATE_ORDER.indexOf(state);
32862
+ var elapsed = Date.now() - this._startConnectTs;
32863
+ if (curIdx > preIdx) {
32864
+ FIRST_FRAME_STATE_ORDER.slice(preIdx + 1, curIdx + 1).forEach(function(s2) {
32865
+ _this2._state[s2] = elapsed;
32866
+ });
32867
+ this._preState = state;
32868
+ }
32869
+ }
32870
+ }, {
32871
+ key: "setIsPreload",
32872
+ value: function setIsPreload(isPreload) {
32873
+ this._extraInfo.is_preload = isPreload;
32874
+ }
32875
+ }, {
32876
+ key: "setFailureReason",
32877
+ value: function setFailureReason(reason) {
32878
+ this._extraInfo.failure_reason = reason;
32879
+ }
32880
+ }, {
32881
+ key: "bindEvents",
32882
+ value: function bindEvents(pc, videoTransceiver, video2) {
32883
+ var _this3 = this;
32884
+ this._pc = pc;
32885
+ this._video = video2;
32886
+ this._videoTransceiver = videoTransceiver;
32887
+ pc.addEventListener("connectionstatechange", this._handleConnectionStateChange);
32888
+ pc.addEventListener("iceconnectionstatechange", this._handleICEConnectionStateChange);
32889
+ var _ref22 = (videoTransceiver === null || videoTransceiver === void 0 ? void 0 : videoTransceiver.receiver) || {}, transport = _ref22.transport;
32890
+ if (transport) {
32891
+ transport.onstatechange = function() {
32892
+ transport.state === "connected" && _this3.changeFirstFrameState(RTC_FIRST_FRAME_STATE.DTLS_CONNECTED);
32893
+ };
32894
+ }
32895
+ video2 === null || video2 === void 0 ? void 0 : video2.addEventListener("playing", this._handlePlaying);
32896
+ video2 === null || video2 === void 0 ? void 0 : video2.addEventListener("canplay", this._handleCanplay);
32897
+ video2 === null || video2 === void 0 ? void 0 : video2.addEventListener("loadeddata", this._handleLoadeddata);
32898
+ video2 === null || video2 === void 0 ? void 0 : video2.addEventListener("error", this._handleError);
32899
+ }
32900
+ }, {
32901
+ key: "_watchForFirstVideoFrameRecv",
32902
+ value: function _watchForFirstVideoFrameRecv(videoTransceiver) {
32903
+ var _this4 = this;
32904
+ var hasPacketsReceived = false;
32905
+ var hasFrameReceived = false;
32906
+ var hasFrameDecoded = false;
32907
+ this._cancelWatchForFirstVideoFrameRecv();
32908
+ this._firstVideoFrameInterval = window.setInterval(/* @__PURE__ */ _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee() {
32909
+ var receiver, reports, inboundRtpStats;
32910
+ return _regeneratorRuntime$a().wrap(function _callee$(_context) {
32911
+ while (1)
32912
+ switch (_context.prev = _context.next) {
32913
+ case 0:
32914
+ receiver = videoTransceiver.receiver;
32915
+ _context.next = 3;
32916
+ return receiver.getStats();
32917
+ case 3:
32918
+ reports = _context.sent;
32919
+ reports.forEach(function(report) {
32920
+ if (report.type === "inbound-rtp") {
32921
+ inboundRtpStats = report;
32922
+ }
32923
+ });
32924
+ if (!hasPacketsReceived && inboundRtpStats.packetsReceived > 0) {
32925
+ hasPacketsReceived = true;
32926
+ _this4.changeFirstFrameState(RTC_FIRST_FRAME_STATE.FIRST_PACKET_RECV);
32927
+ }
32928
+ if (!hasFrameReceived && inboundRtpStats.framesReceived > 0) {
32929
+ hasFrameReceived = true;
32930
+ _this4.changeFirstFrameState(RTC_FIRST_FRAME_STATE.FIRST_FRAME_RECV);
32931
+ }
32932
+ if (!hasFrameDecoded && inboundRtpStats.framesDecoded > 0) {
32933
+ hasFrameDecoded = true;
32934
+ _this4.changeFirstFrameState(RTC_FIRST_FRAME_STATE.FIRST_FRAME_DECODED);
32935
+ _this4._cancelWatchForFirstVideoFrameRecv();
32936
+ }
32937
+ case 8:
32938
+ case "end":
32939
+ return _context.stop();
32940
+ }
32941
+ }, _callee);
32942
+ })), 200);
32943
+ }
32944
+ }, {
32945
+ key: "_cancelWatchForFirstVideoFrameRecv",
32946
+ value: function _cancelWatchForFirstVideoFrameRecv() {
32947
+ if (this._firstVideoFrameInterval) {
32948
+ window.clearInterval(this._firstVideoFrameInterval);
32949
+ this._firstVideoFrameInterval = null;
32950
+ }
32951
+ }
32952
+ }, {
32953
+ key: "_getTransportInfo",
32954
+ value: function() {
32955
+ var _getTransportInfo2 = _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee2() {
32956
+ var _this$_videoTransceiv, _this$_videoTransceiv2;
32957
+ var reports, candidatePairStats, localCandidateStats, remoteCandidateStats;
32958
+ return _regeneratorRuntime$a().wrap(function _callee2$(_context2) {
32959
+ while (1)
32960
+ switch (_context2.prev = _context2.next) {
32961
+ case 0:
32962
+ _context2.next = 2;
32963
+ 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();
32964
+ case 2:
32965
+ reports = _context2.sent;
32966
+ reports === null || reports === void 0 ? void 0 : reports.forEach(function(report) {
32967
+ if (report.type === "candidate-pair") {
32968
+ candidatePairStats = report;
32969
+ localCandidateStats = reports.get(report.localCandidateId);
32970
+ remoteCandidateStats = reports.get(report.remoteCandidateId);
32971
+ }
32972
+ });
32973
+ if (remoteCandidateStats) {
32974
+ this._extraInfo.remote_ip = remoteCandidateStats.ip || remoteCandidateStats.address;
32975
+ this._extraInfo.remote_port = remoteCandidateStats.port;
32976
+ this._extraInfo.remote_candidate_type = remoteCandidateStats.candidateType;
32977
+ this._extraInfo.protocol = remoteCandidateStats.protocol;
32978
+ }
32979
+ if (localCandidateStats) {
32980
+ this._extraInfo.local_ip = localCandidateStats.ip || localCandidateStats.address;
32981
+ this._extraInfo.local_port = localCandidateStats.port;
32982
+ this._extraInfo.local_candidate_type = localCandidateStats.candidateType;
32983
+ }
32984
+ if (candidatePairStats) {
32985
+ this._extraInfo.rtt = candidatePairStats.currentRoundTripTime;
32986
+ this._extraInfo.stun_requests_sent = candidatePairStats.requestsSent;
32987
+ this._extraInfo.stun_requests_received = candidatePairStats.requestsReceived;
32988
+ this._extraInfo.stun_responses_sent = candidatePairStats.responsesSent;
32989
+ this._extraInfo.stun_responses_received = candidatePairStats.responsesReceived;
32990
+ }
32991
+ case 7:
32992
+ case "end":
32993
+ return _context2.stop();
32994
+ }
32995
+ }, _callee2, this);
32996
+ }));
32997
+ function _getTransportInfo() {
32998
+ return _getTransportInfo2.apply(this, arguments);
32999
+ }
33000
+ return _getTransportInfo;
33001
+ }()
33002
+ }, {
33003
+ key: "reset",
33004
+ value: function() {
33005
+ var _reset = _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee3() {
33006
+ var _this$_video, _this$_video2, _this$_video3, _this$_video4, _this$_pc3, _this$_pc4;
33007
+ return _regeneratorRuntime$a().wrap(function _callee3$(_context3) {
33008
+ while (1)
33009
+ switch (_context3.prev = _context3.next) {
33010
+ case 0:
33011
+ if (!(Object.keys(this._state).length > 0)) {
33012
+ _context3.next = 4;
33013
+ break;
33014
+ }
33015
+ _context3.next = 3;
33016
+ return this._getTransportInfo();
33017
+ case 3:
33018
+ this._emitFirstFrameState(this._state, this._extraInfo);
33019
+ case 4:
33020
+ this._preState = null;
33021
+ this._extraInfo = {
33022
+ is_preload: false
33023
+ };
33024
+ this._state = {};
33025
+ (_this$_video = this._video) === null || _this$_video === void 0 ? void 0 : _this$_video.removeEventListener("playing", this._handlePlaying);
33026
+ (_this$_video2 = this._video) === null || _this$_video2 === void 0 ? void 0 : _this$_video2.removeEventListener("canplay", this._handleCanplay);
33027
+ (_this$_video3 = this._video) === null || _this$_video3 === void 0 ? void 0 : _this$_video3.removeEventListener("loadeddata", this._handleLoadeddata);
33028
+ (_this$_video4 = this._video) === null || _this$_video4 === void 0 ? void 0 : _this$_video4.removeEventListener("error", this._handleError);
33029
+ (_this$_pc3 = this._pc) === null || _this$_pc3 === void 0 ? void 0 : _this$_pc3.removeEventListener("connectionstatechange", this._handleConnectionStateChange);
33030
+ (_this$_pc4 = this._pc) === null || _this$_pc4 === void 0 ? void 0 : _this$_pc4.removeEventListener("iceconnectionstatechange", this._handleICEConnectionStateChange);
33031
+ this._cancelWatchForFirstVideoFrameRecv();
33032
+ this._pc = null;
33033
+ this._video = null;
33034
+ this._videoTransceiver = null;
33035
+ case 17:
33036
+ case "end":
33037
+ return _context3.stop();
33038
+ }
33039
+ }, _callee3, this);
33040
+ }));
33041
+ function reset() {
33042
+ return _reset.apply(this, arguments);
33043
+ }
33044
+ return reset;
33045
+ }()
33046
+ }]);
33047
+ return FirstFrameObserver2;
33048
+ }();
32712
33049
  function changeNumberInRange(source, min2, max2, delta) {
32713
33050
  var target = source + delta;
32714
33051
  if (target > max2) {
@@ -32719,6 +33056,59 @@ function changeNumberInRange(source, min2, max2, delta) {
32719
33056
  function isHarmonyOS() {
32720
33057
  return /(HarmonyOS|OpenHarmony|ArkWeb)/i.test(navigator.userAgent);
32721
33058
  }
33059
+ function compareURL(url1, url2) {
33060
+ var queryKeys = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : [];
33061
+ if (typeof url1 !== "string" || typeof url2 !== "string") {
33062
+ return false;
33063
+ }
33064
+ if (!url1.includes("://")) {
33065
+ url1 = window.location.protocol + "//" + url1;
33066
+ }
33067
+ if (!url2.includes("://")) {
33068
+ url2 = window.location.protocol + "//" + url2;
33069
+ }
33070
+ var url1Obj;
33071
+ var url2Obj;
33072
+ try {
33073
+ url1Obj = new URL(url1);
33074
+ url2Obj = new URL(url2);
33075
+ } catch (e4) {
33076
+ return false;
33077
+ }
33078
+ if (url1Obj.host + url1Obj.pathname !== url2Obj.host + url2Obj.pathname) {
33079
+ return false;
33080
+ }
33081
+ var _iterator = _createForOfIteratorHelper$4(queryKeys), _step;
33082
+ try {
33083
+ for (_iterator.s(); !(_step = _iterator.n()).done; ) {
33084
+ var key2 = _step.value;
33085
+ if (url1Obj.searchParams.get(key2) !== url2Obj.searchParams.get(key2)) {
33086
+ return false;
33087
+ }
33088
+ }
33089
+ } catch (err) {
33090
+ _iterator.e(err);
33091
+ } finally {
33092
+ _iterator.f();
33093
+ }
33094
+ return true;
33095
+ }
33096
+ function addUrlParams(url2, params) {
33097
+ if (!params || Object.keys(params).length === 0) {
33098
+ return url2;
33099
+ }
33100
+ var urlParams = url2.includes("?") ? new URLSearchParams(url2.split("?")[1]) : new URLSearchParams();
33101
+ Object.keys(params).forEach(function(key2) {
33102
+ urlParams.set(key2, params[key2]);
33103
+ });
33104
+ return url2.split("?")[0] + "?" + urlParams.toString();
33105
+ }
33106
+ function isHeyTapBrowser() {
33107
+ return /(HeyTapBrowser)/i.test(navigator.userAgent);
33108
+ }
33109
+ function isVivoBrowser() {
33110
+ return /(VivoBrowser)/i.test(navigator.userAgent);
33111
+ }
32722
33112
  var logger$b = new Logger$a("rts");
32723
33113
  var Rts = /* @__PURE__ */ function(_EventEmitter) {
32724
33114
  _inherits$f(Rts2, _EventEmitter);
@@ -32727,31 +33117,28 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
32727
33117
  var _this;
32728
33118
  _classCallCheck$k(this, Rts2);
32729
33119
  _this = _super.call(this);
32730
- _defineProperty$i(_assertThisInitialized$f(_this), "_url", "");
32731
- _defineProperty$i(_assertThisInitialized$f(_this), "_pc", null);
32732
- _defineProperty$i(_assertThisInitialized$f(_this), "_audioTransceicer", null);
32733
- _defineProperty$i(_assertThisInitialized$f(_this), "_videoTransceicer", null);
32734
- _defineProperty$i(_assertThisInitialized$f(_this), "_mediaStream", null);
32735
- _defineProperty$i(_assertThisInitialized$f(_this), "_lastMediaStream", null);
32736
- _defineProperty$i(_assertThisInitialized$f(_this), "_media", null);
32737
- _defineProperty$i(_assertThisInitialized$f(_this), "_player", null);
32738
- _defineProperty$i(_assertThisInitialized$f(_this), "_opts", null);
32739
- _defineProperty$i(_assertThisInitialized$f(_this), "_loader", null);
32740
- _defineProperty$i(_assertThisInitialized$f(_this), "_networkEvaluate", null);
32741
- _defineProperty$i(_assertThisInitialized$f(_this), "_retry", 0);
32742
- _defineProperty$i(_assertThisInitialized$f(_this), "_waitingTimer", 0);
32743
- _defineProperty$i(_assertThisInitialized$f(_this), "_rctConnectStartTs", 0);
32744
- _defineProperty$i(_assertThisInitialized$f(_this), "_isReplacing", false);
32745
- _defineProperty$i(_assertThisInitialized$f(_this), "_checkStatsErrorTimer", null);
32746
- _defineProperty$i(_assertThisInitialized$f(_this), "_audioStallObserver", null);
32747
- _defineProperty$i(_assertThisInitialized$f(_this), "_videoStallObserver", null);
32748
- _defineProperty$i(_assertThisInitialized$f(_this), "_networkQuality", null);
32749
- _defineProperty$i(_assertThisInitialized$f(_this), "_preAudioStats", null);
32750
- _defineProperty$i(_assertThisInitialized$f(_this), "_preVideoStats", null);
32751
- _defineProperty$i(_assertThisInitialized$f(_this), "_rtcReportTimer", 0);
32752
- _defineProperty$i(_assertThisInitialized$f(_this), "_networkQualityResult", []);
32753
- _defineProperty$i(_assertThisInitialized$f(_this), "_peerStateTimer", null);
32754
- _defineProperty$i(_assertThisInitialized$f(_this), "_checkStatsError", /* @__PURE__ */ _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee2() {
33120
+ _this._url = "";
33121
+ _this._pc = null;
33122
+ _this._audioTransceicer = null;
33123
+ _this._videoTransceicer = null;
33124
+ _this._mediaStream = null;
33125
+ _this._lastMediaStream = null;
33126
+ _this._loader = null;
33127
+ _this._networkEvaluate = null;
33128
+ _this._retry = 0;
33129
+ _this._player = null;
33130
+ _this._waitingTimer = 0;
33131
+ _this._rctConnectStartTs = 0;
33132
+ _this._isReplacing = false;
33133
+ _this._firstFrameObserver = new FirstFrameObserver(_this._emitFirstFrameState.bind(_assertThisInitialized$f(_this)));
33134
+ _this._audio = null;
33135
+ _this._video = null;
33136
+ _this._preAudioStats = null;
33137
+ _this._preVideoStats = null;
33138
+ _this._rtcReportTimer = null;
33139
+ _this._networkQualityResult = [];
33140
+ _this._videoJitterBufferDelay = 0;
33141
+ _this._checkStatsError = /* @__PURE__ */ _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee2() {
32755
33142
  return _regeneratorRuntime$a().wrap(function _callee2$(_context2) {
32756
33143
  while (1)
32757
33144
  switch (_context2.prev = _context2.next) {
@@ -32792,12 +33179,16 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
32792
33179
  return _context2.stop();
32793
33180
  }
32794
33181
  }, _callee2);
32795
- })));
32796
- _defineProperty$i(_assertThisInitialized$f(_this), "_onTrack", function(e4) {
33182
+ }));
33183
+ _this._onTrack = function(e4) {
32797
33184
  logger$b.log("addTrack: ", e4.track, e4.streams);
32798
- _this["_".concat(e4.track.kind)] = e4.track;
32799
- });
32800
- _defineProperty$i(_assertThisInitialized$f(_this), "_mockWaitingByTimeupdate", function() {
33185
+ if (e4.track.kind === "audio") {
33186
+ _this._audio = e4.track;
33187
+ } else {
33188
+ _this._video = e4.track;
33189
+ }
33190
+ };
33191
+ _this._mockWaitingByTimeupdate = function() {
32801
33192
  var _this$_pc, _this$_pc2;
32802
33193
  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"))
32803
33194
  return;
@@ -32808,8 +33199,8 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
32808
33199
  return;
32809
33200
  _this.emit("waiting");
32810
33201
  }, _this._opts.stallInterval);
32811
- });
32812
- _defineProperty$i(_assertThisInitialized$f(_this), "_onLoadedData", function() {
33202
+ };
33203
+ _this._onLoadedData = function() {
32813
33204
  logger$b.log("loadeddata emit");
32814
33205
  _this.getStatsSnapshoot().then(function(snap) {
32815
33206
  _this.emit(EVENT$2.METADATA_PARSED, {
@@ -32823,19 +33214,15 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
32823
33214
  meta: snap.audio
32824
33215
  });
32825
33216
  });
32826
- });
32827
- _defineProperty$i(_assertThisInitialized$f(_this), "_setDelay", function(delayHint) {
33217
+ };
33218
+ _this._setDelay = function(delayHint) {
32828
33219
  if (_this._opts.progressiveSetDelay) {
32829
33220
  _this._startSetDelayLoop(delayHint);
32830
33221
  } else {
32831
33222
  var _this$_audioTransceic2;
32832
- var key2 = [
32833
- "playoutDelayHint",
32834
- "jitterBufferDelayHint",
32835
- "jitterBufferTarget"
32836
- ].find(function(key22) {
33223
+ var key2 = ["playoutDelayHint", "jitterBufferDelayHint", "jitterBufferTarget"].find(function(key22) {
32837
33224
  var _this$_audioTransceic, _this$_videoTransceic;
32838
- return key22 in ((_this$_audioTransceic = _this._audioTransceicer) === null || _this$_audioTransceic === void 0 ? void 0 : _this$_audioTransceic.receiver) && key22 in ((_this$_videoTransceic = _this._videoTransceicer) === null || _this$_videoTransceic === void 0 ? void 0 : _this$_videoTransceic.receiver);
33225
+ return key22 in (((_this$_audioTransceic = _this._audioTransceicer) === null || _this$_audioTransceic === void 0 ? void 0 : _this$_audioTransceic.receiver) || {}) && key22 in (((_this$_videoTransceic = _this._videoTransceicer) === null || _this$_videoTransceic === void 0 ? void 0 : _this$_videoTransceic.receiver) || {});
32839
33226
  });
32840
33227
  if (!key2)
32841
33228
  return;
@@ -32845,24 +33232,19 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
32845
33232
  _this._audioTransceicer.receiver[key2] = delayHint;
32846
33233
  _this._videoTransceicer.receiver[key2] = delayHint;
32847
33234
  }
32848
- });
32849
- _defineProperty$i(_assertThisInitialized$f(_this), "_targetDelayHint", null);
32850
- _defineProperty$i(_assertThisInitialized$f(_this), "_setDelayTimer", null);
32851
- _defineProperty$i(_assertThisInitialized$f(_this), "_setDelayError", null);
32852
- _defineProperty$i(_assertThisInitialized$f(_this), "_startSetDelayLoop", /* @__PURE__ */ function() {
33235
+ };
33236
+ _this._targetDelayHint = null;
33237
+ _this._setDelayError = null;
33238
+ _this._startSetDelayLoop = /* @__PURE__ */ function() {
32853
33239
  var _ref32 = _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee4(delayHint) {
32854
33240
  var key2, preAudioStats, preVideoStats, _this$_opts$adaptiveJ, loopInterval, maxAvSyncDelay, maxJitterBufferDiff, maxStep, avDiffTooMuchCount;
32855
33241
  return _regeneratorRuntime$a().wrap(function _callee4$(_context4) {
32856
33242
  while (1)
32857
33243
  switch (_context4.prev = _context4.next) {
32858
33244
  case 0:
32859
- key2 = [
32860
- "playoutDelayHint",
32861
- "jitterBufferDelayHint",
32862
- "jitterBufferTarget"
32863
- ].find(function(key22) {
33245
+ key2 = ["playoutDelayHint", "jitterBufferDelayHint", "jitterBufferTarget"].find(function(key22) {
32864
33246
  var _this$_audioTransceic3, _this$_videoTransceic2;
32865
- return key22 in ((_this$_audioTransceic3 = _this._audioTransceicer) === null || _this$_audioTransceic3 === void 0 ? void 0 : _this$_audioTransceic3.receiver) && key22 in ((_this$_videoTransceic2 = _this._videoTransceicer) === null || _this$_videoTransceic2 === void 0 ? void 0 : _this$_videoTransceic2.receiver);
33247
+ return key22 in (((_this$_audioTransceic3 = _this._audioTransceicer) === null || _this$_audioTransceic3 === void 0 ? void 0 : _this$_audioTransceic3.receiver) || {}) && key22 in (((_this$_videoTransceic2 = _this._videoTransceicer) === null || _this$_videoTransceic2 === void 0 ? void 0 : _this$_videoTransceic2.receiver) || {});
32866
33248
  });
32867
33249
  if (key2) {
32868
33250
  _context4.next = 3;
@@ -32877,13 +33259,14 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
32877
33259
  }
32878
33260
  return _context4.abrupt("return");
32879
33261
  case 6:
33262
+ logger$b.log("_startSetDelayLoop()", "invoked, delayHint: ".concat(delayHint));
32880
33263
  _this._targetDelayHint = delayHint;
32881
33264
  if (!_this._setDelayTimer) {
32882
- _context4.next = 9;
33265
+ _context4.next = 10;
32883
33266
  break;
32884
33267
  }
32885
33268
  return _context4.abrupt("return");
32886
- case 9:
33269
+ case 10:
32887
33270
  preAudioStats = null;
32888
33271
  preVideoStats = null;
32889
33272
  _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;
@@ -32910,7 +33293,7 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
32910
33293
  }
32911
33294
  return _context3.abrupt("return");
32912
33295
  case 8:
32913
- targetDelayMs = _this._targetDelayHint * 1e3;
33296
+ targetDelayMs = (_this._targetDelayHint || 0) * 1e3;
32914
33297
  currentTargetDelayMs = currentTargetDelay * 1e3;
32915
33298
  _context3.next = 12;
32916
33299
  return Promise.all([getRecvAudioStats(_this._audioTransceicer.receiver.getStats()), getRecvVideoStats(_this._videoTransceicer.receiver.getStats())]);
@@ -32939,7 +33322,7 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
32939
33322
  break;
32940
33323
  }
32941
33324
  if (avDiffTooMuchCount++ > 8 && currentVideoDelay > currentAudioDelay) {
32942
- _this._audioTransceicer.receiver[key2] = Math.min(currentVideoDelay / 1e3, _this._targetDelayHint);
33325
+ _this._audioTransceicer.receiver[key2] = Math.min(currentVideoDelay / 1e3, _this._targetDelayHint || 0);
32943
33326
  avDiffTooMuchCount = 0;
32944
33327
  }
32945
33328
  logger$b.log("av_jb_diff(".concat(currentAudioDelay - currentVideoDelay, "=").concat(currentAudioDelay, "-").concat(currentVideoDelay, ") or av_sync_diff(").concat(av_sync_diff, ") too much, skip setting"));
@@ -32974,7 +33357,7 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
32974
33357
  }
32975
33358
  }, _callee3, null, [[0, 40]]);
32976
33359
  })), loopInterval);
32977
- case 14:
33360
+ case 15:
32978
33361
  case "end":
32979
33362
  return _context4.stop();
32980
33363
  }
@@ -32983,26 +33366,31 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
32983
33366
  return function(_x) {
32984
33367
  return _ref32.apply(this, arguments);
32985
33368
  };
32986
- }());
32987
- _defineProperty$i(_assertThisInitialized$f(_this), "_getDelay", function() {
33369
+ }();
33370
+ _this._getDelay = function() {
32988
33371
  try {
33372
+ var _this$_audioTransceic6;
32989
33373
  var key2 = ["playoutDelayHint", "jitterBufferDelayHint", "jitterBufferTarget"].find(function(key22) {
32990
- return key22 in _this._videoTransceicer.receiver && key22 in _this._audioTransceicer.receiver;
33374
+ var _this$_videoTransceic4, _this$_audioTransceic5;
33375
+ return key22 in (((_this$_videoTransceic4 = _this._videoTransceicer) === null || _this$_videoTransceic4 === void 0 ? void 0 : _this$_videoTransceic4.receiver) || {}) && key22 in (((_this$_audioTransceic5 = _this._audioTransceicer) === null || _this$_audioTransceic5 === void 0 ? void 0 : _this$_audioTransceic5.receiver) || {});
32991
33376
  });
32992
- return _this._audioTransceicer.receiver[key2];
33377
+ if (!key2)
33378
+ return;
33379
+ return (_this$_audioTransceic6 = _this._audioTransceicer) === null || _this$_audioTransceic6 === void 0 ? void 0 : _this$_audioTransceic6.receiver[key2];
32993
33380
  } catch (error) {
32994
33381
  logger$b.error("get delay error");
32995
33382
  }
32996
- });
32997
- _defineProperty$i(_assertThisInitialized$f(_this), "_onLoaderRetry", function(error, retryTime) {
33383
+ };
33384
+ _this._onLoaderRetry = function(error, retryTime) {
33385
+ console.log(error, "retryTime", retryTime);
32998
33386
  _this.emit(EVENT$2.LOAD_RETRY, {
32999
33387
  error: StreamingError$2.network(error),
33000
33388
  retryTime
33001
33389
  });
33002
- });
33390
+ };
33003
33391
  _this._opts = getOption(opts);
33004
33392
  _this._media = _this._opts.media;
33005
- _this._player = _this._opts.player;
33393
+ _this._player = _this._opts.player || null;
33006
33394
  _this._loader = new NetLoader$2(_objectSpread2$b(_objectSpread2$b({}, opts.fetchOptions), {}, {
33007
33395
  responseType: "json",
33008
33396
  method: "POST",
@@ -33012,9 +33400,12 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33012
33400
  onRetryError: _this._onLoaderRetry,
33013
33401
  logger: logger$b
33014
33402
  }));
33015
- _this._retry = _this._opts.retryCount;
33403
+ _this._retry = _this._opts.retryCount || 0;
33404
+ _this._preloadPromise = _this._opts.preloadPromise;
33016
33405
  _this._bindMediaEvent();
33406
+ logger$b.log("constructor()", opts);
33017
33407
  _this._changeVolumeInHarmonyWorkaround();
33408
+ _this._mutedBeforePlayingWorkaround();
33018
33409
  if (_this._opts.mediaStream && _this._opts.seamlesslyReload) {
33019
33410
  _this._lastMediaStream = _this._opts.mediaStream;
33020
33411
  }
@@ -33035,6 +33426,11 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33035
33426
  get: function get4() {
33036
33427
  return this._video;
33037
33428
  }
33429
+ }, {
33430
+ key: "getJitterBufferDelay",
33431
+ value: function getJitterBufferDelay() {
33432
+ return this._videoJitterBufferDelay;
33433
+ }
33038
33434
  }, {
33039
33435
  key: "loader",
33040
33436
  get: function get4() {
@@ -33048,9 +33444,24 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33048
33444
  }
33049
33445
  }, {
33050
33446
  key: "getStats",
33051
- value: function getStats$1() {
33052
- return getStats(this._pc);
33053
- }
33447
+ value: function() {
33448
+ var _getStats22 = _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee5() {
33449
+ return _regeneratorRuntime$a().wrap(function _callee5$(_context5) {
33450
+ while (1)
33451
+ switch (_context5.prev = _context5.next) {
33452
+ case 0:
33453
+ return _context5.abrupt("return", getStats(this._pc));
33454
+ case 1:
33455
+ case "end":
33456
+ return _context5.stop();
33457
+ }
33458
+ }, _callee5, this);
33459
+ }));
33460
+ function getStats$1() {
33461
+ return _getStats22.apply(this, arguments);
33462
+ }
33463
+ return getStats$1;
33464
+ }()
33054
33465
  }, {
33055
33466
  key: "getStatsSnapshoot",
33056
33467
  value: function getStatsSnapshoot$1() {
@@ -33061,49 +33472,104 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33061
33472
  }, {
33062
33473
  key: "load",
33063
33474
  value: function() {
33064
- var _load = _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee5(url2) {
33475
+ var _load = _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee6(url2) {
33065
33476
  var _this2 = this;
33066
- var encodedTransformSupported, lastPc;
33067
- return _regeneratorRuntime$a().wrap(function _callee5$(_context5) {
33477
+ var lastPc, answerSdp, errorStr, preloadPromise, info, encodedTransformSupported;
33478
+ return _regeneratorRuntime$a().wrap(function _callee6$(_context6) {
33068
33479
  while (1)
33069
- switch (_context5.prev = _context5.next) {
33480
+ switch (_context6.prev = _context6.next) {
33070
33481
  case 0:
33482
+ logger$b.log("load()", 'invoked, url: "'.concat(url2, '"'));
33071
33483
  this._disconnect();
33072
33484
  this._url = url2;
33073
- this._retry = this._opts.retryCount;
33485
+ lastPc = this._pc;
33074
33486
  if (!this._opts.hackCreateOfferIssue) {
33075
- _context5.next = 6;
33487
+ _context6.next = 7;
33076
33488
  break;
33077
33489
  }
33078
- _context5.next = 6;
33490
+ _context6.next = 7;
33079
33491
  return this._createEmptyPeer();
33080
- case 6:
33081
- encodedTransformSupported = isLegacyEncodedTransformSupported();
33082
- _context5.prev = 7;
33083
- lastPc = this._pc;
33084
- if (lastPc) {
33085
- lastPc.close();
33492
+ case 7:
33493
+ _context6.prev = 7;
33494
+ this._firstFrameObserver.start();
33495
+ if (!this._preloadPromise) {
33496
+ _context6.next = 39;
33497
+ break;
33086
33498
  }
33499
+ logger$b.log("load()", "in preload process...");
33500
+ _context6.prev = 11;
33501
+ this._firstFrameObserver.setIsPreload(true);
33502
+ if (compareURL(this._url, this._preloadPromise.url, ["tabr_start_bitrate"])) {
33503
+ _context6.next = 17;
33504
+ break;
33505
+ }
33506
+ errorStr = "preload url not match, current url: ".concat(this._url, ", preload url: ").concat(this._preloadPromise.url);
33507
+ delete this._preloadPromise;
33508
+ throw new Error(errorStr);
33509
+ case 17:
33510
+ preloadPromise = this._preloadPromise.promise;
33511
+ delete this._preloadPromise;
33512
+ _context6.next = 21;
33513
+ return preloadPromise;
33514
+ case 21:
33515
+ info = _context6.sent;
33516
+ if (!(info.pc.signalingState !== "have-local-offer")) {
33517
+ _context6.next = 24;
33518
+ break;
33519
+ }
33520
+ throw new Error('pc.signalingState not equal "have-local-offer", current state is '.concat(info.pc.signalingState));
33521
+ case 24:
33522
+ this._pc = info.pc;
33523
+ answerSdp = info.answerSdp;
33524
+ this._videoTransceicer = info.videoTransceiver;
33525
+ this._audioTransceicer = info.audioTransceiver;
33526
+ if (this._opts.enableSei) {
33527
+ this.initVideoEncodedTransform();
33528
+ this.initAudioEncodedTransform();
33529
+ }
33530
+ _context6.next = 37;
33531
+ break;
33532
+ case 31:
33533
+ _context6.prev = 31;
33534
+ _context6.t0 = _context6["catch"](11);
33535
+ logger$b.warn("load()", "preload failed, ".concat(_context6.t0.message || _context6.t0.toString()));
33536
+ this._firstFrameObserver.setFailureReason(_context6.t0.message || _context6.t0.toString());
33537
+ this.load(url2);
33538
+ return _context6.abrupt("return");
33539
+ case 37:
33540
+ _context6.next = 45;
33541
+ break;
33542
+ case 39:
33543
+ encodedTransformSupported = isLegacyEncodedTransformSupported();
33544
+ logger$b.log("load()", "isLegacyEncodedTransformSupported: ".concat(encodedTransformSupported));
33087
33545
  this._pc = new RTCPeerConnection({
33088
33546
  encodedInsertableStreams: encodedTransformSupported && this._opts.enableSei ? true : void 0
33089
33547
  });
33090
- this._bindRTCEvents();
33091
- _context5.next = 14;
33092
- return this._connect(url2);
33093
- case 14:
33094
- _context5.next = 19;
33548
+ _context6.next = 44;
33549
+ return this._getAnswerSdp(this._pc);
33550
+ case 44:
33551
+ answerSdp = _context6.sent;
33552
+ case 45:
33553
+ this._bindRTCEvents(this._pc);
33554
+ _context6.next = 48;
33555
+ return this._handleAnswerSdp(this._pc, answerSdp);
33556
+ case 48:
33557
+ if (lastPc) {
33558
+ lastPc.close();
33559
+ }
33560
+ _context6.next = 54;
33095
33561
  break;
33096
- case 16:
33097
- _context5.prev = 16;
33098
- _context5.t0 = _context5["catch"](7);
33562
+ case 51:
33563
+ _context6.prev = 51;
33564
+ _context6.t1 = _context6["catch"](7);
33099
33565
  setTimeout(function() {
33100
- return _this2._emitError(StreamingError$2.create(ERR$2.OTHER, null, _context5.t0));
33566
+ return _this2._emitError(StreamingError$2.create(ERR$2.OTHER, null, _context6.t1));
33101
33567
  });
33102
- case 19:
33568
+ case 54:
33103
33569
  case "end":
33104
- return _context5.stop();
33570
+ return _context6.stop();
33105
33571
  }
33106
- }, _callee5, this, [[7, 16]]);
33572
+ }, _callee6, this, [[7, 51], [11, 31]]);
33107
33573
  }));
33108
33574
  function load(_x2) {
33109
33575
  return _load.apply(this, arguments);
@@ -33113,13 +33579,13 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33113
33579
  }, {
33114
33580
  key: "switchURL",
33115
33581
  value: function switchURL(url2) {
33582
+ logger$b.log("switchURL()", 'invoked, url: "'.concat(url2, '"'));
33116
33583
  this.load(url2 || this._url);
33117
33584
  }
33118
33585
  }, {
33119
33586
  key: "_bindRTCEvents",
33120
- value: function _bindRTCEvents() {
33587
+ value: function _bindRTCEvents(pc) {
33121
33588
  var _this3 = this;
33122
- var pc = this._pc;
33123
33589
  pc.addEventListener("track", this._onTrack);
33124
33590
  pc.addEventListener("connectionstatechange", function() {
33125
33591
  logger$b.warn("onconnectionstatechange:", pc.connectionState);
@@ -33157,7 +33623,7 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33157
33623
  value: function _handleMediaStream() {
33158
33624
  var _this4 = this;
33159
33625
  if (this._lastMediaStream) {
33160
- var _this$_player$play;
33626
+ var _this$_player2, _this$_player3, _this$_player3$play;
33161
33627
  var videoTrack = this._lastMediaStream.getVideoTracks()[0];
33162
33628
  var audioTrack = this._lastMediaStream.getAudioTracks()[0];
33163
33629
  if (videoTrack) {
@@ -33170,20 +33636,15 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33170
33636
  this._audio && this._mediaStream.addTrack(this._audio);
33171
33637
  this._video && this._mediaStream.addTrack(this._video);
33172
33638
  this._isReplacing = true;
33173
- this._player.pause();
33174
- (_this$_player$play = this._player.play()) === null || _this$_player$play === void 0 ? void 0 : _this$_player$play.finally(function() {
33639
+ (_this$_player2 = this._player) === null || _this$_player2 === void 0 ? void 0 : _this$_player2.pause();
33640
+ (_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() {
33175
33641
  _this4._isReplacing = false;
33176
33642
  });
33177
33643
  } else {
33178
33644
  this._mediaStream = new MediaStream();
33179
33645
  this._audio && this._mediaStream.addTrack(this._audio);
33180
33646
  this._video && this._mediaStream.addTrack(this._video);
33181
- this._media.srcObject = this._mediaStream;
33182
- var req = this._player.play();
33183
- if (req && req.catch) {
33184
- req.catch(function(e4) {
33185
- });
33186
- }
33647
+ this._media && (this._media.srcObject = this._mediaStream);
33187
33648
  }
33188
33649
  }
33189
33650
  }, {
@@ -33237,21 +33698,22 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33237
33698
  }, {
33238
33699
  key: "_bindMediaEvent",
33239
33700
  value: function _bindMediaEvent() {
33240
- this._media.addEventListener("timeupdate", this._mockWaitingByTimeupdate);
33241
- this._media.addEventListener("loadeddata", this._onLoadedData);
33701
+ var _this$_media, _this$_media2;
33702
+ (_this$_media = this._media) === null || _this$_media === void 0 ? void 0 : _this$_media.addEventListener("timeupdate", this._mockWaitingByTimeupdate);
33703
+ (_this$_media2 = this._media) === null || _this$_media2 === void 0 ? void 0 : _this$_media2.addEventListener("loadeddata", this._onLoadedData);
33242
33704
  }
33243
33705
  }, {
33244
- key: "_connect",
33706
+ key: "_getAnswerSdp",
33245
33707
  value: function() {
33246
- var _connect2 = _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee6() {
33247
- var pc, offer, parsed, finnalUrl, _this$_opts, _answer$remoteSdp, _this$_opts2, _answer$remoteSdp2, _parsed$media, parseSession, sessionId, reqStart, res, answer, err, _parsed;
33248
- return _regeneratorRuntime$a().wrap(function _callee6$(_context6) {
33708
+ var _getAnswerSdp2 = _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee7(pc) {
33709
+ var offer, answerSdp, parsed, finnalUrl, _this$_opts, _this$_loader, _this$_opts2, _parsed$media, parseSession, sessionId, reqStart, res, answer, err;
33710
+ return _regeneratorRuntime$a().wrap(function _callee7$(_context7) {
33249
33711
  while (1)
33250
- switch (_context6.prev = _context6.next) {
33712
+ switch (_context7.prev = _context7.next) {
33251
33713
  case 0:
33252
- pc = this._pc;
33714
+ logger$b.log("_getAnswerSdp()");
33253
33715
  if (!pc.addTransceiver) {
33254
- _context6.next = 11;
33716
+ _context7.next = 11;
33255
33717
  break;
33256
33718
  }
33257
33719
  this._audioTransceicer = pc.addTransceiver("audio", {
@@ -33260,32 +33722,37 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33260
33722
  this._videoTransceicer = pc.addTransceiver("video", {
33261
33723
  direction: "recvonly"
33262
33724
  });
33263
- this._setDelay(this._opts.delayHint);
33725
+ this._setDelay(this._opts.delayHint || null);
33264
33726
  if (this._opts.enableSei) {
33265
33727
  this.initVideoEncodedTransform();
33266
33728
  this.initAudioEncodedTransform();
33267
33729
  }
33268
- _context6.next = 8;
33730
+ _context7.next = 8;
33269
33731
  return pc.createOffer();
33270
33732
  case 8:
33271
- offer = _context6.sent;
33272
- _context6.next = 14;
33733
+ offer = _context7.sent;
33734
+ _context7.next = 14;
33273
33735
  break;
33274
33736
  case 11:
33275
- _context6.next = 13;
33737
+ _context7.next = 13;
33276
33738
  return pc.createOffer({
33277
33739
  iceRestart: true,
33278
33740
  offerToReceiveAudio: true,
33279
33741
  offerToReceiveVideo: true
33280
33742
  });
33281
33743
  case 13:
33282
- offer = _context6.sent;
33744
+ offer = _context7.sent;
33283
33745
  case 14:
33284
33746
  if (this._opts.hackCreateOfferIssue) {
33285
33747
  this._createEmptyPeer();
33286
33748
  }
33287
- logger$b.log("local offer");
33288
- logger$b.log(offer.sdp);
33749
+ logger$b.log("local offer", offer);
33750
+ if (offer.sdp) {
33751
+ _context7.next = 18;
33752
+ break;
33753
+ }
33754
+ throw new Error("create offer failed");
33755
+ case 18:
33289
33756
  parsed = lib$1.parse(offer.sdp);
33290
33757
  parsed.media.filter(function(x2) {
33291
33758
  return x2.type === "audio";
@@ -33306,62 +33773,71 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33306
33773
  type: "nack"
33307
33774
  });
33308
33775
  });
33776
+ parsed.media.filter(function(x2) {
33777
+ return x2.type === "video";
33778
+ }).forEach(function(x2) {
33779
+ x2.fmtp.forEach(function(x22) {
33780
+ if (x22.config.indexOf("profile-level-id") !== -1) {
33781
+ x22.config = "".concat(x22.config, ";sps-pps-idr-in-keyframe=1");
33782
+ }
33783
+ });
33784
+ });
33309
33785
  offer.sdp = lib$1.write(parsed);
33310
- logger$b.log("local offer modified:\n", offer.sdp);
33311
- _context6.next = 23;
33786
+ logger$b.log("local offer modified:\n", offer);
33787
+ _context7.next = 25;
33312
33788
  return pc.setLocalDescription(offer);
33313
- case 23:
33789
+ case 25:
33314
33790
  finnalUrl = this._url;
33315
- _context6.prev = 24;
33791
+ _context7.prev = 26;
33316
33792
  if (this._opts.preProcessUrl) {
33317
33793
  finnalUrl = this._opts.preProcessUrl(finnalUrl).url;
33318
33794
  }
33319
- this._loader.finnalUrl = finnalUrl;
33795
+ finnalUrl = addUrlParams(finnalUrl, this._opts.urlParams);
33796
+ this._loader && (this._loader.finnalUrl = finnalUrl);
33320
33797
  parseSession = /_?session_id=([^&$]+)/.exec(finnalUrl);
33321
33798
  sessionId = parseSession ? parseSession[1] : Date.now() + "666";
33799
+ this._firstFrameObserver.changeFirstFrameState(RTC_FIRST_FRAME_STATE.OFFER_SDP_READY);
33322
33800
  this.emit(EVENT$2.LOAD_START, {
33323
33801
  url: finnalUrl,
33324
33802
  offersdp: (_this$_opts = this._opts) !== null && _this$_opts !== void 0 && _this$_opts.enableOriginSdpLogger ? offer.sdp : void 0,
33325
33803
  sessionId
33326
33804
  });
33327
33805
  reqStart = Date.now();
33328
- _context6.next = 33;
33329
- return this._loader.load(finnalUrl, {
33806
+ _context7.next = 37;
33807
+ return (_this$_loader = this._loader) === null || _this$_loader === void 0 ? void 0 : _this$_loader.load(finnalUrl, {
33330
33808
  body: JSON.stringify({
33331
33809
  sessionId,
33332
33810
  version: "1.0-html",
33333
33811
  localSdp: offer
33334
33812
  })
33335
33813
  });
33336
- case 33:
33337
- res = _context6.sent;
33814
+ case 37:
33815
+ res = _context7.sent;
33338
33816
  this.emit(EVENT$2.LOAD_RESPONSE_HEADERS, {
33339
33817
  headers: res.response.headers
33340
33818
  });
33341
33819
  answer = res === null || res === void 0 ? void 0 : res.data;
33342
33820
  if (!((answer === null || answer === void 0 ? void 0 : answer.code) === 404 || (answer === null || answer === void 0 ? void 0 : answer.code) === 403)) {
33343
- _context6.next = 41;
33821
+ _context7.next = 45;
33344
33822
  break;
33345
33823
  }
33346
33824
  err = StreamingError$2.create(answer.code === 404 ? ERR$2.NETWORK_NOTFOUND : ERR$2.NETWORK_FORBIDDEN, null, answer);
33347
33825
  err.errorType = ERR$2.NETWORK;
33348
33826
  this._emitError(err);
33349
- return _context6.abrupt("return");
33350
- case 41:
33827
+ return _context7.abrupt("return");
33828
+ case 45:
33351
33829
  if (!((answer === null || answer === void 0 ? void 0 : answer.code) !== 200)) {
33352
- _context6.next = 43;
33830
+ _context7.next = 47;
33353
33831
  break;
33354
33832
  }
33355
33833
  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));
33356
- case 43:
33357
- logger$b.log("answer:");
33358
- logger$b.log((_answer$remoteSdp = answer.remoteSdp) === null || _answer$remoteSdp === void 0 ? void 0 : _answer$remoteSdp.sdp);
33359
- _parsed = lib$1.parse(answer.remoteSdp.sdp);
33834
+ case 47:
33835
+ answerSdp = res.data.remoteSdp.sdp;
33360
33836
  this.emit(EVENT$2.LOAD_COMPLETE, {
33361
33837
  url: finnalUrl,
33362
33838
  elapsed: Date.now() - reqStart,
33363
- 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,
33364
- parsedSdp: _parsed === null || _parsed === void 0 ? void 0 : (_parsed$media = _parsed.media) === null || _parsed$media === void 0 ? void 0 : _parsed$media.map(function(media) {
33839
+ answersdp: (_this$_opts2 = this._opts) !== null && _this$_opts2 !== void 0 && _this$_opts2.enableOriginSdpLogger ? answerSdp : void 0,
33840
+ parsedSdp: parsed === null || parsed === void 0 ? void 0 : (_parsed$media = parsed.media) === null || _parsed$media === void 0 ? void 0 : _parsed$media.map(function(media) {
33365
33841
  return {
33366
33842
  candidates: media.candidates,
33367
33843
  rtp: media.rtp,
@@ -33369,9 +33845,50 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33369
33845
  };
33370
33846
  })
33371
33847
  });
33372
- _parsed.media.forEach(function(x2) {
33848
+ _context7.next = 54;
33849
+ break;
33850
+ case 51:
33851
+ _context7.prev = 51;
33852
+ _context7.t0 = _context7["catch"](26);
33853
+ this._emitError(StreamingError$2.network(_context7.t0));
33854
+ case 54:
33855
+ return _context7.abrupt("return", answerSdp);
33856
+ case 55:
33857
+ case "end":
33858
+ return _context7.stop();
33859
+ }
33860
+ }, _callee7, this, [[26, 51]]);
33861
+ }));
33862
+ function _getAnswerSdp(_x3) {
33863
+ return _getAnswerSdp2.apply(this, arguments);
33864
+ }
33865
+ return _getAnswerSdp;
33866
+ }()
33867
+ }, {
33868
+ key: "_handleAnswerSdp",
33869
+ value: function() {
33870
+ var _handleAnswerSdp2 = _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee8(pc, answerSdp) {
33871
+ var parsed, answer;
33872
+ return _regeneratorRuntime$a().wrap(function _callee8$(_context8) {
33873
+ while (1)
33874
+ switch (_context8.prev = _context8.next) {
33875
+ case 0:
33876
+ logger$b.log("_handleAnswerSdp()", "invoked, answerSdp:", {
33877
+ answerSdp
33878
+ });
33879
+ if (answerSdp) {
33880
+ _context8.next = 3;
33881
+ break;
33882
+ }
33883
+ return _context8.abrupt("return");
33884
+ case 3:
33885
+ this._firstFrameObserver.changeFirstFrameState(RTC_FIRST_FRAME_STATE.ANSWER_SDP_RECV);
33886
+ parsed = lib$1.parse(answerSdp);
33887
+ parsed.media.forEach(function(x2) {
33373
33888
  var _x$ssrcs, _x$ssrcs$find;
33374
- x2.fingerprint.hash = x2.fingerprint.hash.toUpperCase();
33889
+ if (x2.fingerprint) {
33890
+ x2.fingerprint.hash = x2.fingerprint.hash.toUpperCase();
33891
+ }
33375
33892
  var msid = (_x$ssrcs = x2.ssrcs) === null || _x$ssrcs === void 0 ? void 0 : (_x$ssrcs$find = _x$ssrcs.find(function(s2) {
33376
33893
  return s2.attribute === "msid";
33377
33894
  })) === null || _x$ssrcs$find === void 0 ? void 0 : _x$ssrcs$find.value;
@@ -33379,42 +33896,43 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33379
33896
  x2.msid = msid;
33380
33897
  }
33381
33898
  });
33382
- answer.remoteSdp.sdp = lib$1.write(_parsed);
33383
- logger$b.log("answer modified:\n", answer.remoteSdp.sdp);
33899
+ answer = lib$1.write(parsed);
33900
+ logger$b.log("answer modified:\n", {
33901
+ answer
33902
+ });
33384
33903
  this._rctConnectStartTs = Date.now();
33385
33904
  if (!(pc.signalingState === "closed")) {
33386
- _context6.next = 53;
33905
+ _context8.next = 11;
33387
33906
  break;
33388
33907
  }
33389
- return _context6.abrupt("return");
33390
- case 53:
33391
- _context6.next = 55;
33392
- return pc.setRemoteDescription(answer.remoteSdp);
33393
- case 55:
33908
+ return _context8.abrupt("return");
33909
+ case 11:
33910
+ _context8.next = 13;
33911
+ return pc.setRemoteDescription({
33912
+ type: "answer",
33913
+ sdp: answer
33914
+ });
33915
+ case 13:
33916
+ this._firstFrameObserver.changeFirstFrameState(RTC_FIRST_FRAME_STATE.ANSWER_SDP_READY);
33394
33917
  this._networkEvaluate = new NetworkEvaluate(pc, this._opts.networkEvaluateInterval);
33395
33918
  this._listenPeerStateTimeout();
33396
- _context6.next = 62;
33397
- break;
33398
- case 59:
33399
- _context6.prev = 59;
33400
- _context6.t0 = _context6["catch"](24);
33401
- this._emitError(StreamingError$2.network(_context6.t0));
33402
- case 62:
33919
+ this._firstFrameObserver.bindEvents(pc, this._videoTransceicer, this._media);
33920
+ case 17:
33403
33921
  case "end":
33404
- return _context6.stop();
33922
+ return _context8.stop();
33405
33923
  }
33406
- }, _callee6, this, [[24, 59]]);
33924
+ }, _callee8, this);
33407
33925
  }));
33408
- function _connect() {
33409
- return _connect2.apply(this, arguments);
33926
+ function _handleAnswerSdp(_x4, _x5) {
33927
+ return _handleAnswerSdp2.apply(this, arguments);
33410
33928
  }
33411
- return _connect;
33929
+ return _handleAnswerSdp;
33412
33930
  }()
33413
33931
  }, {
33414
33932
  key: "_listenPeerStateTimeout",
33415
33933
  value: function _listenPeerStateTimeout() {
33416
33934
  var _this6 = this;
33417
- this._peerStateTimer && this._clearPeerStateTimeout();
33935
+ this._clearPeerStateTimeout();
33418
33936
  if (this._opts.connectionStateChangeTimeout) {
33419
33937
  this._peerStateTimer = setTimeout(function() {
33420
33938
  _this6._emitError(StreamingError$2.create(ERR$2.MEDIA, ERR$2.SUB_TYPES.MEDIA_ERR_SRC_NOT_SUPPORTED, {
@@ -33426,128 +33944,148 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33426
33944
  }, {
33427
33945
  key: "_clearPeerStateTimeout",
33428
33946
  value: function _clearPeerStateTimeout() {
33429
- clearTimeout(this._peerStateTimer);
33430
- this._peerStateTimer = null;
33947
+ if (this._peerStateTimer) {
33948
+ clearTimeout(this._peerStateTimer);
33949
+ delete this._peerStateTimer;
33950
+ }
33431
33951
  }
33432
33952
  }, {
33433
33953
  key: "_startRtcReport",
33434
33954
  value: function _startRtcReport() {
33435
33955
  var _this7 = this;
33436
33956
  this._stopRtcReport();
33437
- this._rtcReportTimer = setInterval(/* @__PURE__ */ _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee7() {
33438
- var _this7$_audioTranscei, _this7$_videoTranscei;
33439
- 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;
33440
- return _regeneratorRuntime$a().wrap(function _callee7$(_context7) {
33441
- while (1)
33442
- switch (_context7.prev = _context7.next) {
33443
- case 0:
33444
- 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))) {
33445
- _context7.next = 4;
33446
- break;
33447
- }
33448
- _this7._preAudioStats = null;
33449
- _this7._preVideoStats = null;
33450
- return _context7.abrupt("return");
33451
- case 4:
33452
- if (!_this7._audioStallObserver && _this7._audioTransceicer) {
33453
- _this7._audioStallObserver = new AudioStallObserver();
33454
- _this7._audioStallObserver.start(_this7._audioTransceicer);
33455
- }
33456
- if (!_this7._videoStallObserver && _this7._video) {
33457
- _this7._videoStallObserver = new VideoStallObserver();
33458
- _this7._videoStallObserver.start(_this7._media);
33459
- }
33460
- if (!_this7._networkQuality && _this7._opts.enableNetworkQuality) {
33461
- _this7._networkQuality = new NetworkQuality(_this7._pc, _this7._opts.networkQuality);
33462
- }
33463
- _context7.next = 9;
33464
- return Promise.all([getRecvAudioStats(_this7._audioTransceicer.receiver.getStats()), getRecvVideoStats(_this7._videoTransceicer.receiver.getStats())]);
33465
- case 9:
33466
- _yield$Promise$all3 = _context7.sent;
33467
- _yield$Promise$all4 = _slicedToArray$7(_yield$Promise$all3, 2);
33468
- curAudioStats = _yield$Promise$all4[0];
33469
- curVideoStats = _yield$Promise$all4[1];
33470
- if (!(_this7._preAudioStats && _this7._preVideoStats)) {
33471
- _context7.next = 26;
33472
- break;
33473
- }
33474
- audioStats = diffRecvAudioStats(_this7._preAudioStats, curAudioStats);
33475
- videoStats = diffRecvVideoStats(_this7._preVideoStats, curVideoStats);
33476
- _context7.next = 18;
33477
- return (_this7$_audioStallObs = _this7._audioStallObserver) === null || _this7$_audioStallObs === void 0 ? void 0 : _this7$_audioStallObs.getAudioStallInfo();
33478
- case 18:
33479
- audioStallInfo = _context7.sent;
33480
- _context7.next = 21;
33481
- return (_this7$_videoStallObs = _this7._videoStallObserver) === null || _this7$_videoStallObs === void 0 ? void 0 : _this7$_videoStallObs.getStallInfo({
33482
- interval: videoStats.statsInterval,
33483
- frameRateReceived: videoStats.frameRateReceived,
33484
- frameRateDecoded: videoStats.frameRateDecoded,
33485
- bitrate: videoStats.receivedKBitrate
33486
- });
33487
- case 21:
33488
- videoStallInfo = _context7.sent;
33489
- _ref6 = (_this7$_networkQualit = (_this7$_networkQualit2 = _this7._networkQuality) === null || _this7$_networkQualit2 === void 0 ? void 0 : _this7$_networkQualit2.getDownlinkQuality(_objectSpread2$b(_objectSpread2$b({}, audioStats), {}, {
33490
- stallDuration: audioStallInfo.stallDuration
33491
- }), _objectSpread2$b(_objectSpread2$b({}, videoStats), {}, {
33492
- stallDuration: videoStallInfo.stall.stallDuration100ms || videoStallInfo.stall.stallDuration500ms
33493
- }))) !== null && _this7$_networkQualit !== void 0 ? _this7$_networkQualit : [], _ref7 = _slicedToArray$7(_ref6, 2), quality = _ref7[0], qualityInfo = _ref7[1];
33494
- if (_this7._opts.enableAdaptiveJitterBuffer) {
33495
- _this7._handleJitterBuffer(qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.qualityQos, _this7._opts.adaptiveJitterBuffer, _this7._opts.networkStrategy);
33496
- }
33497
- if (videoStats.estimatedPlayoutTimestamp && audioStats.estimatedPlayoutTimestamp) {
33498
- av_sync_diff = videoStats.estimatedPlayoutTimestamp - audioStats.estimatedPlayoutTimestamp;
33499
- }
33500
- _this7.emit(EXTEND_EVENTS.RTC_NETWORK, {
33501
- interval: videoStats.statsInterval,
33502
- network_quality: quality,
33503
- audio_stall_duration: audioStallInfo.stallDuration,
33504
- audio_stall_count: audioStallInfo.stallCount,
33505
- audio_stall_time_per_100sec: audioStallInfo.stallDuration / audioStats.statsInterval * 100,
33506
- audio_stall_count_per_100sec: audioStallInfo.stallCount / audioStats.statsInterval * 100 * 1e3,
33507
- video_stall_duration: videoStallInfo.stall.stallDuration500ms,
33508
- video_stall_count: videoStallInfo.stall.stallCount500ms,
33509
- video_stall_duration_100ms: videoStallInfo.stall.stallDuration100ms,
33510
- video_stall_count_100ms: videoStallInfo.stall.stallCount100ms,
33511
- video_stall_time_per_100sec: videoStallInfo.stall.stallDuration500ms / videoStats.statsInterval * 100,
33512
- video_stall_count_per_100sec: videoStallInfo.stall.stallCount500ms / videoStats.statsInterval * 100 * 1e3,
33513
- rtt: videoStats.rtt,
33514
- video_jb_delay: videoStats.jitterBufferDelay,
33515
- audio_jb_delay: audioStats.jitterBufferDelay,
33516
- audio_lost_rate: audioStats.audioLossRate,
33517
- video_lost_rate: videoStats.videoLossRate,
33518
- video_retransmitted_rate: videoStats.retransmittedRate,
33519
- quality_audio_level: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.audioLevel,
33520
- quality_video_level: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.videoLevel,
33521
- quality_audio_qos: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.audioQos,
33522
- quality_video_qos: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.videoQos,
33523
- quality_qos: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.qualityQos,
33524
- quality_audio_qoe: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.audioQoe,
33525
- quality_video_qoe: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.videoQoe,
33526
- current_delay: _this7._getDelay(),
33527
- visibility_state: document.visibilityState,
33528
- target_delay: _this7._targetDelayHint,
33529
- av_sync_diff,
33530
- set_delay_error: _this7._setDelayError || null
33531
- });
33532
- case 26:
33533
- _this7._preAudioStats = curAudioStats;
33534
- _this7._preVideoStats = curVideoStats;
33535
- _this7.set_delay_error = null;
33536
- case 29:
33537
- case "end":
33538
- return _context7.stop();
33539
- }
33540
- }, _callee7);
33541
- })), 2e3);
33957
+ var report = /* @__PURE__ */ function() {
33958
+ var _ref52 = _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee9() {
33959
+ var _this7$_audioTranscei, _this7$_videoTranscei;
33960
+ 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;
33961
+ return _regeneratorRuntime$a().wrap(function _callee9$(_context9) {
33962
+ while (1)
33963
+ switch (_context9.prev = _context9.next) {
33964
+ case 0:
33965
+ 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))) {
33966
+ _context9.next = 4;
33967
+ break;
33968
+ }
33969
+ _this7._preAudioStats = null;
33970
+ _this7._preVideoStats = null;
33971
+ return _context9.abrupt("return");
33972
+ case 4:
33973
+ if (!_this7._audioStallObserver && _this7._audioTransceicer) {
33974
+ _this7._audioStallObserver = new AudioStallObserver();
33975
+ _this7._audioStallObserver.start(_this7._audioTransceicer);
33976
+ }
33977
+ if (!_this7._videoStallObserver && _this7._video && _this7._media) {
33978
+ _this7._videoStallObserver = new VideoStallObserver();
33979
+ _this7._videoStallObserver.start(_this7._media);
33980
+ }
33981
+ if (_this7._pc && !_this7._networkQuality && _this7._opts.enableNetworkQuality && _this7._opts.networkQuality) {
33982
+ _this7._networkQuality = new NetworkQuality(_this7._pc, _this7._opts.networkQuality);
33983
+ }
33984
+ _context9.next = 9;
33985
+ return Promise.all([getRecvAudioStats(_this7._audioTransceicer.receiver.getStats()), getRecvVideoStats(_this7._videoTransceicer.receiver.getStats())]);
33986
+ case 9:
33987
+ _yield$Promise$all3 = _context9.sent;
33988
+ _yield$Promise$all4 = _slicedToArray$7(_yield$Promise$all3, 2);
33989
+ curAudioStats = _yield$Promise$all4[0];
33990
+ curVideoStats = _yield$Promise$all4[1];
33991
+ if (!(_this7._preAudioStats && _this7._preVideoStats)) {
33992
+ _context9.next = 27;
33993
+ break;
33994
+ }
33995
+ audioStats = diffRecvAudioStats(_this7._preAudioStats, curAudioStats);
33996
+ videoStats = diffRecvVideoStats(_this7._preVideoStats, curVideoStats);
33997
+ _this7._videoJitterBufferDelay = videoStats.jitterBufferDelay;
33998
+ _context9.next = 19;
33999
+ return (_this7$_audioStallObs = _this7._audioStallObserver) === null || _this7$_audioStallObs === void 0 ? void 0 : _this7$_audioStallObs.getAudioStallInfo();
34000
+ case 19:
34001
+ audioStallInfo = _context9.sent;
34002
+ _context9.next = 22;
34003
+ return (_this7$_videoStallObs = _this7._videoStallObserver) === null || _this7$_videoStallObs === void 0 ? void 0 : _this7$_videoStallObs.getStallInfo({
34004
+ interval: videoStats.statsInterval,
34005
+ frameRateReceived: videoStats.receivedFrameRate,
34006
+ frameRateDecoded: videoStats.decoderOutputFrameRate,
34007
+ bitrate: videoStats.receivedKBitrate
34008
+ });
34009
+ case 22:
34010
+ videoStallInfo = _context9.sent;
34011
+ _ref6 = (_this7$_networkQualit = (_this7$_networkQualit2 = _this7._networkQuality) === null || _this7$_networkQualit2 === void 0 ? void 0 : _this7$_networkQualit2.getDownlinkQuality(_objectSpread2$b(_objectSpread2$b({}, audioStats), {}, {
34012
+ stallDuration: (audioStallInfo === null || audioStallInfo === void 0 ? void 0 : audioStallInfo.stallDuration) || 0
34013
+ }), _objectSpread2$b(_objectSpread2$b({}, videoStats), {}, {
34014
+ stallDuration: (videoStallInfo === null || videoStallInfo === void 0 ? void 0 : videoStallInfo.stall.stallDuration100ms) || (videoStallInfo === null || videoStallInfo === void 0 ? void 0 : videoStallInfo.stall.stallDuration500ms) || 0
34015
+ }))) !== null && _this7$_networkQualit !== void 0 ? _this7$_networkQualit : [], _ref7 = _slicedToArray$7(_ref6, 2), quality = _ref7[0], qualityInfo = _ref7[1];
34016
+ if (_this7._opts.enableAdaptiveJitterBuffer) {
34017
+ _this7._handleJitterBuffer(qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.qualityQos, _this7._opts.adaptiveJitterBuffer, _this7._opts.networkStrategy);
34018
+ }
34019
+ if (videoStats.estimatedPlayoutTimestamp && audioStats.estimatedPlayoutTimestamp) {
34020
+ av_sync_diff = videoStats.estimatedPlayoutTimestamp - audioStats.estimatedPlayoutTimestamp;
34021
+ }
34022
+ _this7.emit(EXTEND_EVENTS.RTC_NETWORK, {
34023
+ interval: videoStats.statsInterval,
34024
+ network_quality: quality,
34025
+ audio_stall_duration: audioStallInfo === null || audioStallInfo === void 0 ? void 0 : audioStallInfo.stallDuration,
34026
+ audio_stall_count: audioStallInfo === null || audioStallInfo === void 0 ? void 0 : audioStallInfo.stallCount,
34027
+ audio_stall_time_per_100sec: ((audioStallInfo === null || audioStallInfo === void 0 ? void 0 : audioStallInfo.stallDuration) || 0) / audioStats.statsInterval * 100,
34028
+ audio_stall_count_per_100sec: ((audioStallInfo === null || audioStallInfo === void 0 ? void 0 : audioStallInfo.stallCount) || 0) / audioStats.statsInterval * 100 * 1e3,
34029
+ video_stall_duration: videoStallInfo === null || videoStallInfo === void 0 ? void 0 : videoStallInfo.stall.stallDuration500ms,
34030
+ video_stall_count: videoStallInfo === null || videoStallInfo === void 0 ? void 0 : videoStallInfo.stall.stallCount500ms,
34031
+ video_stall_duration_100ms: videoStallInfo === null || videoStallInfo === void 0 ? void 0 : videoStallInfo.stall.stallDuration100ms,
34032
+ video_stall_count_100ms: videoStallInfo === null || videoStallInfo === void 0 ? void 0 : videoStallInfo.stall.stallCount100ms,
34033
+ video_stall_time_per_100sec: ((videoStallInfo === null || videoStallInfo === void 0 ? void 0 : videoStallInfo.stall.stallDuration500ms) || 0) / videoStats.statsInterval * 100,
34034
+ video_stall_count_per_100sec: ((videoStallInfo === null || videoStallInfo === void 0 ? void 0 : videoStallInfo.stall.stallCount500ms) || 0) / videoStats.statsInterval * 100 * 1e3,
34035
+ rtt: videoStats.rtt,
34036
+ video_jb_delay: videoStats.jitterBufferDelay,
34037
+ audio_jb_delay: audioStats.jitterBufferDelay,
34038
+ audio_lost_rate: audioStats.audioLossRate,
34039
+ video_lost_rate: videoStats.videoLossRate,
34040
+ video_retransmitted_rate: videoStats.retransmittedRate,
34041
+ quality_audio_level: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.audioLevel,
34042
+ quality_video_level: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.videoLevel,
34043
+ quality_audio_qos: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.audioQos,
34044
+ quality_video_qos: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.videoQos,
34045
+ quality_qos: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.qualityQos,
34046
+ quality_audio_qoe: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.audioQoe,
34047
+ quality_video_qoe: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.videoQoe,
34048
+ current_delay: _this7._getDelay(),
34049
+ visibility_state: document.visibilityState,
34050
+ target_delay: _this7._targetDelayHint,
34051
+ av_sync_diff,
34052
+ set_delay_error: _this7._setDelayError || null,
34053
+ video_width: ((_this7$_media = _this7._media) === null || _this7$_media === void 0 ? void 0 : _this7$_media.videoWidth) || 0,
34054
+ video_height: ((_this7$_media2 = _this7._media) === null || _this7$_media2 === void 0 ? void 0 : _this7$_media2.videoHeight) || 0,
34055
+ abr_state: videoStats.abrState || "none"
34056
+ });
34057
+ case 27:
34058
+ _this7._preAudioStats = curAudioStats;
34059
+ _this7._preVideoStats = curVideoStats;
34060
+ _this7._setDelayError = null;
34061
+ case 30:
34062
+ case "end":
34063
+ return _context9.stop();
34064
+ }
34065
+ }, _callee9);
34066
+ }));
34067
+ return function report2() {
34068
+ return _ref52.apply(this, arguments);
34069
+ };
34070
+ }();
34071
+ this._rtcReportTimer = setInterval(function() {
34072
+ return report();
34073
+ }, 2e3);
34074
+ report();
33542
34075
  }
33543
34076
  }, {
33544
34077
  key: "_handleJitterBuffer",
33545
34078
  value: function _handleJitterBuffer(quality, adaptiveJitterBuffer, networkStrategy) {
34079
+ if (!adaptiveJitterBuffer || !networkStrategy) {
34080
+ return;
34081
+ }
33546
34082
  this._networkQualityResult.push(quality);
33547
34083
  if (this._networkQualityResult.length > adaptiveJitterBuffer.networkWindow) {
33548
34084
  this._networkQualityResult.shift();
33549
34085
  }
33550
- var validNetworkQualityResult = this._networkQualityResult.filter(Boolean);
34086
+ var validNetworkQualityResult = this._networkQualityResult.filter(function(v2) {
34087
+ return typeof v2 === "number";
34088
+ });
33551
34089
  if (validNetworkQualityResult.length === adaptiveJitterBuffer.networkWindow) {
33552
34090
  var _networkStrategy$aver;
33553
34091
  var averageQuality;
@@ -33575,9 +34113,9 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33575
34113
  (_this$_audioStallObse = this._audioStallObserver) === null || _this$_audioStallObse === void 0 ? void 0 : _this$_audioStallObse.destroy();
33576
34114
  (_this$_videoStallObse = this._videoStallObserver) === null || _this$_videoStallObse === void 0 ? void 0 : _this$_videoStallObse.destroy();
33577
34115
  (_this$_networkQuality = this._networkQuality) === null || _this$_networkQuality === void 0 ? void 0 : _this$_networkQuality.destroy();
33578
- this._audioStallObserver = null;
33579
- this._videoStallObserver = null;
33580
- this._networkQuality = null;
34116
+ delete this._audioStallObserver;
34117
+ delete this._videoStallObserver;
34118
+ delete this._networkQuality;
33581
34119
  this._preAudioStats = null;
33582
34120
  this._preVideoStats = null;
33583
34121
  if (this._rtcReportTimer) {
@@ -33585,23 +34123,38 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33585
34123
  this._rtcReportTimer = 0;
33586
34124
  }
33587
34125
  }
34126
+ }, {
34127
+ key: "_clearDelay",
34128
+ value: function _clearDelay() {
34129
+ if (this._setDelayTimer) {
34130
+ clearInterval(this._setDelayTimer);
34131
+ delete this._setDelayTimer;
34132
+ }
34133
+ this._targetDelayHint = null;
34134
+ this._setDelayError = null;
34135
+ }
33588
34136
  }, {
33589
34137
  key: "_disconnect",
33590
34138
  value: function _disconnect() {
33591
- var _this$_loader, _this$_networkEvaluat2;
33592
- (_this$_loader = this._loader) === null || _this$_loader === void 0 ? void 0 : _this$_loader.cancel();
34139
+ var _this$_loader2, _this$_networkEvaluat2;
34140
+ this._clearDelay();
34141
+ (_this$_loader2 = this._loader) === null || _this$_loader2 === void 0 ? void 0 : _this$_loader2.cancel();
33593
34142
  (_this$_networkEvaluat2 = this._networkEvaluate) === null || _this$_networkEvaluat2 === void 0 ? void 0 : _this$_networkEvaluat2.destroy();
33594
34143
  this._stopRtcReport();
33595
34144
  clearTimeout(this._checkStatsErrorTimer);
33596
34145
  this._clearPeerStateTimeout();
34146
+ this._firstFrameObserver.reset();
33597
34147
  this._audioTransceicer = null;
33598
34148
  this._videoTransceicer = null;
33599
34149
  this._mediaStream = null;
33600
- this._networkEvaluate = null;
33601
34150
  }
33602
34151
  }, {
33603
34152
  key: "_emitError",
33604
34153
  value: function _emitError(error) {
34154
+ var _error$originError;
34155
+ this._clearDelay();
34156
+ 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);
34157
+ this._firstFrameObserver.reset();
33605
34158
  this.emit(EVENT$2.ERROR, error);
33606
34159
  clearTimeout(this._checkStatsErrorTimer);
33607
34160
  this._clearPeerStateTimeout();
@@ -33616,29 +34169,35 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33616
34169
  }, {
33617
34170
  key: "_createEmptyPeer",
33618
34171
  value: function() {
33619
- var _createEmptyPeer2 = _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee8() {
34172
+ var _createEmptyPeer2 = _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee10() {
33620
34173
  var pc;
33621
- return _regeneratorRuntime$a().wrap(function _callee8$(_context8) {
34174
+ return _regeneratorRuntime$a().wrap(function _callee10$(_context10) {
33622
34175
  while (1)
33623
- switch (_context8.prev = _context8.next) {
34176
+ switch (_context10.prev = _context10.next) {
33624
34177
  case 0:
33625
34178
  pc = new RTCPeerConnection();
33626
- _context8.next = 3;
34179
+ _context10.next = 3;
33627
34180
  return pc.createOffer();
33628
34181
  case 3:
33629
34182
  pc.close();
33630
- pc = null;
33631
- case 5:
34183
+ case 4:
33632
34184
  case "end":
33633
- return _context8.stop();
34185
+ return _context10.stop();
33634
34186
  }
33635
- }, _callee8);
34187
+ }, _callee10);
33636
34188
  }));
33637
34189
  function _createEmptyPeer() {
33638
34190
  return _createEmptyPeer2.apply(this, arguments);
33639
34191
  }
33640
34192
  return _createEmptyPeer;
33641
34193
  }()
34194
+ }, {
34195
+ key: "_emitFirstFrameState",
34196
+ value: function _emitFirstFrameState(info, extra) {
34197
+ this.emit(EXTEND_EVENTS.RTC_FIRST_FRAME, _objectSpread2$b(_objectSpread2$b(_objectSpread2$b({}, info), extra), {}, {
34198
+ initOptionsIncludePreload: !!this._opts.preloadPromise
34199
+ }));
34200
+ }
33642
34201
  }, {
33643
34202
  key: "_changeVolumeInHarmonyWorkaround",
33644
34203
  value: function _changeVolumeInHarmonyWorkaround() {
@@ -33652,7 +34211,8 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33652
34211
  enumerable: true,
33653
34212
  get: originalDescriptor.get,
33654
34213
  set: function set5(val) {
33655
- originalDescriptor.set.call(this, val);
34214
+ var _originalDescriptor$s;
34215
+ (_originalDescriptor$s = originalDescriptor.set) === null || _originalDescriptor$s === void 0 ? void 0 : _originalDescriptor$s.call(this, val);
33656
34216
  var _changeNumberInRange = changeNumberInRange(this.volume, 0, 1, 0.01), _changeNumberInRange2 = _slicedToArray$7(_changeNumberInRange, 2), sourceVolume = _changeNumberInRange2[0], targetVolume = _changeNumberInRange2[1];
33657
34217
  this.volume = targetVolume;
33658
34218
  this.volume = sourceVolume;
@@ -33668,14 +34228,47 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33668
34228
  }
33669
34229
  }
33670
34230
  }
34231
+ }, {
34232
+ key: "_mutedBeforePlayingWorkaround",
34233
+ value: function _mutedBeforePlayingWorkaround() {
34234
+ var _this9 = this;
34235
+ if (isHeyTapBrowser() || isVivoBrowser()) {
34236
+ var originalDescriptor = Object.getOwnPropertyDescriptor(HTMLMediaElement.prototype, "muted");
34237
+ if (this._media && originalDescriptor) {
34238
+ logger$b.log("apply muted workaround for vivo & oppo");
34239
+ var originalMuted = this._media.muted;
34240
+ this._media.muted = true;
34241
+ Object.defineProperty(this._media, "muted", {
34242
+ configurable: true,
34243
+ enumerable: true,
34244
+ get: function get4() {
34245
+ return originalMuted;
34246
+ },
34247
+ set: function set5(val) {
34248
+ logger$b.log("muted workaround. set muted =", val);
34249
+ originalMuted = val;
34250
+ }
34251
+ });
34252
+ var revertMutedProxy = function revertMutedProxy2() {
34253
+ logger$b.log("revert muted workaround. muted:", originalMuted);
34254
+ if (_this9._media) {
34255
+ Object.defineProperty(_this9._media, "muted", originalDescriptor);
34256
+ _this9._media.muted = originalMuted;
34257
+ _this9._media.removeEventListener("playing", revertMutedProxy2);
34258
+ }
34259
+ };
34260
+ this._media.addEventListener("playing", revertMutedProxy);
34261
+ }
34262
+ }
34263
+ }
33671
34264
  }, {
33672
34265
  key: "destroy",
33673
34266
  value: function destroy(keepClearMediaStream) {
33674
- var _this$_revertVolumeWo, _this$_media;
34267
+ var _this$_revertVolumeWo, _this$_media3;
33675
34268
  this._disconnect();
33676
34269
  (_this$_revertVolumeWo = this._revertVolumeWorkaround) === null || _this$_revertVolumeWo === void 0 ? void 0 : _this$_revertVolumeWo.call(this);
33677
34270
  delete this._revertVolumeWorkaround;
33678
- (_this$_media = this._media) === null || _this$_media === void 0 ? void 0 : _this$_media.removeEventListener("timeupdate", this._mockWaitingByTimeupdate);
34271
+ (_this$_media3 = this._media) === null || _this$_media3 === void 0 ? void 0 : _this$_media3.removeEventListener("timeupdate", this._mockWaitingByTimeupdate);
33679
34272
  if (this._media && !keepClearMediaStream) {
33680
34273
  this._media.srcObject = null;
33681
34274
  }
@@ -33686,7 +34279,6 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33686
34279
  this._media = null;
33687
34280
  this._player = null;
33688
34281
  this._pc = null;
33689
- this._opts = null;
33690
34282
  }
33691
34283
  }], [{
33692
34284
  key: "enableLogger",
@@ -33715,15 +34307,11 @@ var RtsPlugin = /* @__PURE__ */ function(_BasePlugin) {
33715
34307
  function RtsPlugin2() {
33716
34308
  var _this;
33717
34309
  _classCallCheck$k(this, RtsPlugin2);
33718
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
33719
- args[_key] = arguments[_key];
33720
- }
33721
- _this = _super.call.apply(_super, [this].concat(args));
33722
- _defineProperty$i(_assertThisInitialized$f(_this), "_rts", null);
33723
- _defineProperty$i(_assertThisInitialized$f(_this), "_mediaStream", null);
33724
- _defineProperty$i(_assertThisInitialized$f(_this), "_disconnectTimer", void 0);
33725
- _defineProperty$i(_assertThisInitialized$f(_this), "_rtsOpts", null);
33726
- _defineProperty$i(_assertThisInitialized$f(_this), "_onPause", function() {
34310
+ _this = _super.apply(this, arguments);
34311
+ _this._rts = null;
34312
+ _this._rtsOpts = null;
34313
+ _this._mediaStream = null;
34314
+ _this._onPause = function() {
33727
34315
  if (_this._disconnectTimer) {
33728
34316
  return;
33729
34317
  }
@@ -33731,8 +34319,8 @@ var RtsPlugin = /* @__PURE__ */ function(_BasePlugin) {
33731
34319
  _this._closeAfterPause();
33732
34320
  _this._clearDisconnectTimer();
33733
34321
  }, _this.config.disconnectTime * 1e3);
33734
- });
33735
- _defineProperty$i(_assertThisInitialized$f(_this), "_reInit", function() {
34322
+ };
34323
+ _this._reInit = function() {
33736
34324
  var _this$_rts;
33737
34325
  _this._clearDisconnectTimer();
33738
34326
  if ((_this$_rts = _this._rts) !== null && _this$_rts !== void 0 && _this$_rts._pc) {
@@ -33740,8 +34328,8 @@ var RtsPlugin = /* @__PURE__ */ function(_BasePlugin) {
33740
34328
  }
33741
34329
  _this._init();
33742
34330
  _this._bindRtsEvents();
33743
- });
33744
- _defineProperty$i(_assertThisInitialized$f(_this), "_init", function() {
34331
+ };
34332
+ _this._init = function() {
33745
34333
  var _this$_rts2;
33746
34334
  (_this$_rts2 = _this._rts) === null || _this$_rts2 === void 0 ? void 0 : _this$_rts2.destroy();
33747
34335
  var config2 = _this.player.config;
@@ -33760,8 +34348,8 @@ var RtsPlugin = /* @__PURE__ */ function(_BasePlugin) {
33760
34348
  }
33761
34349
  }, rtsOpts));
33762
34350
  _this._rts.load(config2.url);
33763
- });
33764
- _defineProperty$i(_assertThisInitialized$f(_this), "_onSwitchURL", function(url2) {
34351
+ };
34352
+ _this._onSwitchURL = function(url2) {
33765
34353
  if (url2) {
33766
34354
  _this.player.config.url = url2;
33767
34355
  }
@@ -33770,14 +34358,14 @@ var RtsPlugin = /* @__PURE__ */ function(_BasePlugin) {
33770
34358
  } else {
33771
34359
  _this._reInit();
33772
34360
  }
33773
- });
33774
- _defineProperty$i(_assertThisInitialized$f(_this), "destroy", function() {
34361
+ };
34362
+ _this.destroy = function() {
33775
34363
  var _this$_rts3;
33776
34364
  _this.player.switchURL = _this._originSwitchFn;
33777
34365
  _this._clearDisconnectTimer();
33778
34366
  (_this$_rts3 = _this._rts) === null || _this$_rts3 === void 0 ? void 0 : _this$_rts3.destroy();
33779
34367
  _this._rts = null;
33780
- });
34368
+ };
33781
34369
  return _this;
33782
34370
  }
33783
34371
  _createClass$k(RtsPlugin2, [{
@@ -33787,32 +34375,38 @@ var RtsPlugin = /* @__PURE__ */ function(_BasePlugin) {
33787
34375
  return (_this$_rts4 = this._rts) === null || _this$_rts4 === void 0 ? void 0 : _this$_rts4.pc;
33788
34376
  }
33789
34377
  }, {
33790
- key: "videoTrack",
34378
+ key: "jitterBufferDelay",
33791
34379
  get: function get4() {
33792
34380
  var _this$_rts5;
33793
- return (_this$_rts5 = this._rts) === null || _this$_rts5 === void 0 ? void 0 : _this$_rts5.videoTack;
34381
+ return ((_this$_rts5 = this._rts) === null || _this$_rts5 === void 0 ? void 0 : _this$_rts5.getJitterBufferDelay()) || 0;
33794
34382
  }
33795
34383
  }, {
33796
- key: "audioTrack",
34384
+ key: "loader",
33797
34385
  get: function get4() {
33798
34386
  var _this$_rts6;
33799
- return (_this$_rts6 = this._rts) === null || _this$_rts6 === void 0 ? void 0 : _this$_rts6.audioTrack;
34387
+ return (_this$_rts6 = this._rts) === null || _this$_rts6 === void 0 ? void 0 : _this$_rts6.loader;
33800
34388
  }
33801
34389
  }, {
33802
- key: "core",
34390
+ key: "videoTrack",
33803
34391
  get: function get4() {
33804
- return this._rts;
34392
+ var _this$_rts7;
34393
+ return (_this$_rts7 = this._rts) === null || _this$_rts7 === void 0 ? void 0 : _this$_rts7.videoTack;
33805
34394
  }
33806
34395
  }, {
33807
- key: "loader",
34396
+ key: "audioTrack",
33808
34397
  get: function get4() {
33809
- var _this$_rts7;
33810
- return (_this$_rts7 = this._rts) === null || _this$_rts7 === void 0 ? void 0 : _this$_rts7.loader;
34398
+ var _this$_rts8;
34399
+ return (_this$_rts8 = this._rts) === null || _this$_rts8 === void 0 ? void 0 : _this$_rts8.audioTrack;
34400
+ }
34401
+ }, {
34402
+ key: "core",
34403
+ get: function get4() {
34404
+ return this._rts;
33811
34405
  }
33812
34406
  }, {
33813
34407
  key: "version",
33814
34408
  get: function get4() {
33815
- return "0.2.1-alpha.47";
34409
+ return "0.2.1-alpha.51";
33816
34410
  }
33817
34411
  }, {
33818
34412
  key: "beforePlayerInit",
@@ -33820,7 +34414,8 @@ var RtsPlugin = /* @__PURE__ */ function(_BasePlugin) {
33820
34414
  var _this$player2, _this$player$config, _this$player$config$r, _this2 = this;
33821
34415
  this._init();
33822
34416
  if (!this._originSwitchFn) {
33823
- this._originSwitchFn = this.player.switchURL.bind(this.player);
34417
+ var _this$player$switchUR;
34418
+ this._originSwitchFn = (_this$player$switchUR = this.player.switchURL) === null || _this$player$switchUR === void 0 ? void 0 : _this$player$switchUR.bind(this.player);
33824
34419
  }
33825
34420
  this.player.switchURL = this._onSwitchURL;
33826
34421
  (_this$player2 = this.player) === null || _this$player2 === void 0 ? void 0 : _this$player2.useHooks("replay", this._onSwitchURL);
@@ -33862,26 +34457,26 @@ var RtsPlugin = /* @__PURE__ */ function(_BasePlugin) {
33862
34457
  }, {
33863
34458
  key: "getStats",
33864
34459
  value: function getStats2() {
33865
- var _this$_rts8;
33866
- return (_this$_rts8 = this._rts) === null || _this$_rts8 === void 0 ? void 0 : _this$_rts8.getStats();
34460
+ var _this$_rts9;
34461
+ return (_this$_rts9 = this._rts) === null || _this$_rts9 === void 0 ? void 0 : _this$_rts9.getStats();
33867
34462
  }
33868
34463
  }, {
33869
34464
  key: "getStatsSnapshoot",
33870
34465
  value: function getStatsSnapshoot2() {
33871
- var _this$_rts9;
33872
- return (_this$_rts9 = this._rts) === null || _this$_rts9 === void 0 ? void 0 : _this$_rts9.getStatsSnapshoot();
34466
+ var _this$_rts10;
34467
+ return (_this$_rts10 = this._rts) === null || _this$_rts10 === void 0 ? void 0 : _this$_rts10.getStatsSnapshoot();
33873
34468
  }
33874
34469
  }, {
33875
34470
  key: "getNetWorkInfo",
33876
34471
  value: function getNetWorkInfo() {
33877
- var _this$_rts10;
33878
- return (_this$_rts10 = this._rts) === null || _this$_rts10 === void 0 ? void 0 : _this$_rts10.networkStats;
34472
+ var _this$_rts11;
34473
+ return (_this$_rts11 = this._rts) === null || _this$_rts11 === void 0 ? void 0 : _this$_rts11.networkStats;
33879
34474
  }
33880
34475
  }, {
33881
34476
  key: "setDelay",
33882
34477
  value: function setDelay(delayHint) {
33883
- var _this$_rts11;
33884
- (_this$_rts11 = this._rts) === null || _this$_rts11 === void 0 ? void 0 : _this$_rts11._setDelay(delayHint);
34478
+ var _this$_rts12;
34479
+ (_this$_rts12 = this._rts) === null || _this$_rts12 === void 0 ? void 0 : _this$_rts12._setDelay(delayHint);
33885
34480
  }
33886
34481
  }, {
33887
34482
  key: "_clearDisconnectTimer",
@@ -33892,15 +34487,15 @@ var RtsPlugin = /* @__PURE__ */ function(_BasePlugin) {
33892
34487
  }, {
33893
34488
  key: "_closeAfterPause",
33894
34489
  value: function _closeAfterPause() {
33895
- var _this$_rts12, _this$config, _this$_rts14;
33896
- if (!((_this$_rts12 = this._rts) !== null && _this$_rts12 !== void 0 && _this$_rts12._pc)) {
34490
+ var _this$_rts13, _this$config, _this$_rts15;
34491
+ if (!((_this$_rts13 = this._rts) !== null && _this$_rts13 !== void 0 && _this$_rts13._pc)) {
33897
34492
  return;
33898
34493
  }
33899
34494
  if ((_this$config = this.config) !== null && _this$config !== void 0 && _this$config.seamlesslyReload) {
33900
- var _this$_rts13;
33901
- this._mediaStream = (_this$_rts13 = this._rts) === null || _this$_rts13 === void 0 ? void 0 : _this$_rts13._mediaStream;
34495
+ var _this$_rts14;
34496
+ this._mediaStream = (_this$_rts14 = this._rts) === null || _this$_rts14 === void 0 ? void 0 : _this$_rts14._mediaStream;
33902
34497
  }
33903
- (_this$_rts14 = this._rts) === null || _this$_rts14 === void 0 ? void 0 : _this$_rts14.destroy(true);
34498
+ (_this$_rts15 = this._rts) === null || _this$_rts15 === void 0 ? void 0 : _this$_rts15.destroy(true);
33904
34499
  this._rts = null;
33905
34500
  }
33906
34501
  }, {
@@ -33916,16 +34511,17 @@ var RtsPlugin = /* @__PURE__ */ function(_BasePlugin) {
33916
34511
  this._transCoreEvent(EVENT$2.SEI);
33917
34512
  this._transCoreEvent(EXTEND_EVENTS.RTC_STATE_CHANGE);
33918
34513
  this._transCoreEvent(EXTEND_EVENTS.RTC_NETWORK);
34514
+ this._transCoreEvent(EXTEND_EVENTS.RTC_FIRST_FRAME);
33919
34515
  }
33920
34516
  }, {
33921
34517
  key: "_transErrorEvent",
33922
34518
  value: function _transErrorEvent() {
33923
- var _this3 = this;
33924
- this._rts.on(EVENT$2.ERROR, function(err) {
34519
+ var _this$_rts16, _this3 = this, _this$_rts17;
34520
+ (_this$_rts16 = this._rts) === null || _this$_rts16 === void 0 ? void 0 : _this$_rts16.on(EVENT$2.ERROR, function(err) {
33925
34521
  if (!_this3.player)
33926
34522
  return;
33927
34523
  var e4 = new Errors(_this3.player, err);
33928
- var _this3$_rtsOpts = _this3._rtsOpts, backupConstruct = _this3$_rtsOpts.backupConstruct, backupURL = _this3$_rtsOpts.backupURL;
34524
+ var _ref6 = _this3._rtsOpts || {}, backupConstruct = _ref6.backupConstruct, backupURL = _ref6.backupURL;
33929
34525
  if (backupURL) {
33930
34526
  var _player$video;
33931
34527
  var player = _this3.player;
@@ -33961,7 +34557,7 @@ var RtsPlugin = /* @__PURE__ */ function(_BasePlugin) {
33961
34557
  }
33962
34558
  _this3.player.emit(ERROR$1, e4);
33963
34559
  });
33964
- this._rts.on("waiting", function() {
34560
+ (_this$_rts17 = this._rts) === null || _this$_rts17 === void 0 ? void 0 : _this$_rts17.on("waiting", function() {
33965
34561
  var _this3$player;
33966
34562
  (_this3$player = _this3.player) === null || _this3$player === void 0 ? void 0 : _this3$player.emit("waiting");
33967
34563
  });
@@ -33969,8 +34565,8 @@ var RtsPlugin = /* @__PURE__ */ function(_BasePlugin) {
33969
34565
  }, {
33970
34566
  key: "_transCoreEvent",
33971
34567
  value: function _transCoreEvent(eventName) {
33972
- var _this4 = this;
33973
- this._rts.on(eventName, function(e4) {
34568
+ var _this$_rts18, _this4 = this;
34569
+ (_this$_rts18 = this._rts) === null || _this$_rts18 === void 0 ? void 0 : _this$_rts18.on(eventName, function(e4) {
33974
34570
  if (_this4.player) {
33975
34571
  _this4.player.emit("core_event", _objectSpread2$b(_objectSpread2$b({}, e4), {}, {
33976
34572
  eventName
@@ -34008,7 +34604,8 @@ var RtsPlugin = /* @__PURE__ */ function(_BasePlugin) {
34008
34604
  case 3:
34009
34605
  res = _context.sent;
34010
34606
  hasH264 = (_res$video = res.video) === null || _res$video === void 0 ? void 0 : _res$video.filter(function(x2) {
34011
- return x2.codec === "H264" && (!targetProfileLevel || x2.config.indexOf(targetProfileLevel) !== -1);
34607
+ var _x$config;
34608
+ return x2.codec === "H264" && (!targetProfileLevel || ((_x$config = x2.config) === null || _x$config === void 0 ? void 0 : _x$config.indexOf(targetProfileLevel)) !== -1);
34012
34609
  }).length;
34013
34610
  if (hasH264) {
34014
34611
  _context.next = 10;
@@ -34019,7 +34616,8 @@ var RtsPlugin = /* @__PURE__ */ function(_BasePlugin) {
34019
34616
  case 8:
34020
34617
  res1 = _context.sent;
34021
34618
  hasH264 = (_res1$video = res1.video) === null || _res1$video === void 0 ? void 0 : _res1$video.filter(function(x2) {
34022
- return x2.codec === "H264" && (!targetProfileLevel || x2.config.indexOf(targetProfileLevel) !== -1);
34619
+ var _x$config2;
34620
+ return x2.codec === "H264" && (!targetProfileLevel || ((_x$config2 = x2.config) === null || _x$config2 === void 0 ? void 0 : _x$config2.indexOf(targetProfileLevel)) !== -1);
34023
34621
  }).length;
34024
34622
  case 10:
34025
34623
  return _context.abrupt("return", !!hasH264);