@byteplus/veplayer-plugin 2.10.0 → 2.10.2-rc.0

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.
@@ -1764,6 +1764,7 @@ var PAUSE$1 = "pause";
1764
1764
  var ERROR$1 = "error";
1765
1765
  var TIME_UPDATE$1 = "timeupdate";
1766
1766
  var WAITING = "waiting";
1767
+ var CANPLAY = "canplay";
1767
1768
  var LOADED_DATA$1 = "loadeddata";
1768
1769
  var LOAD_START = "loadstart";
1769
1770
  var DESTROY = "destroy";
@@ -2245,6 +2246,37 @@ function listener$1(element, selector, type, callback) {
2245
2246
  }
2246
2247
  var delegate_1 = delegate;
2247
2248
  var _delegate$1 = /* @__PURE__ */ getDefaultExportFromCjs$3(delegate_1);
2249
+ var STATE_CLASS$1 = {
2250
+ DEFAULT: "xgplayer",
2251
+ DEFAULT_SKIN: "xgplayer-skin-default",
2252
+ ENTER: "xgplayer-is-enter",
2253
+ PAUSED: "xgplayer-pause",
2254
+ PLAYING: "xgplayer-playing",
2255
+ ENDED: "xgplayer-ended",
2256
+ CANPLAY: "xgplayer-canplay",
2257
+ LOADING: "xgplayer-isloading",
2258
+ ERROR: "xgplayer-is-error",
2259
+ REPLAY: "xgplayer-replay",
2260
+ NO_START: "xgplayer-nostart",
2261
+ ACTIVE: "xgplayer-active",
2262
+ INACTIVE: "xgplayer-inactive",
2263
+ FULLSCREEN: "xgplayer-is-fullscreen",
2264
+ CSS_FULLSCREEN: "xgplayer-is-cssfullscreen",
2265
+ ROTATE_FULLSCREEN: "xgplayer-rotate-fullscreen",
2266
+ PARENT_ROTATE_FULLSCREEN: "xgplayer-rotate-parent",
2267
+ PARENT_FULLSCREEN: "xgplayer-fullscreen-parent",
2268
+ INNER_FULLSCREEN: "xgplayer-fullscreen-inner",
2269
+ NO_CONTROLS: "no-controls",
2270
+ FLEX_CONTROLS: "flex-controls",
2271
+ CONTROLS_FOLLOW: "controls-follow",
2272
+ CONTROLS_AUTOHIDE: "controls-autohide",
2273
+ TOP_BAR_AUTOHIDE: "top-bar-autohide",
2274
+ NOT_ALLOW_AUTOPLAY: "not-allow-autoplay",
2275
+ SEEKING: "seeking",
2276
+ PC: "xgplayer-pc",
2277
+ MOBILE: "xgplayer-mobile",
2278
+ MINI: "xgplayer-mini"
2279
+ };
2248
2280
  function ownKeys$f(object, enumerableOnly) {
2249
2281
  var keys9 = Object.keys(object);
2250
2282
  if (Object.getOwnPropertySymbols) {
@@ -2854,7 +2886,7 @@ function _arrayLikeToArray$f(arr, len) {
2854
2886
  arr2[i2] = arr[i2];
2855
2887
  return arr2;
2856
2888
  }
2857
- function _createForOfIteratorHelper$4(o2, allowArrayLike) {
2889
+ function _createForOfIteratorHelper$5(o2, allowArrayLike) {
2858
2890
  var it = typeof Symbol !== "undefined" && o2[Symbol.iterator] || o2["@@iterator"];
2859
2891
  if (!it) {
2860
2892
  if (Array.isArray(o2) || (it = _unsupportedIterableToArray$f(o2)) || allowArrayLike && o2 && typeof o2.length === "number") {
@@ -4990,7 +5022,7 @@ var XhrLoader$4 = /* @__PURE__ */ function(_EventEmitter) {
4990
5022
  value: function _getHeaders(xhr) {
4991
5023
  var headerLines = xhr.getAllResponseHeaders().trim().split("\r\n");
4992
5024
  var headers = {};
4993
- var _iterator = _createForOfIteratorHelper$4(headerLines), _step;
5025
+ var _iterator = _createForOfIteratorHelper$5(headerLines), _step;
4994
5026
  try {
4995
5027
  for (_iterator.s(); !(_step = _iterator.n()).done; ) {
4996
5028
  var header = _step.value;
@@ -28067,6 +28099,60 @@ function _nonIterableSpread$9() {
28067
28099
  function _nonIterableRest$7() {
28068
28100
  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
28101
  }
28102
+ function _createForOfIteratorHelper$4(o2, allowArrayLike) {
28103
+ var it = typeof Symbol !== "undefined" && o2[Symbol.iterator] || o2["@@iterator"];
28104
+ if (!it) {
28105
+ if (Array.isArray(o2) || (it = _unsupportedIterableToArray$d(o2)) || allowArrayLike && o2 && typeof o2.length === "number") {
28106
+ if (it)
28107
+ o2 = it;
28108
+ var i2 = 0;
28109
+ var F2 = function() {
28110
+ };
28111
+ return {
28112
+ s: F2,
28113
+ n: function() {
28114
+ if (i2 >= o2.length)
28115
+ return {
28116
+ done: true
28117
+ };
28118
+ return {
28119
+ done: false,
28120
+ value: o2[i2++]
28121
+ };
28122
+ },
28123
+ e: function(e4) {
28124
+ throw e4;
28125
+ },
28126
+ f: F2
28127
+ };
28128
+ }
28129
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
28130
+ }
28131
+ var normalCompletion = true, didErr = false, err;
28132
+ return {
28133
+ s: function() {
28134
+ it = it.call(o2);
28135
+ },
28136
+ n: function() {
28137
+ var step = it.next();
28138
+ normalCompletion = step.done;
28139
+ return step;
28140
+ },
28141
+ e: function(e4) {
28142
+ didErr = true;
28143
+ err = e4;
28144
+ },
28145
+ f: function() {
28146
+ try {
28147
+ if (!normalCompletion && it.return != null)
28148
+ it.return();
28149
+ } finally {
28150
+ if (didErr)
28151
+ throw err;
28152
+ }
28153
+ }
28154
+ };
28155
+ }
28070
28156
  function _toPrimitive$b(input, hint) {
28071
28157
  if (typeof input !== "object" || input === null)
28072
28158
  return input;
@@ -30248,10 +30334,28 @@ var NetLoader$2 = /* @__PURE__ */ function(_EventEmitter) {
30248
30334
  }]);
30249
30335
  return NetLoader2;
30250
30336
  }(EventEmitter$2);
30251
- var EXTEND_EVENTS = {
30252
- RTC_STATE_CHANGE: "core.rtcstatechange",
30253
- RTC_NETWORK: "core.rtcnetwork"
30254
- };
30337
+ var EXTEND_EVENTS = /* @__PURE__ */ function(EXTEND_EVENTS2) {
30338
+ EXTEND_EVENTS2["RTC_STATE_CHANGE"] = "core.rtcstatechange";
30339
+ EXTEND_EVENTS2["RTC_NETWORK"] = "core.rtcnetwork";
30340
+ EXTEND_EVENTS2["RTC_FIRST_FRAME"] = "core.rtcfirstframe";
30341
+ return EXTEND_EVENTS2;
30342
+ }(EXTEND_EVENTS || {});
30343
+ var RTC_FIRST_FRAME_STATE = /* @__PURE__ */ function(RTC_FIRST_FRAME_STATE2) {
30344
+ RTC_FIRST_FRAME_STATE2["LOAD_START"] = "start_load";
30345
+ RTC_FIRST_FRAME_STATE2["OFFER_SDP_READY"] = "offer_sdp_ready";
30346
+ RTC_FIRST_FRAME_STATE2["ANSWER_SDP_RECV"] = "answer_sdp_recv";
30347
+ RTC_FIRST_FRAME_STATE2["ANSWER_SDP_READY"] = "answer_sdp_ready";
30348
+ RTC_FIRST_FRAME_STATE2["ICE_CONNECTED"] = "ice_connected";
30349
+ RTC_FIRST_FRAME_STATE2["DTLS_CONNECTED"] = "dtls_connected";
30350
+ RTC_FIRST_FRAME_STATE2["PEER_CONNECTED"] = "peer_connected";
30351
+ RTC_FIRST_FRAME_STATE2["FIRST_PACKET_RECV"] = "first_packet_recv";
30352
+ RTC_FIRST_FRAME_STATE2["FIRST_FRAME_RECV"] = "first_frame_recv";
30353
+ RTC_FIRST_FRAME_STATE2["FIRST_FRAME_DECODED"] = "first_frame_decoded";
30354
+ RTC_FIRST_FRAME_STATE2["VIDEO_PLAYING"] = "video_playing";
30355
+ RTC_FIRST_FRAME_STATE2["VIDEO_CANPLAY"] = "video_canplay";
30356
+ RTC_FIRST_FRAME_STATE2["VIDEO_LOADEDDATA"] = "video_loadeddata";
30357
+ return RTC_FIRST_FRAME_STATE2;
30358
+ }(RTC_FIRST_FRAME_STATE || {});
30255
30359
  var lib$1 = {};
30256
30360
  var parser$1 = {};
30257
30361
  var grammar$2 = { exports: {} };
@@ -30945,29 +31049,29 @@ function getOption(options) {
30945
31049
  enableOriginSdpLogger: false,
30946
31050
  checkStatsErrorDelay: 5e3,
30947
31051
  connectionStateChangeTimeout: 5e3,
30948
- enableNetworkQuality: false,
31052
+ enableNetworkQuality: true,
30949
31053
  hackCreateOfferIssue: false,
30950
31054
  progressiveSetDelay: false,
30951
31055
  networkQuality: {
30952
31056
  networkQos: {
30953
31057
  1: {
30954
- "maxRtt": 250,
30955
- "maxLoss": 0.15
31058
+ maxRtt: 250,
31059
+ maxLoss: 0.15
30956
31060
  },
30957
31061
  2: {
30958
- "maxRtt": 500,
30959
- "maxLoss": 0.3,
30960
- "minRetransmittedRate": 0.2
31062
+ maxRtt: 500,
31063
+ maxLoss: 0.3,
31064
+ minRetransmittedRate: 0.2
30961
31065
  },
30962
31066
  3: {
30963
- "maxRtt": 750,
30964
- "maxLoss": 0.45,
30965
- "minRetransmittedRate": 0.35
31067
+ maxRtt: 750,
31068
+ maxLoss: 0.45,
31069
+ minRetransmittedRate: 0.35
30966
31070
  },
30967
31071
  4: {
30968
- "maxRtt": 1e3,
30969
- "maxLoss": 0.6,
30970
- "minRetransmittedRate": 0.5
31072
+ maxRtt: 1e3,
31073
+ maxLoss: 0.6,
31074
+ minRetransmittedRate: 0.5
30971
31075
  }
30972
31076
  },
30973
31077
  networkQoe: {
@@ -30988,19 +31092,19 @@ function getOption(options) {
30988
31092
  }, adaptiveJitterBuffer),
30989
31093
  networkStrategy: {
30990
31094
  1: {
30991
- "jitterBuffer": null
31095
+ jitterBuffer: null
30992
31096
  },
30993
31097
  2: {
30994
- "jitterBuffer": 1.5
31098
+ jitterBuffer: 1.5
30995
31099
  },
30996
31100
  3: {
30997
- "jitterBuffer": 2
31101
+ jitterBuffer: 2
30998
31102
  },
30999
31103
  4: {
31000
- "jitterBuffer": 3
31104
+ jitterBuffer: 3
31001
31105
  },
31002
31106
  5: {
31003
- "jitterBuffer": 3
31107
+ jitterBuffer: 3
31004
31108
  }
31005
31109
  }
31006
31110
  }, opts);
@@ -31031,14 +31135,36 @@ function _getStats(stats) {
31031
31135
  };
31032
31136
  });
31033
31137
  }
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
- });
31138
+ function getStats(_x) {
31139
+ return _getStats2.apply(this, arguments);
31140
+ }
31141
+ function _getStats2() {
31142
+ _getStats2 = _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee2(pc) {
31143
+ return _regeneratorRuntime$a().wrap(function _callee2$(_context2) {
31144
+ while (1)
31145
+ switch (_context2.prev = _context2.next) {
31146
+ case 0:
31147
+ if (pc) {
31148
+ _context2.next = 2;
31149
+ break;
31150
+ }
31151
+ return _context2.abrupt("return", []);
31152
+ case 2:
31153
+ return _context2.abrupt("return", new Promise(function(resolve3) {
31154
+ var _pc$getStats;
31155
+ (_pc$getStats = pc.getStats(null)) === null || _pc$getStats === void 0 ? void 0 : _pc$getStats.then(function(report) {
31156
+ resolve3(_getStats(report));
31157
+ });
31158
+ }).catch(function() {
31159
+ return [];
31160
+ }));
31161
+ case 3:
31162
+ case "end":
31163
+ return _context2.stop();
31164
+ }
31165
+ }, _callee2);
31166
+ }));
31167
+ return _getStats2.apply(this, arguments);
31042
31168
  }
31043
31169
  function getStatsSnapshoot(stats) {
31044
31170
  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 +31234,23 @@ function getStatsSnapshoot(stats) {
31108
31234
  }
31109
31235
  var QUEUE_SIZE = 5;
31110
31236
  var NetworkEvaluate = /* @__PURE__ */ function() {
31111
- function NetworkEvaluate2(pc, interval) {
31237
+ function NetworkEvaluate2(pc) {
31112
31238
  var _this = this;
31239
+ var interval = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 1e3;
31113
31240
  _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;
31241
+ this._pc = null;
31242
+ this._lastVideoStats = null;
31243
+ this._lastRemoteVideoStats = null;
31244
+ this._timer = 0;
31245
+ this._timerInterval = 0;
31246
+ this._speedQueue = [];
31247
+ this._lostRateQueue = [];
31248
+ this._receivedRateQueue = [];
31249
+ this._currentSpeed = -1;
31250
+ this._currentLostRate = -1;
31251
+ this._currentReceivedRate = -1;
31252
+ this._evaluate = /* @__PURE__ */ _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee() {
31253
+ 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
31254
  return _regeneratorRuntime$a().wrap(function _callee$(_context) {
31128
31255
  while (1)
31129
31256
  switch (_context.prev = _context.next) {
@@ -31148,8 +31275,8 @@ var NetworkEvaluate = /* @__PURE__ */ function() {
31148
31275
  }
31149
31276
  }
31150
31277
  if (_this._lastRemoteVideoStats && snapshoot !== null && snapshoot !== void 0 && snapshoot.videoRemote) {
31151
- nowReceived = snapshoot.video.bytesReceived;
31152
- preReceived = _this._lastVideoStats.bytesReceived;
31278
+ _ref22 = snapshoot.video || {}, _ref2$bytesReceived = _ref22.bytesReceived, nowReceived = _ref2$bytesReceived === void 0 ? 0 : _ref2$bytesReceived;
31279
+ _ref32 = _this._lastVideoStats || {}, _ref3$bytesReceived = _ref32.bytesReceived, preReceived = _ref3$bytesReceived === void 0 ? 0 : _ref3$bytesReceived;
31153
31280
  _snapshoot$videoRemot = snapshoot === null || snapshoot === void 0 ? void 0 : snapshoot.videoRemote, nowRemoteSent = _snapshoot$videoRemot.bytesSent;
31154
31281
  preRemoteSent = _this._lastRemoteVideoStats.bytesSent;
31155
31282
  if (preRemoteSent && nowRemoteSent && nowRemoteSent - preRemoteSent > 0) {
@@ -31168,7 +31295,7 @@ var NetworkEvaluate = /* @__PURE__ */ function() {
31168
31295
  return _context.stop();
31169
31296
  }
31170
31297
  }, _callee, null, [[0, 10]]);
31171
- })));
31298
+ }));
31172
31299
  this._pc = pc;
31173
31300
  this._timerInterval = interval;
31174
31301
  this.start(interval);
@@ -31283,6 +31410,9 @@ function getCapacity() {
31283
31410
  return pc.createOffer().then(function(offer) {
31284
31411
  var _sdpJson$media, _sdpJson$media2, _vMedia$rtp, _aMedia$rtp;
31285
31412
  logger$b.log(offer.sdp);
31413
+ if (!offer.sdp) {
31414
+ return Promise.reject("createOffer no sdp");
31415
+ }
31286
31416
  var sdpJson = lib$1.parse(offer.sdp);
31287
31417
  var vMedia = (_sdpJson$media = sdpJson.media) === null || _sdpJson$media === void 0 ? void 0 : _sdpJson$media.filter(function(x2) {
31288
31418
  return x2.type === "video";
@@ -31470,7 +31600,7 @@ var Nalunit = {
31470
31600
  var RTCDataView = /* @__PURE__ */ function() {
31471
31601
  function RTCDataView2(buffer2) {
31472
31602
  _classCallCheck$k(this, RTCDataView2);
31473
- _defineProperty$i(this, "_position", 0);
31603
+ this._position = 0;
31474
31604
  this._dataview = new DataView(buffer2);
31475
31605
  }
31476
31606
  _createClass$k(RTCDataView2, [{
@@ -31872,7 +32002,7 @@ if (typeof self !== "undefined" && self.constructor.name === "DedicatedWorkerGlo
31872
32002
  transformer.readable.pipeThrough(transform).pipeTo(event.transformer.writable);
31873
32003
  });
31874
32004
  }
31875
- var encodedJs$5 = "IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBlPXtnZXROQUxVbml0czpmdW5jdGlvbih0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2lmKHQubGVuZ3RoLXQucG9zaXRpb248NClyZXR1cm5bXTt2YXIgcj10LnBvc2l0aW9uO3JldHVybiAxPT09dC5nZXRJbnQzMihyKXx8MD09PXQuZ2V0SW50MTYocikmJjE9PT10LmdldEludDgocisyKT9lLmdldEFubmV4Yk5hbHModCxuKTplLmdldEF2Y2NOYWxzKHQsbil9LGdldEFubmV4Yk5hbHM6ZnVuY3Rpb24odCxuKXtmb3IodmFyIHI9W10saT1lLmdldEhlYWRlclBvc2l0aW9uQW5uZXhCKHQpLGE9aS5wb3Msbz1hO2E8dC5sZW5ndGgtNDspe3ZhciB1PW5ldyBVaW50OEFycmF5KHQuYnVmZmVyLnNsaWNlKGEsYStpLmhlYWRlckxlbmd0aCkpO2kucG9zPT09dC5wb3NpdGlvbiYmdC5za2lwKGkuaGVhZGVyTGVuZ3RoKSxvPShpPWUuZ2V0SGVhZGVyUG9zaXRpb25Bbm5leEIodCkpLnBvczt2YXIgcz17aGVhZGVyOnUsYm9keTpuZXcgVWludDhBcnJheSh0LmJ1ZmZlci5zbGljZShhK3UuYnl0ZUxlbmd0aCxvKSksdHlwZTotMX07bj9lLmFuYWx5c2VIMjY1TmFsKHMpOmUuYW5hbHlzZU5hbChzKSwocy50eXBlPD05fHxuJiZzLnR5cGU8PTQwKSYmMCE9PXMudHlwZSYmci5wdXNoKHMpLHQuc2tpcChvLXQucG9zaXRpb24pLGE9b31yZXR1cm4gcn0sZ2V0QXZjY05hbHM6ZnVuY3Rpb24odCxuKXtmb3IodmFyIHI9W107dC5wb3NpdGlvbjx0Lmxlbmd0aC00Oyl7dmFyIGk9dC5nZXRJbnQzMih0LnBvc2l0aW9uKTtpZighKHQubGVuZ3RoLXQucG9zaXRpb24+PWkpKWJyZWFrO3ZhciBhPW5ldyBVaW50OEFycmF5KHQuYnVmZmVyLnNsaWNlKHQucG9zaXRpb24sdC5wb3NpdGlvbis0KSk7dC5za2lwKDQpO3ZhciBvPW5ldyBVaW50OEFycmF5KHQuYnVmZmVyLnNsaWNlKHQucG9zaXRpb24sdC5wb3NpdGlvbitpKSk7dC5za2lwKGkpO3ZhciB1PXtoZWFkZXI6YSxib2R5Om8sdHlwZTotMX07bj9lLmFuYWx5c2VIMjY1TmFsKHUpOmUuYW5hbHlzZU5hbCh1KSx1LnR5cGU8PTkmJjAhPT11LnR5cGUmJnIucHVzaCh1KX1yZXR1cm4gcn0sYW5hbHlzZU5hbDpmdW5jdGlvbihlKXt2YXIgdD0zMSZlLmJvZHlbMF07c3dpdGNoKGUudHlwZT10LHQpe2Nhc2UgMTplLm5kcj0hMDticmVhaztjYXNlIDU6ZS5pZHI9ITA7YnJlYWs7Y2FzZSA2OmUuc2VpPSEwO2JyZWFrO2Nhc2UgNzplLnNwcz0hMDticmVhaztjYXNlIDg6ZS5wcHM9ITB9fSxhbmFseXNlSDI2NU5hbDpmdW5jdGlvbihlKXt2YXIgdD0oMTI2JmUuYm9keVswXSk+PjE7c3dpdGNoKGUudHlwZT10LHQpe2Nhc2UgMzk6Y2FzZSA0MDplLnNlaT0hMH19LGdldEhlYWRlclBvc2l0aW9uQW5uZXhCOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLnBvc2l0aW9uLG49MCxyPWUubGVuZ3RoOzMhPT1uJiY0IT09biYmdDxyLTQ7KTA9PT1lLmdldEludDE2KHQpPzE9PT1lLmdldEludDE2KHQrMik/bj00OjE9PT1lLmdldEludDgodCsyKT9uPTM6dCsrOnQrKztyZXR1cm4gdD09PXItNCYmKDA9PT1lLmdldEludDE2KHQpPzE9PT1lLmdldEludDE2KHQrMik/bj00OnQ9cjoodCsrLDA9PT1lLmdldEludDE2KHQpJiYxPT09ZS5nZXRJbnQ4KHQpP249Mzp0PXIpKSx7cG9zOnQsaGVhZGVyTGVuZ3RoOm59fSxpc0gyNjVWaWRlb0ZyYW1lOmZ1bmN0aW9uKGUpe3ZhciB0LG47cmV0dXJuKChudWxsPT09KHQ9ZS5nZXRNZXRhZGF0YSl8fHZvaWQgMD09PXR8fG51bGw9PT0obj10LmNhbGwoZSkpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLm1pbWVUeXBlKXx8IiIpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoImgyNjUiKX19O2Z1bmN0aW9uIHQoZSl7cmV0dXJuKHQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBuKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl07aS5lbnVtZXJhYmxlPWkuZW51bWVyYWJsZXx8ITEsaS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGkmJihpLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyKGkua2V5KSxpKX19ZnVuY3Rpb24gcihlKXt2YXIgdD1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT10eXBlb2YgZXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIG49ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PW4pe3ZhciByPW4uY2FsbChlLHR8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dD9TdHJpbmc6TnVtYmVyKShlKX0oZSwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6U3RyaW5nKHQpfXZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt2YXIgbixpLGE7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksbj10aGlzLGE9MCwoaT1yKGk9Il9wb3NpdGlvbiIpKWluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4saSx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5baV09YSx0aGlzLl9kYXRhdmlldz1uZXcgRGF0YVZpZXcodCl9dmFyIHQsaSxhO3JldHVybiB0PWUsYT1be2tleToicmVhZEJ5dGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtzd2l0Y2godCl7Y2FzZSAxOnI9bj9lLmdldEludDgoZS5wb3NpdGlvbik6ZS5nZXRVaW50OChlLnBvc2l0aW9uKTticmVhaztjYXNlIDI6cj1uP2UuZ2V0SW50MTYoZS5wb3NpdGlvbik6ZS5nZXRVaW50MTYoZS5wb3NpdGlvbik7YnJlYWs7Y2FzZSAzOmlmKG4pdGhyb3cgbmV3IEVycm9yKCJub3Qgc3VwcG9ydGVkIGZvciByZWFkQnl0ZSAzIik7cj1lLmdldFVpbnQ4KGUucG9zaXRpb24pPDwxNixyfD1lLmdldFVpbnQ4KGUucG9zaXRpb24rMSk8PDgscnw9ZS5nZXRVaW50OChlLnBvc2l0aW9uKzIpO2JyZWFrO2Nhc2UgNDpyPW4/ZS5nZXRJbnQzMihlLnBvc2l0aW9uKTplLmdldFVpbnQzMihlLnBvc2l0aW9uKTticmVhaztjYXNlIDg6aWYobil0aHJvdyBuZXcgRXJyb3IoIm5vdCBzdXBwb3J0ZWQgZm9yIHJlYWRCb2R5IDgiKTtyPWUuZ2V0VWludDMyKGUucG9zaXRpb24pPDwzMixyfD1lLmdldFVpbnQzMihlLnBvc2l0aW9uKzQpO2JyZWFrO2RlZmF1bHQ6cj0iIn1yZXR1cm4gZS5wb3NpdGlvbis9dCxyfX1dLChpPVt7a2V5OiJsZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJ1ZmZlci5ieXRlTGVuZ3RofX0se2tleToiYnVmZmVyIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YXZpZXcuYnVmZmVyfX0se2tleToicG9zaXRpb24iLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3NpdGlvbn0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3Bvc2l0aW9uPWV9fSx7a2V5OiJiYWNrIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnBvc2l0aW9uLT1lfX0se2tleToiZ2V0VWludDgiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9kYXRhdmlldy5nZXRVaW50OChlKX19LHtrZXk6ImdldEludDgiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9kYXRhdmlldy5nZXRJbnQ4KGUpfX0se2tleToiZ2V0SW50MTYiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9kYXRhdmlldy5nZXRJbnQxNihlKX19LHtrZXk6ImdldFVpbnQxNiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2RhdGF2aWV3LmdldFVpbnQxNihlKX19LHtrZXk6ImdldFVpbnQzMiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2RhdGF2aWV3LmdldFVpbnQzMihlKX19LHtrZXk6ImdldEludDMyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fZGF0YXZpZXcuZ2V0SW50MzIoZSl9fSx7a2V5OiJza2lwIix2YWx1ZTpmdW5jdGlvbih0KXtmb3IodmFyIG49TWF0aC5mbG9vcih0LzQpLHI9dCU0LGk9MDtpPG47aSsrKWUucmVhZEJ5dGUodGhpcyw0KTtyPjAmJmUucmVhZEJ5dGUodGhpcyxyKX19LHtrZXk6InJlYWRVaW50OCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDEpfX0se2tleToicmVhZFVpbnQxNiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDIpfX0se2tleToicmVhZFVpbnQyNCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDMpfX0se2tleToicmVhZFVpbnQzMiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDQpfX0se2tleToicmVhZFVpbnQ2NCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDgpfX0se2tleToicmVhZEludDgiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGUucmVhZEJ5dGUodGhpcywxLCEwKX19LHtrZXk6InJlYWRJbnQxNiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDIsITApfX0se2tleToicmVhZEludDMyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBlLnJlYWRCeXRlKHRoaXMsNCwhMCl9fSx7a2V5OiJ3cml0ZVVpbnQzMiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KFtlPj4+MjQmMjU1LGU+Pj4xNiYyNTUsZT4+PjgmMjU1LDI1NSZlXSl9fV0pJiZuKHQucHJvdG90eXBlLGkpLGEmJm4odCxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO2Z1bmN0aW9uIGEoZSxuKXtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIGk9bltyXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLChhPWkua2V5LG89dm9pZCAwLG89ZnVuY3Rpb24oZSxuKXtpZigib2JqZWN0IiE9PXQoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgaT1yLmNhbGwoZSxufHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09dChpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PW4/U3RyaW5nOk51bWJlcikoZSl9KGEsInN0cmluZyIpLCJzeW1ib2wiPT09dChvKT9vOlN0cmluZyhvKSksaSl9dmFyIGEsb31mdW5jdGlvbiBvKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3JldHVybihlW3RdPDwyND4+PjApKyhlW3QrMV08PDE2KSsoZVt0KzJdPDw4KSsoZVt0KzNdfHwwKX12YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKX12YXIgdCxuLHI7cmV0dXJuIHQ9ZSxyPVt7a2V5OiJwYXJzZUFubmV4QiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ieXRlTGVuZ3RoLTEsbj0wO2Rve2lmKDAhPT1lW3RdKWJyZWFrO24rKyx0LS19d2hpbGUodD4wKTtuPj0zJiYoZT1lLnN1YmFycmF5KDAsdCsxKSk7Zm9yKHZhciByPWUubGVuZ3RoLGk9MixhPTA7bnVsbCE9PWVbaV0mJnZvaWQgMCE9PWVbaV0mJjEhPT1lW2ldOylpKys7aWYoKGE9MisgKytpKT49cilyZXR1cm5bXTtmb3IodmFyIG89W107YTxyOylzd2l0Y2goZVthXSl7Y2FzZSAwOmlmKDAhPT1lW2EtMV0pe2ErPTI7YnJlYWt9aWYoMCE9PWVbYS0yXSl7YSsrO2JyZWFrfWlmKGE8ci0xJiYxIT09ZVthKzFdKXthKys7YnJlYWt9aSE9PWEtMiYmby5wdXNoKGUuc3ViYXJyYXkoaSxhLTIpKTtkb3thKyt9d2hpbGUoMSE9PWVbYV0mJmE8cik7YT0oaT1hKzEpKzI7YnJlYWs7Y2FzZSAxOmlmKDAhPT1lW2EtMV18fDAhPT1lW2EtMl0pe2ErPTM7YnJlYWt9aSE9PWEtMiYmby5wdXNoKGUuc3ViYXJyYXkoaSxhLTIpKSxhPShpPWErMSkrMjticmVhaztkZWZhdWx0OmErPTN9cmV0dXJuIGk8ciYmby5wdXNoKGUuc3ViYXJyYXkoaSkpLG99fSx7a2V5OiJwYXJzZUF2Y0MiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTo0O2lmKCEoZS5sZW5ndGg8NCkpe2Zvcih2YXIgbixyPWUubGVuZ3RoLGk9W10sYT0wO2ErdDxyOylpZihuPW8oZSxhKSwzPT09dCYmKG4+Pj49OCksYSs9dCxuKXtpZihhK24+cilicmVhaztpLnB1c2goZS5zdWJhcnJheShhLGErbikpLGErPW59cmV0dXJuIGl9fX0se2tleToicGFyc2VTRUkiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoLHI9dD8yOjEsaT0wLGE9MCxvPSIiOzI1NT09PWVbcl07KWkrPTI1NSxyKys7Zm9yKGkrPWVbcisrXTsyNTU9PT1lW3JdOylhKz0yNTUscisrO2lmKGErPWVbcisrXSw1PT09aSYmbj5yKzE2KWZvcih2YXIgdT0wO3U8MTY7dSsrKW8rPWVbcl0udG9TdHJpbmcoMTYpLHIrKztyZXR1cm57cGF5bG9hZDplLnN1YmFycmF5KHIscithKSx0eXBlOmksc2l6ZTphLHV1aWQ6b319fSx7a2V5OiJyZW1vdmVFUEIiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmJ5dGVMZW5ndGgsbj1bXSxyPTE7cjx0LTI7KTA9PT1lW3JdJiYwPT09ZVtyKzFdJiYzPT09ZVtyKzJdPyhuLnB1c2gocisyKSxyKz0yKTpyKys7aWYoIW4ubGVuZ3RoKXJldHVybiBlO3ZhciBpPXQtbi5sZW5ndGgsYT1uZXcgVWludDhBcnJheShpKSxvPTA7Zm9yKHI9MDtyPGk7bysrLHIrKylvPT09blswXSYmKG8rKyxuLnNoaWZ0KCkpLGFbcl09ZVtvXTtyZXR1cm4gYX19XSwobj1udWxsKSYmYSh0LnByb3RvdHlwZSxuKSxyJiZhKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTsidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJiJEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSI9PT1zZWxmLmNvbnN0cnVjdG9yLm5hbWUmJnNlbGYuYWRkRXZlbnRMaXN0ZW5lcigicnRjdHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7dmFyIG4scj10LnRyYW5zZm9ybWVyLGE9ci5vcHRpb25zLnBvcnQsbz0obj1mdW5jdGlvbihlKXthLnBvc3RNZXNzYWdlKGUpfSxuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm06ZnVuY3Rpb24odCxyKXt2YXIgYT1lLmlzSDI2NVZpZGVvRnJhbWUodCk7ZS5nZXROQUxVbml0cyhuZXcgaSh0LmRhdGEpLGEpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKGUuc2VpKXt2YXIgdD11LnBhcnNlU0VJKHUucmVtb3ZlRVBCKGUuYm9keSksITEpO3QmJm4oe2RhdGE6dCxzZWk6e2NvZGU6dC50eXBlLGNvbnRlbnQ6dC5wYXlsb2FkfX0pfX0pKSxyLmVucXVldWUodCl9fSkpO3IucmVhZGFibGUucGlwZVRocm91Z2gobykucGlwZVRvKHQudHJhbnNmb3JtZXIud3JpdGFibGUpfSkpfSgpOwo=";
32005
+ var encodedJs$5 = "IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBlPXtnZXROQUxVbml0czpmdW5jdGlvbih0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2lmKHQubGVuZ3RoLXQucG9zaXRpb248NClyZXR1cm5bXTt2YXIgcj10LnBvc2l0aW9uO3JldHVybiAxPT09dC5nZXRJbnQzMihyKXx8MD09PXQuZ2V0SW50MTYocikmJjE9PT10LmdldEludDgocisyKT9lLmdldEFubmV4Yk5hbHModCxuKTplLmdldEF2Y2NOYWxzKHQsbil9LGdldEFubmV4Yk5hbHM6ZnVuY3Rpb24odCxuKXtmb3IodmFyIHI9W10saT1lLmdldEhlYWRlclBvc2l0aW9uQW5uZXhCKHQpLGE9aS5wb3Msbz1hO2E8dC5sZW5ndGgtNDspe3ZhciB1PW5ldyBVaW50OEFycmF5KHQuYnVmZmVyLnNsaWNlKGEsYStpLmhlYWRlckxlbmd0aCkpO2kucG9zPT09dC5wb3NpdGlvbiYmdC5za2lwKGkuaGVhZGVyTGVuZ3RoKSxvPShpPWUuZ2V0SGVhZGVyUG9zaXRpb25Bbm5leEIodCkpLnBvczt2YXIgcz17aGVhZGVyOnUsYm9keTpuZXcgVWludDhBcnJheSh0LmJ1ZmZlci5zbGljZShhK3UuYnl0ZUxlbmd0aCxvKSksdHlwZTotMX07bj9lLmFuYWx5c2VIMjY1TmFsKHMpOmUuYW5hbHlzZU5hbChzKSwocy50eXBlPD05fHxuJiZzLnR5cGU8PTQwKSYmMCE9PXMudHlwZSYmci5wdXNoKHMpLHQuc2tpcChvLXQucG9zaXRpb24pLGE9b31yZXR1cm4gcn0sZ2V0QXZjY05hbHM6ZnVuY3Rpb24odCxuKXtmb3IodmFyIHI9W107dC5wb3NpdGlvbjx0Lmxlbmd0aC00Oyl7dmFyIGk9dC5nZXRJbnQzMih0LnBvc2l0aW9uKTtpZighKHQubGVuZ3RoLXQucG9zaXRpb24+PWkpKWJyZWFrO3ZhciBhPW5ldyBVaW50OEFycmF5KHQuYnVmZmVyLnNsaWNlKHQucG9zaXRpb24sdC5wb3NpdGlvbis0KSk7dC5za2lwKDQpO3ZhciBvPW5ldyBVaW50OEFycmF5KHQuYnVmZmVyLnNsaWNlKHQucG9zaXRpb24sdC5wb3NpdGlvbitpKSk7dC5za2lwKGkpO3ZhciB1PXtoZWFkZXI6YSxib2R5Om8sdHlwZTotMX07bj9lLmFuYWx5c2VIMjY1TmFsKHUpOmUuYW5hbHlzZU5hbCh1KSx1LnR5cGU8PTkmJjAhPT11LnR5cGUmJnIucHVzaCh1KX1yZXR1cm4gcn0sYW5hbHlzZU5hbDpmdW5jdGlvbihlKXt2YXIgdD0zMSZlLmJvZHlbMF07c3dpdGNoKGUudHlwZT10LHQpe2Nhc2UgMTplLm5kcj0hMDticmVhaztjYXNlIDU6ZS5pZHI9ITA7YnJlYWs7Y2FzZSA2OmUuc2VpPSEwO2JyZWFrO2Nhc2UgNzplLnNwcz0hMDticmVhaztjYXNlIDg6ZS5wcHM9ITB9fSxhbmFseXNlSDI2NU5hbDpmdW5jdGlvbihlKXt2YXIgdD0oMTI2JmUuYm9keVswXSk+PjE7c3dpdGNoKGUudHlwZT10LHQpe2Nhc2UgMzk6Y2FzZSA0MDplLnNlaT0hMH19LGdldEhlYWRlclBvc2l0aW9uQW5uZXhCOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLnBvc2l0aW9uLG49MCxyPWUubGVuZ3RoOzMhPT1uJiY0IT09biYmdDxyLTQ7KTA9PT1lLmdldEludDE2KHQpPzE9PT1lLmdldEludDE2KHQrMik/bj00OjE9PT1lLmdldEludDgodCsyKT9uPTM6dCsrOnQrKztyZXR1cm4gdD09PXItNCYmKDA9PT1lLmdldEludDE2KHQpPzE9PT1lLmdldEludDE2KHQrMik/bj00OnQ9cjoodCsrLDA9PT1lLmdldEludDE2KHQpJiYxPT09ZS5nZXRJbnQ4KHQpP249Mzp0PXIpKSx7cG9zOnQsaGVhZGVyTGVuZ3RoOm59fSxpc0gyNjVWaWRlb0ZyYW1lOmZ1bmN0aW9uKGUpe3ZhciB0LG47cmV0dXJuKChudWxsPT09KHQ9ZS5nZXRNZXRhZGF0YSl8fHZvaWQgMD09PXR8fG51bGw9PT0obj10LmNhbGwoZSkpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLm1pbWVUeXBlKXx8IiIpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoImgyNjUiKX19O2Z1bmN0aW9uIHQoZSl7cmV0dXJuKHQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBuKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwoaT1yLmtleSxhPXZvaWQgMCwic3ltYm9sIj09dHlwZW9mKGE9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9dHlwZW9mIGV8fG51bGw9PT1lKXJldHVybiBlO3ZhciBuPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1uKXt2YXIgcj1uLmNhbGwoZSx0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgcilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikoZSl9KGksInN0cmluZyIpKT9hOlN0cmluZyhhKSkscil9dmFyIGksYX12YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5fcG9zaXRpb249MCx0aGlzLl9kYXRhdmlldz1uZXcgRGF0YVZpZXcodCl9dmFyIHQscixpO3JldHVybiB0PWUsaT1be2tleToicmVhZEJ5dGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtzd2l0Y2godCl7Y2FzZSAxOnI9bj9lLmdldEludDgoZS5wb3NpdGlvbik6ZS5nZXRVaW50OChlLnBvc2l0aW9uKTticmVhaztjYXNlIDI6cj1uP2UuZ2V0SW50MTYoZS5wb3NpdGlvbik6ZS5nZXRVaW50MTYoZS5wb3NpdGlvbik7YnJlYWs7Y2FzZSAzOmlmKG4pdGhyb3cgbmV3IEVycm9yKCJub3Qgc3VwcG9ydGVkIGZvciByZWFkQnl0ZSAzIik7cj1lLmdldFVpbnQ4KGUucG9zaXRpb24pPDwxNixyfD1lLmdldFVpbnQ4KGUucG9zaXRpb24rMSk8PDgscnw9ZS5nZXRVaW50OChlLnBvc2l0aW9uKzIpO2JyZWFrO2Nhc2UgNDpyPW4/ZS5nZXRJbnQzMihlLnBvc2l0aW9uKTplLmdldFVpbnQzMihlLnBvc2l0aW9uKTticmVhaztjYXNlIDg6aWYobil0aHJvdyBuZXcgRXJyb3IoIm5vdCBzdXBwb3J0ZWQgZm9yIHJlYWRCb2R5IDgiKTtyPWUuZ2V0VWludDMyKGUucG9zaXRpb24pPDwzMixyfD1lLmdldFVpbnQzMihlLnBvc2l0aW9uKzQpO2JyZWFrO2RlZmF1bHQ6cj0iIn1yZXR1cm4gZS5wb3NpdGlvbis9dCxyfX1dLChyPVt7a2V5OiJsZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJ1ZmZlci5ieXRlTGVuZ3RofX0se2tleToiYnVmZmVyIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YXZpZXcuYnVmZmVyfX0se2tleToicG9zaXRpb24iLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3NpdGlvbn0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3Bvc2l0aW9uPWV9fSx7a2V5OiJiYWNrIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnBvc2l0aW9uLT1lfX0se2tleToiZ2V0VWludDgiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9kYXRhdmlldy5nZXRVaW50OChlKX19LHtrZXk6ImdldEludDgiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9kYXRhdmlldy5nZXRJbnQ4KGUpfX0se2tleToiZ2V0SW50MTYiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9kYXRhdmlldy5nZXRJbnQxNihlKX19LHtrZXk6ImdldFVpbnQxNiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2RhdGF2aWV3LmdldFVpbnQxNihlKX19LHtrZXk6ImdldFVpbnQzMiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2RhdGF2aWV3LmdldFVpbnQzMihlKX19LHtrZXk6ImdldEludDMyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fZGF0YXZpZXcuZ2V0SW50MzIoZSl9fSx7a2V5OiJza2lwIix2YWx1ZTpmdW5jdGlvbih0KXtmb3IodmFyIG49TWF0aC5mbG9vcih0LzQpLHI9dCU0LGk9MDtpPG47aSsrKWUucmVhZEJ5dGUodGhpcyw0KTtyPjAmJmUucmVhZEJ5dGUodGhpcyxyKX19LHtrZXk6InJlYWRVaW50OCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDEpfX0se2tleToicmVhZFVpbnQxNiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDIpfX0se2tleToicmVhZFVpbnQyNCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDMpfX0se2tleToicmVhZFVpbnQzMiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDQpfX0se2tleToicmVhZFVpbnQ2NCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDgpfX0se2tleToicmVhZEludDgiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGUucmVhZEJ5dGUodGhpcywxLCEwKX19LHtrZXk6InJlYWRJbnQxNiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZWFkQnl0ZSh0aGlzLDIsITApfX0se2tleToicmVhZEludDMyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBlLnJlYWRCeXRlKHRoaXMsNCwhMCl9fSx7a2V5OiJ3cml0ZVVpbnQzMiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KFtlPj4+MjQmMjU1LGU+Pj4xNiYyNTUsZT4+PjgmMjU1LDI1NSZlXSl9fV0pJiZuKHQucHJvdG90eXBlLHIpLGkmJm4odCxpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfSgpO2Z1bmN0aW9uIGkoZSxuKXtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIGk9bltyXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLChhPWkua2V5LG89dm9pZCAwLG89ZnVuY3Rpb24oZSxuKXtpZigib2JqZWN0IiE9PXQoZSl8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgaT1yLmNhbGwoZSxufHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09dChpKSlyZXR1cm4gaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PW4/U3RyaW5nOk51bWJlcikoZSl9KGEsInN0cmluZyIpLCJzeW1ib2wiPT09dChvKT9vOlN0cmluZyhvKSksaSl9dmFyIGEsb31mdW5jdGlvbiBhKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3JldHVybihlW3RdPDwyND4+PjApKyhlW3QrMV08PDE2KSsoZVt0KzJdPDw4KSsoZVt0KzNdfHwwKX12YXIgbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKX12YXIgdCxuLHI7cmV0dXJuIHQ9ZSxyPVt7a2V5OiJwYXJzZUFubmV4QiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ieXRlTGVuZ3RoLTEsbj0wO2Rve2lmKDAhPT1lW3RdKWJyZWFrO24rKyx0LS19d2hpbGUodD4wKTtuPj0zJiYoZT1lLnN1YmFycmF5KDAsdCsxKSk7Zm9yKHZhciByPWUubGVuZ3RoLGk9MixhPTA7bnVsbCE9PWVbaV0mJnZvaWQgMCE9PWVbaV0mJjEhPT1lW2ldOylpKys7aWYoKGE9MisgKytpKT49cilyZXR1cm5bXTtmb3IodmFyIG89W107YTxyOylzd2l0Y2goZVthXSl7Y2FzZSAwOmlmKDAhPT1lW2EtMV0pe2ErPTI7YnJlYWt9aWYoMCE9PWVbYS0yXSl7YSsrO2JyZWFrfWlmKGE8ci0xJiYxIT09ZVthKzFdKXthKys7YnJlYWt9aSE9PWEtMiYmby5wdXNoKGUuc3ViYXJyYXkoaSxhLTIpKTtkb3thKyt9d2hpbGUoMSE9PWVbYV0mJmE8cik7YT0oaT1hKzEpKzI7YnJlYWs7Y2FzZSAxOmlmKDAhPT1lW2EtMV18fDAhPT1lW2EtMl0pe2ErPTM7YnJlYWt9aSE9PWEtMiYmby5wdXNoKGUuc3ViYXJyYXkoaSxhLTIpKSxhPShpPWErMSkrMjticmVhaztkZWZhdWx0OmErPTN9cmV0dXJuIGk8ciYmby5wdXNoKGUuc3ViYXJyYXkoaSkpLG99fSx7a2V5OiJwYXJzZUF2Y0MiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTo0O2lmKCEoZS5sZW5ndGg8NCkpe2Zvcih2YXIgbixyPWUubGVuZ3RoLGk9W10sbz0wO28rdDxyOylpZihuPWEoZSxvKSwzPT09dCYmKG4+Pj49OCksbys9dCxuKXtpZihvK24+cilicmVhaztpLnB1c2goZS5zdWJhcnJheShvLG8rbikpLG8rPW59cmV0dXJuIGl9fX0se2tleToicGFyc2VTRUkiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoLHI9dD8yOjEsaT0wLGE9MCxvPSIiOzI1NT09PWVbcl07KWkrPTI1NSxyKys7Zm9yKGkrPWVbcisrXTsyNTU9PT1lW3JdOylhKz0yNTUscisrO2lmKGErPWVbcisrXSw1PT09aSYmbj5yKzE2KWZvcih2YXIgdT0wO3U8MTY7dSsrKW8rPWVbcl0udG9TdHJpbmcoMTYpLHIrKztyZXR1cm57cGF5bG9hZDplLnN1YmFycmF5KHIscithKSx0eXBlOmksc2l6ZTphLHV1aWQ6b319fSx7a2V5OiJyZW1vdmVFUEIiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmJ5dGVMZW5ndGgsbj1bXSxyPTE7cjx0LTI7KTA9PT1lW3JdJiYwPT09ZVtyKzFdJiYzPT09ZVtyKzJdPyhuLnB1c2gocisyKSxyKz0yKTpyKys7aWYoIW4ubGVuZ3RoKXJldHVybiBlO3ZhciBpPXQtbi5sZW5ndGgsYT1uZXcgVWludDhBcnJheShpKSxvPTA7Zm9yKHI9MDtyPGk7bysrLHIrKylvPT09blswXSYmKG8rKyxuLnNoaWZ0KCkpLGFbcl09ZVtvXTtyZXR1cm4gYX19XSwobj1udWxsKSYmaSh0LnByb3RvdHlwZSxuKSxyJiZpKHQsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX0oKTsidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJiJEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSI9PT1zZWxmLmNvbnN0cnVjdG9yLm5hbWUmJnNlbGYuYWRkRXZlbnRMaXN0ZW5lcigicnRjdHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7dmFyIG4saT10LnRyYW5zZm9ybWVyLGE9aS5vcHRpb25zLnBvcnQsdT0obj1mdW5jdGlvbihlKXthLnBvc3RNZXNzYWdlKGUpfSxuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm06ZnVuY3Rpb24odCxpKXt2YXIgYT1lLmlzSDI2NVZpZGVvRnJhbWUodCk7ZS5nZXROQUxVbml0cyhuZXcgcih0LmRhdGEpLGEpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKGUuc2VpKXt2YXIgdD1vLnBhcnNlU0VJKG8ucmVtb3ZlRVBCKGUuYm9keSksITEpO3QmJm4oe2RhdGE6dCxzZWk6e2NvZGU6dC50eXBlLGNvbnRlbnQ6dC5wYXlsb2FkfX0pfX0pKSxpLmVucXVldWUodCl9fSkpO2kucmVhZGFibGUucGlwZVRocm91Z2godSkucGlwZVRvKHQudHJhbnNmb3JtZXIud3JpdGFibGUpfSkpfSgpOwo=";
31876
32006
  var blob$5 = typeof window !== "undefined" && window.Blob && new Blob([atob(encodedJs$5)], {
31877
32007
  type: "text/javascript;charset=utf-8"
31878
32008
  });
@@ -31886,21 +32016,19 @@ function WorkerWrapper$5() {
31886
32016
  objURL && (window.URL || window.webkitURL).revokeObjectURL(objURL);
31887
32017
  }
31888
32018
  }
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);
32019
+ var _AudioStallObserver = /* @__PURE__ */ function() {
32020
+ function _AudioStallObserver2() {
32021
+ _classCallCheck$k(this, _AudioStallObserver2);
32022
+ this._isStallInPreReportEnd = false;
32023
+ this._stallList = [];
32024
+ this._audioTransceiver = null;
31897
32025
  }
31898
- _createClass$k(AudioStallObserver2, [{
32026
+ _createClass$k(_AudioStallObserver2, [{
31899
32027
  key: "start",
31900
32028
  value: function start(transceiver) {
31901
32029
  this.stop();
31902
32030
  this._audioTransceiver = transceiver;
31903
- if (AudioStallObserver2.interval >= 100) {
32031
+ if (_AudioStallObserver2.interval >= 100) {
31904
32032
  this._startStallCountInterval();
31905
32033
  }
31906
32034
  }
@@ -31910,7 +32038,7 @@ var AudioStallObserver = /* @__PURE__ */ function() {
31910
32038
  this._stallList = [];
31911
32039
  if (this._audioStallTimer) {
31912
32040
  clearTimeout(this._audioStallTimer);
31913
- this._audioStallTimer = null;
32041
+ delete this._audioStallTimer;
31914
32042
  }
31915
32043
  }
31916
32044
  }, {
@@ -31976,12 +32104,12 @@ var AudioStallObserver = /* @__PURE__ */ function() {
31976
32104
  switch (_context2.prev = _context2.next) {
31977
32105
  case 0:
31978
32106
  clearTimeout(_this._audioStallTimer);
31979
- _this._audioStallTimer = null;
32107
+ delete _this._audioStallTimer;
31980
32108
  _context2.next = 4;
31981
32109
  return _this._audioStallCount();
31982
32110
  case 4:
31983
32111
  if (!_this._audioStallTimer) {
31984
- _this._audioStallTimer = setTimeout(loop, AudioStallObserver2.interval);
32112
+ _this._audioStallTimer = setTimeout(loop, _AudioStallObserver2.interval);
31985
32113
  }
31986
32114
  case 5:
31987
32115
  case "end":
@@ -31993,7 +32121,7 @@ var AudioStallObserver = /* @__PURE__ */ function() {
31993
32121
  return _ref6.apply(this, arguments);
31994
32122
  };
31995
32123
  }();
31996
- this._audioStallTimer = setTimeout(loop, AudioStallObserver2.interval);
32124
+ this._audioStallTimer = setTimeout(loop, _AudioStallObserver2.interval);
31997
32125
  }
31998
32126
  }, {
31999
32127
  key: "_audioStallCount",
@@ -32004,7 +32132,7 @@ var AudioStallObserver = /* @__PURE__ */ function() {
32004
32132
  while (1)
32005
32133
  switch (_context3.prev = _context3.next) {
32006
32134
  case 0:
32007
- if (!(this._preSample && Date.now() - this._preSample.ts < AudioStallObserver2.interval * 0.5)) {
32135
+ if (!(this._preSample && Date.now() - this._preSample.ts < _AudioStallObserver2.interval * 0.5)) {
32008
32136
  _context3.next = 2;
32009
32137
  break;
32010
32138
  }
@@ -32058,7 +32186,7 @@ var AudioStallObserver = /* @__PURE__ */ function() {
32058
32186
  _inboundRTP3 = inboundRTP, concealedSamples = _inboundRTP3.concealedSamples, totalSamplesReceived = _inboundRTP3.totalSamplesReceived;
32059
32187
  interval_concealed_samples = concealedSamples - this._preSample.concealedSamples;
32060
32188
  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;
32189
+ is_stall = interval_concealed_samples >= 0 && interval_samples_received >= 0 && interval_concealed_samples >= _AudioStallObserver2.ratio * interval_samples_received;
32062
32190
  this._stallList.push({
32063
32191
  concealed: interval_concealed_samples,
32064
32192
  received: interval_samples_received,
@@ -32086,10 +32214,11 @@ var AudioStallObserver = /* @__PURE__ */ function() {
32086
32214
  return _audioStallCount;
32087
32215
  }()
32088
32216
  }]);
32089
- return AudioStallObserver2;
32217
+ return _AudioStallObserver2;
32090
32218
  }();
32091
- _defineProperty$i(AudioStallObserver, "interval", 100);
32092
- _defineProperty$i(AudioStallObserver, "ratio", 0.6);
32219
+ var AudioStallObserver = _AudioStallObserver;
32220
+ AudioStallObserver.interval = 100;
32221
+ AudioStallObserver.ratio = 0.6;
32093
32222
  var computeStallInfo = function computeStallInfo2(list, times, isStallInPreEnd) {
32094
32223
  var _list$;
32095
32224
  var res = {
@@ -32158,13 +32287,22 @@ var VideoStallObserver = /* @__PURE__ */ function() {
32158
32287
  function VideoStallObserver2() {
32159
32288
  var _this = this;
32160
32289
  _classCallCheck$k(this, VideoStallObserver2);
32161
- _defineProperty$i(this, "_handleVisibilityChange", function() {
32290
+ this._videoInWaiting100ms = false;
32291
+ this._videoInWaiting500ms = false;
32292
+ this._pauseStart = 0;
32293
+ this._pauseDuration = 0;
32294
+ this._stallTimeThreshold = {
32295
+ stall500ms: isSafari$1() || isFirefox$2() ? 550 : 500,
32296
+ stall100ms: 100
32297
+ };
32298
+ this._support100msStall = checkVideoFrameCallback();
32299
+ this._handleVisibilityChange = function() {
32162
32300
  if (document.visibilityState === "hidden") {
32163
32301
  _this._framePause();
32164
32302
  }
32165
- });
32166
- _defineProperty$i(this, "_framePause", function() {
32167
- if (_this._prePts) {
32303
+ };
32304
+ this._framePause = function() {
32305
+ if (_this._prePts && _this._stallList) {
32168
32306
  var current = performance.now();
32169
32307
  var delta = current - _this._prePts;
32170
32308
  _this._stallList.push({
@@ -32173,23 +32311,7 @@ var VideoStallObserver = /* @__PURE__ */ function() {
32173
32311
  });
32174
32312
  _this._prePts = void 0;
32175
32313
  }
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
32314
  };
32192
- this._support100msStall = checkVideoFrameCallback();
32193
32315
  }
32194
32316
  _createClass$k(VideoStallObserver2, [{
32195
32317
  key: "start",
@@ -32227,7 +32349,7 @@ var VideoStallObserver = /* @__PURE__ */ function() {
32227
32349
  player.removeEventListener("play", handlePlay);
32228
32350
  };
32229
32351
  document.addEventListener("visibilitychange", this._handleVisibilityChange);
32230
- document.addEventListener("pagehide", this._framePause());
32352
+ window.addEventListener("pagehide", this._framePause);
32231
32353
  }
32232
32354
  }, {
32233
32355
  key: "stop",
@@ -32246,7 +32368,7 @@ var VideoStallObserver = /* @__PURE__ */ function() {
32246
32368
  this._videoInWaiting100ms = false;
32247
32369
  this._videoInWaiting500ms = false;
32248
32370
  document.removeEventListener("visibilitychange", this._handleVisibilityChange);
32249
- document.removeEventListener("pagehide", this._framePause());
32371
+ window.removeEventListener("pagehide", this._framePause);
32250
32372
  }
32251
32373
  }, {
32252
32374
  key: "destroy",
@@ -32315,7 +32437,7 @@ var VideoStallObserver = /* @__PURE__ */ function() {
32315
32437
  }
32316
32438
  var _stallInfo$stall = stallInfo.stall, stallDuration500ms = _stallInfo$stall.stallDuration500ms, stallDuration100ms = _stallInfo$stall.stallDuration100ms;
32317
32439
  stallInfo.stall.stallRate500ms = Math.min(Number((stallDuration500ms / interval).toFixed(4)), 1);
32318
- if (this._support100msStall) {
32440
+ if (this._support100msStall && stallDuration100ms) {
32319
32441
  stallInfo.stall.stallRate100ms = Math.min(Number((stallDuration100ms / interval).toFixed(4)), 1);
32320
32442
  } else {
32321
32443
  delete stallInfo.stall.stallRate100ms;
@@ -32481,7 +32603,7 @@ function diffRecvAudioStats(oldStats, newStats) {
32481
32603
  receivedSampleRate: diffNumber(oldStats, newStats, "totalSamplesReceived") / statsInterval,
32482
32604
  concealedSamples: Math.round(diffNumber(oldStats, newStats, "concealedSamples")),
32483
32605
  concealmentEvent: Math.round(diffNumber(oldStats, newStats, "concealmentEvents")),
32484
- e2eDelay: Math.round(newStats.rtt + jitterBufferDelay)
32606
+ e2eDelay: Math.round((newStats.rtt || 0) + jitterBufferDelay)
32485
32607
  };
32486
32608
  }
32487
32609
  function getRecvVideoStats(_x2) {
@@ -32552,12 +32674,16 @@ function diffRecvVideoStats(oldStats, newStats) {
32552
32674
  var nackCount = diffNumber(oldStats, newStats, "nackCount");
32553
32675
  var packetsReceived = diffNumber(oldStats, newStats, "packetsReceived");
32554
32676
  var jitterBufferDelay = Math.round(diffNumber(oldStats, newStats, "jitterBufferDelay") / diffNumber(oldStats, newStats, "jitterBufferEmittedCount") * 1e3);
32677
+ var newResolution = (newStats.width || 0) * (newStats.height || 0);
32678
+ var oldResolution = (oldStats.width || 0) * (oldStats.height || 0);
32679
+ var abrState = newResolution === 0 || oldResolution === 0 ? "none" : newResolution > oldResolution ? "upgrade" : newResolution < oldResolution ? "degrade" : "none";
32555
32680
  return {
32556
32681
  statsInterval,
32682
+ abrState,
32557
32683
  width: newStats.width || 0,
32558
32684
  height: newStats.height || 0,
32559
32685
  estimatedPlayoutTimestamp: newStats.estimatedPlayoutTimestamp,
32560
- videoLossRate: +(packetsLostDiff / (diffNumber(oldStats, newStats, "packetsReceived") + packetsLostDiff)),
32686
+ videoLossRate: +(packetsLostDiff / (diffNumber(oldStats, newStats, "packetsReceived") + packetsLostDiff)).toFixed(2),
32561
32687
  receivedKBitrate: +(diffNumber(oldStats, newStats, "bytesReceived") * 8 / statsInterval).toFixed(2),
32562
32688
  decoderOutputFrameRate: Math.round(diffNumber(oldStats, newStats, "framesDecoded") * 1e3 / statsInterval),
32563
32689
  receivedFrameRate: Math.round(diffNumber(oldStats, newStats, "framesReceived") * 1e3 / statsInterval),
@@ -32572,7 +32698,7 @@ function diffRecvVideoStats(oldStats, newStats) {
32572
32698
  firCount: diffNumber(oldStats, newStats, "firCount"),
32573
32699
  nackCount,
32574
32700
  pliCount: diffNumber(oldStats, newStats, "pliCount"),
32575
- e2eDelay: Math.round(newStats.rtt + jitterBufferDelay),
32701
+ e2eDelay: Math.round((newStats.rtt || 0) + jitterBufferDelay),
32576
32702
  retransmittedRate: +(nackCount / (packetsReceived + packetsLostDiff)).toFixed(2)
32577
32703
  };
32578
32704
  }
@@ -32605,11 +32731,11 @@ var Quality = {
32605
32731
  DOWN: 6
32606
32732
  };
32607
32733
  var NetworkQuality = /* @__PURE__ */ function() {
32608
- function NetworkQuality2(peer, networkQualityParams) {
32734
+ function NetworkQuality2(_peer, _networkQualityParams) {
32609
32735
  _classCallCheck$k(this, NetworkQuality2);
32610
- _defineProperty$i(this, "_preDownlinkStats", []);
32611
- this._peer = peer;
32612
- this._networkQualityParams = networkQualityParams;
32736
+ this._peer = _peer;
32737
+ this._networkQualityParams = _networkQualityParams;
32738
+ this._preDownlinkStats = [];
32613
32739
  }
32614
32740
  _createClass$k(NetworkQuality2, [{
32615
32741
  key: "getDownlinkQuality",
@@ -32664,11 +32790,11 @@ var NetworkQuality = /* @__PURE__ */ function() {
32664
32790
  } else {
32665
32791
  quality = QosLevel.VBAD;
32666
32792
  }
32667
- if (retransmittedRate > qosQualityParams[QosLevel.BAD].minRetransmittedRate) {
32793
+ if (retransmittedRate > (qosQualityParams[QosLevel.BAD].minRetransmittedRate || 0.5)) {
32668
32794
  quality = Math.max(quality, QosLevel.BAD);
32669
- } else if (retransmittedRate > qosQualityParams[QosLevel.POOR].minRetransmittedRate) {
32795
+ } else if (retransmittedRate > (qosQualityParams[QosLevel.POOR].minRetransmittedRate || 0.35)) {
32670
32796
  quality = Math.max(quality, QosLevel.POOR);
32671
- } else if (retransmittedRate > qosQualityParams[QosLevel.GOOD].minRetransmittedRate) {
32797
+ } else if (retransmittedRate > (qosQualityParams[QosLevel.GOOD].minRetransmittedRate || 0.2)) {
32672
32798
  quality = Math.max(quality, QosLevel.GOOD);
32673
32799
  }
32674
32800
  return quality;
@@ -32709,6 +32835,240 @@ var NetworkQuality = /* @__PURE__ */ function() {
32709
32835
  }]);
32710
32836
  return NetworkQuality2;
32711
32837
  }();
32838
+ 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];
32839
+ var FirstFrameObserver = /* @__PURE__ */ function() {
32840
+ function FirstFrameObserver2(_emitFirstFrameState) {
32841
+ var _this = this;
32842
+ _classCallCheck$k(this, FirstFrameObserver2);
32843
+ this._emitFirstFrameState = _emitFirstFrameState;
32844
+ this._startConnectTs = 0;
32845
+ this._firstVideoFrameInterval = null;
32846
+ this._preState = null;
32847
+ this._state = {};
32848
+ this._pc = null;
32849
+ this._video = null;
32850
+ this._videoTransceiver = null;
32851
+ this._extraInfo = {
32852
+ is_preload: false
32853
+ };
32854
+ this._handleConnectionStateChange = function() {
32855
+ var _this$_pc;
32856
+ if (((_this$_pc = _this._pc) === null || _this$_pc === void 0 ? void 0 : _this$_pc.connectionState) === "connected" && _this._videoTransceiver) {
32857
+ _this.changeFirstFrameState(RTC_FIRST_FRAME_STATE.PEER_CONNECTED);
32858
+ _this._watchForFirstVideoFrameRecv(_this._videoTransceiver);
32859
+ }
32860
+ };
32861
+ this._handleICEConnectionStateChange = function() {
32862
+ var _this$_pc2;
32863
+ if (((_this$_pc2 = _this._pc) === null || _this$_pc2 === void 0 ? void 0 : _this$_pc2.iceConnectionState) === "connected") {
32864
+ _this.changeFirstFrameState(RTC_FIRST_FRAME_STATE.ICE_CONNECTED);
32865
+ }
32866
+ };
32867
+ this._handlePlaying = function() {
32868
+ if (!_this._state[RTC_FIRST_FRAME_STATE.PEER_CONNECTED]) {
32869
+ return;
32870
+ }
32871
+ _this.changeFirstFrameState(RTC_FIRST_FRAME_STATE.VIDEO_PLAYING);
32872
+ _this.reset();
32873
+ };
32874
+ this._handleCanplay = function() {
32875
+ if (!_this._state[RTC_FIRST_FRAME_STATE.PEER_CONNECTED]) {
32876
+ return;
32877
+ }
32878
+ _this.changeFirstFrameState(RTC_FIRST_FRAME_STATE.VIDEO_CANPLAY);
32879
+ };
32880
+ this._handleLoadeddata = function() {
32881
+ if (!_this._state[RTC_FIRST_FRAME_STATE.PEER_CONNECTED]) {
32882
+ return;
32883
+ }
32884
+ _this.changeFirstFrameState(RTC_FIRST_FRAME_STATE.VIDEO_LOADEDDATA);
32885
+ };
32886
+ this._handleError = function() {
32887
+ _this.reset();
32888
+ };
32889
+ }
32890
+ _createClass$k(FirstFrameObserver2, [{
32891
+ key: "start",
32892
+ value: function start() {
32893
+ this.reset();
32894
+ this._startConnectTs = Date.now();
32895
+ this.changeFirstFrameState(RTC_FIRST_FRAME_STATE.LOAD_START);
32896
+ }
32897
+ }, {
32898
+ key: "changeFirstFrameState",
32899
+ value: function changeFirstFrameState(state) {
32900
+ var _ref6, _this2 = this;
32901
+ var preIdx = (_ref6 = this._preState && FIRST_FRAME_STATE_ORDER.indexOf(this._preState)) !== null && _ref6 !== void 0 ? _ref6 : -1;
32902
+ var curIdx = FIRST_FRAME_STATE_ORDER.indexOf(state);
32903
+ var elapsed = Date.now() - this._startConnectTs;
32904
+ if (curIdx > preIdx) {
32905
+ FIRST_FRAME_STATE_ORDER.slice(preIdx + 1, curIdx + 1).forEach(function(s2) {
32906
+ _this2._state[s2] = elapsed;
32907
+ });
32908
+ this._preState = state;
32909
+ }
32910
+ }
32911
+ }, {
32912
+ key: "setIsPreload",
32913
+ value: function setIsPreload(isPreload) {
32914
+ this._extraInfo.is_preload = isPreload;
32915
+ }
32916
+ }, {
32917
+ key: "setFailureReason",
32918
+ value: function setFailureReason(reason) {
32919
+ this._extraInfo.failure_reason = reason;
32920
+ }
32921
+ }, {
32922
+ key: "bindEvents",
32923
+ value: function bindEvents(pc, videoTransceiver, video2) {
32924
+ var _this3 = this;
32925
+ this._pc = pc;
32926
+ this._video = video2;
32927
+ this._videoTransceiver = videoTransceiver;
32928
+ pc.addEventListener("connectionstatechange", this._handleConnectionStateChange);
32929
+ pc.addEventListener("iceconnectionstatechange", this._handleICEConnectionStateChange);
32930
+ var _ref22 = (videoTransceiver === null || videoTransceiver === void 0 ? void 0 : videoTransceiver.receiver) || {}, transport = _ref22.transport;
32931
+ if (transport) {
32932
+ transport.onstatechange = function() {
32933
+ transport.state === "connected" && _this3.changeFirstFrameState(RTC_FIRST_FRAME_STATE.DTLS_CONNECTED);
32934
+ };
32935
+ }
32936
+ video2 === null || video2 === void 0 ? void 0 : video2.addEventListener("playing", this._handlePlaying);
32937
+ video2 === null || video2 === void 0 ? void 0 : video2.addEventListener("canplay", this._handleCanplay);
32938
+ video2 === null || video2 === void 0 ? void 0 : video2.addEventListener("loadeddata", this._handleLoadeddata);
32939
+ video2 === null || video2 === void 0 ? void 0 : video2.addEventListener("error", this._handleError);
32940
+ }
32941
+ }, {
32942
+ key: "_watchForFirstVideoFrameRecv",
32943
+ value: function _watchForFirstVideoFrameRecv(videoTransceiver) {
32944
+ var _this4 = this;
32945
+ var hasPacketsReceived = false;
32946
+ var hasFrameReceived = false;
32947
+ var hasFrameDecoded = false;
32948
+ this._cancelWatchForFirstVideoFrameRecv();
32949
+ this._firstVideoFrameInterval = window.setInterval(/* @__PURE__ */ _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee() {
32950
+ var _inboundRtpStats, _inboundRtpStats2, _inboundRtpStats3;
32951
+ var receiver, reports, inboundRtpStats;
32952
+ return _regeneratorRuntime$a().wrap(function _callee$(_context) {
32953
+ while (1)
32954
+ switch (_context.prev = _context.next) {
32955
+ case 0:
32956
+ receiver = videoTransceiver.receiver;
32957
+ _context.next = 3;
32958
+ return receiver.getStats();
32959
+ case 3:
32960
+ reports = _context.sent;
32961
+ reports.forEach(function(report) {
32962
+ if (report.type === "inbound-rtp") {
32963
+ inboundRtpStats = report;
32964
+ }
32965
+ });
32966
+ if (!hasPacketsReceived && (_inboundRtpStats = inboundRtpStats) !== null && _inboundRtpStats !== void 0 && _inboundRtpStats.packetsReceived && inboundRtpStats.packetsReceived > 0) {
32967
+ hasPacketsReceived = true;
32968
+ _this4.changeFirstFrameState(RTC_FIRST_FRAME_STATE.FIRST_PACKET_RECV);
32969
+ }
32970
+ if (!hasFrameReceived && (_inboundRtpStats2 = inboundRtpStats) !== null && _inboundRtpStats2 !== void 0 && _inboundRtpStats2.framesReceived && inboundRtpStats.framesReceived > 0) {
32971
+ hasFrameReceived = true;
32972
+ _this4.changeFirstFrameState(RTC_FIRST_FRAME_STATE.FIRST_FRAME_RECV);
32973
+ }
32974
+ if (!hasFrameDecoded && (_inboundRtpStats3 = inboundRtpStats) !== null && _inboundRtpStats3 !== void 0 && _inboundRtpStats3.framesDecoded && inboundRtpStats.framesDecoded > 0) {
32975
+ hasFrameDecoded = true;
32976
+ _this4.changeFirstFrameState(RTC_FIRST_FRAME_STATE.FIRST_FRAME_DECODED);
32977
+ _this4._cancelWatchForFirstVideoFrameRecv();
32978
+ }
32979
+ case 8:
32980
+ case "end":
32981
+ return _context.stop();
32982
+ }
32983
+ }, _callee);
32984
+ })), 200);
32985
+ }
32986
+ }, {
32987
+ key: "_cancelWatchForFirstVideoFrameRecv",
32988
+ value: function _cancelWatchForFirstVideoFrameRecv() {
32989
+ if (this._firstVideoFrameInterval) {
32990
+ window.clearInterval(this._firstVideoFrameInterval);
32991
+ this._firstVideoFrameInterval = null;
32992
+ }
32993
+ }
32994
+ }, {
32995
+ key: "reset",
32996
+ value: function reset() {
32997
+ var _this5 = this, _this$_video, _this$_video2, _this$_video3, _this$_video4, _this$_pc3, _this$_pc4;
32998
+ if (Object.keys(this._state).length > 0) {
32999
+ var state = _objectSpread2$b({}, this._state);
33000
+ var extraInfo = _objectSpread2$b({}, this._extraInfo);
33001
+ getTransportInfo(this._videoTransceiver, extraInfo).then(function() {
33002
+ _this5._emitFirstFrameState(state, extraInfo);
33003
+ });
33004
+ }
33005
+ this._preState = null;
33006
+ this._extraInfo = {
33007
+ is_preload: false
33008
+ };
33009
+ this._state = {};
33010
+ (_this$_video = this._video) === null || _this$_video === void 0 ? void 0 : _this$_video.removeEventListener("playing", this._handlePlaying);
33011
+ (_this$_video2 = this._video) === null || _this$_video2 === void 0 ? void 0 : _this$_video2.removeEventListener("canplay", this._handleCanplay);
33012
+ (_this$_video3 = this._video) === null || _this$_video3 === void 0 ? void 0 : _this$_video3.removeEventListener("loadeddata", this._handleLoadeddata);
33013
+ (_this$_video4 = this._video) === null || _this$_video4 === void 0 ? void 0 : _this$_video4.removeEventListener("error", this._handleError);
33014
+ (_this$_pc3 = this._pc) === null || _this$_pc3 === void 0 ? void 0 : _this$_pc3.removeEventListener("connectionstatechange", this._handleConnectionStateChange);
33015
+ (_this$_pc4 = this._pc) === null || _this$_pc4 === void 0 ? void 0 : _this$_pc4.removeEventListener("iceconnectionstatechange", this._handleICEConnectionStateChange);
33016
+ this._cancelWatchForFirstVideoFrameRecv();
33017
+ this._pc = null;
33018
+ this._video = null;
33019
+ this._videoTransceiver = null;
33020
+ }
33021
+ }]);
33022
+ return FirstFrameObserver2;
33023
+ }();
33024
+ var getTransportInfo = /* @__PURE__ */ function() {
33025
+ var _ref42 = _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee2(videoTransceiver, extraInfo) {
33026
+ var _videoTransceiver$rec;
33027
+ var reports, candidatePairStats, localCandidateStats, remoteCandidateStats;
33028
+ return _regeneratorRuntime$a().wrap(function _callee2$(_context2) {
33029
+ while (1)
33030
+ switch (_context2.prev = _context2.next) {
33031
+ case 0:
33032
+ _context2.next = 2;
33033
+ return videoTransceiver === null || videoTransceiver === void 0 ? void 0 : (_videoTransceiver$rec = videoTransceiver.receiver) === null || _videoTransceiver$rec === void 0 ? void 0 : _videoTransceiver$rec.getStats().catch(function() {
33034
+ });
33035
+ case 2:
33036
+ reports = _context2.sent;
33037
+ reports === null || reports === void 0 ? void 0 : reports.forEach(function(report) {
33038
+ if (report.type === "candidate-pair") {
33039
+ candidatePairStats = report;
33040
+ localCandidateStats = reports.get(report.localCandidateId);
33041
+ remoteCandidateStats = reports.get(report.remoteCandidateId);
33042
+ }
33043
+ });
33044
+ if (remoteCandidateStats) {
33045
+ extraInfo.remote_ip = remoteCandidateStats.ip || remoteCandidateStats.address;
33046
+ extraInfo.remote_port = remoteCandidateStats.port;
33047
+ extraInfo.remote_candidate_type = remoteCandidateStats.candidateType;
33048
+ extraInfo.protocol = remoteCandidateStats.protocol;
33049
+ }
33050
+ if (localCandidateStats) {
33051
+ extraInfo.local_ip = localCandidateStats.ip || localCandidateStats.address;
33052
+ extraInfo.local_port = localCandidateStats.port;
33053
+ extraInfo.local_candidate_type = localCandidateStats.candidateType;
33054
+ }
33055
+ if (candidatePairStats) {
33056
+ extraInfo.rtt = candidatePairStats.currentRoundTripTime;
33057
+ extraInfo.stun_requests_sent = candidatePairStats.requestsSent;
33058
+ extraInfo.stun_requests_received = candidatePairStats.requestsReceived;
33059
+ extraInfo.stun_responses_sent = candidatePairStats.responsesSent;
33060
+ extraInfo.stun_responses_received = candidatePairStats.responsesReceived;
33061
+ }
33062
+ case 7:
33063
+ case "end":
33064
+ return _context2.stop();
33065
+ }
33066
+ }, _callee2);
33067
+ }));
33068
+ return function getTransportInfo2(_x, _x2) {
33069
+ return _ref42.apply(this, arguments);
33070
+ };
33071
+ }();
32712
33072
  function changeNumberInRange(source, min2, max2, delta) {
32713
33073
  var target = source + delta;
32714
33074
  if (target > max2) {
@@ -32719,85 +33079,191 @@ function changeNumberInRange(source, min2, max2, delta) {
32719
33079
  function isHarmonyOS() {
32720
33080
  return /(HarmonyOS|OpenHarmony|ArkWeb)/i.test(navigator.userAgent);
32721
33081
  }
32722
- var logger$b = new Logger$a("rts");
32723
- var Rts = /* @__PURE__ */ function(_EventEmitter) {
32724
- _inherits$f(Rts2, _EventEmitter);
32725
- var _super = _createSuper$f(Rts2);
32726
- function Rts2(opts) {
32727
- var _this;
32728
- _classCallCheck$k(this, Rts2);
32729
- _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() {
32755
- return _regeneratorRuntime$a().wrap(function _callee2$(_context2) {
32756
- while (1)
32757
- switch (_context2.prev = _context2.next) {
32758
- case 0:
32759
- if (_this._checkStatsErrorTimer) {
32760
- clearTimeout(_this._checkStatsErrorTimer);
32761
- }
32762
- _this._checkStatsErrorTimer = setTimeout(/* @__PURE__ */ _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee() {
32763
- var stats, _stats$video, framesDecoded, bytesReceived;
32764
- return _regeneratorRuntime$a().wrap(function _callee$(_context) {
32765
- while (1)
32766
- switch (_context.prev = _context.next) {
32767
- case 0:
32768
- _context.next = 2;
32769
- return _this.getStatsSnapshoot();
32770
- case 2:
32771
- stats = _context.sent;
32772
- if (stats.video) {
32773
- _stats$video = stats.video, framesDecoded = _stats$video.framesDecoded, bytesReceived = _stats$video.bytesReceived;
32774
- if (!bytesReceived) {
32775
- _this._emitError(StreamingError$2.create(ERR$2.MEDIA, ERR$2.SUB_TYPES.MEDIA_ERR_DECODE, {
32776
- message: "rts receive empty"
32777
- }));
32778
- } else if (!framesDecoded) {
32779
- _this._emitError(StreamingError$2.create(ERR$2.MEDIA, ERR$2.SUB_TYPES.MEDIA_ERR_DECODE, {
32780
- message: "rts decode error"
32781
- }));
32782
- }
32783
- }
32784
- case 4:
32785
- case "end":
32786
- return _context.stop();
32787
- }
32788
- }, _callee);
32789
- })), _this._opts.checkStatsErrorDelay);
32790
- case 2:
32791
- case "end":
32792
- return _context2.stop();
32793
- }
33082
+ function compareURL(url1, url2) {
33083
+ var queryKeys = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : [];
33084
+ if (typeof url1 !== "string" || typeof url2 !== "string") {
33085
+ return false;
33086
+ }
33087
+ if (!url1.includes("://")) {
33088
+ url1 = window.location.protocol + "//" + url1;
33089
+ }
33090
+ if (!url2.includes("://")) {
33091
+ url2 = window.location.protocol + "//" + url2;
33092
+ }
33093
+ var url1Obj;
33094
+ var url2Obj;
33095
+ try {
33096
+ url1Obj = new URL(url1);
33097
+ url2Obj = new URL(url2);
33098
+ } catch (e4) {
33099
+ return false;
33100
+ }
33101
+ if (url1Obj.host + url1Obj.pathname !== url2Obj.host + url2Obj.pathname) {
33102
+ return false;
33103
+ }
33104
+ var _iterator = _createForOfIteratorHelper$4(queryKeys), _step;
33105
+ try {
33106
+ for (_iterator.s(); !(_step = _iterator.n()).done; ) {
33107
+ var key2 = _step.value;
33108
+ if (url1Obj.searchParams.get(key2) !== url2Obj.searchParams.get(key2)) {
33109
+ return false;
33110
+ }
33111
+ }
33112
+ } catch (err) {
33113
+ _iterator.e(err);
33114
+ } finally {
33115
+ _iterator.f();
33116
+ }
33117
+ return true;
33118
+ }
33119
+ function addUrlParams(url2, params) {
33120
+ if (!params || Object.keys(params).length === 0) {
33121
+ return url2;
33122
+ }
33123
+ var urlParams = url2.includes("?") ? new URLSearchParams(url2.split("?")[1]) : new URLSearchParams();
33124
+ Object.keys(params).forEach(function(key2) {
33125
+ urlParams.set(key2, params[key2]);
33126
+ });
33127
+ return url2.split("?")[0] + "?" + urlParams.toString();
33128
+ }
33129
+ function isHeyTapBrowser() {
33130
+ return /(HeyTapBrowser)/i.test(navigator.userAgent);
33131
+ }
33132
+ function isVivoBrowser() {
33133
+ return /(VivoBrowser)/i.test(navigator.userAgent);
33134
+ }
33135
+ var VideoFrameRecvCallback = /* @__PURE__ */ function() {
33136
+ function VideoFrameRecvCallback2() {
33137
+ var _this = this;
33138
+ _classCallCheck$k(this, VideoFrameRecvCallback2);
33139
+ this._onVideoRefresh = function(_, data2) {
33140
+ var _this$_domElement;
33141
+ _this._recentVideoInfo = data2;
33142
+ _this._requestVideoFrameCallbackTimer = (_this$_domElement = _this._domElement) === null || _this$_domElement === void 0 ? void 0 : _this$_domElement.requestVideoFrameCallback(_this._onVideoRefresh);
33143
+ };
33144
+ }
33145
+ _createClass$k(VideoFrameRecvCallback2, [{
33146
+ key: "start",
33147
+ value: function start(domElement) {
33148
+ var _this2 = this;
33149
+ this._domElement = domElement;
33150
+ if (typeof HTMLVideoElement.prototype.requestVideoFrameCallback === "function") {
33151
+ if (domElement) {
33152
+ this._requestVideoFrameCallbackTimer = domElement.requestVideoFrameCallback(this._onVideoRefresh.bind(this));
33153
+ this._removeHandler = function() {
33154
+ _this2._requestVideoFrameCallbackTimer && (domElement === null || domElement === void 0 ? void 0 : domElement.cancelVideoFrameCallback(_this2._requestVideoFrameCallbackTimer));
33155
+ };
33156
+ }
33157
+ }
33158
+ }
33159
+ }, {
33160
+ key: "stop",
33161
+ value: function stop() {
33162
+ var _this$_removeHandler;
33163
+ delete this._recentVideoInfo;
33164
+ delete this._domElement;
33165
+ (_this$_removeHandler = this._removeHandler) === null || _this$_removeHandler === void 0 ? void 0 : _this$_removeHandler.call(this);
33166
+ delete this._removeHandler;
33167
+ }
33168
+ }, {
33169
+ key: "getRecentRenderInfo4Report",
33170
+ value: function getRecentRenderInfo4Report() {
33171
+ var _this3 = this;
33172
+ var obj = {};
33173
+ if (this._recentVideoInfo) {
33174
+ Object.keys(this._recentVideoInfo).forEach(function(k2) {
33175
+ var _this3$_recentVideoIn;
33176
+ var key2 = k2.replace(/[a-z]{1}[A-Z]{1}/g, function(e4) {
33177
+ return "".concat(e4[0], "_").concat(e4[1].toLowerCase());
33178
+ });
33179
+ obj["video_".concat(key2)] = (_this3$_recentVideoIn = _this3._recentVideoInfo) === null || _this3$_recentVideoIn === void 0 ? void 0 : _this3$_recentVideoIn[k2];
33180
+ });
33181
+ }
33182
+ return obj;
33183
+ }
33184
+ }]);
33185
+ return VideoFrameRecvCallback2;
33186
+ }();
33187
+ var logger$b = new Logger$a("rts");
33188
+ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33189
+ _inherits$f(Rts2, _EventEmitter);
33190
+ var _super = _createSuper$f(Rts2);
33191
+ function Rts2(opts) {
33192
+ var _this;
33193
+ _classCallCheck$k(this, Rts2);
33194
+ _this = _super.call(this);
33195
+ _this._url = "";
33196
+ _this._pc = null;
33197
+ _this._audioTransceicer = null;
33198
+ _this._videoTransceicer = null;
33199
+ _this._mediaStream = null;
33200
+ _this._lastMediaStream = null;
33201
+ _this._loader = null;
33202
+ _this._networkEvaluate = null;
33203
+ _this._retry = 0;
33204
+ _this._player = null;
33205
+ _this._waitingTimer = 0;
33206
+ _this._rctConnectStartTs = 0;
33207
+ _this._isReplacing = false;
33208
+ _this._firstFrameObserver = new FirstFrameObserver(_this._emitFirstFrameState.bind(_assertThisInitialized$f(_this)));
33209
+ _this._audio = null;
33210
+ _this._video = null;
33211
+ _this._preAudioStats = null;
33212
+ _this._preVideoStats = null;
33213
+ _this._rtcReportTimer = null;
33214
+ _this._networkQualityResult = [];
33215
+ _this._videoJitterBufferDelay = 0;
33216
+ _this._checkStatsError = /* @__PURE__ */ _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee2() {
33217
+ return _regeneratorRuntime$a().wrap(function _callee2$(_context2) {
33218
+ while (1)
33219
+ switch (_context2.prev = _context2.next) {
33220
+ case 0:
33221
+ if (_this._checkStatsErrorTimer) {
33222
+ clearTimeout(_this._checkStatsErrorTimer);
33223
+ }
33224
+ _this._checkStatsErrorTimer = setTimeout(/* @__PURE__ */ _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee() {
33225
+ var stats, _stats$video, framesDecoded, bytesReceived;
33226
+ return _regeneratorRuntime$a().wrap(function _callee$(_context) {
33227
+ while (1)
33228
+ switch (_context.prev = _context.next) {
33229
+ case 0:
33230
+ _context.next = 2;
33231
+ return _this.getStatsSnapshoot();
33232
+ case 2:
33233
+ stats = _context.sent;
33234
+ if (stats.video) {
33235
+ _stats$video = stats.video, framesDecoded = _stats$video.framesDecoded, bytesReceived = _stats$video.bytesReceived;
33236
+ if (!bytesReceived) {
33237
+ _this._emitError(StreamingError$2.create(ERR$2.MEDIA, ERR$2.SUB_TYPES.MEDIA_ERR_DECODE, {
33238
+ message: "rts receive empty"
33239
+ }));
33240
+ } else if (!framesDecoded) {
33241
+ _this._emitError(StreamingError$2.create(ERR$2.MEDIA, ERR$2.SUB_TYPES.MEDIA_ERR_DECODE, {
33242
+ message: "rts decode error"
33243
+ }));
33244
+ }
33245
+ }
33246
+ case 4:
33247
+ case "end":
33248
+ return _context.stop();
33249
+ }
33250
+ }, _callee);
33251
+ })), _this._opts.checkStatsErrorDelay);
33252
+ case 2:
33253
+ case "end":
33254
+ return _context2.stop();
33255
+ }
32794
33256
  }, _callee2);
32795
- })));
32796
- _defineProperty$i(_assertThisInitialized$f(_this), "_onTrack", function(e4) {
33257
+ }));
33258
+ _this._onTrack = function(e4) {
32797
33259
  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() {
33260
+ if (e4.track.kind === "audio") {
33261
+ _this._audio = e4.track;
33262
+ } else {
33263
+ _this._video = e4.track;
33264
+ }
33265
+ };
33266
+ _this._mockWaitingByTimeupdate = function() {
32801
33267
  var _this$_pc, _this$_pc2;
32802
33268
  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
33269
  return;
@@ -32808,8 +33274,8 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
32808
33274
  return;
32809
33275
  _this.emit("waiting");
32810
33276
  }, _this._opts.stallInterval);
32811
- });
32812
- _defineProperty$i(_assertThisInitialized$f(_this), "_onLoadedData", function() {
33277
+ };
33278
+ _this._onLoadedData = function() {
32813
33279
  logger$b.log("loadeddata emit");
32814
33280
  _this.getStatsSnapshoot().then(function(snap) {
32815
33281
  _this.emit(EVENT$2.METADATA_PARSED, {
@@ -32823,19 +33289,15 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
32823
33289
  meta: snap.audio
32824
33290
  });
32825
33291
  });
32826
- });
32827
- _defineProperty$i(_assertThisInitialized$f(_this), "_setDelay", function(delayHint) {
33292
+ };
33293
+ _this._setDelay = function(delayHint) {
32828
33294
  if (_this._opts.progressiveSetDelay) {
32829
33295
  _this._startSetDelayLoop(delayHint);
32830
33296
  } else {
32831
33297
  var _this$_audioTransceic2;
32832
- var key2 = [
32833
- "playoutDelayHint",
32834
- "jitterBufferDelayHint",
32835
- "jitterBufferTarget"
32836
- ].find(function(key22) {
33298
+ var key2 = ["playoutDelayHint", "jitterBufferDelayHint", "jitterBufferTarget"].find(function(key22) {
32837
33299
  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);
33300
+ 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
33301
  });
32840
33302
  if (!key2)
32841
33303
  return;
@@ -32845,24 +33307,19 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
32845
33307
  _this._audioTransceicer.receiver[key2] = delayHint;
32846
33308
  _this._videoTransceicer.receiver[key2] = delayHint;
32847
33309
  }
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() {
33310
+ };
33311
+ _this._targetDelayHint = null;
33312
+ _this._setDelayError = null;
33313
+ _this._startSetDelayLoop = /* @__PURE__ */ function() {
32853
33314
  var _ref32 = _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee4(delayHint) {
32854
33315
  var key2, preAudioStats, preVideoStats, _this$_opts$adaptiveJ, loopInterval, maxAvSyncDelay, maxJitterBufferDiff, maxStep, avDiffTooMuchCount;
32855
33316
  return _regeneratorRuntime$a().wrap(function _callee4$(_context4) {
32856
33317
  while (1)
32857
33318
  switch (_context4.prev = _context4.next) {
32858
33319
  case 0:
32859
- key2 = [
32860
- "playoutDelayHint",
32861
- "jitterBufferDelayHint",
32862
- "jitterBufferTarget"
32863
- ].find(function(key22) {
33320
+ key2 = ["playoutDelayHint", "jitterBufferDelayHint", "jitterBufferTarget"].find(function(key22) {
32864
33321
  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);
33322
+ 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
33323
  });
32867
33324
  if (key2) {
32868
33325
  _context4.next = 3;
@@ -32877,13 +33334,14 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
32877
33334
  }
32878
33335
  return _context4.abrupt("return");
32879
33336
  case 6:
33337
+ logger$b.log("_startSetDelayLoop()", "invoked, delayHint: ".concat(delayHint));
32880
33338
  _this._targetDelayHint = delayHint;
32881
33339
  if (!_this._setDelayTimer) {
32882
- _context4.next = 9;
33340
+ _context4.next = 10;
32883
33341
  break;
32884
33342
  }
32885
33343
  return _context4.abrupt("return");
32886
- case 9:
33344
+ case 10:
32887
33345
  preAudioStats = null;
32888
33346
  preVideoStats = null;
32889
33347
  _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 +33368,7 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
32910
33368
  }
32911
33369
  return _context3.abrupt("return");
32912
33370
  case 8:
32913
- targetDelayMs = _this._targetDelayHint * 1e3;
33371
+ targetDelayMs = (_this._targetDelayHint || 0) * 1e3;
32914
33372
  currentTargetDelayMs = currentTargetDelay * 1e3;
32915
33373
  _context3.next = 12;
32916
33374
  return Promise.all([getRecvAudioStats(_this._audioTransceicer.receiver.getStats()), getRecvVideoStats(_this._videoTransceicer.receiver.getStats())]);
@@ -32939,7 +33397,7 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
32939
33397
  break;
32940
33398
  }
32941
33399
  if (avDiffTooMuchCount++ > 8 && currentVideoDelay > currentAudioDelay) {
32942
- _this._audioTransceicer.receiver[key2] = Math.min(currentVideoDelay / 1e3, _this._targetDelayHint);
33400
+ _this._audioTransceicer.receiver[key2] = Math.min(currentVideoDelay / 1e3, _this._targetDelayHint || 0);
32943
33401
  avDiffTooMuchCount = 0;
32944
33402
  }
32945
33403
  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 +33432,7 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
32974
33432
  }
32975
33433
  }, _callee3, null, [[0, 40]]);
32976
33434
  })), loopInterval);
32977
- case 14:
33435
+ case 15:
32978
33436
  case "end":
32979
33437
  return _context4.stop();
32980
33438
  }
@@ -32983,26 +33441,31 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
32983
33441
  return function(_x) {
32984
33442
  return _ref32.apply(this, arguments);
32985
33443
  };
32986
- }());
32987
- _defineProperty$i(_assertThisInitialized$f(_this), "_getDelay", function() {
33444
+ }();
33445
+ _this._getDelay = function() {
32988
33446
  try {
33447
+ var _this$_audioTransceic6;
32989
33448
  var key2 = ["playoutDelayHint", "jitterBufferDelayHint", "jitterBufferTarget"].find(function(key22) {
32990
- return key22 in _this._videoTransceicer.receiver && key22 in _this._audioTransceicer.receiver;
33449
+ var _this$_videoTransceic4, _this$_audioTransceic5;
33450
+ 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
33451
  });
32992
- return _this._audioTransceicer.receiver[key2];
33452
+ if (!key2)
33453
+ return;
33454
+ return (_this$_audioTransceic6 = _this._audioTransceicer) === null || _this$_audioTransceic6 === void 0 ? void 0 : _this$_audioTransceic6.receiver[key2];
32993
33455
  } catch (error) {
32994
33456
  logger$b.error("get delay error");
32995
33457
  }
32996
- });
32997
- _defineProperty$i(_assertThisInitialized$f(_this), "_onLoaderRetry", function(error, retryTime) {
33458
+ };
33459
+ _this._onLoaderRetry = function(error, retryTime) {
33460
+ console.log(error, "retryTime", retryTime);
32998
33461
  _this.emit(EVENT$2.LOAD_RETRY, {
32999
33462
  error: StreamingError$2.network(error),
33000
33463
  retryTime
33001
33464
  });
33002
- });
33465
+ };
33003
33466
  _this._opts = getOption(opts);
33004
33467
  _this._media = _this._opts.media;
33005
- _this._player = _this._opts.player;
33468
+ _this._player = _this._opts.player || null;
33006
33469
  _this._loader = new NetLoader$2(_objectSpread2$b(_objectSpread2$b({}, opts.fetchOptions), {}, {
33007
33470
  responseType: "json",
33008
33471
  method: "POST",
@@ -33012,9 +33475,12 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33012
33475
  onRetryError: _this._onLoaderRetry,
33013
33476
  logger: logger$b
33014
33477
  }));
33015
- _this._retry = _this._opts.retryCount;
33478
+ _this._retry = _this._opts.retryCount || 0;
33479
+ _this._preloadPromise = _this._opts.preloadPromise;
33016
33480
  _this._bindMediaEvent();
33481
+ logger$b.log("constructor()", opts);
33017
33482
  _this._changeVolumeInHarmonyWorkaround();
33483
+ _this._mutedBeforePlayingWorkaround();
33018
33484
  if (_this._opts.mediaStream && _this._opts.seamlesslyReload) {
33019
33485
  _this._lastMediaStream = _this._opts.mediaStream;
33020
33486
  }
@@ -33035,6 +33501,11 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33035
33501
  get: function get4() {
33036
33502
  return this._video;
33037
33503
  }
33504
+ }, {
33505
+ key: "getJitterBufferDelay",
33506
+ value: function getJitterBufferDelay() {
33507
+ return this._videoJitterBufferDelay;
33508
+ }
33038
33509
  }, {
33039
33510
  key: "loader",
33040
33511
  get: function get4() {
@@ -33048,9 +33519,24 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33048
33519
  }
33049
33520
  }, {
33050
33521
  key: "getStats",
33051
- value: function getStats$1() {
33052
- return getStats(this._pc);
33053
- }
33522
+ value: function() {
33523
+ var _getStats22 = _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee5() {
33524
+ return _regeneratorRuntime$a().wrap(function _callee5$(_context5) {
33525
+ while (1)
33526
+ switch (_context5.prev = _context5.next) {
33527
+ case 0:
33528
+ return _context5.abrupt("return", getStats(this._pc));
33529
+ case 1:
33530
+ case "end":
33531
+ return _context5.stop();
33532
+ }
33533
+ }, _callee5, this);
33534
+ }));
33535
+ function getStats$1() {
33536
+ return _getStats22.apply(this, arguments);
33537
+ }
33538
+ return getStats$1;
33539
+ }()
33054
33540
  }, {
33055
33541
  key: "getStatsSnapshoot",
33056
33542
  value: function getStatsSnapshoot$1() {
@@ -33061,51 +33547,105 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33061
33547
  }, {
33062
33548
  key: "load",
33063
33549
  value: function() {
33064
- var _load = _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee5(url2) {
33550
+ var _load = _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee6(url2, failureReason) {
33065
33551
  var _this2 = this;
33066
- var encodedTransformSupported, lastPc;
33067
- return _regeneratorRuntime$a().wrap(function _callee5$(_context5) {
33552
+ var lastPc, answerSdp, errorStr, preloadPromise, info, encodedTransformSupported;
33553
+ return _regeneratorRuntime$a().wrap(function _callee6$(_context6) {
33068
33554
  while (1)
33069
- switch (_context5.prev = _context5.next) {
33555
+ switch (_context6.prev = _context6.next) {
33070
33556
  case 0:
33071
- this._disconnect();
33557
+ logger$b.log("load()", 'invoked, url: "'.concat(url2, '"'));
33558
+ this._disconnect(failureReason || "invoke load");
33072
33559
  this._url = url2;
33073
- this._retry = this._opts.retryCount;
33560
+ lastPc = this._pc;
33074
33561
  if (!this._opts.hackCreateOfferIssue) {
33075
- _context5.next = 6;
33562
+ _context6.next = 7;
33076
33563
  break;
33077
33564
  }
33078
- _context5.next = 6;
33565
+ _context6.next = 7;
33079
33566
  return this._createEmptyPeer();
33080
- case 6:
33081
- encodedTransformSupported = isLegacyEncodedTransformSupported();
33082
- _context5.prev = 7;
33083
- lastPc = this._pc;
33084
- if (lastPc) {
33085
- lastPc.close();
33567
+ case 7:
33568
+ _context6.prev = 7;
33569
+ this._firstFrameObserver.start();
33570
+ if (!this._preloadPromise) {
33571
+ _context6.next = 38;
33572
+ break;
33086
33573
  }
33574
+ logger$b.log("load()", "in preload process...");
33575
+ _context6.prev = 11;
33576
+ this._firstFrameObserver.setIsPreload(true);
33577
+ if (compareURL(this._url, this._preloadPromise.url, ["tabr_start_bitrate"])) {
33578
+ _context6.next = 17;
33579
+ break;
33580
+ }
33581
+ errorStr = "preload url not match, current url: ".concat(this._url, ", preload url: ").concat(this._preloadPromise.url);
33582
+ delete this._preloadPromise;
33583
+ throw new Error(errorStr);
33584
+ case 17:
33585
+ preloadPromise = this._preloadPromise.promise;
33586
+ delete this._preloadPromise;
33587
+ _context6.next = 21;
33588
+ return preloadPromise;
33589
+ case 21:
33590
+ info = _context6.sent;
33591
+ if (!(info.pc.signalingState !== "have-local-offer")) {
33592
+ _context6.next = 24;
33593
+ break;
33594
+ }
33595
+ throw new Error('pc.signalingState not equal "have-local-offer", current state is '.concat(info.pc.signalingState));
33596
+ case 24:
33597
+ this._pc = info.pc;
33598
+ answerSdp = info.answerSdp;
33599
+ this._videoTransceicer = info.videoTransceiver;
33600
+ this._audioTransceicer = info.audioTransceiver;
33601
+ if (this._opts.enableSei) {
33602
+ this.initVideoEncodedTransform();
33603
+ this.initAudioEncodedTransform();
33604
+ }
33605
+ _context6.next = 36;
33606
+ break;
33607
+ case 31:
33608
+ _context6.prev = 31;
33609
+ _context6.t0 = _context6["catch"](11);
33610
+ logger$b.warn("load()", "preload failed, ".concat(_context6.t0.message || _context6.t0.toString()));
33611
+ this.load(url2, _context6.t0.message || _context6.t0.toString());
33612
+ return _context6.abrupt("return");
33613
+ case 36:
33614
+ _context6.next = 44;
33615
+ break;
33616
+ case 38:
33617
+ encodedTransformSupported = isLegacyEncodedTransformSupported();
33618
+ logger$b.log("load()", "isLegacyEncodedTransformSupported: ".concat(encodedTransformSupported));
33087
33619
  this._pc = new RTCPeerConnection({
33088
33620
  encodedInsertableStreams: encodedTransformSupported && this._opts.enableSei ? true : void 0
33089
33621
  });
33090
- this._bindRTCEvents();
33091
- _context5.next = 14;
33092
- return this._connect(url2);
33093
- case 14:
33094
- _context5.next = 19;
33622
+ _context6.next = 43;
33623
+ return this._getAnswerSdp(this._pc);
33624
+ case 43:
33625
+ answerSdp = _context6.sent;
33626
+ case 44:
33627
+ this._bindRTCEvents(this._pc);
33628
+ _context6.next = 47;
33629
+ return this._handleAnswerSdp(this._pc, answerSdp);
33630
+ case 47:
33631
+ if (lastPc) {
33632
+ lastPc.close();
33633
+ }
33634
+ _context6.next = 53;
33095
33635
  break;
33096
- case 16:
33097
- _context5.prev = 16;
33098
- _context5.t0 = _context5["catch"](7);
33636
+ case 50:
33637
+ _context6.prev = 50;
33638
+ _context6.t1 = _context6["catch"](7);
33099
33639
  setTimeout(function() {
33100
- return _this2._emitError(StreamingError$2.create(ERR$2.OTHER, null, _context5.t0));
33640
+ return _this2._emitError(StreamingError$2.create(ERR$2.OTHER, null, _context6.t1));
33101
33641
  });
33102
- case 19:
33642
+ case 53:
33103
33643
  case "end":
33104
- return _context5.stop();
33644
+ return _context6.stop();
33105
33645
  }
33106
- }, _callee5, this, [[7, 16]]);
33646
+ }, _callee6, this, [[7, 50], [11, 31]]);
33107
33647
  }));
33108
- function load(_x2) {
33648
+ function load(_x2, _x3) {
33109
33649
  return _load.apply(this, arguments);
33110
33650
  }
33111
33651
  return load;
@@ -33113,13 +33653,13 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33113
33653
  }, {
33114
33654
  key: "switchURL",
33115
33655
  value: function switchURL(url2) {
33116
- this.load(url2 || this._url);
33656
+ logger$b.log("switchURL()", 'invoked, url: "'.concat(url2, '"'));
33657
+ this.load(url2 || this._url, "invoke switchURL");
33117
33658
  }
33118
33659
  }, {
33119
33660
  key: "_bindRTCEvents",
33120
- value: function _bindRTCEvents() {
33661
+ value: function _bindRTCEvents(pc) {
33121
33662
  var _this3 = this;
33122
- var pc = this._pc;
33123
33663
  pc.addEventListener("track", this._onTrack);
33124
33664
  pc.addEventListener("connectionstatechange", function() {
33125
33665
  logger$b.warn("onconnectionstatechange:", pc.connectionState);
@@ -33138,7 +33678,7 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33138
33678
  return;
33139
33679
  }
33140
33680
  _this3._retry--;
33141
- _this3.load(_this3._url);
33681
+ _this3.load(_this3._url, "rtc connect failed");
33142
33682
  }
33143
33683
  if (pc.connectionState === "connected") {
33144
33684
  _this3._handleMediaStream();
@@ -33157,7 +33697,7 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33157
33697
  value: function _handleMediaStream() {
33158
33698
  var _this4 = this;
33159
33699
  if (this._lastMediaStream) {
33160
- var _this$_player$play;
33700
+ var _this$_player2, _this$_player3, _this$_player3$play;
33161
33701
  var videoTrack = this._lastMediaStream.getVideoTracks()[0];
33162
33702
  var audioTrack = this._lastMediaStream.getAudioTracks()[0];
33163
33703
  if (videoTrack) {
@@ -33170,20 +33710,15 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33170
33710
  this._audio && this._mediaStream.addTrack(this._audio);
33171
33711
  this._video && this._mediaStream.addTrack(this._video);
33172
33712
  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() {
33713
+ (_this$_player2 = this._player) === null || _this$_player2 === void 0 ? void 0 : _this$_player2.pause();
33714
+ (_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
33715
  _this4._isReplacing = false;
33176
33716
  });
33177
33717
  } else {
33178
33718
  this._mediaStream = new MediaStream();
33179
33719
  this._audio && this._mediaStream.addTrack(this._audio);
33180
33720
  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
- }
33721
+ this._media && (this._media.srcObject = this._mediaStream);
33187
33722
  }
33188
33723
  }
33189
33724
  }, {
@@ -33237,21 +33772,22 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33237
33772
  }, {
33238
33773
  key: "_bindMediaEvent",
33239
33774
  value: function _bindMediaEvent() {
33240
- this._media.addEventListener("timeupdate", this._mockWaitingByTimeupdate);
33241
- this._media.addEventListener("loadeddata", this._onLoadedData);
33775
+ var _this$_media, _this$_media2;
33776
+ (_this$_media = this._media) === null || _this$_media === void 0 ? void 0 : _this$_media.addEventListener("timeupdate", this._mockWaitingByTimeupdate);
33777
+ (_this$_media2 = this._media) === null || _this$_media2 === void 0 ? void 0 : _this$_media2.addEventListener("loadeddata", this._onLoadedData);
33242
33778
  }
33243
33779
  }, {
33244
- key: "_connect",
33780
+ key: "_getAnswerSdp",
33245
33781
  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) {
33782
+ var _getAnswerSdp2 = _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee7(pc) {
33783
+ var offer, answerSdp, parsed, finnalUrl, _this$_opts, _this$_loader, _this$_opts2, _parsed$media, parseSession, sessionId, reqStart, res, answer, err;
33784
+ return _regeneratorRuntime$a().wrap(function _callee7$(_context7) {
33249
33785
  while (1)
33250
- switch (_context6.prev = _context6.next) {
33786
+ switch (_context7.prev = _context7.next) {
33251
33787
  case 0:
33252
- pc = this._pc;
33788
+ logger$b.log("_getAnswerSdp()");
33253
33789
  if (!pc.addTransceiver) {
33254
- _context6.next = 11;
33790
+ _context7.next = 11;
33255
33791
  break;
33256
33792
  }
33257
33793
  this._audioTransceicer = pc.addTransceiver("audio", {
@@ -33260,32 +33796,37 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33260
33796
  this._videoTransceicer = pc.addTransceiver("video", {
33261
33797
  direction: "recvonly"
33262
33798
  });
33263
- this._setDelay(this._opts.delayHint);
33799
+ this._setDelay(this._opts.delayHint || null);
33264
33800
  if (this._opts.enableSei) {
33265
33801
  this.initVideoEncodedTransform();
33266
33802
  this.initAudioEncodedTransform();
33267
33803
  }
33268
- _context6.next = 8;
33804
+ _context7.next = 8;
33269
33805
  return pc.createOffer();
33270
33806
  case 8:
33271
- offer = _context6.sent;
33272
- _context6.next = 14;
33807
+ offer = _context7.sent;
33808
+ _context7.next = 14;
33273
33809
  break;
33274
33810
  case 11:
33275
- _context6.next = 13;
33811
+ _context7.next = 13;
33276
33812
  return pc.createOffer({
33277
33813
  iceRestart: true,
33278
33814
  offerToReceiveAudio: true,
33279
33815
  offerToReceiveVideo: true
33280
33816
  });
33281
33817
  case 13:
33282
- offer = _context6.sent;
33818
+ offer = _context7.sent;
33283
33819
  case 14:
33284
33820
  if (this._opts.hackCreateOfferIssue) {
33285
33821
  this._createEmptyPeer();
33286
33822
  }
33287
- logger$b.log("local offer");
33288
- logger$b.log(offer.sdp);
33823
+ logger$b.log("local offer", offer);
33824
+ if (offer.sdp) {
33825
+ _context7.next = 18;
33826
+ break;
33827
+ }
33828
+ throw new Error("create offer failed");
33829
+ case 18:
33289
33830
  parsed = lib$1.parse(offer.sdp);
33290
33831
  parsed.media.filter(function(x2) {
33291
33832
  return x2.type === "audio";
@@ -33306,62 +33847,71 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33306
33847
  type: "nack"
33307
33848
  });
33308
33849
  });
33850
+ parsed.media.filter(function(x2) {
33851
+ return x2.type === "video";
33852
+ }).forEach(function(x2) {
33853
+ x2.fmtp.forEach(function(x22) {
33854
+ if (x22.config.indexOf("profile-level-id") !== -1) {
33855
+ x22.config = "".concat(x22.config, ";sps-pps-idr-in-keyframe=1");
33856
+ }
33857
+ });
33858
+ });
33309
33859
  offer.sdp = lib$1.write(parsed);
33310
- logger$b.log("local offer modified:\n", offer.sdp);
33311
- _context6.next = 23;
33860
+ logger$b.log("local offer modified:\n", offer);
33861
+ _context7.next = 25;
33312
33862
  return pc.setLocalDescription(offer);
33313
- case 23:
33863
+ case 25:
33314
33864
  finnalUrl = this._url;
33315
- _context6.prev = 24;
33865
+ _context7.prev = 26;
33316
33866
  if (this._opts.preProcessUrl) {
33317
33867
  finnalUrl = this._opts.preProcessUrl(finnalUrl).url;
33318
33868
  }
33319
- this._loader.finnalUrl = finnalUrl;
33869
+ finnalUrl = addUrlParams(finnalUrl, this._opts.urlParams);
33870
+ this._loader && (this._loader.finnalUrl = finnalUrl);
33320
33871
  parseSession = /_?session_id=([^&$]+)/.exec(finnalUrl);
33321
33872
  sessionId = parseSession ? parseSession[1] : Date.now() + "666";
33873
+ this._firstFrameObserver.changeFirstFrameState(RTC_FIRST_FRAME_STATE.OFFER_SDP_READY);
33322
33874
  this.emit(EVENT$2.LOAD_START, {
33323
33875
  url: finnalUrl,
33324
33876
  offersdp: (_this$_opts = this._opts) !== null && _this$_opts !== void 0 && _this$_opts.enableOriginSdpLogger ? offer.sdp : void 0,
33325
33877
  sessionId
33326
33878
  });
33327
33879
  reqStart = Date.now();
33328
- _context6.next = 33;
33329
- return this._loader.load(finnalUrl, {
33880
+ _context7.next = 37;
33881
+ return (_this$_loader = this._loader) === null || _this$_loader === void 0 ? void 0 : _this$_loader.load(finnalUrl, {
33330
33882
  body: JSON.stringify({
33331
33883
  sessionId,
33332
33884
  version: "1.0-html",
33333
33885
  localSdp: offer
33334
33886
  })
33335
33887
  });
33336
- case 33:
33337
- res = _context6.sent;
33888
+ case 37:
33889
+ res = _context7.sent;
33338
33890
  this.emit(EVENT$2.LOAD_RESPONSE_HEADERS, {
33339
33891
  headers: res.response.headers
33340
33892
  });
33341
33893
  answer = res === null || res === void 0 ? void 0 : res.data;
33342
33894
  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;
33895
+ _context7.next = 45;
33344
33896
  break;
33345
33897
  }
33346
33898
  err = StreamingError$2.create(answer.code === 404 ? ERR$2.NETWORK_NOTFOUND : ERR$2.NETWORK_FORBIDDEN, null, answer);
33347
33899
  err.errorType = ERR$2.NETWORK;
33348
33900
  this._emitError(err);
33349
- return _context6.abrupt("return");
33350
- case 41:
33901
+ return _context7.abrupt("return");
33902
+ case 45:
33351
33903
  if (!((answer === null || answer === void 0 ? void 0 : answer.code) !== 200)) {
33352
- _context6.next = 43;
33904
+ _context7.next = 47;
33353
33905
  break;
33354
33906
  }
33355
33907
  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);
33908
+ case 47:
33909
+ answerSdp = res.data.remoteSdp.sdp;
33360
33910
  this.emit(EVENT$2.LOAD_COMPLETE, {
33361
33911
  url: finnalUrl,
33362
33912
  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) {
33913
+ answersdp: (_this$_opts2 = this._opts) !== null && _this$_opts2 !== void 0 && _this$_opts2.enableOriginSdpLogger ? answerSdp : void 0,
33914
+ 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
33915
  return {
33366
33916
  candidates: media.candidates,
33367
33917
  rtp: media.rtp,
@@ -33369,9 +33919,50 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33369
33919
  };
33370
33920
  })
33371
33921
  });
33372
- _parsed.media.forEach(function(x2) {
33922
+ _context7.next = 54;
33923
+ break;
33924
+ case 51:
33925
+ _context7.prev = 51;
33926
+ _context7.t0 = _context7["catch"](26);
33927
+ this._emitError(StreamingError$2.network(_context7.t0));
33928
+ case 54:
33929
+ return _context7.abrupt("return", answerSdp);
33930
+ case 55:
33931
+ case "end":
33932
+ return _context7.stop();
33933
+ }
33934
+ }, _callee7, this, [[26, 51]]);
33935
+ }));
33936
+ function _getAnswerSdp(_x4) {
33937
+ return _getAnswerSdp2.apply(this, arguments);
33938
+ }
33939
+ return _getAnswerSdp;
33940
+ }()
33941
+ }, {
33942
+ key: "_handleAnswerSdp",
33943
+ value: function() {
33944
+ var _handleAnswerSdp2 = _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee8(pc, answerSdp) {
33945
+ var parsed, answer;
33946
+ return _regeneratorRuntime$a().wrap(function _callee8$(_context8) {
33947
+ while (1)
33948
+ switch (_context8.prev = _context8.next) {
33949
+ case 0:
33950
+ logger$b.log("_handleAnswerSdp()", "invoked, answerSdp:", {
33951
+ answerSdp
33952
+ });
33953
+ if (answerSdp) {
33954
+ _context8.next = 3;
33955
+ break;
33956
+ }
33957
+ return _context8.abrupt("return");
33958
+ case 3:
33959
+ this._firstFrameObserver.changeFirstFrameState(RTC_FIRST_FRAME_STATE.ANSWER_SDP_RECV);
33960
+ parsed = lib$1.parse(answerSdp);
33961
+ parsed.media.forEach(function(x2) {
33373
33962
  var _x$ssrcs, _x$ssrcs$find;
33374
- x2.fingerprint.hash = x2.fingerprint.hash.toUpperCase();
33963
+ if (x2.fingerprint) {
33964
+ x2.fingerprint.hash = x2.fingerprint.hash.toUpperCase();
33965
+ }
33375
33966
  var msid = (_x$ssrcs = x2.ssrcs) === null || _x$ssrcs === void 0 ? void 0 : (_x$ssrcs$find = _x$ssrcs.find(function(s2) {
33376
33967
  return s2.attribute === "msid";
33377
33968
  })) === null || _x$ssrcs$find === void 0 ? void 0 : _x$ssrcs$find.value;
@@ -33379,42 +33970,43 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33379
33970
  x2.msid = msid;
33380
33971
  }
33381
33972
  });
33382
- answer.remoteSdp.sdp = lib$1.write(_parsed);
33383
- logger$b.log("answer modified:\n", answer.remoteSdp.sdp);
33973
+ answer = lib$1.write(parsed);
33974
+ logger$b.log("answer modified:\n", {
33975
+ answer
33976
+ });
33384
33977
  this._rctConnectStartTs = Date.now();
33385
33978
  if (!(pc.signalingState === "closed")) {
33386
- _context6.next = 53;
33979
+ _context8.next = 11;
33387
33980
  break;
33388
33981
  }
33389
- return _context6.abrupt("return");
33390
- case 53:
33391
- _context6.next = 55;
33392
- return pc.setRemoteDescription(answer.remoteSdp);
33393
- case 55:
33982
+ return _context8.abrupt("return");
33983
+ case 11:
33984
+ _context8.next = 13;
33985
+ return pc.setRemoteDescription({
33986
+ type: "answer",
33987
+ sdp: answer
33988
+ });
33989
+ case 13:
33990
+ this._firstFrameObserver.changeFirstFrameState(RTC_FIRST_FRAME_STATE.ANSWER_SDP_READY);
33394
33991
  this._networkEvaluate = new NetworkEvaluate(pc, this._opts.networkEvaluateInterval);
33395
33992
  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:
33993
+ this._firstFrameObserver.bindEvents(pc, this._videoTransceicer, this._media);
33994
+ case 17:
33403
33995
  case "end":
33404
- return _context6.stop();
33996
+ return _context8.stop();
33405
33997
  }
33406
- }, _callee6, this, [[24, 59]]);
33998
+ }, _callee8, this);
33407
33999
  }));
33408
- function _connect() {
33409
- return _connect2.apply(this, arguments);
34000
+ function _handleAnswerSdp(_x5, _x6) {
34001
+ return _handleAnswerSdp2.apply(this, arguments);
33410
34002
  }
33411
- return _connect;
34003
+ return _handleAnswerSdp;
33412
34004
  }()
33413
34005
  }, {
33414
34006
  key: "_listenPeerStateTimeout",
33415
34007
  value: function _listenPeerStateTimeout() {
33416
34008
  var _this6 = this;
33417
- this._peerStateTimer && this._clearPeerStateTimeout();
34009
+ this._clearPeerStateTimeout();
33418
34010
  if (this._opts.connectionStateChangeTimeout) {
33419
34011
  this._peerStateTimer = setTimeout(function() {
33420
34012
  _this6._emitError(StreamingError$2.create(ERR$2.MEDIA, ERR$2.SUB_TYPES.MEDIA_ERR_SRC_NOT_SUPPORTED, {
@@ -33426,128 +34018,162 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33426
34018
  }, {
33427
34019
  key: "_clearPeerStateTimeout",
33428
34020
  value: function _clearPeerStateTimeout() {
33429
- clearTimeout(this._peerStateTimer);
33430
- this._peerStateTimer = null;
34021
+ if (this._peerStateTimer) {
34022
+ clearTimeout(this._peerStateTimer);
34023
+ delete this._peerStateTimer;
34024
+ }
33431
34025
  }
33432
34026
  }, {
33433
34027
  key: "_startRtcReport",
33434
34028
  value: function _startRtcReport() {
33435
34029
  var _this7 = this;
33436
34030
  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);
34031
+ var report = /* @__PURE__ */ function() {
34032
+ var _ref52 = _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee9() {
34033
+ var _this7$_audioTranscei, _this7$_videoTranscei;
34034
+ var _this7$_frameRecvCall, _yield$Promise$all3, _yield$Promise$all4, curAudioStats, curVideoStats, _this7$_audioStallObs, _this7$_videoStallObs, _this7$_networkQualit, _this7$_networkQualit2, _this7$_media, _this7$_media2, _this7$_media3, _this7$_media4, _this7$_media5, _this7$_media6, _this7$_frameRecvCall2, audioStats, videoStats, audioStallInfo, videoStallInfo, _ref6, _ref7, quality, qualityInfo, av_sync_diff;
34035
+ return _regeneratorRuntime$a().wrap(function _callee9$(_context9) {
34036
+ while (1)
34037
+ switch (_context9.prev = _context9.next) {
34038
+ case 0:
34039
+ 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))) {
34040
+ _context9.next = 4;
34041
+ break;
34042
+ }
34043
+ _this7._preAudioStats = null;
34044
+ _this7._preVideoStats = null;
34045
+ return _context9.abrupt("return");
34046
+ case 4:
34047
+ if (!_this7._audioStallObserver && _this7._audioTransceicer) {
34048
+ _this7._audioStallObserver = new AudioStallObserver();
34049
+ _this7._audioStallObserver.start(_this7._audioTransceicer);
34050
+ }
34051
+ if (!_this7._videoStallObserver && _this7._video && _this7._media) {
34052
+ _this7._videoStallObserver = new VideoStallObserver();
34053
+ _this7._videoStallObserver.start(_this7._media);
34054
+ }
34055
+ if (!_this7._frameRecvCallback && _this7._media) {
34056
+ _this7._frameRecvCallback = new VideoFrameRecvCallback();
34057
+ (_this7$_frameRecvCall = _this7._frameRecvCallback) === null || _this7$_frameRecvCall === void 0 ? void 0 : _this7$_frameRecvCall.start(_this7._media);
34058
+ }
34059
+ if (_this7._pc && !_this7._networkQuality && _this7._opts.enableNetworkQuality && _this7._opts.networkQuality) {
34060
+ _this7._networkQuality = new NetworkQuality(_this7._pc, _this7._opts.networkQuality);
34061
+ }
34062
+ _context9.next = 10;
34063
+ return Promise.all([getRecvAudioStats(_this7._audioTransceicer.receiver.getStats()), getRecvVideoStats(_this7._videoTransceicer.receiver.getStats())]);
34064
+ case 10:
34065
+ _yield$Promise$all3 = _context9.sent;
34066
+ _yield$Promise$all4 = _slicedToArray$7(_yield$Promise$all3, 2);
34067
+ curAudioStats = _yield$Promise$all4[0];
34068
+ curVideoStats = _yield$Promise$all4[1];
34069
+ if (!(_this7._preAudioStats && _this7._preVideoStats)) {
34070
+ _context9.next = 28;
34071
+ break;
34072
+ }
34073
+ audioStats = diffRecvAudioStats(_this7._preAudioStats, curAudioStats);
34074
+ videoStats = diffRecvVideoStats(_this7._preVideoStats, curVideoStats);
34075
+ _this7._videoJitterBufferDelay = videoStats.jitterBufferDelay;
34076
+ _context9.next = 20;
34077
+ return (_this7$_audioStallObs = _this7._audioStallObserver) === null || _this7$_audioStallObs === void 0 ? void 0 : _this7$_audioStallObs.getAudioStallInfo();
34078
+ case 20:
34079
+ audioStallInfo = _context9.sent;
34080
+ _context9.next = 23;
34081
+ return (_this7$_videoStallObs = _this7._videoStallObserver) === null || _this7$_videoStallObs === void 0 ? void 0 : _this7$_videoStallObs.getStallInfo({
34082
+ interval: videoStats.statsInterval,
34083
+ frameRateReceived: videoStats.receivedFrameRate,
34084
+ frameRateDecoded: videoStats.decoderOutputFrameRate,
34085
+ bitrate: videoStats.receivedKBitrate
34086
+ });
34087
+ case 23:
34088
+ videoStallInfo = _context9.sent;
34089
+ _ref6 = (_this7$_networkQualit = (_this7$_networkQualit2 = _this7._networkQuality) === null || _this7$_networkQualit2 === void 0 ? void 0 : _this7$_networkQualit2.getDownlinkQuality(_objectSpread2$b(_objectSpread2$b({}, audioStats), {}, {
34090
+ stallDuration: (audioStallInfo === null || audioStallInfo === void 0 ? void 0 : audioStallInfo.stallDuration) || 0
34091
+ }), _objectSpread2$b(_objectSpread2$b({}, videoStats), {}, {
34092
+ stallDuration: (videoStallInfo === null || videoStallInfo === void 0 ? void 0 : videoStallInfo.stall.stallDuration100ms) || (videoStallInfo === null || videoStallInfo === void 0 ? void 0 : videoStallInfo.stall.stallDuration500ms) || 0
34093
+ }))) !== null && _this7$_networkQualit !== void 0 ? _this7$_networkQualit : [], _ref7 = _slicedToArray$7(_ref6, 2), quality = _ref7[0], qualityInfo = _ref7[1];
34094
+ if (_this7._opts.enableAdaptiveJitterBuffer) {
34095
+ _this7._handleJitterBuffer(qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.qualityQos, _this7._opts.adaptiveJitterBuffer, _this7._opts.networkStrategy);
34096
+ }
34097
+ if (videoStats.estimatedPlayoutTimestamp && audioStats.estimatedPlayoutTimestamp) {
34098
+ av_sync_diff = videoStats.estimatedPlayoutTimestamp - audioStats.estimatedPlayoutTimestamp;
34099
+ }
34100
+ _this7.emit(EXTEND_EVENTS.RTC_NETWORK, _objectSpread2$b({
34101
+ interval: videoStats.statsInterval,
34102
+ network_quality: quality,
34103
+ audio_stall_duration: audioStallInfo === null || audioStallInfo === void 0 ? void 0 : audioStallInfo.stallDuration,
34104
+ audio_stall_count: audioStallInfo === null || audioStallInfo === void 0 ? void 0 : audioStallInfo.stallCount,
34105
+ audio_stall_time_per_100sec: ((audioStallInfo === null || audioStallInfo === void 0 ? void 0 : audioStallInfo.stallDuration) || 0) / audioStats.statsInterval * 100,
34106
+ audio_stall_count_per_100sec: ((audioStallInfo === null || audioStallInfo === void 0 ? void 0 : audioStallInfo.stallCount) || 0) / audioStats.statsInterval * 100 * 1e3,
34107
+ video_stall_duration: videoStallInfo === null || videoStallInfo === void 0 ? void 0 : videoStallInfo.stall.stallDuration500ms,
34108
+ video_stall_count: videoStallInfo === null || videoStallInfo === void 0 ? void 0 : videoStallInfo.stall.stallCount500ms,
34109
+ video_stall_duration_100ms: videoStallInfo === null || videoStallInfo === void 0 ? void 0 : videoStallInfo.stall.stallDuration100ms,
34110
+ video_stall_count_100ms: videoStallInfo === null || videoStallInfo === void 0 ? void 0 : videoStallInfo.stall.stallCount100ms,
34111
+ video_stall_time_per_100sec: ((videoStallInfo === null || videoStallInfo === void 0 ? void 0 : videoStallInfo.stall.stallDuration500ms) || 0) / videoStats.statsInterval * 100,
34112
+ video_stall_count_per_100sec: ((videoStallInfo === null || videoStallInfo === void 0 ? void 0 : videoStallInfo.stall.stallCount500ms) || 0) / videoStats.statsInterval * 100 * 1e3,
34113
+ rtt: videoStats.rtt,
34114
+ video_jb_delay: videoStats.jitterBufferDelay,
34115
+ audio_jb_delay: audioStats.jitterBufferDelay,
34116
+ audio_lost_rate: audioStats.audioLossRate,
34117
+ video_lost_rate: videoStats.videoLossRate,
34118
+ video_retransmitted_rate: videoStats.retransmittedRate,
34119
+ quality_audio_level: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.audioLevel,
34120
+ quality_video_level: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.videoLevel,
34121
+ quality_audio_qos: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.audioQos,
34122
+ quality_video_qos: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.videoQos,
34123
+ quality_qos: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.qualityQos,
34124
+ quality_audio_qoe: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.audioQoe,
34125
+ quality_video_qoe: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.videoQoe,
34126
+ current_delay: _this7._getDelay(),
34127
+ visibility_state: document.visibilityState,
34128
+ target_delay: _this7._targetDelayHint,
34129
+ av_sync_diff,
34130
+ set_delay_error: _this7._setDelayError || null,
34131
+ video_width: ((_this7$_media = _this7._media) === null || _this7$_media === void 0 ? void 0 : _this7$_media.videoWidth) || 0,
34132
+ video_height: ((_this7$_media2 = _this7._media) === null || _this7$_media2 === void 0 ? void 0 : _this7$_media2.videoHeight) || 0,
34133
+ abr_state: videoStats.abrState || "none",
34134
+ recv_frame_rate: videoStats.receivedFrameRate,
34135
+ decode_frame_rate: videoStats.decoderOutputFrameRate,
34136
+ pli: videoStats.pliCount,
34137
+ drop_frame_rate: videoStats.framesDropped,
34138
+ audio_packets_received: audioStats.packetsReceived,
34139
+ video_packets_received: videoStats.packetsReceived,
34140
+ video_muted: (_this7$_media3 = _this7._media) === null || _this7$_media3 === void 0 ? void 0 : _this7$_media3.muted,
34141
+ video_paused: (_this7$_media4 = _this7._media) === null || _this7$_media4 === void 0 ? void 0 : _this7$_media4.paused,
34142
+ video_volume: (_this7$_media5 = _this7._media) === null || _this7$_media5 === void 0 ? void 0 : _this7$_media5.volume,
34143
+ video_current_time: (_this7$_media6 = _this7._media) === null || _this7$_media6 === void 0 ? void 0 : _this7$_media6.currentTime
34144
+ }, ((_this7$_frameRecvCall2 = _this7._frameRecvCallback) === null || _this7$_frameRecvCall2 === void 0 ? void 0 : _this7$_frameRecvCall2.getRecentRenderInfo4Report()) || {}));
34145
+ case 28:
34146
+ _this7._preAudioStats = curAudioStats;
34147
+ _this7._preVideoStats = curVideoStats;
34148
+ _this7._setDelayError = null;
34149
+ case 31:
34150
+ case "end":
34151
+ return _context9.stop();
34152
+ }
34153
+ }, _callee9);
34154
+ }));
34155
+ return function report2() {
34156
+ return _ref52.apply(this, arguments);
34157
+ };
34158
+ }();
34159
+ this._rtcReportTimer = setInterval(function() {
34160
+ return report();
34161
+ }, 2e3);
34162
+ report();
33542
34163
  }
33543
34164
  }, {
33544
34165
  key: "_handleJitterBuffer",
33545
34166
  value: function _handleJitterBuffer(quality, adaptiveJitterBuffer, networkStrategy) {
34167
+ if (!adaptiveJitterBuffer || !networkStrategy) {
34168
+ return;
34169
+ }
33546
34170
  this._networkQualityResult.push(quality);
33547
34171
  if (this._networkQualityResult.length > adaptiveJitterBuffer.networkWindow) {
33548
34172
  this._networkQualityResult.shift();
33549
34173
  }
33550
- var validNetworkQualityResult = this._networkQualityResult.filter(Boolean);
34174
+ var validNetworkQualityResult = this._networkQualityResult.filter(function(v2) {
34175
+ return typeof v2 === "number";
34176
+ });
33551
34177
  if (validNetworkQualityResult.length === adaptiveJitterBuffer.networkWindow) {
33552
34178
  var _networkStrategy$aver;
33553
34179
  var averageQuality;
@@ -33571,13 +34197,15 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33571
34197
  }, {
33572
34198
  key: "_stopRtcReport",
33573
34199
  value: function _stopRtcReport() {
33574
- var _this$_audioStallObse, _this$_videoStallObse, _this$_networkQuality;
34200
+ var _this$_audioStallObse, _this$_videoStallObse, _this$_frameRecvCallb, _this$_networkQuality;
33575
34201
  (_this$_audioStallObse = this._audioStallObserver) === null || _this$_audioStallObse === void 0 ? void 0 : _this$_audioStallObse.destroy();
33576
34202
  (_this$_videoStallObse = this._videoStallObserver) === null || _this$_videoStallObse === void 0 ? void 0 : _this$_videoStallObse.destroy();
34203
+ (_this$_frameRecvCallb = this._frameRecvCallback) === null || _this$_frameRecvCallb === void 0 ? void 0 : _this$_frameRecvCallb.stop();
34204
+ delete this._frameRecvCallback;
33577
34205
  (_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;
34206
+ delete this._audioStallObserver;
34207
+ delete this._videoStallObserver;
34208
+ delete this._networkQuality;
33581
34209
  this._preAudioStats = null;
33582
34210
  this._preVideoStats = null;
33583
34211
  if (this._rtcReportTimer) {
@@ -33585,60 +34213,89 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33585
34213
  this._rtcReportTimer = 0;
33586
34214
  }
33587
34215
  }
34216
+ }, {
34217
+ key: "_clearDelay",
34218
+ value: function _clearDelay() {
34219
+ if (this._setDelayTimer) {
34220
+ clearInterval(this._setDelayTimer);
34221
+ delete this._setDelayTimer;
34222
+ }
34223
+ this._targetDelayHint = null;
34224
+ this._setDelayError = null;
34225
+ }
33588
34226
  }, {
33589
34227
  key: "_disconnect",
33590
- value: function _disconnect() {
33591
- var _this$_loader, _this$_networkEvaluat2;
33592
- (_this$_loader = this._loader) === null || _this$_loader === void 0 ? void 0 : _this$_loader.cancel();
34228
+ value: function _disconnect(reason) {
34229
+ var _this$_loader2, _this$_networkEvaluat2;
34230
+ this._clearDelay();
34231
+ this._clearMediaSrc();
34232
+ (_this$_loader2 = this._loader) === null || _this$_loader2 === void 0 ? void 0 : _this$_loader2.cancel();
33593
34233
  (_this$_networkEvaluat2 = this._networkEvaluate) === null || _this$_networkEvaluat2 === void 0 ? void 0 : _this$_networkEvaluat2.destroy();
33594
34234
  this._stopRtcReport();
33595
34235
  clearTimeout(this._checkStatsErrorTimer);
33596
34236
  this._clearPeerStateTimeout();
34237
+ this._firstFrameObserver.setFailureReason(reason);
34238
+ this._firstFrameObserver.reset();
33597
34239
  this._audioTransceicer = null;
33598
34240
  this._videoTransceicer = null;
33599
34241
  this._mediaStream = null;
33600
- this._networkEvaluate = null;
34242
+ }
34243
+ }, {
34244
+ key: "_clearMediaSrc",
34245
+ value: function _clearMediaSrc() {
34246
+ if (this._media) {
34247
+ this._media.srcObject = null;
34248
+ this._media.removeAttribute("src");
34249
+ }
33601
34250
  }
33602
34251
  }, {
33603
34252
  key: "_emitError",
33604
34253
  value: function _emitError(error) {
34254
+ var _error$originError;
34255
+ logger$b.warn(error);
34256
+ this._clearDelay();
34257
+ 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);
34258
+ this._firstFrameObserver.reset();
33605
34259
  this.emit(EVENT$2.ERROR, error);
33606
34260
  clearTimeout(this._checkStatsErrorTimer);
33607
34261
  this._clearPeerStateTimeout();
33608
34262
  if (this._pc) {
33609
34263
  this._pc.close();
33610
- if (this._media) {
33611
- this._media.srcObject = null;
33612
- this._media.removeAttribute("src");
33613
- }
34264
+ this._clearMediaSrc();
33614
34265
  }
33615
34266
  }
33616
34267
  }, {
33617
34268
  key: "_createEmptyPeer",
33618
34269
  value: function() {
33619
- var _createEmptyPeer2 = _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee8() {
34270
+ var _createEmptyPeer2 = _asyncToGenerator$a(/* @__PURE__ */ _regeneratorRuntime$a().mark(function _callee10() {
33620
34271
  var pc;
33621
- return _regeneratorRuntime$a().wrap(function _callee8$(_context8) {
34272
+ return _regeneratorRuntime$a().wrap(function _callee10$(_context10) {
33622
34273
  while (1)
33623
- switch (_context8.prev = _context8.next) {
34274
+ switch (_context10.prev = _context10.next) {
33624
34275
  case 0:
33625
34276
  pc = new RTCPeerConnection();
33626
- _context8.next = 3;
34277
+ _context10.next = 3;
33627
34278
  return pc.createOffer();
33628
34279
  case 3:
33629
34280
  pc.close();
33630
- pc = null;
33631
- case 5:
34281
+ case 4:
33632
34282
  case "end":
33633
- return _context8.stop();
34283
+ return _context10.stop();
33634
34284
  }
33635
- }, _callee8);
34285
+ }, _callee10);
33636
34286
  }));
33637
34287
  function _createEmptyPeer() {
33638
34288
  return _createEmptyPeer2.apply(this, arguments);
33639
34289
  }
33640
34290
  return _createEmptyPeer;
33641
34291
  }()
34292
+ }, {
34293
+ key: "_emitFirstFrameState",
34294
+ value: function _emitFirstFrameState(info, extra) {
34295
+ this.emit(EXTEND_EVENTS.RTC_FIRST_FRAME, _objectSpread2$b(_objectSpread2$b(_objectSpread2$b({}, info), extra), {}, {
34296
+ initOptionsIncludePreload: !!this._opts.preloadPromise
34297
+ }));
34298
+ }
33642
34299
  }, {
33643
34300
  key: "_changeVolumeInHarmonyWorkaround",
33644
34301
  value: function _changeVolumeInHarmonyWorkaround() {
@@ -33652,7 +34309,8 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33652
34309
  enumerable: true,
33653
34310
  get: originalDescriptor.get,
33654
34311
  set: function set5(val) {
33655
- originalDescriptor.set.call(this, val);
34312
+ var _originalDescriptor$s;
34313
+ (_originalDescriptor$s = originalDescriptor.set) === null || _originalDescriptor$s === void 0 ? void 0 : _originalDescriptor$s.call(this, val);
33656
34314
  var _changeNumberInRange = changeNumberInRange(this.volume, 0, 1, 0.01), _changeNumberInRange2 = _slicedToArray$7(_changeNumberInRange, 2), sourceVolume = _changeNumberInRange2[0], targetVolume = _changeNumberInRange2[1];
33657
34315
  this.volume = targetVolume;
33658
34316
  this.volume = sourceVolume;
@@ -33668,14 +34326,47 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33668
34326
  }
33669
34327
  }
33670
34328
  }
34329
+ }, {
34330
+ key: "_mutedBeforePlayingWorkaround",
34331
+ value: function _mutedBeforePlayingWorkaround() {
34332
+ var _this9 = this;
34333
+ if (isHeyTapBrowser() || isVivoBrowser()) {
34334
+ var originalDescriptor = Object.getOwnPropertyDescriptor(HTMLMediaElement.prototype, "muted");
34335
+ if (this._media && originalDescriptor) {
34336
+ logger$b.log("apply muted workaround for vivo & oppo");
34337
+ var originalMuted = this._media.muted;
34338
+ this._media.muted = true;
34339
+ Object.defineProperty(this._media, "muted", {
34340
+ configurable: true,
34341
+ enumerable: true,
34342
+ get: function get4() {
34343
+ return originalMuted;
34344
+ },
34345
+ set: function set5(val) {
34346
+ logger$b.log("muted workaround. set muted =", val);
34347
+ originalMuted = val;
34348
+ }
34349
+ });
34350
+ var revertMutedProxy = function revertMutedProxy2() {
34351
+ logger$b.log("revert muted workaround. muted:", originalMuted);
34352
+ if (_this9._media) {
34353
+ Object.defineProperty(_this9._media, "muted", originalDescriptor);
34354
+ _this9._media.muted = originalMuted;
34355
+ _this9._media.removeEventListener("playing", revertMutedProxy2);
34356
+ }
34357
+ };
34358
+ this._media.addEventListener("playing", revertMutedProxy);
34359
+ }
34360
+ }
34361
+ }
33671
34362
  }, {
33672
34363
  key: "destroy",
33673
34364
  value: function destroy(keepClearMediaStream) {
33674
- var _this$_revertVolumeWo, _this$_media;
33675
- this._disconnect();
34365
+ var _this$_revertVolumeWo, _this$_media3;
34366
+ this._disconnect("invoke destroy");
33676
34367
  (_this$_revertVolumeWo = this._revertVolumeWorkaround) === null || _this$_revertVolumeWo === void 0 ? void 0 : _this$_revertVolumeWo.call(this);
33677
34368
  delete this._revertVolumeWorkaround;
33678
- (_this$_media = this._media) === null || _this$_media === void 0 ? void 0 : _this$_media.removeEventListener("timeupdate", this._mockWaitingByTimeupdate);
34369
+ (_this$_media3 = this._media) === null || _this$_media3 === void 0 ? void 0 : _this$_media3.removeEventListener("timeupdate", this._mockWaitingByTimeupdate);
33679
34370
  if (this._media && !keepClearMediaStream) {
33680
34371
  this._media.srcObject = null;
33681
34372
  }
@@ -33686,7 +34377,6 @@ var Rts = /* @__PURE__ */ function(_EventEmitter) {
33686
34377
  this._media = null;
33687
34378
  this._player = null;
33688
34379
  this._pc = null;
33689
- this._opts = null;
33690
34380
  }
33691
34381
  }], [{
33692
34382
  key: "enableLogger",
@@ -33715,15 +34405,11 @@ var RtsPlugin = /* @__PURE__ */ function(_BasePlugin) {
33715
34405
  function RtsPlugin2() {
33716
34406
  var _this;
33717
34407
  _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() {
34408
+ _this = _super.apply(this, arguments);
34409
+ _this._rts = null;
34410
+ _this._rtsOpts = null;
34411
+ _this._mediaStream = null;
34412
+ _this._onPause = function() {
33727
34413
  if (_this._disconnectTimer) {
33728
34414
  return;
33729
34415
  }
@@ -33731,8 +34417,8 @@ var RtsPlugin = /* @__PURE__ */ function(_BasePlugin) {
33731
34417
  _this._closeAfterPause();
33732
34418
  _this._clearDisconnectTimer();
33733
34419
  }, _this.config.disconnectTime * 1e3);
33734
- });
33735
- _defineProperty$i(_assertThisInitialized$f(_this), "_reInit", function() {
34420
+ };
34421
+ _this._reInit = function() {
33736
34422
  var _this$_rts;
33737
34423
  _this._clearDisconnectTimer();
33738
34424
  if ((_this$_rts = _this._rts) !== null && _this$_rts !== void 0 && _this$_rts._pc) {
@@ -33740,8 +34426,8 @@ var RtsPlugin = /* @__PURE__ */ function(_BasePlugin) {
33740
34426
  }
33741
34427
  _this._init();
33742
34428
  _this._bindRtsEvents();
33743
- });
33744
- _defineProperty$i(_assertThisInitialized$f(_this), "_init", function() {
34429
+ };
34430
+ _this._init = function() {
33745
34431
  var _this$_rts2;
33746
34432
  (_this$_rts2 = _this._rts) === null || _this$_rts2 === void 0 ? void 0 : _this$_rts2.destroy();
33747
34433
  var config2 = _this.player.config;
@@ -33760,9 +34446,11 @@ var RtsPlugin = /* @__PURE__ */ function(_BasePlugin) {
33760
34446
  }
33761
34447
  }, rtsOpts));
33762
34448
  _this._rts.load(config2.url);
33763
- });
33764
- _defineProperty$i(_assertThisInitialized$f(_this), "_onSwitchURL", function(url2) {
33765
- if (url2) {
34449
+ };
34450
+ _this._onSwitchURL = function(url2) {
34451
+ if (url2.startsWith("blob:") || url2 === "") {
34452
+ url2 = _this.player.config.url;
34453
+ } else if (url2) {
33766
34454
  _this.player.config.url = url2;
33767
34455
  }
33768
34456
  if (_this._rts) {
@@ -33770,14 +34458,25 @@ var RtsPlugin = /* @__PURE__ */ function(_BasePlugin) {
33770
34458
  } else {
33771
34459
  _this._reInit();
33772
34460
  }
33773
- });
33774
- _defineProperty$i(_assertThisInitialized$f(_this), "destroy", function() {
34461
+ };
34462
+ _this.__retry = function() {
34463
+ _this.player.removeClass(STATE_CLASS$1.ERROR);
34464
+ _this.player.addClass(STATE_CLASS$1.LOADING);
34465
+ runHooks$1(_assertThisInitialized$f(_this), "retry", function() {
34466
+ _this.player.src = "";
34467
+ _this.player.once(CANPLAY, function() {
34468
+ _this.player.mediaPlay();
34469
+ });
34470
+ });
34471
+ };
34472
+ _this.destroy = function() {
33775
34473
  var _this$_rts3;
33776
34474
  _this.player.switchURL = _this._originSwitchFn;
34475
+ _this.player.retry = _this._originRetry;
33777
34476
  _this._clearDisconnectTimer();
33778
34477
  (_this$_rts3 = _this._rts) === null || _this$_rts3 === void 0 ? void 0 : _this$_rts3.destroy();
33779
34478
  _this._rts = null;
33780
- });
34479
+ };
33781
34480
  return _this;
33782
34481
  }
33783
34482
  _createClass$k(RtsPlugin2, [{
@@ -33787,32 +34486,38 @@ var RtsPlugin = /* @__PURE__ */ function(_BasePlugin) {
33787
34486
  return (_this$_rts4 = this._rts) === null || _this$_rts4 === void 0 ? void 0 : _this$_rts4.pc;
33788
34487
  }
33789
34488
  }, {
33790
- key: "videoTrack",
34489
+ key: "jitterBufferDelay",
33791
34490
  get: function get4() {
33792
34491
  var _this$_rts5;
33793
- return (_this$_rts5 = this._rts) === null || _this$_rts5 === void 0 ? void 0 : _this$_rts5.videoTack;
34492
+ return ((_this$_rts5 = this._rts) === null || _this$_rts5 === void 0 ? void 0 : _this$_rts5.getJitterBufferDelay()) || 0;
33794
34493
  }
33795
34494
  }, {
33796
- key: "audioTrack",
34495
+ key: "loader",
33797
34496
  get: function get4() {
33798
34497
  var _this$_rts6;
33799
- return (_this$_rts6 = this._rts) === null || _this$_rts6 === void 0 ? void 0 : _this$_rts6.audioTrack;
34498
+ return (_this$_rts6 = this._rts) === null || _this$_rts6 === void 0 ? void 0 : _this$_rts6.loader;
33800
34499
  }
33801
34500
  }, {
33802
- key: "core",
34501
+ key: "videoTrack",
33803
34502
  get: function get4() {
33804
- return this._rts;
34503
+ var _this$_rts7;
34504
+ return (_this$_rts7 = this._rts) === null || _this$_rts7 === void 0 ? void 0 : _this$_rts7.videoTack;
33805
34505
  }
33806
34506
  }, {
33807
- key: "loader",
34507
+ key: "audioTrack",
33808
34508
  get: function get4() {
33809
- var _this$_rts7;
33810
- return (_this$_rts7 = this._rts) === null || _this$_rts7 === void 0 ? void 0 : _this$_rts7.loader;
34509
+ var _this$_rts8;
34510
+ return (_this$_rts8 = this._rts) === null || _this$_rts8 === void 0 ? void 0 : _this$_rts8.audioTrack;
34511
+ }
34512
+ }, {
34513
+ key: "core",
34514
+ get: function get4() {
34515
+ return this._rts;
33811
34516
  }
33812
34517
  }, {
33813
34518
  key: "version",
33814
34519
  get: function get4() {
33815
- return "0.2.1-alpha.47";
34520
+ return "0.2.1-alpha.53";
33816
34521
  }
33817
34522
  }, {
33818
34523
  key: "beforePlayerInit",
@@ -33820,9 +34525,15 @@ var RtsPlugin = /* @__PURE__ */ function(_BasePlugin) {
33820
34525
  var _this$player2, _this$player$config, _this$player$config$r, _this2 = this;
33821
34526
  this._init();
33822
34527
  if (!this._originSwitchFn) {
33823
- this._originSwitchFn = this.player.switchURL.bind(this.player);
34528
+ var _this$player$switchUR;
34529
+ this._originSwitchFn = (_this$player$switchUR = this.player.switchURL) === null || _this$player$switchUR === void 0 ? void 0 : _this$player$switchUR.bind(this.player);
34530
+ }
34531
+ if (!this._originRetry) {
34532
+ var _this$player$retry;
34533
+ this._originRetry = (_this$player$retry = this.player.retry) === null || _this$player$retry === void 0 ? void 0 : _this$player$retry.bind(this.player);
33824
34534
  }
33825
34535
  this.player.switchURL = this._onSwitchURL;
34536
+ this.player.retry = this.__retry;
33826
34537
  (_this$player2 = this.player) === null || _this$player2 === void 0 ? void 0 : _this$player2.useHooks("replay", this._onSwitchURL);
33827
34538
  this.on(URL_CHANGE, this._onSwitchURL);
33828
34539
  this.on(DESTROY, this.destroy);
@@ -33852,6 +34563,7 @@ var RtsPlugin = /* @__PURE__ */ function(_BasePlugin) {
33852
34563
  if (!((_this2$player = _this2.player) !== null && _this2$player !== void 0 && (_this2$player$video = _this2$player.video) !== null && _this2$player$video !== void 0 && _this2$player$video.srcObject)) {
33853
34564
  _this2.player.video.srcObject = new MediaStream();
33854
34565
  }
34566
+ return "";
33855
34567
  }
33856
34568
  }
33857
34569
  }
@@ -33862,26 +34574,26 @@ var RtsPlugin = /* @__PURE__ */ function(_BasePlugin) {
33862
34574
  }, {
33863
34575
  key: "getStats",
33864
34576
  value: function getStats2() {
33865
- var _this$_rts8;
33866
- return (_this$_rts8 = this._rts) === null || _this$_rts8 === void 0 ? void 0 : _this$_rts8.getStats();
34577
+ var _this$_rts9;
34578
+ return (_this$_rts9 = this._rts) === null || _this$_rts9 === void 0 ? void 0 : _this$_rts9.getStats();
33867
34579
  }
33868
34580
  }, {
33869
34581
  key: "getStatsSnapshoot",
33870
34582
  value: function getStatsSnapshoot2() {
33871
- var _this$_rts9;
33872
- return (_this$_rts9 = this._rts) === null || _this$_rts9 === void 0 ? void 0 : _this$_rts9.getStatsSnapshoot();
34583
+ var _this$_rts10;
34584
+ return (_this$_rts10 = this._rts) === null || _this$_rts10 === void 0 ? void 0 : _this$_rts10.getStatsSnapshoot();
33873
34585
  }
33874
34586
  }, {
33875
34587
  key: "getNetWorkInfo",
33876
34588
  value: function getNetWorkInfo() {
33877
- var _this$_rts10;
33878
- return (_this$_rts10 = this._rts) === null || _this$_rts10 === void 0 ? void 0 : _this$_rts10.networkStats;
34589
+ var _this$_rts11;
34590
+ return (_this$_rts11 = this._rts) === null || _this$_rts11 === void 0 ? void 0 : _this$_rts11.networkStats;
33879
34591
  }
33880
34592
  }, {
33881
34593
  key: "setDelay",
33882
34594
  value: function setDelay(delayHint) {
33883
- var _this$_rts11;
33884
- (_this$_rts11 = this._rts) === null || _this$_rts11 === void 0 ? void 0 : _this$_rts11._setDelay(delayHint);
34595
+ var _this$_rts12;
34596
+ (_this$_rts12 = this._rts) === null || _this$_rts12 === void 0 ? void 0 : _this$_rts12._setDelay(delayHint);
33885
34597
  }
33886
34598
  }, {
33887
34599
  key: "_clearDisconnectTimer",
@@ -33892,15 +34604,15 @@ var RtsPlugin = /* @__PURE__ */ function(_BasePlugin) {
33892
34604
  }, {
33893
34605
  key: "_closeAfterPause",
33894
34606
  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)) {
34607
+ var _this$_rts13, _this$config, _this$_rts15;
34608
+ if (!((_this$_rts13 = this._rts) !== null && _this$_rts13 !== void 0 && _this$_rts13._pc)) {
33897
34609
  return;
33898
34610
  }
33899
34611
  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;
34612
+ var _this$_rts14;
34613
+ this._mediaStream = (_this$_rts14 = this._rts) === null || _this$_rts14 === void 0 ? void 0 : _this$_rts14._mediaStream;
33902
34614
  }
33903
- (_this$_rts14 = this._rts) === null || _this$_rts14 === void 0 ? void 0 : _this$_rts14.destroy(true);
34615
+ (_this$_rts15 = this._rts) === null || _this$_rts15 === void 0 ? void 0 : _this$_rts15.destroy(true);
33904
34616
  this._rts = null;
33905
34617
  }
33906
34618
  }, {
@@ -33916,16 +34628,17 @@ var RtsPlugin = /* @__PURE__ */ function(_BasePlugin) {
33916
34628
  this._transCoreEvent(EVENT$2.SEI);
33917
34629
  this._transCoreEvent(EXTEND_EVENTS.RTC_STATE_CHANGE);
33918
34630
  this._transCoreEvent(EXTEND_EVENTS.RTC_NETWORK);
34631
+ this._transCoreEvent(EXTEND_EVENTS.RTC_FIRST_FRAME);
33919
34632
  }
33920
34633
  }, {
33921
34634
  key: "_transErrorEvent",
33922
34635
  value: function _transErrorEvent() {
33923
- var _this3 = this;
33924
- this._rts.on(EVENT$2.ERROR, function(err) {
34636
+ var _this$_rts16, _this3 = this, _this$_rts17;
34637
+ (_this$_rts16 = this._rts) === null || _this$_rts16 === void 0 ? void 0 : _this$_rts16.on(EVENT$2.ERROR, function(err) {
33925
34638
  if (!_this3.player)
33926
34639
  return;
33927
34640
  var e4 = new Errors(_this3.player, err);
33928
- var _this3$_rtsOpts = _this3._rtsOpts, backupConstruct = _this3$_rtsOpts.backupConstruct, backupURL = _this3$_rtsOpts.backupURL;
34641
+ var _ref6 = _this3._rtsOpts || {}, backupConstruct = _ref6.backupConstruct, backupURL = _ref6.backupURL;
33929
34642
  if (backupURL) {
33930
34643
  var _player$video;
33931
34644
  var player = _this3.player;
@@ -33945,6 +34658,7 @@ var RtsPlugin = /* @__PURE__ */ function(_BasePlugin) {
33945
34658
  });
33946
34659
  player.unRegisterPlugin("rts");
33947
34660
  player.switchURL = _this3._originSwitchFn;
34661
+ player.retry = _this3._originRetry;
33948
34662
  _this3._rts = null;
33949
34663
  player.rts = null;
33950
34664
  if ((_player$video = player.video) !== null && _player$video !== void 0 && _player$video.srcObject) {
@@ -33961,7 +34675,7 @@ var RtsPlugin = /* @__PURE__ */ function(_BasePlugin) {
33961
34675
  }
33962
34676
  _this3.player.emit(ERROR$1, e4);
33963
34677
  });
33964
- this._rts.on("waiting", function() {
34678
+ (_this$_rts17 = this._rts) === null || _this$_rts17 === void 0 ? void 0 : _this$_rts17.on("waiting", function() {
33965
34679
  var _this3$player;
33966
34680
  (_this3$player = _this3.player) === null || _this3$player === void 0 ? void 0 : _this3$player.emit("waiting");
33967
34681
  });
@@ -33969,8 +34683,8 @@ var RtsPlugin = /* @__PURE__ */ function(_BasePlugin) {
33969
34683
  }, {
33970
34684
  key: "_transCoreEvent",
33971
34685
  value: function _transCoreEvent(eventName) {
33972
- var _this4 = this;
33973
- this._rts.on(eventName, function(e4) {
34686
+ var _this$_rts18, _this4 = this;
34687
+ (_this$_rts18 = this._rts) === null || _this$_rts18 === void 0 ? void 0 : _this$_rts18.on(eventName, function(e4) {
33974
34688
  if (_this4.player) {
33975
34689
  _this4.player.emit("core_event", _objectSpread2$b(_objectSpread2$b({}, e4), {}, {
33976
34690
  eventName
@@ -34008,7 +34722,8 @@ var RtsPlugin = /* @__PURE__ */ function(_BasePlugin) {
34008
34722
  case 3:
34009
34723
  res = _context.sent;
34010
34724
  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);
34725
+ var _x$config;
34726
+ return x2.codec === "H264" && (!targetProfileLevel || ((_x$config = x2.config) === null || _x$config === void 0 ? void 0 : _x$config.indexOf(targetProfileLevel)) !== -1);
34012
34727
  }).length;
34013
34728
  if (hasH264) {
34014
34729
  _context.next = 10;
@@ -34019,7 +34734,8 @@ var RtsPlugin = /* @__PURE__ */ function(_BasePlugin) {
34019
34734
  case 8:
34020
34735
  res1 = _context.sent;
34021
34736
  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);
34737
+ var _x$config2;
34738
+ return x2.codec === "H264" && (!targetProfileLevel || ((_x$config2 = x2.config) === null || _x$config2 === void 0 ? void 0 : _x$config2.indexOf(targetProfileLevel)) !== -1);
34023
34739
  }).length;
34024
34740
  case 10:
34025
34741
  return _context.abrupt("return", !!hasH264);