@volcengine/veplayer-plugin 2.4.2-rc.4 → 2.4.3-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/esm/index.development.js +2124 -1344
  2. package/esm/index.production.js +4 -4
  3. package/esm/veplayer.plugin.abr.development.js +71 -3
  4. package/esm/veplayer.plugin.abr.production.js +1 -1
  5. package/esm/veplayer.plugin.drm.development.js +71 -3
  6. package/esm/veplayer.plugin.drm.production.js +1 -1
  7. package/esm/veplayer.plugin.flv.development.js +727 -196
  8. package/esm/veplayer.plugin.flv.production.js +1 -1
  9. package/esm/veplayer.plugin.hls.development.js +1346 -372
  10. package/esm/veplayer.plugin.hls.production.js +1 -1
  11. package/esm/veplayer.plugin.mp4.development.js +73 -5
  12. package/esm/veplayer.plugin.mp4.production.js +1 -1
  13. package/esm/veplayer.plugin.rtm.development.js +189 -778
  14. package/esm/veplayer.plugin.rtm.production.js +1 -1
  15. package/esm/veplayer.plugin.shaka.development.js +72 -4
  16. package/esm/veplayer.plugin.shaka.production.js +1 -1
  17. package/package.json +1 -1
  18. package/umd/veplayer.plugin.abr.development.js +71 -3
  19. package/umd/veplayer.plugin.abr.production.js +1 -1
  20. package/umd/veplayer.plugin.drm.development.js +71 -3
  21. package/umd/veplayer.plugin.drm.production.js +1 -1
  22. package/umd/veplayer.plugin.flv.development.js +727 -196
  23. package/umd/veplayer.plugin.flv.production.js +1 -1
  24. package/umd/veplayer.plugin.hls.development.js +1313 -339
  25. package/umd/veplayer.plugin.hls.production.js +1 -1
  26. package/umd/veplayer.plugin.mp4.development.js +73 -5
  27. package/umd/veplayer.plugin.mp4.production.js +1 -1
  28. package/umd/veplayer.plugin.rtm.development.js +189 -778
  29. package/umd/veplayer.plugin.rtm.production.js +1 -1
  30. package/umd/veplayer.plugin.shaka.development.js +72 -4
  31. package/umd/veplayer.plugin.shaka.production.js +1 -1
@@ -67,10 +67,10 @@ function _regeneratorRuntime$1() {
67
67
  return obj[key] = value;
68
68
  };
69
69
  }
70
- function wrap(innerFn, outerFn, self, tryLocsList) {
70
+ function wrap(innerFn, outerFn, self2, tryLocsList) {
71
71
  var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []);
72
72
  return defineProperty(generator, "_invoke", {
73
- value: makeInvokeMethod(innerFn, self, context)
73
+ value: makeInvokeMethod(innerFn, self2, context)
74
74
  }), generator;
75
75
  }
76
76
  function tryCatch(fn, obj, arg) {
@@ -137,7 +137,7 @@ function _regeneratorRuntime$1() {
137
137
  }
138
138
  });
139
139
  }
140
- function makeInvokeMethod(innerFn, self, context) {
140
+ function makeInvokeMethod(innerFn, self2, context) {
141
141
  var state = "suspendedStart";
142
142
  return function(method, arg) {
143
143
  if ("executing" === state)
@@ -166,7 +166,7 @@ function _regeneratorRuntime$1() {
166
166
  } else
167
167
  "return" === context.method && context.abrupt("return", context.arg);
168
168
  state = "executing";
169
- var record = tryCatch(innerFn, self, context);
169
+ var record = tryCatch(innerFn, self2, context);
170
170
  if ("normal" === record.type) {
171
171
  if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel)
172
172
  continue;
@@ -248,9 +248,9 @@ function _regeneratorRuntime$1() {
248
248
  };
249
249
  }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function() {
250
250
  return this;
251
- }), exports.AsyncIterator = AsyncIterator, exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {
251
+ }), exports.AsyncIterator = AsyncIterator, exports.async = function(innerFn, outerFn, self2, tryLocsList, PromiseImpl) {
252
252
  void 0 === PromiseImpl && (PromiseImpl = Promise);
253
- var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);
253
+ var iter = new AsyncIterator(wrap(innerFn, outerFn, self2, tryLocsList), PromiseImpl);
254
254
  return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function(result) {
255
255
  return result.done ? result.value : iter.next();
256
256
  });
@@ -385,9 +385,9 @@ function asyncGeneratorStep$1(gen, resolve, reject, _next, _throw, key, arg) {
385
385
  }
386
386
  function _asyncToGenerator$1(fn) {
387
387
  return function() {
388
- var self = this, args = arguments;
388
+ var self2 = this, args = arguments;
389
389
  return new Promise(function(resolve, reject) {
390
- var gen = fn.apply(self, args);
390
+ var gen = fn.apply(self2, args);
391
391
  function _next(value) {
392
392
  asyncGeneratorStep$1(gen, resolve, reject, _next, _throw, "next", value);
393
393
  }
@@ -514,19 +514,19 @@ function _objectWithoutProperties$1(source, excluded) {
514
514
  }
515
515
  return target;
516
516
  }
517
- function _assertThisInitialized$2(self) {
518
- if (self === void 0) {
517
+ function _assertThisInitialized$2(self2) {
518
+ if (self2 === void 0) {
519
519
  throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
520
520
  }
521
- return self;
521
+ return self2;
522
522
  }
523
- function _possibleConstructorReturn$2(self, call) {
523
+ function _possibleConstructorReturn$2(self2, call) {
524
524
  if (call && (typeof call === "object" || typeof call === "function")) {
525
525
  return call;
526
526
  } else if (call !== void 0) {
527
527
  throw new TypeError("Derived constructors may only return object or undefined");
528
528
  }
529
- return _assertThisInitialized$2(self);
529
+ return _assertThisInitialized$2(self2);
530
530
  }
531
531
  function _createSuper$2(Derived) {
532
532
  var hasNativeReflectConstruct = _isNativeReflectConstruct$2();
@@ -1640,7 +1640,7 @@ util.getCurrentTimeByOffset = function(offsetTime, segments) {
1640
1640
  }
1641
1641
  return offsetTime;
1642
1642
  };
1643
- var version = "3.0.19-rc.0";
1643
+ var version = "3.0.20-rc.6";
1644
1644
  var ERROR_MAP = {
1645
1645
  1: 5101,
1646
1646
  2: 5102,
@@ -1749,8 +1749,7 @@ function hook(hookName, handler) {
1749
1749
  }
1750
1750
  if (this.__hooks && this.__hooks[hookName]) {
1751
1751
  try {
1752
- var _this$__hooks$hookNam;
1753
- var preRet = (_this$__hooks$hookNam = this.__hooks[hookName]).call.apply(_this$__hooks$hookNam, [this, this].concat(Array.prototype.slice.call(arguments)));
1752
+ var preRet = runHooks(this, hookName, handler);
1754
1753
  if (preRet) {
1755
1754
  if (preRet.then) {
1756
1755
  preRet.then(function(isContinue) {
@@ -1775,6 +1774,19 @@ function hook(hookName, handler) {
1775
1774
  }
1776
1775
  }.bind(this);
1777
1776
  }
1777
+ function findHookIndex(hookName, handler) {
1778
+ var __hooks = this.__hooks;
1779
+ if (!__hooks || !Array.isArray(__hooks[hookName])) {
1780
+ return -1;
1781
+ }
1782
+ var hookHandlers = __hooks[hookName];
1783
+ for (var i = 0; i < hookHandlers.length; i++) {
1784
+ if (hookHandlers[i] === handler) {
1785
+ return i;
1786
+ }
1787
+ }
1788
+ return -1;
1789
+ }
1778
1790
  function useHooks(hookName, handler) {
1779
1791
  var __hooks = this.__hooks;
1780
1792
  if (!__hooks) {
@@ -1784,7 +1796,12 @@ function useHooks(hookName, handler) {
1784
1796
  console.warn("has no supported hook which name [".concat(hookName, "]"));
1785
1797
  return false;
1786
1798
  }
1787
- __hooks && (__hooks[hookName] = handler);
1799
+ if (!Array.isArray(__hooks[hookName])) {
1800
+ __hooks[hookName] = [];
1801
+ }
1802
+ if (findHookIndex.call(this, hookName, handler) === -1) {
1803
+ __hooks[hookName].push(handler);
1804
+ }
1788
1805
  return true;
1789
1806
  }
1790
1807
  function removeHooks(hookName, handler) {
@@ -1792,6 +1809,13 @@ function removeHooks(hookName, handler) {
1792
1809
  if (!__hooks) {
1793
1810
  return;
1794
1811
  }
1812
+ if (Array.isArray(__hooks[hookName])) {
1813
+ var hooks = __hooks[hookName];
1814
+ var index = findHookIndex.call(this, hookName, handler);
1815
+ if (index !== -1) {
1816
+ hooks.splice(index, 1);
1817
+ }
1818
+ }
1795
1819
  delete __hooks[hookName];
1796
1820
  }
1797
1821
  function hooksDescriptor(instance) {
@@ -1813,6 +1837,38 @@ function hooksDescriptor(instance) {
1813
1837
  function delHooksDescriptor(instance) {
1814
1838
  instance.__hooks = null;
1815
1839
  }
1840
+ function runHooks(obj, hookName, handler) {
1841
+ for (var _len5 = arguments.length, args = new Array(_len5 > 3 ? _len5 - 3 : 0), _key5 = 3; _key5 < _len5; _key5++) {
1842
+ args[_key5 - 3] = arguments[_key5];
1843
+ }
1844
+ if (obj.__hooks && Array.isArray(obj.__hooks[hookName])) {
1845
+ var hooks = obj.__hooks[hookName];
1846
+ var index = -1;
1847
+ var runHooksRecursive = function runHooksRecursive2(obj2, hookName2, handler2) {
1848
+ for (var _len6 = arguments.length, args2 = new Array(_len6 > 3 ? _len6 - 3 : 0), _key6 = 3; _key6 < _len6; _key6++) {
1849
+ args2[_key6 - 3] = arguments[_key6];
1850
+ }
1851
+ index++;
1852
+ if (hooks.length === 0 || index === hooks.length) {
1853
+ return handler2.call.apply(handler2, [obj2, obj2].concat(args2));
1854
+ }
1855
+ var hook2 = hooks[index];
1856
+ var ret = hook2.call.apply(hook2, [obj2, obj2].concat(args2));
1857
+ if (ret && ret.then) {
1858
+ return ret.then(function(data) {
1859
+ return data === false ? null : runHooksRecursive2.apply(void 0, [obj2, hookName2, handler2].concat(args2));
1860
+ }).catch(function(e) {
1861
+ console.warn("[runHooks]".concat(hookName2, " reject"), e.message);
1862
+ });
1863
+ } else if (ret !== false) {
1864
+ return runHooksRecursive2.apply(void 0, [obj2, hookName2, handler2].concat(args2));
1865
+ }
1866
+ };
1867
+ return runHooksRecursive.apply(void 0, [obj, hookName, handler].concat(args));
1868
+ } else {
1869
+ return handler.call.apply(handler, [obj, obj].concat(args));
1870
+ }
1871
+ }
1816
1872
  function showErrorMsg(pluginName, msg) {
1817
1873
  XG_DEBUG.logError("[".concat(pluginName, "] event or callback cant be undefined or null when call ").concat(msg));
1818
1874
  }
@@ -2052,6 +2108,18 @@ var BasePlugin = /* @__PURE__ */ function() {
2052
2108
  }
2053
2109
  }
2054
2110
  }
2111
+ }, {
2112
+ key: "defineMethod",
2113
+ value: function defineMethod(Obj, map) {
2114
+ for (var key in map) {
2115
+ if (Object.prototype.hasOwnProperty.call(map, key) && typeof map[key] === "function") {
2116
+ Object.defineProperty(Obj, key, {
2117
+ configurable: true,
2118
+ value: map[key]
2119
+ });
2120
+ }
2121
+ }
2122
+ }
2055
2123
  }, {
2056
2124
  key: "defaultConfig",
2057
2125
  get: function get() {
@@ -2108,10 +2176,10 @@ function _regeneratorRuntime() {
2108
2176
  return obj[key] = value;
2109
2177
  };
2110
2178
  }
2111
- function wrap(innerFn, outerFn, self, tryLocsList) {
2179
+ function wrap(innerFn, outerFn, self2, tryLocsList) {
2112
2180
  var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []);
2113
2181
  return defineProperty(generator, "_invoke", {
2114
- value: makeInvokeMethod(innerFn, self, context)
2182
+ value: makeInvokeMethod(innerFn, self2, context)
2115
2183
  }), generator;
2116
2184
  }
2117
2185
  function tryCatch(fn, obj, arg) {
@@ -2178,7 +2246,7 @@ function _regeneratorRuntime() {
2178
2246
  }
2179
2247
  });
2180
2248
  }
2181
- function makeInvokeMethod(innerFn, self, context) {
2249
+ function makeInvokeMethod(innerFn, self2, context) {
2182
2250
  var state = "suspendedStart";
2183
2251
  return function(method, arg) {
2184
2252
  if ("executing" === state)
@@ -2207,7 +2275,7 @@ function _regeneratorRuntime() {
2207
2275
  } else
2208
2276
  "return" === context.method && context.abrupt("return", context.arg);
2209
2277
  state = "executing";
2210
- var record = tryCatch(innerFn, self, context);
2278
+ var record = tryCatch(innerFn, self2, context);
2211
2279
  if ("normal" === record.type) {
2212
2280
  if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel)
2213
2281
  continue;
@@ -2289,9 +2357,9 @@ function _regeneratorRuntime() {
2289
2357
  };
2290
2358
  }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function() {
2291
2359
  return this;
2292
- }), exports.AsyncIterator = AsyncIterator, exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {
2360
+ }), exports.AsyncIterator = AsyncIterator, exports.async = function(innerFn, outerFn, self2, tryLocsList, PromiseImpl) {
2293
2361
  void 0 === PromiseImpl && (PromiseImpl = Promise);
2294
- var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);
2362
+ var iter = new AsyncIterator(wrap(innerFn, outerFn, self2, tryLocsList), PromiseImpl);
2295
2363
  return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function(result) {
2296
2364
  return result.done ? result.value : iter.next();
2297
2365
  });
@@ -2426,9 +2494,9 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
2426
2494
  }
2427
2495
  function _asyncToGenerator(fn) {
2428
2496
  return function() {
2429
- var self = this, args = arguments;
2497
+ var self2 = this, args = arguments;
2430
2498
  return new Promise(function(resolve, reject) {
2431
- var gen = fn.apply(self, args);
2499
+ var gen = fn.apply(self2, args);
2432
2500
  function _next(value) {
2433
2501
  asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
2434
2502
  }
@@ -2602,19 +2670,19 @@ function _objectWithoutProperties(source, excluded) {
2602
2670
  }
2603
2671
  return target;
2604
2672
  }
2605
- function _assertThisInitialized$1(self) {
2606
- if (self === void 0) {
2673
+ function _assertThisInitialized$1(self2) {
2674
+ if (self2 === void 0) {
2607
2675
  throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
2608
2676
  }
2609
- return self;
2677
+ return self2;
2610
2678
  }
2611
- function _possibleConstructorReturn$1(self, call) {
2679
+ function _possibleConstructorReturn$1(self2, call) {
2612
2680
  if (call && (typeof call === "object" || typeof call === "function")) {
2613
2681
  return call;
2614
2682
  } else if (call !== void 0) {
2615
2683
  throw new TypeError("Derived constructors may only return object or undefined");
2616
2684
  }
2617
- return _assertThisInitialized$1(self);
2685
+ return _assertThisInitialized$1(self2);
2618
2686
  }
2619
2687
  function _createSuper$1(Derived) {
2620
2688
  var hasNativeReflectConstruct = _isNativeReflectConstruct$1();
@@ -2674,7 +2742,7 @@ function _arrayLikeToArray$1(arr, len) {
2674
2742
  arr2[i] = arr[i];
2675
2743
  return arr2;
2676
2744
  }
2677
- function _createForOfIteratorHelper(o, allowArrayLike) {
2745
+ function _createForOfIteratorHelper$1(o, allowArrayLike) {
2678
2746
  var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
2679
2747
  if (!it) {
2680
2748
  if (Array.isArray(o) || (it = _unsupportedIterableToArray$1(o)) || allowArrayLike && o && typeof o.length === "number") {
@@ -2862,6 +2930,21 @@ var Buffer$1 = /* @__PURE__ */ function() {
2862
2930
  length: Buffer2.totalLength && Buffer2.totalLength(buffers)
2863
2931
  };
2864
2932
  }
2933
+ }, {
2934
+ key: "isBuffered",
2935
+ value: function isBuffered(media, pos) {
2936
+ if (media) {
2937
+ var buffered = Buffer2.get(media);
2938
+ if (buffered !== null && buffered !== void 0 && buffered.length) {
2939
+ for (var i = 0; i < buffered.length; i++) {
2940
+ if (pos >= buffered.start(i) && pos <= buffered.end(i)) {
2941
+ return true;
2942
+ }
2943
+ }
2944
+ }
2945
+ }
2946
+ return false;
2947
+ }
2865
2948
  }]);
2866
2949
  return Buffer2;
2867
2950
  }();
@@ -3014,7 +3097,7 @@ var Logger$2 = /* @__PURE__ */ function() {
3014
3097
  this.logCache.apply(this, [LogCacheLevel.DEBUG].concat(args));
3015
3098
  if (Logger2.disabled)
3016
3099
  return;
3017
- (_console = console).debug.apply(_console, [this._prefix, nowTime$1()].concat(args));
3100
+ (_console = console).debug.apply(_console, ["[".concat(nowTime$1(), "]"), this._prefix].concat(args));
3018
3101
  }
3019
3102
  }, {
3020
3103
  key: "log",
@@ -3026,7 +3109,7 @@ var Logger$2 = /* @__PURE__ */ function() {
3026
3109
  this.logCache.apply(this, [LogCacheLevel.LOG].concat(args));
3027
3110
  if (Logger2.disabled)
3028
3111
  return;
3029
- (_console2 = console).log.apply(_console2, [this._prefix, nowTime$1()].concat(args));
3112
+ (_console2 = console).log.apply(_console2, ["[".concat(nowTime$1(), "]"), this._prefix].concat(args));
3030
3113
  }
3031
3114
  }, {
3032
3115
  key: "warn",
@@ -3038,7 +3121,7 @@ var Logger$2 = /* @__PURE__ */ function() {
3038
3121
  this.logCache.apply(this, [LogCacheLevel.WARN].concat(args));
3039
3122
  if (Logger2.disabled)
3040
3123
  return;
3041
- (_console3 = console).warn.apply(_console3, [this._prefix, nowTime$1()].concat(args));
3124
+ (_console3 = console).warn.apply(_console3, ["[".concat(nowTime$1(), "]"), this._prefix].concat(args));
3042
3125
  }
3043
3126
  }, {
3044
3127
  key: "error",
@@ -3050,7 +3133,7 @@ var Logger$2 = /* @__PURE__ */ function() {
3050
3133
  this.logCache.apply(this, [LogCacheLevel.ERROR].concat(args));
3051
3134
  if (Logger2.disabled)
3052
3135
  return;
3053
- (_console4 = console).error.apply(_console4, [this._prefix, nowTime$1()].concat(args));
3136
+ (_console4 = console).error.apply(_console4, ["[".concat(nowTime$1(), "]"), this._prefix].concat(args));
3054
3137
  }
3055
3138
  }, {
3056
3139
  key: "logCache",
@@ -3065,7 +3148,7 @@ var Logger$2 = /* @__PURE__ */ function() {
3065
3148
  var finLogText = logText.map(function(item) {
3066
3149
  return logable(item);
3067
3150
  });
3068
- text = this._prefix + nowTime$1() + JSON.stringify(finLogText);
3151
+ text = "[".concat(nowTime$1(), "]") + this._prefix + JSON.stringify(finLogText);
3069
3152
  } catch (e) {
3070
3153
  return;
3071
3154
  }
@@ -3981,8 +4064,8 @@ function createResponse(data, done, response, contentLength, age, startTime, fir
3981
4064
  response
3982
4065
  };
3983
4066
  }
3984
- function calculateSpeed(byteLen, millisec) {
3985
- return Math.round(byteLen * 8 * 1e3 / millisec / 1024);
4067
+ function calculateSpeed(byteLen, milliSecond) {
4068
+ return Math.round(byteLen * 8 * 1e3 / milliSecond / 1024);
3986
4069
  }
3987
4070
  var EVENT = {
3988
4071
  ERROR: "error",
@@ -3994,6 +4077,7 @@ var EVENT = {
3994
4077
  SOURCEBUFFER_CREATED: "core.sourcebuffercreated",
3995
4078
  MEDIASOURCE_OPENED: "core.mediasourceopened",
3996
4079
  ANALYZE_DURATION_EXCEEDED: "core.analyzedurationexceeded",
4080
+ APPEND_BUFFER: "core.appendbuffer",
3997
4081
  REMOVE_BUFFER: "core.removebuffer",
3998
4082
  BUFFEREOS: "core.buffereos",
3999
4083
  KEYFRAME: "core.keyframe",
@@ -4766,7 +4850,7 @@ var XhrLoader = /* @__PURE__ */ function(_EventEmitter) {
4766
4850
  value: function _getHeaders(xhr) {
4767
4851
  var headerLines = xhr.getAllResponseHeaders().trim().split("\r\n");
4768
4852
  var headers = {};
4769
- var _iterator = _createForOfIteratorHelper(headerLines), _step;
4853
+ var _iterator = _createForOfIteratorHelper$1(headerLines), _step;
4770
4854
  try {
4771
4855
  for (_iterator.s(); !(_step = _iterator.n()).done; ) {
4772
4856
  var header = _step.value;
@@ -4788,7 +4872,7 @@ var XhrLoader = /* @__PURE__ */ function(_EventEmitter) {
4788
4872
  }]);
4789
4873
  return XhrLoader2;
4790
4874
  }(EventEmitter);
4791
- var _excluded$1 = ["retry", "retryDelay", "onRetryError", "transformError"];
4875
+ var _excluded$2 = ["retry", "retryDelay", "onRetryError", "transformError"];
4792
4876
  var Task = /* @__PURE__ */ function() {
4793
4877
  function Task2(type, config) {
4794
4878
  _classCallCheck$1(this, Task2);
@@ -4808,7 +4892,7 @@ var Task = /* @__PURE__ */ function() {
4808
4892
  key: "exec",
4809
4893
  value: function exec() {
4810
4894
  var _this = this;
4811
- var _this$_config = this._config, retry = _this$_config.retry, retryDelay = _this$_config.retryDelay, onRetryError = _this$_config.onRetryError, transformError = _this$_config.transformError, rest = _objectWithoutProperties(_this$_config, _excluded$1);
4895
+ var _this$_config = this._config, retry = _this$_config.retry, retryDelay = _this$_config.retryDelay, onRetryError = _this$_config.onRetryError, transformError = _this$_config.transformError, rest = _objectWithoutProperties(_this$_config, _excluded$2);
4812
4896
  var request = /* @__PURE__ */ function() {
4813
4897
  var _ref = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee() {
4814
4898
  var response, error, isRetry;
@@ -5533,19 +5617,19 @@ function _isNativeReflectConstruct() {
5533
5617
  return false;
5534
5618
  }
5535
5619
  }
5536
- function _assertThisInitialized(self) {
5537
- if (self === void 0) {
5620
+ function _assertThisInitialized(self2) {
5621
+ if (self2 === void 0) {
5538
5622
  throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
5539
5623
  }
5540
- return self;
5624
+ return self2;
5541
5625
  }
5542
- function _possibleConstructorReturn(self, call) {
5626
+ function _possibleConstructorReturn(self2, call) {
5543
5627
  if (call && (typeof call === "object" || typeof call === "function")) {
5544
5628
  return call;
5545
5629
  } else if (call !== void 0) {
5546
5630
  throw new TypeError("Derived constructors may only return object or undefined");
5547
5631
  }
5548
- return _assertThisInitialized(self);
5632
+ return _assertThisInitialized(self2);
5549
5633
  }
5550
5634
  function _createSuper(Derived) {
5551
5635
  var hasNativeReflectConstruct = _isNativeReflectConstruct();
@@ -5604,6 +5688,60 @@ function _nonIterableSpread() {
5604
5688
  function _nonIterableRest() {
5605
5689
  throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
5606
5690
  }
5691
+ function _createForOfIteratorHelper(o, allowArrayLike) {
5692
+ var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
5693
+ if (!it) {
5694
+ if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
5695
+ if (it)
5696
+ o = it;
5697
+ var i = 0;
5698
+ var F = function() {
5699
+ };
5700
+ return {
5701
+ s: F,
5702
+ n: function() {
5703
+ if (i >= o.length)
5704
+ return {
5705
+ done: true
5706
+ };
5707
+ return {
5708
+ done: false,
5709
+ value: o[i++]
5710
+ };
5711
+ },
5712
+ e: function(e) {
5713
+ throw e;
5714
+ },
5715
+ f: F
5716
+ };
5717
+ }
5718
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
5719
+ }
5720
+ var normalCompletion = true, didErr = false, err;
5721
+ return {
5722
+ s: function() {
5723
+ it = it.call(o);
5724
+ },
5725
+ n: function() {
5726
+ var step = it.next();
5727
+ normalCompletion = step.done;
5728
+ return step;
5729
+ },
5730
+ e: function(e) {
5731
+ didErr = true;
5732
+ err = e;
5733
+ },
5734
+ f: function() {
5735
+ try {
5736
+ if (!normalCompletion && it.return != null)
5737
+ it.return();
5738
+ } finally {
5739
+ if (didErr)
5740
+ throw err;
5741
+ }
5742
+ }
5743
+ };
5744
+ }
5607
5745
  function _toPrimitive(input, hint) {
5608
5746
  if (typeof input !== "object" || input === null)
5609
5747
  return input;
@@ -5626,13 +5764,15 @@ var TrackType = {
5626
5764
  METADATA: "metadata"
5627
5765
  };
5628
5766
  var VideoCodecType = {
5767
+ AV1: "av1",
5629
5768
  AVC: "avc",
5630
5769
  HEVC: "hevc"
5631
5770
  };
5632
5771
  var AudioCodecType = {
5633
5772
  AAC: "aac",
5634
5773
  G711PCMA: "g7110a",
5635
- G711PCMU: "g7110m"
5774
+ G711PCMU: "g7110m",
5775
+ OPUS: "opus"
5636
5776
  };
5637
5777
  var WarningType = {
5638
5778
  LARGE_AV_SHIFT: "LARGE_AV_SHIFT",
@@ -5672,6 +5812,7 @@ var VideoTrack = /* @__PURE__ */ function() {
5672
5812
  _defineProperty(this, "isVideoEncryption", false);
5673
5813
  _defineProperty(this, "isAudioEncryption", false);
5674
5814
  _defineProperty(this, "isVideo", true);
5815
+ _defineProperty(this, "lastKeyFrameDts", 0);
5675
5816
  _defineProperty(this, "kid", null);
5676
5817
  _defineProperty(this, "pssh", null);
5677
5818
  _defineProperty(this, "ext", void 0);
@@ -5714,6 +5855,9 @@ var VideoTrack = /* @__PURE__ */ function() {
5714
5855
  }, {
5715
5856
  key: "exist",
5716
5857
  value: function exist() {
5858
+ if (/av01/.test(this.codec)) {
5859
+ return true;
5860
+ }
5717
5861
  return !!(this.pps.length && this.sps.length && this.codec);
5718
5862
  }
5719
5863
  }, {
@@ -5777,7 +5921,7 @@ var AudioTrack = /* @__PURE__ */ function() {
5777
5921
  }, {
5778
5922
  key: "exist",
5779
5923
  value: function exist() {
5780
- return !!(this.sampleRate && this.channelCount && this.codec && this.codecType === AudioCodecType.AAC);
5924
+ return !!(this.sampleRate && this.channelCount && this.codec && (this.codecType === AudioCodecType.AAC || this.codecType === AudioCodecType.G711PCMA || this.codecType === AudioCodecType.G711PCMU || this.codecType === AudioCodecType.OPUS));
5781
5925
  }
5782
5926
  }, {
5783
5927
  key: "hasSample",
@@ -5982,7 +6126,7 @@ var AAC = /* @__PURE__ */ function() {
5982
6126
  continue;
5983
6127
  }
5984
6128
  frameLength = (data[i + 3] & 3) << 11 | data[i + 4] << 3 | (data[i + 5] & 224) >> 5;
5985
- if (len - i < frameLength)
6129
+ if (!frameLength || len - i < frameLength)
5986
6130
  break;
5987
6131
  protectionSkipBytes = (~data[i + 1] & 1) * 2;
5988
6132
  frames.push({
@@ -6176,6 +6320,15 @@ function parse2(a) {
6176
6320
  return parseInt(item, 16);
6177
6321
  });
6178
6322
  }
6323
+ function combineToFloat(integer, decimal) {
6324
+ return Number(integer + "." + decimal);
6325
+ }
6326
+ function toDegree(matrix) {
6327
+ if (matrix.length < 5)
6328
+ return 0;
6329
+ var scaled0 = Math.hypot(matrix[0], matrix[3]), scaled1 = Math.hypot(matrix[1], matrix[4]);
6330
+ return 0 === scaled0 || 0 === scaled1 ? 0 : 180 * Math.atan2(matrix[1] / scaled1, matrix[0] / scaled0) / Math.PI;
6331
+ }
6179
6332
  var NALu = /* @__PURE__ */ function() {
6180
6333
  function NALu2() {
6181
6334
  _classCallCheck(this, NALu2);
@@ -6838,13 +6991,16 @@ var MAX_SILENT_FRAME_DURATION = 9e4;
6838
6991
  var AUDIO_EXCETION_LOG_EMIT_DURATION = 5 * 9e4;
6839
6992
  var MAX_VIDEO_FRAME_DURATION = 9e4;
6840
6993
  var MAX_DTS_DELTA_WITH_NEXT_CHUNK = 9e4 / 2;
6994
+ var LARGE_AV_FIRST_FRAME_FORCE_FIX_THRESHOLD = 9e4 * 5;
6841
6995
  var TsFixer = /* @__PURE__ */ function() {
6842
- function TsFixer2(videoTrack, audioTrack, metadataTrack) {
6996
+ function TsFixer2(videoTrack, audioTrack, metadataTrack, fixerConfig) {
6843
6997
  _classCallCheck(this, TsFixer2);
6844
6998
  this.videoTrack = videoTrack;
6845
6999
  this.audioTrack = audioTrack;
6846
7000
  this.metadataTrack = metadataTrack;
6847
7001
  this._baseDts = -1;
7002
+ this._baseVideoDts = -1;
7003
+ this._baseAudioDts = -1;
6848
7004
  this._baseDtsInited = false;
6849
7005
  this._audioNextPts = void 0;
6850
7006
  this._videoNextDts = void 0;
@@ -6853,6 +7009,8 @@ var TsFixer = /* @__PURE__ */ function() {
6853
7009
  this._lastAudioExceptionGapDot = 0;
6854
7010
  this._lastAudioExceptionOverlapDot = 0;
6855
7011
  this._lastAudioExceptionLargeGapDot = 0;
7012
+ this._needForceFixLargeGap = fixerConfig === null || fixerConfig === void 0 ? void 0 : fixerConfig.forceFixLargeGap;
7013
+ this._largeGapThreshold = (fixerConfig === null || fixerConfig === void 0 ? void 0 : fixerConfig.largeGapThreshold) || LARGE_AV_FIRST_FRAME_FORCE_FIX_THRESHOLD;
6856
7014
  }
6857
7015
  _createClass(TsFixer2, [{
6858
7016
  key: "fix",
@@ -6880,10 +7038,16 @@ var TsFixer = /* @__PURE__ */ function() {
6880
7038
  if (discontinuity) {
6881
7039
  this._calculateBaseDts(this.audioTrack, this.videoTrack);
6882
7040
  this._baseDts -= startTime;
7041
+ this._baseAudioDts -= startTime;
7042
+ this._baseVideoDts -= startTime;
6883
7043
  }
6884
7044
  if (!contiguous) {
6885
7045
  this._videoNextDts = vaDelta > 0 ? startTime + vaDelta : startTime;
6886
7046
  this._audioNextPts = vaDelta > 0 ? startTime : startTime - vaDelta;
7047
+ if (this._needForceFixLargeGap) {
7048
+ this._videoNextDts = 0;
7049
+ this._audioNextPts = 0;
7050
+ }
6887
7051
  var vDeltaToNextDts = firstVideoSample ? firstVideoSample.dts - this._baseDts - this._videoNextDts : 0;
6888
7052
  var aDeltaToNextDts = firstAudioSample ? firstAudioSample.pts - this._baseDts - this._audioNextPts : 0;
6889
7053
  if (Math.abs(vDeltaToNextDts || aDeltaToNextDts) > MAX_VIDEO_FRAME_DURATION) {
@@ -6916,8 +7080,8 @@ var TsFixer = /* @__PURE__ */ function() {
6916
7080
  if (!samples.length)
6917
7081
  return;
6918
7082
  samples.forEach(function(x) {
6919
- x.dts -= _this2._baseDts;
6920
- x.pts -= _this2._baseDts;
7083
+ x.dts -= _this2._needForceFixLargeGap ? _this2._baseVideoDts : _this2._baseDts;
7084
+ x.pts -= _this2._needForceFixLargeGap ? _this2._baseVideoDts : _this2._baseDts;
6921
7085
  });
6922
7086
  if (this._videoNextDts === void 0) {
6923
7087
  var samp0 = samples[0];
@@ -7010,7 +7174,7 @@ var TsFixer = /* @__PURE__ */ function() {
7010
7174
  if (!samples.length)
7011
7175
  return;
7012
7176
  samples.forEach(function(x) {
7013
- x.pts -= _this3._baseDts;
7177
+ x.pts -= _this3._needForceFixLargeGap ? _this3._baseAudioDts : _this3._baseDts;
7014
7178
  x.dts = x.pts;
7015
7179
  });
7016
7180
  this._doFixAudioInternal(audioTrack, samples, 9e4);
@@ -7027,12 +7191,15 @@ var TsFixer = /* @__PURE__ */ function() {
7027
7191
  var videoBaseDts = Infinity;
7028
7192
  if (audioSamps.length) {
7029
7193
  audioTrack.baseDts = audioBasePts = audioSamps[0].pts;
7194
+ this._baseAudioDts = audioBasePts;
7030
7195
  }
7031
7196
  if (videoSamps.length) {
7032
7197
  videoTrack.baseDts = videoBaseDts = videoSamps[0].dts;
7198
+ this._baseVideoDts = videoBaseDts;
7033
7199
  }
7034
7200
  this._baseDts = Math.min(audioBasePts, videoBaseDts);
7035
7201
  var delta = videoBaseDts - audioBasePts;
7202
+ var largeGap = false;
7036
7203
  if (Number.isFinite(delta) && Math.abs(delta) > LARGE_AV_FIRST_FRAME_GAP) {
7037
7204
  videoTrack.warnings.push({
7038
7205
  type: WarningType.LARGE_AV_SHIFT,
@@ -7042,6 +7209,16 @@ var TsFixer = /* @__PURE__ */ function() {
7042
7209
  delta
7043
7210
  });
7044
7211
  }
7212
+ if (Number.isFinite(delta) && Math.abs(delta) > this._largeGapThreshold * MAX_SILENT_FRAME_DURATION) {
7213
+ largeGap = true;
7214
+ }
7215
+ if (!this._baseDtsInited) {
7216
+ if (largeGap && this._needForceFixLargeGap) {
7217
+ this._needForceFixLargeGap = true;
7218
+ } else {
7219
+ this._needForceFixLargeGap = false;
7220
+ }
7221
+ }
7045
7222
  this._baseDtsInited = true;
7046
7223
  return true;
7047
7224
  }
@@ -7135,6 +7312,7 @@ var TsFixer = /* @__PURE__ */ function() {
7135
7312
  var logger$4 = new Logger$1("TsDemuxer");
7136
7313
  var TsDemuxer = /* @__PURE__ */ function() {
7137
7314
  function TsDemuxer2(videoTrack, audioTrack, metadataTrack) {
7315
+ var fixerConfig = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : {};
7138
7316
  _classCallCheck(this, TsDemuxer2);
7139
7317
  _defineProperty(this, "_pmtId", -1);
7140
7318
  _defineProperty(this, "_remainingPacketData", null);
@@ -7144,7 +7322,7 @@ var TsDemuxer = /* @__PURE__ */ function() {
7144
7322
  this.videoTrack = videoTrack || new VideoTrack();
7145
7323
  this.audioTrack = audioTrack || new AudioTrack();
7146
7324
  this.metadataTrack = metadataTrack || new MetadataTrack();
7147
- this._fixer = new TsFixer(this.videoTrack, this.audioTrack, this.metadataTrack);
7325
+ this._fixer = new TsFixer(this.videoTrack, this.audioTrack, this.metadataTrack, fixerConfig);
7148
7326
  }
7149
7327
  _createClass(TsDemuxer2, [{
7150
7328
  key: "demux",
@@ -7491,6 +7669,207 @@ var TsDemuxer = /* @__PURE__ */ function() {
7491
7669
  }]);
7492
7670
  return TsDemuxer2;
7493
7671
  }();
7672
+ var ByteReader = /* @__PURE__ */ function() {
7673
+ function ByteReader2(buf, offset, len) {
7674
+ _classCallCheck(this, ByteReader2);
7675
+ this.dv = new DataView(buf);
7676
+ this.start = this.offset = offset || this.dv.byteOffset;
7677
+ this.end = len ? this.start + len : this.start + this.dv.byteLength;
7678
+ }
7679
+ _createClass(ByteReader2, [{
7680
+ key: "buffer",
7681
+ get: function get() {
7682
+ return this.dv.buffer;
7683
+ }
7684
+ }, {
7685
+ key: "unreadLength",
7686
+ get: function get() {
7687
+ return Math.max(this.end - this.offset, 0);
7688
+ }
7689
+ }, {
7690
+ key: "size",
7691
+ get: function get() {
7692
+ return this.end - this.start;
7693
+ }
7694
+ }, {
7695
+ key: "readFloat",
7696
+ value: function readFloat(byteNum) {
7697
+ var val = 0;
7698
+ switch (byteNum) {
7699
+ case 4:
7700
+ val = this.dv.getFloat32(this.offset);
7701
+ break;
7702
+ case 8:
7703
+ val = this.dv.getFloat64(this.offset);
7704
+ break;
7705
+ default:
7706
+ throw new Error("read ".concat(byteNum, "-byte float is not supported"));
7707
+ }
7708
+ this.offset += byteNum;
7709
+ return val;
7710
+ }
7711
+ }, {
7712
+ key: "back",
7713
+ value: function back(byteNum) {
7714
+ this.offset -= byteNum;
7715
+ }
7716
+ }, {
7717
+ key: "skip",
7718
+ value: function skip(byteNum) {
7719
+ this.offset += byteNum;
7720
+ }
7721
+ }, {
7722
+ key: "readInt",
7723
+ value: function readInt(byteNum) {
7724
+ var offset = this.offset;
7725
+ this.offset += byteNum;
7726
+ switch (byteNum) {
7727
+ case 1:
7728
+ return this.dv.getInt8(offset);
7729
+ case 2:
7730
+ return this.dv.getInt16(offset);
7731
+ case 4:
7732
+ return this.dv.getInt32(offset);
7733
+ default:
7734
+ throw new Error("read ".concat(byteNum, "-byte integers is not supported"));
7735
+ }
7736
+ }
7737
+ }, {
7738
+ key: "read",
7739
+ value: function read(byteNum) {
7740
+ var offset = this.offset;
7741
+ this.offset += byteNum;
7742
+ switch (byteNum) {
7743
+ case 1:
7744
+ return this.dv.getUint8(offset);
7745
+ case 2:
7746
+ return this.dv.getUint16(offset);
7747
+ case 3:
7748
+ return (this.dv.getUint16(offset) << 8) + this.dv.getUint8(offset + 2);
7749
+ case 4:
7750
+ return this.dv.getUint32(offset);
7751
+ default:
7752
+ this.back(byteNum - 4);
7753
+ return this.read(byteNum - 4) + this.dv.getUint32(offset) * Math.pow(256, byteNum - 4);
7754
+ }
7755
+ }
7756
+ }, {
7757
+ key: "write",
7758
+ value: function write(byteNum, val) {
7759
+ var offset = this.offset;
7760
+ this.offset += byteNum;
7761
+ switch (byteNum) {
7762
+ case 1:
7763
+ return this.dv.setUint8(offset, val);
7764
+ case 2:
7765
+ return this.dv.setUint16(offset, val);
7766
+ case 3:
7767
+ return this.dv.setUint8(offset, val >>> 16), this.dv.setUint16(offset + 1, 65535 & val);
7768
+ case 4:
7769
+ return this.dv.setUint32(offset, val);
7770
+ default:
7771
+ throw new Error("write ".concat(byteNum, "-byte integers is not supported"));
7772
+ }
7773
+ }
7774
+ }, {
7775
+ key: "readToBuffer",
7776
+ value: function readToBuffer(len) {
7777
+ var buffer;
7778
+ if (this.offset || len) {
7779
+ buffer = this.dv.buffer.slice(this.offset, len ? this.offset + len : this.end);
7780
+ } else {
7781
+ buffer = this.dv.buffer;
7782
+ }
7783
+ this.offset += buffer.byteLength;
7784
+ return buffer;
7785
+ }
7786
+ }, {
7787
+ key: "readToUint8",
7788
+ value: function readToUint8(len) {
7789
+ var uint8 = new Uint8Array(this.dv.buffer, this.offset, len || this.unreadLength);
7790
+ this.offset += uint8.byteLength;
7791
+ return uint8;
7792
+ }
7793
+ }, {
7794
+ key: "readString",
7795
+ value: function readString(len) {
7796
+ var i = 0, str = "";
7797
+ for (; i < len; i++) {
7798
+ str += String.fromCharCode(this.dv.getUint8(this.offset));
7799
+ this.offset++;
7800
+ }
7801
+ return str;
7802
+ }
7803
+ }], [{
7804
+ key: "fromUint8",
7805
+ value: function fromUint8(uint8) {
7806
+ return new ByteReader2(uint8.buffer, uint8.byteOffset, uint8.byteLength);
7807
+ }
7808
+ }, {
7809
+ key: "concatUint8s",
7810
+ value: function concatUint8s(args) {
7811
+ var uint8 = new Uint8Array(args.reduce(function(ret, v) {
7812
+ return ret + v.byteLength;
7813
+ }, 0));
7814
+ var offset = 0;
7815
+ args.forEach(function(v) {
7816
+ uint8.set(v, offset);
7817
+ offset += v.byteLength;
7818
+ });
7819
+ return uint8;
7820
+ }
7821
+ }, {
7822
+ key: "concatUint8",
7823
+ value: function concatUint8() {
7824
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
7825
+ args[_key] = arguments[_key];
7826
+ }
7827
+ return this.concatUint8s(args);
7828
+ }
7829
+ }]);
7830
+ return ByteReader2;
7831
+ }();
7832
+ var BitReader = /* @__PURE__ */ function() {
7833
+ function BitReader2(val, size) {
7834
+ _classCallCheck(this, BitReader2);
7835
+ this.offset = 0;
7836
+ this.val = val;
7837
+ this.size = size;
7838
+ }
7839
+ _createClass(BitReader2, [{
7840
+ key: "skip",
7841
+ value: function skip(len) {
7842
+ this.offset += len;
7843
+ }
7844
+ }, {
7845
+ key: "read",
7846
+ value: function read(len) {
7847
+ var unreadLength = this.size - this.offset - len;
7848
+ if (unreadLength >= 0) {
7849
+ var bits = 0, i = 0;
7850
+ this.offset += len;
7851
+ if (this.size > 31) {
7852
+ for (; i < len; i++) {
7853
+ bits += Math.pow(2, i);
7854
+ }
7855
+ return this.val / Math.pow(2, unreadLength) & bits;
7856
+ } else {
7857
+ for (; i < len; i++) {
7858
+ bits += 1 << i;
7859
+ }
7860
+ return this.val >>> unreadLength & bits;
7861
+ }
7862
+ }
7863
+ throw new Error("the number of the read operation exceeds the total length limit of bits");
7864
+ }
7865
+ }], [{
7866
+ key: "fromByte",
7867
+ value: function fromByte(byte, len) {
7868
+ return new BitReader2(byte.read(len), len << 3);
7869
+ }
7870
+ }]);
7871
+ return BitReader2;
7872
+ }();
7494
7873
  var MP4Parser = /* @__PURE__ */ function() {
7495
7874
  function MP4Parser2() {
7496
7875
  _classCallCheck(this, MP4Parser2);
@@ -7648,18 +8027,36 @@ var MP4Parser = /* @__PURE__ */ function() {
7648
8027
  key: "tkhd",
7649
8028
  value: function tkhd(box) {
7650
8029
  return parseBox(box, true, function(ret, data) {
7651
- var start = 0;
8030
+ var byte = ByteReader.fromUint8(data);
7652
8031
  if (ret.version === 1) {
7653
- ret.trackId = readBig32(data, 16);
7654
- ret.duration = readBig64(data, 24);
7655
- start += 32;
8032
+ byte.read(8);
8033
+ byte.read(8);
8034
+ ret.trackId = byte.read(4);
8035
+ byte.read(4);
8036
+ ret.duration = byte.read(8);
7656
8037
  } else {
7657
- ret.trackId = readBig32(data, 8);
7658
- ret.duration = readBig32(data, 16);
7659
- start += 20;
8038
+ byte.read(4);
8039
+ byte.read(4);
8040
+ ret.trackId = byte.read(4);
8041
+ byte.read(4);
8042
+ ret.duration = byte.read(4);
7660
8043
  }
7661
- ret.width = readBig32(data, start + 52);
7662
- ret.height = readBig32(data, start + 56);
8044
+ byte.skip(16);
8045
+ ret.matrix = [];
8046
+ for (var i = 0; i < 36; i++) {
8047
+ ret.matrix.push(byte.read(1));
8048
+ }
8049
+ byte.back(36);
8050
+ var caculatedMatrix = [];
8051
+ for (var _i = 0, int32; _i < 3; _i++) {
8052
+ caculatedMatrix.push(combineToFloat(byte.readInt(2), byte.readInt(2)));
8053
+ caculatedMatrix.push(combineToFloat(byte.readInt(2), byte.readInt(2)));
8054
+ int32 = byte.readInt(4);
8055
+ caculatedMatrix.push(combineToFloat(int32 >> 30, int32 & 1073741823));
8056
+ }
8057
+ ret.rotation = toDegree(caculatedMatrix);
8058
+ ret.width = byte.read(4);
8059
+ ret.height = byte.read(4);
7663
8060
  });
7664
8061
  }
7665
8062
  }, {
@@ -7789,7 +8186,7 @@ var MP4Parser = /* @__PURE__ */ function() {
7789
8186
  if (ret.version > 0) {
7790
8187
  var numKeyIds = readBig32(data, start);
7791
8188
  start += 4;
7792
- for (var _i = 0; _i < ("" + numKeyIds).length; _i++) {
8189
+ for (var _i2 = 0; _i2 < ("" + numKeyIds).length; _i2++) {
7793
8190
  for (var j = 0; j < 16; j++) {
7794
8191
  var keyId = data[start];
7795
8192
  start += 1;
@@ -7812,6 +8209,8 @@ var MP4Parser = /* @__PURE__ */ function() {
7812
8209
  ret.entryCount = readBig32(data);
7813
8210
  ret.entries = MP4Parser2.findBox(data.subarray(4), [], start + 4).map(function(b) {
7814
8211
  switch (b.type) {
8212
+ case "av01":
8213
+ return MP4Parser2.av01(b);
7815
8214
  case "avc1":
7816
8215
  case "avc2":
7817
8216
  case "avc3":
@@ -7891,6 +8290,69 @@ var MP4Parser = /* @__PURE__ */ function() {
7891
8290
  }
7892
8291
  });
7893
8292
  }
8293
+ }, {
8294
+ key: "colr",
8295
+ value: function colr(box) {
8296
+ return parseBox(box, false, function(ret, data) {
8297
+ var byte = ByteReader.fromUint8(data);
8298
+ ret.data = box.data;
8299
+ ret.colorType = byte.readString(4);
8300
+ if (ret.colorType === "nclx") {
8301
+ ret.colorPrimaries = byte.read(2);
8302
+ ret.transferCharacteristics = byte.read(2);
8303
+ ret.matrixCoefficients = byte.read(2);
8304
+ ret.fullRangeFlag = byte.read(1) >> 7;
8305
+ } else if (ret.colorType === "rICC" || ret.colorType === "prof") {
8306
+ ret.iccProfile = data.readToUint8();
8307
+ }
8308
+ });
8309
+ }
8310
+ }, {
8311
+ key: "av01",
8312
+ value: function av01(box) {
8313
+ return parseBox(box, false, function(ret, data, start) {
8314
+ var bodyStart = parseVisualSampleEntry(ret, data);
8315
+ var bodyData = data.subarray(bodyStart);
8316
+ start += bodyStart;
8317
+ ret.av1C = MP4Parser2.av1C(MP4Parser2.findBox(bodyData, ["av1C"], start)[0]);
8318
+ ret.colr = MP4Parser2.colr(MP4Parser2.findBox(bodyData, ["colr"], start)[0]);
8319
+ });
8320
+ }
8321
+ }, {
8322
+ key: "av1C",
8323
+ value: function av1C(box) {
8324
+ return parseBox(box, false, function(ret, data) {
8325
+ ret.data = box.data;
8326
+ var byte = ByteReader.fromUint8(data);
8327
+ var bit = BitReader.fromByte(byte, 4);
8328
+ ret.marker = bit.read(1);
8329
+ ret.version = bit.read(7);
8330
+ ret.seqProfile = bit.read(3);
8331
+ ret.seqLevelIdx0 = bit.read(5);
8332
+ ret.seqTier0 = bit.read(1);
8333
+ ret.highBitdepth = bit.read(1);
8334
+ ret.twelveBit = bit.read(1);
8335
+ ret.monochrome = bit.read(1);
8336
+ ret.chromaSubsamplingX = bit.read(1);
8337
+ ret.chromaSubsamplingY = bit.read(1);
8338
+ ret.chromaSamplePosition = bit.read(2);
8339
+ ret.reserved = bit.read(3);
8340
+ ret.initialPresentationDelayPresent = bit.read(1);
8341
+ if (ret.initialPresentationDelayPresent) {
8342
+ ret.initialPresentationDelayMinusOne = bit.read(4);
8343
+ } else {
8344
+ ret.initialPresentationDelayMinusOne = 0;
8345
+ }
8346
+ ret.configOBUs = byte.readToUint8();
8347
+ var bitdepth;
8348
+ if (ret.seqLevelIdx0 === 2 && ret.highBitdepth === 1) {
8349
+ bitdepth = ret.twelveBit === 1 ? "12" : "10";
8350
+ } else if (ret.seqProfile <= 2) {
8351
+ bitdepth = ret.highBitdepth === 1 ? "10" : "08";
8352
+ }
8353
+ ret.codec = ["av01", ret.seqProfile, (ret.seqLevelIdx0 < 10 ? "0" + ret.seqLevelIdx0 : ret.seqLevelIdx0) + (ret.seqTier0 ? "H" : "M"), bitdepth].join(".");
8354
+ });
8355
+ }
7894
8356
  }, {
7895
8357
  key: "avc1",
7896
8358
  value: function avc1(box) {
@@ -7925,7 +8387,7 @@ var MP4Parser = /* @__PURE__ */ function() {
7925
8387
  ret.ppsLength = data[start];
7926
8388
  start += 1;
7927
8389
  ret.pps = [];
7928
- for (var _i2 = 0; _i2 < ret.ppsLength; _i2++) {
8390
+ for (var _i3 = 0; _i3 < ret.ppsLength; _i3++) {
7929
8391
  var _size = readBig16(data, start);
7930
8392
  start += 2;
7931
8393
  ret.pps.push(data.subarray(start, start += _size));
@@ -8094,7 +8556,7 @@ var MP4Parser = /* @__PURE__ */ function() {
8094
8556
  start += 8;
8095
8557
  }
8096
8558
  } else {
8097
- for (var _i3 = 0; _i3 < entryCount; _i3++) {
8559
+ for (var _i4 = 0; _i4 < entryCount; _i4++) {
8098
8560
  entries.push({
8099
8561
  count: readBig32(data, start),
8100
8562
  offset: -(~readBig32(data, start + 4) + 1)
@@ -8316,13 +8778,20 @@ var MP4Parser = /* @__PURE__ */ function() {
8316
8778
  v.mvhdTimecale = moov.mvhd.timescale;
8317
8779
  v.timescale = v.formatTimescale = vTrack.mdia.mdhd.timescale;
8318
8780
  v.duration = vTrack.mdia.mdhd.duration || v.mvhdDurtion / v.mvhdTimecale * v.timescale;
8781
+ v.rotation = vTrack.tkhd.rotation;
8782
+ v.matrix = vTrack.tkhd.matrix;
8319
8783
  var e1 = vTrack.mdia.minf.stbl.stsd.entries[0];
8320
8784
  v.width = e1.width;
8321
8785
  v.height = e1.height;
8322
8786
  if (e1.pasp) {
8323
8787
  v.sarRatio = [e1.pasp.hSpacing, e1.pasp.vSpacing];
8324
8788
  }
8325
- if (e1.hvcC) {
8789
+ if (e1.av1C) {
8790
+ v.codecType = VideoCodecType.AV1;
8791
+ v.codec = e1.av1C.codec;
8792
+ v.av1C = e1.av1C.data;
8793
+ v.colr = e1.colr.data;
8794
+ } else if (e1.hvcC) {
8326
8795
  v.codecType = VideoCodecType.HEVC;
8327
8796
  v.codec = e1.hvcC.codec;
8328
8797
  v.vps = e1.hvcC.vps;
@@ -8641,8 +9110,9 @@ function parseAudioSampleEntry(ret, data) {
8641
9110
  function parseBox(box, isFullBox, parse3) {
8642
9111
  if (!box)
8643
9112
  return;
8644
- if (box.size !== box.data.length)
9113
+ if (box.size !== box.data.length) {
8645
9114
  throw new Error("box ".concat(box.type, " size !== data.length"));
9115
+ }
8646
9116
  var ret = {
8647
9117
  start: box.start,
8648
9118
  size: box.size,
@@ -8681,11 +9151,167 @@ var toHex = function toHex2() {
8681
9151
  var FMP4Demuxer = /* @__PURE__ */ function() {
8682
9152
  function FMP4Demuxer2(videoTrack, audioTrack, metadataTrack) {
8683
9153
  _classCallCheck(this, FMP4Demuxer2);
9154
+ _defineProperty(this, "__loadedMoofWraps", []);
9155
+ _defineProperty(this, "__lastRemainData", null);
9156
+ _defineProperty(this, "__lastRemainDataStart", 0);
9157
+ _defineProperty(this, "__nextMoofStart", -1);
8684
9158
  this.videoTrack = videoTrack || new VideoTrack();
8685
9159
  this.audioTrack = audioTrack || new AudioTrack();
8686
9160
  this.metadataTrack = metadataTrack || new MetadataTrack();
8687
9161
  }
8688
9162
  _createClass(FMP4Demuxer2, [{
9163
+ key: "demuxPart",
9164
+ value: function demuxPart(partData, partDataStart, moov) {
9165
+ var _this = this;
9166
+ var videoTrack = this.videoTrack, audioTrack = this.audioTrack;
9167
+ var videoExist = videoTrack.exist();
9168
+ var audioExist = audioTrack.exist();
9169
+ var isAV01 = /av01/.test(videoTrack.codec);
9170
+ videoTrack.samples = [];
9171
+ audioTrack.samples = [];
9172
+ var data = partData;
9173
+ var dataStart = partDataStart;
9174
+ if (this.__lastRemainData) {
9175
+ var lastRemainDataEnd = this.__lastRemainDataStart + this.__lastRemainData.byteLength;
9176
+ var continuous = partDataStart <= lastRemainDataEnd && partDataStart > this.__lastRemainDataStart && partDataStart + partData.byteLength > lastRemainDataEnd;
9177
+ if (continuous) {
9178
+ var noDuplicateData = partData.subarray(this.__lastRemainData.byteLength + this.__lastRemainDataStart - partDataStart);
9179
+ data = concatUint8Array(this.__lastRemainData, noDuplicateData);
9180
+ dataStart = this.__lastRemainDataStart;
9181
+ this.__lastRemainData = null;
9182
+ } else {
9183
+ this.__lastRemainData = null;
9184
+ this.__lastRemainDataStart = 0;
9185
+ this.__nextMoofStart = -1;
9186
+ }
9187
+ }
9188
+ if (!moov) {
9189
+ var moovBox = MP4Parser.findBox(data, ["moov"])[0];
9190
+ if (!moovBox)
9191
+ throw new Error("cannot found moov box");
9192
+ moov = MP4Parser.moov(moovBox);
9193
+ }
9194
+ if (data) {
9195
+ var dataEnd = dataStart + data.byteLength;
9196
+ if (!videoExist && !audioExist) {
9197
+ MP4Parser.moovToTrack(moov, videoTrack, audioTrack);
9198
+ }
9199
+ var moofBoxes = [];
9200
+ if (this.__nextMoofStart < 0) {
9201
+ MP4Parser.findBox(data, ["moof"], dataStart).forEach(function(v) {
9202
+ return moofBoxes.push(v);
9203
+ });
9204
+ } else if (this.__nextMoofStart >= dataStart && this.__nextMoofStart <= dataEnd - 8) {
9205
+ MP4Parser.findBox(data.subarray(this.__nextMoofStart - dataStart), ["moof"], this.__nextMoofStart).forEach(function(v) {
9206
+ return moofBoxes.push(v);
9207
+ });
9208
+ }
9209
+ moofBoxes.filter(function(moofBox) {
9210
+ return moofBox.size <= moofBox.data.length;
9211
+ }).forEach(function(moofBox) {
9212
+ var moof = MP4Parser.moof(moofBox);
9213
+ _this.__nextMoofStart = moof.start + Math.max.apply(Math, _toConsumableArray(moof.traf.map(function(v) {
9214
+ return v.trun.samples.reduce(function(ret, w) {
9215
+ return ret + w.size;
9216
+ }, v.trun.dataOffset || 0);
9217
+ })));
9218
+ _this.__loadedMoofWraps.push({
9219
+ start: moof.start,
9220
+ nextMoofStart: _this.__nextMoofStart,
9221
+ moof
9222
+ });
9223
+ _this.__loadedMoofWraps.sort(function(p, n) {
9224
+ return p.start - n.start;
9225
+ });
9226
+ });
9227
+ var _iterator = _createForOfIteratorHelper(this.__loadedMoofWraps), _step;
9228
+ try {
9229
+ var _loop = function _loop2() {
9230
+ var moofWrap = _step.value;
9231
+ if (moofWrap.start > dataEnd || moofWrap.nextMoofStart < dataStart) {
9232
+ return "continue";
9233
+ }
9234
+ var moofStart = moofWrap.start;
9235
+ var tracks = MP4Parser.moofToSamples(moofWrap.moof, videoTrack, audioTrack);
9236
+ var videoBaseMediaDecodeTime = videoTrack.baseMediaDecodeTime;
9237
+ var audioBaseMediaDecodeTime = audioTrack.baseMediaDecodeTime;
9238
+ var nalSize;
9239
+ Object.keys(tracks).forEach(function(k) {
9240
+ if (videoTrack.id == k) {
9241
+ tracks[k].some(function(x) {
9242
+ var xStart = x.offset += moofStart;
9243
+ if (xStart < dataStart) {
9244
+ return;
9245
+ }
9246
+ if (xStart + x.size > dataEnd) {
9247
+ return true;
9248
+ }
9249
+ var sample = new VideoSample((x.pts || x.dts) + videoBaseMediaDecodeTime, x.dts + videoBaseMediaDecodeTime);
9250
+ sample.duration = x.duration;
9251
+ sample.gopId = x.gopId;
9252
+ if (x.keyframe)
9253
+ sample.setToKeyframe();
9254
+ var sampleData = data.subarray(xStart - dataStart, xStart - dataStart + x.size);
9255
+ sample.data = sampleData;
9256
+ if (!isAV01) {
9257
+ var start = 0;
9258
+ var len = sampleData.length - 1;
9259
+ while (start < len) {
9260
+ nalSize = readBig32(sampleData, start);
9261
+ start += 4;
9262
+ sample.units.push(sampleData.subarray(start, start + nalSize));
9263
+ start += nalSize;
9264
+ }
9265
+ }
9266
+ _this.__lastRemainDataStart = xStart + x.size;
9267
+ videoTrack.samples.push(sample);
9268
+ });
9269
+ } else if (audioTrack.id == k) {
9270
+ tracks[k].some(function(x) {
9271
+ var xStart = x.offset + moofStart;
9272
+ if (xStart < dataStart) {
9273
+ return;
9274
+ }
9275
+ if (xStart + x.size > dataEnd) {
9276
+ return true;
9277
+ }
9278
+ var sampleData = data.subarray(xStart - dataStart, xStart - dataStart + x.size);
9279
+ audioTrack.samples.push(new AudioSample(x.dts + audioBaseMediaDecodeTime, sampleData, x.duration));
9280
+ _this.__lastRemainDataStart = xStart + x.size;
9281
+ });
9282
+ }
9283
+ });
9284
+ };
9285
+ for (_iterator.s(); !(_step = _iterator.n()).done; ) {
9286
+ var _ret = _loop();
9287
+ if (_ret === "continue")
9288
+ continue;
9289
+ }
9290
+ } catch (err) {
9291
+ _iterator.e(err);
9292
+ } finally {
9293
+ _iterator.f();
9294
+ }
9295
+ }
9296
+ if (this.__lastRemainDataStart > dataStart && this.__lastRemainDataStart < data.byteLength + dataStart) {
9297
+ this.__lastRemainData = data.subarray(this.__lastRemainDataStart - dataStart);
9298
+ } else {
9299
+ this.__lastRemainData = data;
9300
+ this.__lastRemainDataStart = dataStart;
9301
+ }
9302
+ if (videoTrack.samples.length) {
9303
+ videoTrack.baseMediaDecodeTime = videoTrack.samples[0].pts;
9304
+ }
9305
+ if (audioTrack.samples.length) {
9306
+ audioTrack.baseMediaDecodeTime = audioTrack.samples[0].pts;
9307
+ }
9308
+ return {
9309
+ videoTrack,
9310
+ audioTrack,
9311
+ metadataTrack: this.metadataTrack
9312
+ };
9313
+ }
9314
+ }, {
8689
9315
  key: "demux",
8690
9316
  value: function demux(videoData, audioData) {
8691
9317
  var videoTrack = this.videoTrack, audioTrack = this.audioTrack;
@@ -8804,13 +9430,13 @@ var Buffer = /* @__PURE__ */ function() {
8804
9430
  _createClass(Buffer2, [{
8805
9431
  key: "write",
8806
9432
  value: function write() {
8807
- var self = this;
9433
+ var self2 = this;
8808
9434
  for (var _len2 = arguments.length, buffer = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
8809
9435
  buffer[_key2] = arguments[_key2];
8810
9436
  }
8811
9437
  buffer.forEach(function(item) {
8812
9438
  if (item) {
8813
- self.buffer = Concat(Uint8Array, self.buffer, item);
9439
+ self2.buffer = Concat(Uint8Array, self2.buffer, item);
8814
9440
  } else {
8815
9441
  window.console.warn(item);
8816
9442
  }
@@ -9177,10 +9803,16 @@ var MP4 = /* @__PURE__ */ function() {
9177
9803
  if (track.useEME && track.enca) {
9178
9804
  content = MP42.enca(track);
9179
9805
  } else {
9180
- content = MP42.mp4a(track);
9806
+ if (track.codecType === AudioCodecType.OPUS) {
9807
+ content = MP42.opus(track);
9808
+ } else {
9809
+ content = MP42.mp4a(track);
9810
+ }
9181
9811
  }
9182
9812
  } else if (track.useEME && track.encv) {
9183
9813
  content = MP42.encv(track);
9814
+ } else if (track.av1C) {
9815
+ content = MP42.av01(track);
9184
9816
  } else {
9185
9817
  content = MP42.avc1hev1(track);
9186
9818
  }
@@ -9394,12 +10026,9 @@ var MP4 = /* @__PURE__ */ function() {
9394
10026
  return MP42.box(MP42.types.sinf, content, MP42.box(MP42.types.frma, frma), MP42.box(MP42.types.schm, schm), schi);
9395
10027
  }
9396
10028
  }, {
9397
- key: "avc1hev1",
9398
- value: function avc1hev1(track) {
9399
- var isHevc = track.codecType === VideoCodecType.HEVC;
9400
- var typ = isHevc ? MP42.types.hvc1 : MP42.types.avc1;
9401
- var config = isHevc ? MP42.hvcC(track) : MP42.avcC(track);
9402
- var boxes = [new Uint8Array([
10029
+ key: "av01",
10030
+ value: function av01(track) {
10031
+ return MP42.box(MP42.types.av01, new Uint8Array([
9403
10032
  0,
9404
10033
  0,
9405
10034
  0,
@@ -9478,10 +10107,97 @@ var MP4 = /* @__PURE__ */ function() {
9478
10107
  24,
9479
10108
  17,
9480
10109
  17
9481
- ]), config];
9482
- if (isHevc) {
9483
- boxes.push(MP42.box(MP42.types.fiel, new Uint8Array([1, 0])));
9484
- } else if (track.sarRatio && track.sarRatio.length > 1) {
10110
+ ]), track.av1C, track.colr);
10111
+ }
10112
+ }, {
10113
+ key: "avc1hev1",
10114
+ value: function avc1hev1(track) {
10115
+ var isHevc = track.codecType === VideoCodecType.HEVC;
10116
+ var typ = isHevc ? MP42.types.hvc1 : MP42.types.avc1;
10117
+ var config = isHevc ? MP42.hvcC(track) : MP42.avcC(track);
10118
+ var boxes = [new Uint8Array([
10119
+ 0,
10120
+ 0,
10121
+ 0,
10122
+ 0,
10123
+ 0,
10124
+ 0,
10125
+ 0,
10126
+ 1,
10127
+ 0,
10128
+ 0,
10129
+ 0,
10130
+ 0,
10131
+ 0,
10132
+ 0,
10133
+ 0,
10134
+ 0,
10135
+ 0,
10136
+ 0,
10137
+ 0,
10138
+ 0,
10139
+ 0,
10140
+ 0,
10141
+ 0,
10142
+ 0,
10143
+ track.width >> 8 & 255,
10144
+ track.width & 255,
10145
+ track.height >> 8 & 255,
10146
+ track.height & 255,
10147
+ 0,
10148
+ 72,
10149
+ 0,
10150
+ 0,
10151
+ 0,
10152
+ 72,
10153
+ 0,
10154
+ 0,
10155
+ 0,
10156
+ 0,
10157
+ 0,
10158
+ 0,
10159
+ 0,
10160
+ 1,
10161
+ 0,
10162
+ 0,
10163
+ 0,
10164
+ 0,
10165
+ 0,
10166
+ 0,
10167
+ 0,
10168
+ 0,
10169
+ 0,
10170
+ 0,
10171
+ 0,
10172
+ 0,
10173
+ 0,
10174
+ 0,
10175
+ 0,
10176
+ 0,
10177
+ 0,
10178
+ 0,
10179
+ 0,
10180
+ 0,
10181
+ 0,
10182
+ 0,
10183
+ 0,
10184
+ 0,
10185
+ 0,
10186
+ 0,
10187
+ 0,
10188
+ 0,
10189
+ 0,
10190
+ 0,
10191
+ 0,
10192
+ 0,
10193
+ 0,
10194
+ 24,
10195
+ 17,
10196
+ 17
10197
+ ]), config];
10198
+ if (isHevc) {
10199
+ boxes.push(MP42.box(MP42.types.fiel, new Uint8Array([1, 0])));
10200
+ } else if (track.sarRatio && track.sarRatio.length > 1) {
9485
10201
  boxes.push(MP42.pasp(track.sarRatio));
9486
10202
  }
9487
10203
  return MP42.box.apply(MP42, [typ].concat(boxes));
@@ -9763,6 +10479,53 @@ var MP4 = /* @__PURE__ */ function() {
9763
10479
  )));
9764
10480
  return esds2;
9765
10481
  }
10482
+ }, {
10483
+ key: "opus",
10484
+ value: function opus(track) {
10485
+ var opusAudioDescription = new Uint8Array([
10486
+ 0,
10487
+ 0,
10488
+ 0,
10489
+ 0,
10490
+ 0,
10491
+ 0,
10492
+ 0,
10493
+ 1,
10494
+ 0,
10495
+ 0,
10496
+ 0,
10497
+ 0,
10498
+ 0,
10499
+ 0,
10500
+ 0,
10501
+ 0,
10502
+ 0,
10503
+ track.channelCount,
10504
+ 0,
10505
+ 16,
10506
+ 0,
10507
+ 0,
10508
+ 0,
10509
+ 0,
10510
+ track.sampleRate >> 8 & 255,
10511
+ track.sampleRate & 255,
10512
+ 0,
10513
+ 0
10514
+ ]);
10515
+ var opusSpecificConfig = track.config.length ? MP42.dOps(track) : [];
10516
+ return MP42.box(MP42.types.Opus, opusAudioDescription, opusSpecificConfig);
10517
+ }
10518
+ }, {
10519
+ key: "dOps",
10520
+ value: function dOps(track) {
10521
+ if (track.config) {
10522
+ track.config[4] = track.sampleRate >>> 24 & 255;
10523
+ track.config[5] = track.sampleRate >>> 16 & 255;
10524
+ track.config[6] = track.sampleRate >>> 8 & 255;
10525
+ track.config[7] = track.sampleRate & 255;
10526
+ return MP42.box(MP42.types.dOps, track.config);
10527
+ }
10528
+ }
9766
10529
  }, {
9767
10530
  key: "mvex",
9768
10531
  value: function mvex(tracks) {
@@ -10365,7 +11128,7 @@ var MP4 = /* @__PURE__ */ function() {
10365
11128
  }]);
10366
11129
  return MP42;
10367
11130
  }();
10368
- _defineProperty(MP4, "types", ["avc1", "avcC", "hvc1", "hvcC", "dinf", "dref", "esds", "ftyp", "hdlr", "mdat", "mdhd", "mdia", "mfhd", "minf", "moof", "moov", "mp4a", "mvex", "mvhd", "pasp", "stbl", "stco", "stsc", "stsd", "stsz", "stts", "tfdt", "tfhd", "traf", "trak", "trex", "tkhd", "vmhd", "smhd", "ctts", "stss", "styp", "pssh", "sidx", "sbgp", "saiz", "saio", "senc", "trun", "encv", "enca", "sinf", "btrt", "frma", "tenc", "schm", "schi", "mehd", "fiel", "sdtp"].reduce(function(p, c) {
11131
+ _defineProperty(MP4, "types", ["Opus", "dOps", "av01", "av1C", "avc1", "avcC", "hvc1", "hvcC", "dinf", "dref", "esds", "ftyp", "hdlr", "mdat", "mdhd", "mdia", "mfhd", "minf", "moof", "moov", "mp4a", "mvex", "mvhd", "pasp", "stbl", "stco", "stsc", "stsd", "stsz", "stts", "tfdt", "tfhd", "traf", "trak", "trex", "tkhd", "vmhd", "smhd", "ctts", "stss", "styp", "pssh", "sidx", "sbgp", "saiz", "saio", "senc", "trun", "encv", "enca", "sinf", "btrt", "frma", "tenc", "schm", "schi", "mehd", "fiel", "sdtp"].reduce(function(p, c) {
10369
11132
  p[c] = [c.charCodeAt(0), c.charCodeAt(1), c.charCodeAt(2), c.charCodeAt(3)];
10370
11133
  return p;
10371
11134
  }, /* @__PURE__ */ Object.create(null)));
@@ -10700,30 +11463,46 @@ var FMP4Remuxer = /* @__PURE__ */ function() {
10700
11463
  };
10701
11464
  }
10702
11465
  var samples = track.samples;
11466
+ var isAV01 = /av01/.test(track.codec);
10703
11467
  var mdatSize = 0;
10704
- samples.forEach(function(s) {
10705
- mdatSize += s.units.reduce(function(t, c) {
10706
- return t + c.byteLength;
10707
- }, 0);
10708
- mdatSize += s.units.length * 4;
10709
- });
10710
- var mdata = new Uint8Array(mdatSize);
10711
- var mdatView = new DataView(mdata.buffer);
10712
- var _loop = function _loop2(_offset, _sample) {
10713
- _sample = samples[i];
10714
- var sampleSize = 0;
10715
- _sample.units.forEach(function(u) {
10716
- mdatView.setUint32(_offset, u.byteLength);
10717
- _offset += 4;
10718
- mdata.set(u, _offset);
10719
- _offset += u.byteLength;
10720
- sampleSize += 4 + u.byteLength;
11468
+ if (isAV01) {
11469
+ samples.forEach(function(s) {
11470
+ mdatSize += s.data.byteLength;
10721
11471
  });
10722
- _sample.size = sampleSize;
10723
- offset = _offset, sample = _sample;
10724
- };
10725
- for (var i = 0, l = samples.length, offset = 0, sample; i < l; i++) {
10726
- _loop(offset, sample);
11472
+ } else {
11473
+ samples.forEach(function(s) {
11474
+ mdatSize += s.units.reduce(function(t, c) {
11475
+ return t + c.byteLength;
11476
+ }, 0);
11477
+ mdatSize += s.units.length * 4;
11478
+ });
11479
+ }
11480
+ var mdata = new Uint8Array(mdatSize);
11481
+ if (isAV01) {
11482
+ for (var i = 0, l = samples.length, offset = 0, sample; i < l; i++) {
11483
+ sample = samples[i];
11484
+ mdata.set(sample.data, offset);
11485
+ sample.size = sample.data.byteLength;
11486
+ offset += sample.size;
11487
+ }
11488
+ } else {
11489
+ var mdatView = new DataView(mdata.buffer);
11490
+ var _loop = function _loop2(_offset2, _sample2) {
11491
+ _sample2 = samples[_i];
11492
+ var sampleSize = 0;
11493
+ _sample2.units.forEach(function(u) {
11494
+ mdatView.setUint32(_offset2, u.byteLength);
11495
+ _offset2 += 4;
11496
+ mdata.set(u, _offset2);
11497
+ _offset2 += u.byteLength;
11498
+ sampleSize += 4 + u.byteLength;
11499
+ });
11500
+ _sample2.size = sampleSize;
11501
+ _offset = _offset2, _sample = _sample2;
11502
+ };
11503
+ for (var _i = 0, _l = samples.length, _offset = 0, _sample; _i < _l; _i++) {
11504
+ _loop(_offset, _sample);
11505
+ }
10727
11506
  }
10728
11507
  var mdat = MP4.mdat(mdata);
10729
11508
  var moof = MP4.moof([track]);
@@ -10882,11 +11661,11 @@ var Event$1 = _objectSpread2$2(_objectSpread2$2({}, EVENT), {}, {
10882
11661
  });
10883
11662
  var logger$3 = new Logger$2("Transmuxer");
10884
11663
  var Transmuxer = /* @__PURE__ */ function() {
10885
- function Transmuxer2(hls, isMP4, needRemux) {
11664
+ function Transmuxer2(hls, isMP4, needRemux, fixerConfig) {
10886
11665
  _classCallCheck$3(this, Transmuxer2);
10887
11666
  _defineProperty$3(this, "_initSegmentId", "");
10888
11667
  this.hls = hls;
10889
- this._demuxer = isMP4 ? new FMP4Demuxer() : new TsDemuxer();
11668
+ this._demuxer = isMP4 ? new FMP4Demuxer() : new TsDemuxer(null, null, null, fixerConfig);
10890
11669
  this._isMP4 = isMP4;
10891
11670
  if (needRemux)
10892
11671
  this._remuxer = new FMP4Remuxer(this._demuxer.videoTrack, this._demuxer.audioTrack);
@@ -11041,7 +11820,7 @@ var Transmuxer = /* @__PURE__ */ function() {
11041
11820
  }]);
11042
11821
  return Transmuxer2;
11043
11822
  }();
11044
- var _excluded = ["data"], _excluded2 = ["data"];
11823
+ var _excluded$1 = ["data"], _excluded2 = ["data"];
11045
11824
  var logger$2 = new Logger$2("BufferService");
11046
11825
  var BufferService = /* @__PURE__ */ function() {
11047
11826
  function BufferService2(hls) {
@@ -11153,11 +11932,11 @@ var BufferService = /* @__PURE__ */ function() {
11153
11932
  return;
11154
11933
  if (TsDemuxer.probe(chunk)) {
11155
11934
  if (!this._transmuxer)
11156
- this._transmuxer = new Transmuxer(this.hls, false, !this._softVideo);
11935
+ this._transmuxer = new Transmuxer(this.hls, false, !this._softVideo, this.hls.config.fixerConfig);
11157
11936
  } else if (MP4Parser.probe(chunk)) {
11158
11937
  if (this._softVideo) {
11159
11938
  if (!this._transmuxer)
11160
- this._transmuxer = new Transmuxer(this.hls, true);
11939
+ this._transmuxer = new Transmuxer(this.hls, true, null, this.hls.config.fixerConfig);
11161
11940
  } else {
11162
11941
  this._directAppend = true;
11163
11942
  var mix = false;
@@ -11207,7 +11986,8 @@ var BufferService = /* @__PURE__ */ function() {
11207
11986
  key: "appendBuffer",
11208
11987
  value: function() {
11209
11988
  var _appendBuffer = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee2(segment, audioSegment, videoChunk, audioChunk, discontinuity, contiguous, startTime) {
11210
- var p, needInit, _this$_transmuxer$tra, _this$_transmuxer$tra2, video, audio, isFirstAppend, mse, _p, videoData, videoRest, audioData, audioRest;
11989
+ var _this2 = this;
11990
+ var afterAppend, p, needInit, _this$_transmuxer$tra, _this$_transmuxer$tra2, video, audio, isFirstAppend, mse, _p, videoData, videoRest, audioData, audioRest;
11211
11991
  return _regeneratorRuntime$1().wrap(function _callee2$(_context2) {
11212
11992
  while (1)
11213
11993
  switch (_context2.prev = _context2.next) {
@@ -11218,8 +11998,18 @@ var BufferService = /* @__PURE__ */ function() {
11218
11998
  }
11219
11999
  return _context2.abrupt("return");
11220
12000
  case 2:
12001
+ afterAppend = function afterAppend2() {
12002
+ var _this2$hls;
12003
+ if ((_this2$hls = _this2.hls) !== null && _this2$hls !== void 0 && _this2$hls.emit) {
12004
+ var _this2$hls2;
12005
+ (_this2$hls2 = _this2.hls) === null || _this2$hls2 === void 0 ? void 0 : _this2$hls2.emit(EVENT.APPEND_BUFFER, {
12006
+ start: segment.start,
12007
+ end: segment.end
12008
+ });
12009
+ }
12010
+ };
11221
12011
  if (!this._directAppend) {
11222
- _context2.next = 7;
12012
+ _context2.next = 8;
11223
12013
  break;
11224
12014
  }
11225
12015
  p = [];
@@ -11227,8 +12017,8 @@ var BufferService = /* @__PURE__ */ function() {
11227
12017
  p.push(this._mse.append(MSE.VIDEO, videoChunk));
11228
12018
  if (audioChunk)
11229
12019
  p.push(this._mse.append(MSE.AUDIO, audioChunk));
11230
- return _context2.abrupt("return", Promise.all(p));
11231
- case 7:
12020
+ return _context2.abrupt("return", Promise.all(p).then(afterAppend));
12021
+ case 8:
11232
12022
  needInit = this._needInitSegment || discontinuity;
11233
12023
  _this$_transmuxer$tra = this._transmuxer.transmux(videoChunk, audioChunk, needInit, contiguous, startTime, this._needInitSegment || discontinuity), _this$_transmuxer$tra2 = _slicedToArray$1(_this$_transmuxer$tra, 2), video = _this$_transmuxer$tra2[0], audio = _this$_transmuxer$tra2[1];
11234
12024
  if (audioChunk && audioSegment) {
@@ -11244,16 +12034,17 @@ var BufferService = /* @__PURE__ */ function() {
11244
12034
  this.hls.emit(Event$1.NO_AUDIO_TRACK);
11245
12035
  }
11246
12036
  if (!this._softVideo) {
11247
- _context2.next = 18;
12037
+ _context2.next = 20;
11248
12038
  break;
11249
12039
  }
11250
12040
  this._softVideo.appendBuffer(video, audio);
11251
12041
  this._needInitSegment = false;
11252
- _context2.next = 28;
12042
+ afterAppend();
12043
+ _context2.next = 30;
11253
12044
  break;
11254
- case 18:
12045
+ case 20:
11255
12046
  if (!this._mse) {
11256
- _context2.next = 28;
12047
+ _context2.next = 30;
11257
12048
  break;
11258
12049
  }
11259
12050
  isFirstAppend = !this._sourceCreated;
@@ -11269,15 +12060,15 @@ var BufferService = /* @__PURE__ */ function() {
11269
12060
  });
11270
12061
  }
11271
12062
  if (video) {
11272
- videoData = video.data, videoRest = _objectWithoutProperties$1(video, _excluded);
12063
+ videoData = video.data, videoRest = _objectWithoutProperties$1(video, _excluded$1);
11273
12064
  _p.push(mse.append(MSE.VIDEO, videoData, videoRest));
11274
12065
  }
11275
12066
  if (audio) {
11276
12067
  audioData = audio.data, audioRest = _objectWithoutProperties$1(audio, _excluded2);
11277
12068
  _p.push(mse.append(MSE.AUDIO, audioData, audioRest));
11278
12069
  }
11279
- return _context2.abrupt("return", Promise.all(_p));
11280
- case 28:
12070
+ return _context2.abrupt("return", Promise.all(_p).then(afterAppend));
12071
+ case 30:
11281
12072
  case "end":
11282
12073
  return _context2.stop();
11283
12074
  }
@@ -11292,7 +12083,7 @@ var BufferService = /* @__PURE__ */ function() {
11292
12083
  key: "removeBuffer",
11293
12084
  value: function() {
11294
12085
  var _removeBuffer = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee3() {
11295
- var _this2 = this;
12086
+ var _this3 = this;
11296
12087
  var start, end, media, _args3 = arguments;
11297
12088
  return _regeneratorRuntime$1().wrap(function _callee3$(_context3) {
11298
12089
  while (1)
@@ -11308,7 +12099,7 @@ var BufferService = /* @__PURE__ */ function() {
11308
12099
  return _context3.abrupt("return");
11309
12100
  case 5:
11310
12101
  return _context3.abrupt("return", this._mse.clearBuffer(start, end).then(function() {
11311
- return _this2.hls.emit(EVENT.REMOVE_BUFFER, {
12102
+ return _this3.hls.emit(EVENT.REMOVE_BUFFER, {
11312
12103
  start,
11313
12104
  end,
11314
12105
  removeEnd: end
@@ -11489,30 +12280,51 @@ var BufferService = /* @__PURE__ */ function() {
11489
12280
  return setLiveSeekableRange;
11490
12281
  }()
11491
12282
  }, {
11492
- key: "destroy",
12283
+ key: "detachMedia",
11493
12284
  value: function() {
11494
- var _destroy = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee9() {
11495
- var _this$_decryptor;
12285
+ var _detachMedia = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee9() {
11496
12286
  return _regeneratorRuntime$1().wrap(function _callee9$(_context9) {
11497
12287
  while (1)
11498
12288
  switch (_context9.prev = _context9.next) {
11499
12289
  case 0:
11500
- (_this$_decryptor = this._decryptor) === null || _this$_decryptor === void 0 ? void 0 : _this$_decryptor.destroy();
11501
12290
  if (!this._mse) {
11502
- _context9.next = 4;
12291
+ _context9.next = 3;
11503
12292
  break;
11504
12293
  }
11505
- _context9.next = 4;
12294
+ _context9.next = 3;
11506
12295
  return this._mse.unbindMedia();
11507
- case 4:
12296
+ case 3:
12297
+ case "end":
12298
+ return _context9.stop();
12299
+ }
12300
+ }, _callee9, this);
12301
+ }));
12302
+ function detachMedia() {
12303
+ return _detachMedia.apply(this, arguments);
12304
+ }
12305
+ return detachMedia;
12306
+ }()
12307
+ }, {
12308
+ key: "destroy",
12309
+ value: function() {
12310
+ var _destroy = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee10() {
12311
+ var _this$_decryptor;
12312
+ return _regeneratorRuntime$1().wrap(function _callee10$(_context10) {
12313
+ while (1)
12314
+ switch (_context10.prev = _context10.next) {
12315
+ case 0:
12316
+ (_this$_decryptor = this._decryptor) === null || _this$_decryptor === void 0 ? void 0 : _this$_decryptor.destroy();
12317
+ _context10.next = 3;
12318
+ return this.detachMedia();
12319
+ case 3:
11508
12320
  this._decryptor = null;
11509
12321
  this._mse = null;
11510
12322
  this._softVideo = null;
11511
- case 7:
12323
+ case 6:
11512
12324
  case "end":
11513
- return _context9.stop();
12325
+ return _context10.stop();
11514
12326
  }
11515
- }, _callee9, this);
12327
+ }, _callee10, this);
11516
12328
  }));
11517
12329
  function destroy() {
11518
12330
  return _destroy.apply(this, arguments);
@@ -11600,7 +12412,11 @@ function getConfig(cfg) {
11600
12412
  minSegmentsStartPlay: 3,
11601
12413
  preferMMS: false,
11602
12414
  preferMMSStreaming: false,
11603
- mseLowLatency: true
12415
+ mseLowLatency: true,
12416
+ fixerConfig: {
12417
+ forceFixLargeGap: false,
12418
+ largeGapThreshold: 5
12419
+ }
11604
12420
  }, cfg), {}, {
11605
12421
  media
11606
12422
  });
@@ -11715,6 +12531,8 @@ var MediaPlaylist = /* @__PURE__ */ _createClass$3(function MediaPlaylist2() {
11715
12531
  _defineProperty$3(this, "lowLatency", false);
11716
12532
  _defineProperty$3(this, "endPartIndex", 0);
11717
12533
  _defineProperty$3(this, "segments", []);
12534
+ _defineProperty$3(this, "dateRanges", {});
12535
+ _defineProperty$3(this, "skippedSegments", 0);
11718
12536
  });
11719
12537
  var MediaSegment = /* @__PURE__ */ function() {
11720
12538
  function MediaSegment2(parentUrl) {
@@ -11836,6 +12654,31 @@ var MediaSegmentKey = /* @__PURE__ */ function() {
11836
12654
  }]);
11837
12655
  return MediaSegmentKey2;
11838
12656
  }();
12657
+ var HlsUrlParameters = /* @__PURE__ */ function() {
12658
+ function HlsUrlParameters2(msn, part, skip) {
12659
+ _classCallCheck$3(this, HlsUrlParameters2);
12660
+ this.msn = msn;
12661
+ this.part = part;
12662
+ this.skip = skip;
12663
+ }
12664
+ _createClass$3(HlsUrlParameters2, [{
12665
+ key: "addDirectives",
12666
+ value: function addDirectives(uri) {
12667
+ var url = new self.URL(uri);
12668
+ if (this.msn !== void 0) {
12669
+ url.searchParams.set("_HLS_msn", this.msn.toString());
12670
+ }
12671
+ if (this.part) {
12672
+ url.searchParams.set("_HLS_part", this.part.toString());
12673
+ }
12674
+ if (this.skip) {
12675
+ url.searchParams.set("_HLS_skip", this.skip);
12676
+ }
12677
+ return url.href;
12678
+ }
12679
+ }]);
12680
+ return HlsUrlParameters2;
12681
+ }();
11839
12682
  var REGEXP_TAG = /^#(EXT[^:]*)(?::(.*))?$/;
11840
12683
  var REGEXP_ATTR = /([^=]+)=(?:"([^"]*)"|([^",]*))(?:,|$)/g;
11841
12684
  var REGEXP_ABSOLUTE_URL = /^(?:[a-zA-Z0-9+\-.]+:)?\/\//;
@@ -11886,6 +12729,38 @@ function getCodecs(type, codecs) {
11886
12729
  }
11887
12730
  }
11888
12731
  }
12732
+ function isValidDaterange(attr, dateRangeWithSameId) {
12733
+ var _badValueForSameId;
12734
+ if (dateRangeWithSameId) {
12735
+ for (var key in dateRangeWithSameId) {
12736
+ if (Object.prototype.hasOwnProperty.call(dateRangeWithSameId, key) && attr[key] !== dateRangeWithSameId[key]) {
12737
+ _badValueForSameId = key;
12738
+ break;
12739
+ }
12740
+ }
12741
+ }
12742
+ var duration = null;
12743
+ if (attr.DURATION) {
12744
+ duration = parseFloat(attr.DURATION);
12745
+ if (!Number.isFinite(duration)) {
12746
+ duration = null;
12747
+ } else if (attr._endDate) {
12748
+ duration = (attr._endDate.getTime() - attr._startDate.getTime()) / 1e3;
12749
+ }
12750
+ }
12751
+ var cue = enumeratedStringList(attr.CUE || attr["X-CUE"], {
12752
+ pre: false,
12753
+ post: false,
12754
+ once: false
12755
+ });
12756
+ return !!attr.ID && !_badValueForSameId && Number.isFinite(attr._startDate.getTime()) && (duration === null || duration >= 0) && (!(attr.END_ON_NEXT === "YES") || !!attr.CLASS) && (!attr.CUE || !cue.pre && !cue.post || cue.pre !== cue.post) && (!(attr.CLASS === "com.apple.hls.interstitial") || "X-ASSET-URI" in attr || "X-ASSET-LIST" in attr);
12757
+ }
12758
+ function enumeratedStringList(attrValue, dict) {
12759
+ return (attrValue ? attrValue.split(/[ ,]+/) : []).reduce(function(result, identifier) {
12760
+ result[identifier.toLowerCase()] = true;
12761
+ return result;
12762
+ }, dict);
12763
+ }
11889
12764
  function parseMasterPlaylist(lines, parentUrl) {
11890
12765
  var master = new MasterPlaylist();
11891
12766
  var index = 0;
@@ -11994,9 +12869,6 @@ function parseMediaPlaylist(lines, parentUrl, useLowLatency) {
11994
12869
  var endOfList = false;
11995
12870
  var partSegmentIndex = 0;
11996
12871
  while (line = lines[index++]) {
11997
- if (endOfList) {
11998
- break;
11999
- }
12000
12872
  if (line[0] !== "#") {
12001
12873
  if (media.lowLatency) {
12002
12874
  curSN++;
@@ -12045,16 +12917,11 @@ function parseMediaPlaylist(lines, parentUrl, useLowLatency) {
12045
12917
  media.canBlockReload = _attr["CAN-BLOCK-RELOAD"] === "YES";
12046
12918
  media.partHoldBack = parseFloat(_attr["PART-HOLD-BACK"] || 0);
12047
12919
  media.canSkipUntil = parseFloat(_attr["CAN-SKIP-UNTIL"] || 0);
12048
- media.canSkipDateRanges = _attr["CAN-SKIP-DATERANGES"] === "YES";
12920
+ media.canSkipDateRanges = media.canSkipUntil > 0 && _attr["CAN-SKIP-DATERANGES"] === "YES";
12049
12921
  }
12050
12922
  break;
12051
12923
  case "ENDLIST":
12052
12924
  {
12053
- var _lastSegment = media.segments[media.segments.length - 1];
12054
- if (_lastSegment) {
12055
- _lastSegment.isLast = true;
12056
- }
12057
- media.live = false;
12058
12925
  endOfList = true;
12059
12926
  }
12060
12927
  break;
@@ -12094,6 +12961,15 @@ function parseMediaPlaylist(lines, parentUrl, useLowLatency) {
12094
12961
  }
12095
12962
  break;
12096
12963
  case "PRELOAD-HINT":
12964
+ {
12965
+ var _attr3 = parseAttr(data);
12966
+ media.preloadHint = _attr3;
12967
+ if (_attr3["TYPE"] === "PART" && _attr3["URI"]) {
12968
+ var tmp = _attr3["URI"].split(".ts")[0].split("-");
12969
+ media.nextSN = tmp[3];
12970
+ media.nextIndex = tmp[tmp.length - 1];
12971
+ }
12972
+ }
12097
12973
  break;
12098
12974
  case "PROGRAM-DATE-TIME":
12099
12975
  curSegment.dataTime = data;
@@ -12113,21 +12989,21 @@ function parseMediaPlaylist(lines, parentUrl, useLowLatency) {
12113
12989
  break;
12114
12990
  case "KEY":
12115
12991
  {
12116
- var _attr3 = parseAttr(data);
12117
- if (_attr3.METHOD === "NONE") {
12992
+ var _attr4 = parseAttr(data);
12993
+ if (_attr4.METHOD === "NONE") {
12118
12994
  curKey = null;
12119
12995
  break;
12120
12996
  }
12121
12997
  curKey = new MediaSegmentKey();
12122
- curKey.method = _attr3.METHOD;
12123
- curKey.url = /^blob:/.test(_attr3.URI) ? _attr3.URI : getAbsoluteUrl(_attr3.URI, parentUrl);
12124
- curKey.keyFormat = _attr3.KEYFORMAT || "identity";
12125
- curKey.keyFormatVersions = _attr3.KEYFORMATVERSIONS;
12998
+ curKey.method = _attr4.METHOD;
12999
+ curKey.url = /^blob:/.test(_attr4.URI) ? _attr4.URI : getAbsoluteUrl(_attr4.URI, parentUrl);
13000
+ curKey.keyFormat = _attr4.KEYFORMAT || "identity";
13001
+ curKey.keyFormatVersions = _attr4.KEYFORMATVERSIONS;
12126
13002
  if (!curKey.isSupported()) {
12127
- throw new Error("encrypt ".concat(_attr3.METHOD, "/").concat(_attr3.KEYFORMAT, " is not supported"));
13003
+ throw new Error("encrypt ".concat(_attr4.METHOD, "/").concat(_attr4.KEYFORMAT, " is not supported"));
12128
13004
  }
12129
- if (_attr3.IV) {
12130
- var str = _attr3.IV.slice(2);
13005
+ if (_attr4.IV) {
13006
+ var str = _attr4.IV.slice(2);
12131
13007
  str = (str.length & 1 ? "0" : "") + str;
12132
13008
  curKey.iv = new Uint8Array(str.length / 2);
12133
13009
  for (var i = 0, l = str.length / 2; i < l; i++) {
@@ -12138,10 +13014,10 @@ function parseMediaPlaylist(lines, parentUrl, useLowLatency) {
12138
13014
  break;
12139
13015
  case "MAP":
12140
13016
  {
12141
- var _attr4 = parseAttr(data);
12142
- curSegment.url = getAbsoluteUrl(_attr4.URI, parentUrl);
12143
- if (_attr4.BYTERANGE)
12144
- curSegment.setByteRange(_attr4.BYTERANGE);
13017
+ var _attr5 = parseAttr(data);
13018
+ curSegment.url = getAbsoluteUrl(_attr5.URI, parentUrl);
13019
+ if (_attr5.BYTERANGE)
13020
+ curSegment.setByteRange(_attr5.BYTERANGE);
12145
13021
  curSegment.isInitSegment = true;
12146
13022
  curSegment.sn = 0;
12147
13023
  if (curKey) {
@@ -12151,6 +13027,30 @@ function parseMediaPlaylist(lines, parentUrl, useLowLatency) {
12151
13027
  curSegment = new MediaSegment(parentUrl);
12152
13028
  }
12153
13029
  break;
13030
+ case "SKIP":
13031
+ {
13032
+ var _attr6 = parseAttr(data);
13033
+ var skippedSegments = parseInt(_attr6["SKIPPED-SEGMENTS"], 10);
13034
+ if (skippedSegments <= Number.MAX_SAFE_INTEGER) {
13035
+ media.skippedSegments += skippedSegments;
13036
+ curSN += skippedSegments;
13037
+ }
13038
+ }
13039
+ break;
13040
+ case "DATERANGE":
13041
+ {
13042
+ var _attr7 = parseAttr(data);
13043
+ var dateRangeWithSameId = media.dateRanges[_attr7.ID];
13044
+ _attr7._startDate = dateRangeWithSameId ? dateRangeWithSameId._startDate : new Date(_attr7["START-DATE"]);
13045
+ var endDate = (dateRangeWithSameId === null || dateRangeWithSameId === void 0 ? void 0 : dateRangeWithSameId._endDate) || new Date(_attr7.END_DATE);
13046
+ if (Number.isFinite(endDate)) {
13047
+ _attr7._endDate = endDate;
13048
+ }
13049
+ if (isValidDaterange(_attr7, dateRangeWithSameId) || media.skippedSegments) {
13050
+ media.dateRanges[_attr7.ID] = _attr7;
13051
+ }
13052
+ }
13053
+ break;
12154
13054
  }
12155
13055
  }
12156
13056
  media.segments = media.segments.filter(function(x) {
@@ -12158,11 +13058,14 @@ function parseMediaPlaylist(lines, parentUrl, useLowLatency) {
12158
13058
  });
12159
13059
  var lastSegment = media.segments[media.segments.length - 1];
12160
13060
  if (lastSegment) {
12161
- media.endSN = lastSegment.sn;
12162
- media.endPartIndex = lastSegment.partIndex;
12163
- if (endOfList && !lastSegment.isLast) {
13061
+ if (endOfList) {
12164
13062
  lastSegment.isLast = true;
12165
13063
  }
13064
+ media.endSN = lastSegment.sn;
13065
+ media.endPartIndex = lastSegment.partIndex;
13066
+ }
13067
+ if (endOfList) {
13068
+ media.live = false;
12166
13069
  }
12167
13070
  media.totalDuration = totalDuration;
12168
13071
  media.endCC = curCC;
@@ -12341,6 +13244,13 @@ var ManifestLoader = /* @__PURE__ */ function() {
12341
13244
  playlist
12342
13245
  });
12343
13246
  } else {
13247
+ if (this._useLowLatency) {
13248
+ if (playlist.canBlockReload) {
13249
+ this.deliveryDirectives = new HlsUrlParameters(playlist.nextSN, playlist.nextIndex, "");
13250
+ } else {
13251
+ this.deliveryDirectives = null;
13252
+ }
13253
+ }
12344
13254
  this.hls.emit(Event$1.HLS_LEVEL_LOADED, {
12345
13255
  playlist
12346
13256
  });
@@ -12397,41 +13307,45 @@ var ManifestLoader = /* @__PURE__ */ function() {
12397
13307
  var retryCount = this.hls.config.pollRetryCount;
12398
13308
  var fn = /* @__PURE__ */ function() {
12399
13309
  var _ref2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee2() {
12400
- var res;
13310
+ var reqUrl, res;
12401
13311
  return _regeneratorRuntime$1().wrap(function _callee2$(_context2) {
12402
13312
  while (1)
12403
13313
  switch (_context2.prev = _context2.next) {
12404
13314
  case 0:
12405
13315
  clearTimeout(_this2._timer);
12406
- _context2.prev = 1;
12407
- _context2.next = 4;
12408
- return _this2.load(url, audioUrl, subtitleUrl);
12409
- case 4:
13316
+ reqUrl = url;
13317
+ _context2.prev = 2;
13318
+ if (_this2.deliveryDirectives) {
13319
+ reqUrl = _this2.deliveryDirectives.addDirectives(url);
13320
+ }
13321
+ _context2.next = 6;
13322
+ return _this2.load(reqUrl, audioUrl, subtitleUrl);
13323
+ case 6:
12410
13324
  res = _context2.sent;
12411
13325
  if (res[0]) {
12412
- _context2.next = 7;
13326
+ _context2.next = 9;
12413
13327
  break;
12414
13328
  }
12415
13329
  return _context2.abrupt("return");
12416
- case 7:
13330
+ case 9:
12417
13331
  retryCount = _this2.hls.config.pollRetryCount;
12418
13332
  cb(res[0], res[1], res[2]);
12419
- _context2.next = 15;
13333
+ _context2.next = 17;
12420
13334
  break;
12421
- case 11:
12422
- _context2.prev = 11;
12423
- _context2.t0 = _context2["catch"](1);
13335
+ case 13:
13336
+ _context2.prev = 13;
13337
+ _context2.t0 = _context2["catch"](2);
12424
13338
  retryCount--;
12425
13339
  if (retryCount <= 0) {
12426
13340
  errorCb(_context2.t0);
12427
13341
  }
12428
- case 15:
13342
+ case 17:
12429
13343
  _this2._timer = setTimeout(fn, time);
12430
- case 16:
13344
+ case 18:
12431
13345
  case "end":
12432
13346
  return _context2.stop();
12433
13347
  }
12434
- }, _callee2, null, [[1, 11]]);
13348
+ }, _callee2, null, [[2, 13]]);
12435
13349
  }));
12436
13350
  return function fn2() {
12437
13351
  return _ref2.apply(this, arguments);
@@ -12961,7 +13875,7 @@ var Playlist = /* @__PURE__ */ function() {
12961
13875
  }, {
12962
13876
  key: "clearOldSegment",
12963
13877
  value: function clearOldSegment() {
12964
- var maxPlaylistSize = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 50;
13878
+ var maxPlaylistSize = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : this.hls.config.maxPlaylistSize || 50;
12965
13879
  var stream = this.currentStream;
12966
13880
  if (!this.dvrWindow || !stream)
12967
13881
  return;
@@ -13259,7 +14173,7 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13259
14173
  _defineProperty$3(_assertThisInitialized$2(_this), "_switchUrlOpts", null);
13260
14174
  _defineProperty$3(_assertThisInitialized$2(_this), "_isProcessQuotaExceeded", false);
13261
14175
  _defineProperty$3(_assertThisInitialized$2(_this), "_loadSegment", /* @__PURE__ */ _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee() {
13262
- var nextSeg, _assertThisInitialize, config, bInfo, bufferThroughout;
14176
+ var _this$_playlist, nextSegment, lastSegment, _assertThisInitialize, config, minFrameDuration, maxBufferThroughout, bInfo, bufferThroughout;
13263
14177
  return _regeneratorRuntime$1().wrap(function _callee$(_context) {
13264
14178
  while (1)
13265
14179
  switch (_context.prev = _context.next) {
@@ -13270,42 +14184,44 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13270
14184
  }
13271
14185
  return _context.abrupt("return");
13272
14186
  case 2:
13273
- nextSeg = _this._playlist.nextSegment;
14187
+ _this$_playlist = _this._playlist, nextSegment = _this$_playlist.nextSegment, lastSegment = _this$_playlist.lastSegment;
13274
14188
  _assertThisInitialize = _assertThisInitialized$2(_this), config = _assertThisInitialize.config;
13275
- if (nextSeg) {
13276
- _context.next = 6;
14189
+ minFrameDuration = 0.016;
14190
+ maxBufferThroughout = Math.min(Math.max((lastSegment === null || lastSegment === void 0 ? void 0 : lastSegment.duration) - minFrameDuration / 2 || 0, minFrameDuration), 0.1);
14191
+ if (nextSegment) {
14192
+ _context.next = 8;
13277
14193
  break;
13278
14194
  }
13279
14195
  return _context.abrupt("return");
13280
- case 6:
14196
+ case 8:
13281
14197
  if (_this.isLive) {
13282
- _context.next = 16;
14198
+ _context.next = 18;
13283
14199
  break;
13284
14200
  }
13285
14201
  bInfo = _this.bufferInfo();
13286
14202
  if (_this.media.paused && !_this.media.currentTime) {
13287
14203
  bInfo = _this.bufferInfo(bInfo.nextStart || 0.5);
13288
14204
  }
13289
- bufferThroughout = Math.abs(bInfo.end - _this.media.duration) < 0.1;
14205
+ bufferThroughout = Math.abs(bInfo.end - _this.media.duration) < maxBufferThroughout;
13290
14206
  if (!(bInfo.remaining >= config.preloadTime || bufferThroughout)) {
13291
- _context.next = 13;
14207
+ _context.next = 15;
13292
14208
  break;
13293
14209
  }
13294
14210
  _this._tryEos();
13295
14211
  return _context.abrupt("return");
13296
- case 13:
14212
+ case 15:
13297
14213
  if (!(config.preferMMSStreaming && !_this._bufferService.msStreaming)) {
13298
- _context.next = 15;
14214
+ _context.next = 17;
13299
14215
  break;
13300
14216
  }
13301
14217
  return _context.abrupt("return");
13302
- case 15:
13303
- if (!_this._urlSwitching && _this._prevSegSn !== nextSeg.sn - 1 && bInfo.end && Math.abs(nextSeg.start - bInfo.end) > 1) {
14218
+ case 17:
14219
+ if (!_this._urlSwitching && _this._prevSegSn !== nextSegment.sn - 1 && bInfo.end && Math.abs(nextSegment.start - bInfo.end) > 1) {
13304
14220
  _this._playlist.setNextSegmentByIndex(_this._playlist.findSegmentIndexByTime(bInfo.end + 0.1));
13305
14221
  }
13306
- case 16:
14222
+ case 18:
13307
14223
  return _context.abrupt("return", _this._loadSegmentDirect());
13308
- case 17:
14224
+ case 19:
13309
14225
  case "end":
13310
14226
  return _context.stop();
13311
14227
  }
@@ -13470,7 +14386,6 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13470
14386
  return;
13471
14387
  _this._startTick();
13472
14388
  var media = _this.media;
13473
- var buffered = Buffer$1.get(media);
13474
14389
  var segLoaderError = _this._segmentLoader.error;
13475
14390
  _this._onCheckQuotaExceeded();
13476
14391
  if (_this._isProcessQuotaExceeded) {
@@ -13487,7 +14402,7 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13487
14402
  }
13488
14403
  return;
13489
14404
  }
13490
- if (Buffer$1.end(buffered) >= 0.1 && media.readyState) {
14405
+ if (media.readyState) {
13491
14406
  if (isMediaPlaying(media)) {
13492
14407
  _this._loadSegment();
13493
14408
  if (_this._gapService) {
@@ -13553,6 +14468,12 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13553
14468
  var _this$_bufferService;
13554
14469
  return (_this$_bufferService = this._bufferService) === null || _this$_bufferService === void 0 ? void 0 : _this$_bufferService.baseDts;
13555
14470
  }
14471
+ }, {
14472
+ key: "abrSwitchPoint",
14473
+ get: function get() {
14474
+ var targetSeg = this._urlSwitching ? this._playlist.currentSegment : this._playlist.nextSegment;
14475
+ return targetSeg ? targetSeg.start + targetSeg.duration / 2 : null;
14476
+ }
13556
14477
  }, {
13557
14478
  key: "speedInfo",
13558
14479
  value: function speedInfo() {
@@ -13578,30 +14499,37 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13578
14499
  }, {
13579
14500
  key: "load",
13580
14501
  value: function() {
13581
- var _load = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee4(url) {
13582
- var reuseMse, _args4 = arguments;
14502
+ var _load = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee4() {
14503
+ var url, options, reuseMse, _args4 = arguments;
13583
14504
  return _regeneratorRuntime$1().wrap(function _callee4$(_context4) {
13584
14505
  while (1)
13585
14506
  switch (_context4.prev = _context4.next) {
13586
14507
  case 0:
13587
- reuseMse = _args4.length > 1 && _args4[1] !== void 0 ? _args4[1] : false;
14508
+ url = _args4.length > 0 && _args4[0] !== void 0 ? _args4[0] : "";
14509
+ options = _args4.length > 1 && _args4[1] !== void 0 ? _args4[1] : {};
14510
+ reuseMse = typeof options === "boolean" ? options : !!(options !== null && options !== void 0 && options.reuseMse);
14511
+ if (_typeof$2(options) === "object" && options !== null && options !== void 0 && options.clearSwitchStatus) {
14512
+ this._urlSwitching = false;
14513
+ this._switchUrlOpts = null;
14514
+ this.config.startTime = void 0;
14515
+ }
13588
14516
  if (url)
13589
14517
  this.config.url = url;
13590
14518
  url = this.config.url;
13591
- _context4.next = 5;
14519
+ _context4.next = 8;
13592
14520
  return this._reset(reuseMse);
13593
- case 5:
13594
- _context4.next = 7;
14521
+ case 8:
14522
+ _context4.next = 10;
13595
14523
  return this._loadData(url);
13596
- case 7:
14524
+ case 10:
13597
14525
  this._startTick();
13598
- case 8:
14526
+ case 11:
13599
14527
  case "end":
13600
14528
  return _context4.stop();
13601
14529
  }
13602
14530
  }, _callee4, this);
13603
14531
  }));
13604
- function load(_x) {
14532
+ function load() {
13605
14533
  return _load.apply(this, arguments);
13606
14534
  }
13607
14535
  return load;
@@ -13610,7 +14538,7 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13610
14538
  key: "_loadData",
13611
14539
  value: function() {
13612
14540
  var _loadData2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee5(url) {
13613
- var manifest, currentStream, _this$_switchUrlOpts, _this$_switchUrlOpts2, switchTimePoint, segIdx, nextSeg, bufferClearStartPoint, preIndex, startTime, _this$_switchUrlOpts3;
14541
+ var manifest, currentStream, preIndex, _this$_switchUrlOpts, _this$_switchUrlOpts3, _this$_switchUrlOpts4, _this$_switchUrlOpts2, switchTimePoint, segIdx, nextSeg, bufferClearStartPoint, startTime, _this$_switchUrlOpts5;
13614
14542
  return _regeneratorRuntime$1().wrap(function _callee5$(_context5) {
13615
14543
  while (1)
13616
14544
  switch (_context5.prev = _context5.next) {
@@ -13631,41 +14559,46 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13631
14559
  case 5:
13632
14560
  manifest = _context5.sent;
13633
14561
  currentStream = this._playlist.currentStream;
13634
- if (!(this._urlSwitching && !this.isLive)) {
13635
- _context5.next = 17;
14562
+ if (!this._urlSwitching) {
14563
+ _context5.next = 23;
13636
14564
  break;
13637
14565
  }
14566
+ if (!this.isLive) {
14567
+ _context5.next = 14;
14568
+ break;
14569
+ }
14570
+ preIndex = this._playlist.setNextSegmentBySN(this._prevSegSn);
14571
+ logger.log("segment nb=".concat(this._prevSegSn, " index of ").concat(preIndex, " in the new playlist"));
14572
+ if (preIndex === -1) {
14573
+ this._prevSegCc = null;
14574
+ this._prevSegSn = null;
14575
+ }
14576
+ _context5.next = 23;
14577
+ break;
14578
+ case 14:
13638
14579
  if (currentStream.bitrate === 0 && (_this$_switchUrlOpts = this._switchUrlOpts) !== null && _this$_switchUrlOpts !== void 0 && _this$_switchUrlOpts.bitrate) {
13639
14580
  currentStream.bitrate = (_this$_switchUrlOpts2 = this._switchUrlOpts) === null || _this$_switchUrlOpts2 === void 0 ? void 0 : _this$_switchUrlOpts2.bitrate;
13640
14581
  }
13641
- switchTimePoint = this._getSeamlessSwitchPoint();
14582
+ switchTimePoint = typeof ((_this$_switchUrlOpts3 = this._switchUrlOpts) === null || _this$_switchUrlOpts3 === void 0 ? void 0 : _this$_switchUrlOpts3.startTime) === "number" ? (_this$_switchUrlOpts4 = this._switchUrlOpts) === null || _this$_switchUrlOpts4 === void 0 ? void 0 : _this$_switchUrlOpts4.startTime : this._getSeamlessSwitchPoint();
13642
14583
  this.config.startTime = switchTimePoint;
13643
14584
  segIdx = this._playlist.findSegmentIndexByTime(switchTimePoint);
13644
14585
  nextSeg = this._playlist.getSegmentByIndex(segIdx + 1);
13645
14586
  if (!nextSeg) {
13646
- _context5.next = 17;
14587
+ _context5.next = 23;
13647
14588
  break;
13648
14589
  }
13649
14590
  bufferClearStartPoint = nextSeg.start;
13650
- _context5.next = 17;
14591
+ _context5.next = 23;
13651
14592
  return this._bufferService.removeBuffer(bufferClearStartPoint);
13652
- case 17:
13653
- if (this._urlSwitching && this.isLive) {
13654
- preIndex = this._playlist.setNextSegmentBySN(this._prevSegSn);
13655
- logger.log("segment nb=".concat(this._prevSegSn, " index of ").concat(preIndex, " in the new playlist"));
13656
- if (preIndex === -1) {
13657
- this._prevSegCc = null;
13658
- this._prevSegSn = null;
13659
- }
13660
- }
14593
+ case 23:
13661
14594
  if (manifest) {
13662
- _context5.next = 20;
14595
+ _context5.next = 25;
13663
14596
  break;
13664
14597
  }
13665
14598
  return _context5.abrupt("return");
13666
- case 20:
14599
+ case 25:
13667
14600
  if (!this.isLive) {
13668
- _context5.next = 31;
14601
+ _context5.next = 36;
13669
14602
  break;
13670
14603
  }
13671
14604
  this._bufferService.setLiveSeekableRange(0, 4294967295);
@@ -13678,35 +14611,35 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13678
14611
  if (!manifest.isMaster)
13679
14612
  this._pollM3U8(url);
13680
14613
  if (!(this._playlist.nbSegments < this.config.minSegmentsStartPlay)) {
13681
- _context5.next = 28;
14614
+ _context5.next = 33;
13682
14615
  break;
13683
14616
  }
13684
14617
  return _context5.abrupt("return");
13685
- case 28:
13686
- _context5.next = 30;
14618
+ case 33:
14619
+ _context5.next = 35;
13687
14620
  return this._loadSegment();
13688
- case 30:
14621
+ case 35:
13689
14622
  return _context5.abrupt("return");
13690
- case 31:
13691
- _context5.next = 33;
14623
+ case 36:
14624
+ _context5.next = 38;
13692
14625
  return this._bufferService.updateDuration(currentStream.totalDuration);
13693
- case 33:
14626
+ case 38:
13694
14627
  startTime = this.config.startTime;
13695
14628
  if (startTime) {
13696
- if (!((_this$_switchUrlOpts3 = this._switchUrlOpts) !== null && _this$_switchUrlOpts3 !== void 0 && _this$_switchUrlOpts3.seamless)) {
14629
+ if (!((_this$_switchUrlOpts5 = this._switchUrlOpts) !== null && _this$_switchUrlOpts5 !== void 0 && _this$_switchUrlOpts5.seamless)) {
13697
14630
  this.media.currentTime = startTime;
13698
14631
  }
13699
14632
  this._playlist.setNextSegmentByIndex(this._playlist.findSegmentIndexByTime(startTime) || 0);
13700
14633
  }
13701
- _context5.next = 37;
14634
+ _context5.next = 42;
13702
14635
  return this._loadSegment();
13703
- case 37:
14636
+ case 42:
13704
14637
  case "end":
13705
14638
  return _context5.stop();
13706
14639
  }
13707
14640
  }, _callee5, this);
13708
14641
  }));
13709
- function _loadData(_x2) {
14642
+ function _loadData(_x) {
13710
14643
  return _loadData2.apply(this, arguments);
13711
14644
  }
13712
14645
  return _loadData;
@@ -13720,18 +14653,20 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13720
14653
  switch (_context6.prev = _context6.next) {
13721
14654
  case 0:
13722
14655
  this.config.startTime = 0;
13723
- _context6.next = 3;
14656
+ this._urlSwitching = false;
14657
+ this._switchUrlOpts = null;
14658
+ _context6.next = 5;
13724
14659
  return this.load();
13725
- case 3:
14660
+ case 5:
13726
14661
  this._reloadOnPlay = false;
13727
14662
  return _context6.abrupt("return", this.media.play(!isPlayEmit));
13728
- case 5:
14663
+ case 7:
13729
14664
  case "end":
13730
14665
  return _context6.stop();
13731
14666
  }
13732
14667
  }, _callee6, this);
13733
14668
  }));
13734
- function replay(_x3) {
14669
+ function replay(_x2) {
13735
14670
  return _replay.apply(this, arguments);
13736
14671
  }
13737
14672
  return replay;
@@ -13836,7 +14771,7 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13836
14771
  }
13837
14772
  }, _callee7, this, [[18, 29]]);
13838
14773
  }));
13839
- function switchURL(_x4) {
14774
+ function switchURL(_x3) {
13840
14775
  return _switchURL.apply(this, arguments);
13841
14776
  }
13842
14777
  return switchURL;
@@ -13922,7 +14857,7 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13922
14857
  }
13923
14858
  }, _callee8, this, [[8, 16], [21, 31]]);
13924
14859
  }));
13925
- function switchStream(_x5) {
14860
+ function switchStream(_x4) {
13926
14861
  return _switchStream.apply(this, arguments);
13927
14862
  }
13928
14863
  return switchStream;
@@ -14008,7 +14943,7 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14008
14943
  }
14009
14944
  }, _callee9, this, [[10, 18], [22, 32]]);
14010
14945
  }));
14011
- function switchAudioStream(_x6) {
14946
+ function switchAudioStream(_x5) {
14012
14947
  return _switchAudioStream.apply(this, arguments);
14013
14948
  }
14014
14949
  return switchAudioStream;
@@ -14033,25 +14968,50 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14033
14968
  }
14034
14969
  }, _callee10, this);
14035
14970
  }));
14036
- function switchSubtitleStream(_x7) {
14971
+ function switchSubtitleStream(_x6) {
14037
14972
  return _switchSubtitleStream.apply(this, arguments);
14038
14973
  }
14039
14974
  return switchSubtitleStream;
14040
14975
  }()
14041
14976
  }, {
14042
- key: "destroy",
14977
+ key: "detachMedia",
14043
14978
  value: function() {
14044
- var _destroy = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee11() {
14045
- var _this$_seiService2;
14979
+ var _detachMedia = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee11() {
14046
14980
  return _regeneratorRuntime$1().wrap(function _callee11$(_context11) {
14047
14981
  while (1)
14048
14982
  switch (_context11.prev = _context11.next) {
14983
+ case 0:
14984
+ if (!this._bufferService) {
14985
+ _context11.next = 3;
14986
+ break;
14987
+ }
14988
+ _context11.next = 3;
14989
+ return this._bufferService.detachMedia();
14990
+ case 3:
14991
+ case "end":
14992
+ return _context11.stop();
14993
+ }
14994
+ }, _callee11, this);
14995
+ }));
14996
+ function detachMedia() {
14997
+ return _detachMedia.apply(this, arguments);
14998
+ }
14999
+ return detachMedia;
15000
+ }()
15001
+ }, {
15002
+ key: "destroy",
15003
+ value: function() {
15004
+ var _destroy = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee12() {
15005
+ var _this$_seiService2;
15006
+ return _regeneratorRuntime$1().wrap(function _callee12$(_context12) {
15007
+ while (1)
15008
+ switch (_context12.prev = _context12.next) {
14049
15009
  case 0:
14050
15010
  if (this.media) {
14051
- _context11.next = 2;
15011
+ _context12.next = 2;
14052
15012
  break;
14053
15013
  }
14054
- return _context11.abrupt("return");
15014
+ return _context12.abrupt("return");
14055
15015
  case 2:
14056
15016
  this.removeAllListeners();
14057
15017
  this._playlist.reset();
@@ -14062,15 +15022,15 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14062
15022
  this.media.removeEventListener("pause", this._onPause);
14063
15023
  this.media.removeEventListener("seeking", this._onSeeking);
14064
15024
  this.media.removeEventListener("timeupdate", this._onTimeupdate);
14065
- _context11.next = 13;
15025
+ _context12.next = 13;
14066
15026
  return Promise.all([this._clear(), this._bufferService.destroy()]);
14067
15027
  case 13:
14068
15028
  this.media = null;
14069
15029
  case 14:
14070
15030
  case "end":
14071
- return _context11.stop();
15031
+ return _context12.stop();
14072
15032
  }
14073
- }, _callee11, this);
15033
+ }, _callee12, this);
14074
15034
  }));
14075
15035
  function destroy() {
14076
15036
  return _destroy.apply(this, arguments);
@@ -14080,48 +15040,48 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14080
15040
  }, {
14081
15041
  key: "_loadM3U8",
14082
15042
  value: function() {
14083
- var _loadM3U = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee12(url) {
15043
+ var _loadM3U = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee13(url) {
14084
15044
  var playlist, _this$config$manifest, _this$config$manifest2, manifest, _ref4, _ref5, _this$_playlist$curre;
14085
- return _regeneratorRuntime$1().wrap(function _callee12$(_context12) {
15045
+ return _regeneratorRuntime$1().wrap(function _callee13$(_context13) {
14086
15046
  while (1)
14087
- switch (_context12.prev = _context12.next) {
15047
+ switch (_context13.prev = _context13.next) {
14088
15048
  case 0:
14089
- _context12.prev = 0;
15049
+ _context13.prev = 0;
14090
15050
  manifest = (_this$config$manifest = this.config.manifestList) === null || _this$config$manifest === void 0 ? void 0 : (_this$config$manifest2 = _this$config$manifest.filter(function(x) {
14091
15051
  return x.url === url;
14092
15052
  })[0]) === null || _this$config$manifest2 === void 0 ? void 0 : _this$config$manifest2.manifest;
14093
15053
  if (!manifest) {
14094
- _context12.next = 6;
15054
+ _context13.next = 6;
14095
15055
  break;
14096
15056
  }
14097
- _context12.t0 = this._manifestLoader.parseText(manifest, url);
14098
- _context12.next = 9;
15057
+ _context13.t0 = this._manifestLoader.parseText(manifest, url);
15058
+ _context13.next = 9;
14099
15059
  break;
14100
15060
  case 6:
14101
- _context12.next = 8;
15061
+ _context13.next = 8;
14102
15062
  return this._manifestLoader.load(url);
14103
15063
  case 8:
14104
- _context12.t0 = _context12.sent;
15064
+ _context13.t0 = _context13.sent;
14105
15065
  case 9:
14106
- _ref4 = _context12.t0;
15066
+ _ref4 = _context13.t0;
14107
15067
  _ref5 = _slicedToArray$1(_ref4, 1);
14108
15068
  playlist = _ref5[0];
14109
- _context12.next = 17;
15069
+ _context13.next = 17;
14110
15070
  break;
14111
15071
  case 14:
14112
- _context12.prev = 14;
14113
- _context12.t1 = _context12["catch"](0);
14114
- throw this._emitError(StreamingError.create(_context12.t1));
15072
+ _context13.prev = 14;
15073
+ _context13.t1 = _context13["catch"](0);
15074
+ throw this._emitError(StreamingError.create(_context13.t1));
14115
15075
  case 17:
14116
15076
  if (playlist) {
14117
- _context12.next = 19;
15077
+ _context13.next = 19;
14118
15078
  break;
14119
15079
  }
14120
- return _context12.abrupt("return");
15080
+ return _context13.abrupt("return");
14121
15081
  case 19:
14122
15082
  this._playlist.upsertPlaylist(playlist);
14123
15083
  if (!playlist.isMaster) {
14124
- _context12.next = 24;
15084
+ _context13.next = 24;
14125
15085
  break;
14126
15086
  }
14127
15087
  if ((_this$_playlist$curre = this._playlist.currentStream.subtitleStreams) !== null && _this$_playlist$curre !== void 0 && _this$_playlist$curre.length) {
@@ -14129,18 +15089,18 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14129
15089
  list: this._playlist.currentStream.subtitleStreams
14130
15090
  });
14131
15091
  }
14132
- _context12.next = 24;
15092
+ _context13.next = 24;
14133
15093
  return this._refreshM3U8();
14134
15094
  case 24:
14135
15095
  this.emit(Event$1.STREAM_PARSED);
14136
- return _context12.abrupt("return", playlist);
15096
+ return _context13.abrupt("return", playlist);
14137
15097
  case 26:
14138
15098
  case "end":
14139
- return _context12.stop();
15099
+ return _context13.stop();
14140
15100
  }
14141
- }, _callee12, this, [[0, 14]]);
15101
+ }, _callee13, this, [[0, 14]]);
14142
15102
  }));
14143
- function _loadM3U8(_x8) {
15103
+ function _loadM3U8(_x7) {
14144
15104
  return _loadM3U.apply(this, arguments);
14145
15105
  }
14146
15106
  return _loadM3U8;
@@ -14174,7 +15134,7 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14174
15134
  var isEmpty = this._playlist.isEmpty;
14175
15135
  var pollInterval;
14176
15136
  if (this._playlist.lowLatency) {
14177
- pollInterval = (this._playlist.currentStream.partTargetDuration * 2 || 0) * 1e3;
15137
+ pollInterval = (this._playlist.currentStream.partTargetDuration || 0) * 1e3;
14178
15138
  } else {
14179
15139
  var _this$_playlist$lastS;
14180
15140
  pollInterval = (((_this$_playlist$lastS = this._playlist.lastSegment) === null || _this$_playlist$lastS === void 0 ? void 0 : _this$_playlist$lastS.duration) || 0) * 1e3;
@@ -14202,53 +15162,53 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14202
15162
  }, {
14203
15163
  key: "_loadSegmentDirect",
14204
15164
  value: function() {
14205
- var _loadSegmentDirect2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee13(loadOnce) {
15165
+ var _loadSegmentDirect2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee14(loadOnce) {
14206
15166
  var seg, appended, cachedError, _this$_playlist$curre2, bufferEnd, sameStream;
14207
- return _regeneratorRuntime$1().wrap(function _callee13$(_context13) {
15167
+ return _regeneratorRuntime$1().wrap(function _callee14$(_context14) {
14208
15168
  while (1)
14209
- switch (_context13.prev = _context13.next) {
15169
+ switch (_context14.prev = _context14.next) {
14210
15170
  case 0:
14211
15171
  seg = this._playlist.nextSegment;
14212
15172
  if (seg) {
14213
- _context13.next = 3;
15173
+ _context14.next = 3;
14214
15174
  break;
14215
15175
  }
14216
- return _context13.abrupt("return");
15176
+ return _context14.abrupt("return");
14217
15177
  case 3:
14218
15178
  appended = false;
14219
15179
  cachedError = null;
14220
- _context13.prev = 5;
15180
+ _context14.prev = 5;
14221
15181
  this._segmentProcessing = true;
14222
15182
  logger.log("load segment, sn:".concat(seg.sn, ", [").concat(seg.start, ", ").concat(seg.end, "], partIndex:").concat(seg.partIndex));
14223
- _context13.next = 10;
15183
+ _context14.next = 10;
14224
15184
  return this._reqAndBufferSegment(seg, this._playlist.getAudioSegment(seg));
14225
15185
  case 10:
14226
- appended = _context13.sent;
14227
- _context13.next = 16;
15186
+ appended = _context14.sent;
15187
+ _context14.next = 16;
14228
15188
  break;
14229
15189
  case 13:
14230
- _context13.prev = 13;
14231
- _context13.t0 = _context13["catch"](5);
14232
- cachedError = _context13.t0;
15190
+ _context14.prev = 13;
15191
+ _context14.t0 = _context14["catch"](5);
15192
+ cachedError = _context14.t0;
14233
15193
  case 16:
14234
- _context13.prev = 16;
15194
+ _context14.prev = 16;
14235
15195
  this._segmentProcessing = false;
14236
- return _context13.finish(16);
15196
+ return _context14.finish(16);
14237
15197
  case 19:
14238
15198
  if (!cachedError) {
14239
- _context13.next = 26;
15199
+ _context14.next = 26;
14240
15200
  break;
14241
15201
  }
14242
15202
  if (!this._bufferService.isFull()) {
14243
- _context13.next = 25;
15203
+ _context14.next = 25;
14244
15204
  break;
14245
15205
  }
14246
15206
  logger.log("load segment, sn:".concat(seg.sn, ", partIndex:").concat(seg.partIndex));
14247
15207
  this._segmentProcessing = true;
14248
15208
  this._isProcessQuotaExceeded = true;
14249
- return _context13.abrupt("return", false);
15209
+ return _context14.abrupt("return", false);
14250
15210
  case 25:
14251
- return _context13.abrupt("return", this._emitError(StreamingError.create(cachedError)));
15211
+ return _context14.abrupt("return", this._emitError(StreamingError.create(cachedError)));
14252
15212
  case 26:
14253
15213
  if (appended) {
14254
15214
  bufferEnd = this.bufferInfo().end;
@@ -14274,14 +15234,14 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14274
15234
  this._loadSegment();
14275
15235
  }
14276
15236
  }
14277
- return _context13.abrupt("return", appended);
15237
+ return _context14.abrupt("return", appended);
14278
15238
  case 28:
14279
15239
  case "end":
14280
- return _context13.stop();
15240
+ return _context14.stop();
14281
15241
  }
14282
- }, _callee13, this, [[5, 13, 16, 19]]);
15242
+ }, _callee14, this, [[5, 13, 16, 19]]);
14283
15243
  }));
14284
- function _loadSegmentDirect(_x9) {
15244
+ function _loadSegmentDirect(_x8) {
14285
15245
  return _loadSegmentDirect2.apply(this, arguments);
14286
15246
  }
14287
15247
  return _loadSegmentDirect;
@@ -14289,45 +15249,45 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14289
15249
  }, {
14290
15250
  key: "_reqAndBufferSegment",
14291
15251
  value: function() {
14292
- var _reqAndBufferSegment2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee14(seg, audioSeg) {
15252
+ var _reqAndBufferSegment2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee15(seg, audioSeg) {
14293
15253
  var _this$_bufferService2;
14294
15254
  var cc, discontinuity, responses, data, sn, start, stream, before, contiguous, segStart;
14295
- return _regeneratorRuntime$1().wrap(function _callee14$(_context14) {
15255
+ return _regeneratorRuntime$1().wrap(function _callee15$(_context15) {
14296
15256
  while (1)
14297
- switch (_context14.prev = _context14.next) {
15257
+ switch (_context15.prev = _context15.next) {
14298
15258
  case 0:
14299
15259
  cc = seg ? seg.cc : audioSeg.cc;
14300
15260
  discontinuity = this._prevSegCc !== cc;
14301
15261
  responses = [];
14302
- _context14.prev = 3;
14303
- _context14.next = 6;
15262
+ _context15.prev = 3;
15263
+ _context15.next = 6;
14304
15264
  return this._segmentLoader.load(seg, audioSeg, discontinuity);
14305
15265
  case 6:
14306
- responses = _context14.sent;
14307
- _context14.next = 14;
15266
+ responses = _context15.sent;
15267
+ _context15.next = 14;
14308
15268
  break;
14309
15269
  case 9:
14310
- _context14.prev = 9;
14311
- _context14.t0 = _context14["catch"](3);
14312
- _context14.t0.fatal = false;
14313
- this._segmentLoader.error = _context14.t0;
14314
- throw _context14.t0;
15270
+ _context15.prev = 9;
15271
+ _context15.t0 = _context15["catch"](3);
15272
+ _context15.t0.fatal = false;
15273
+ this._segmentLoader.error = _context15.t0;
15274
+ throw _context15.t0;
14315
15275
  case 14:
14316
15276
  if (responses[0]) {
14317
- _context14.next = 16;
15277
+ _context15.next = 16;
14318
15278
  break;
14319
15279
  }
14320
- return _context14.abrupt("return");
15280
+ return _context15.abrupt("return");
14321
15281
  case 16:
14322
- _context14.next = 18;
15282
+ _context15.next = 18;
14323
15283
  return (_this$_bufferService2 = this._bufferService).decryptBuffer.apply(_this$_bufferService2, _toConsumableArray$2(responses));
14324
15284
  case 18:
14325
- data = _context14.sent;
15285
+ data = _context15.sent;
14326
15286
  if (data) {
14327
- _context14.next = 21;
15287
+ _context15.next = 21;
14328
15288
  break;
14329
15289
  }
14330
- return _context14.abrupt("return");
15290
+ return _context15.abrupt("return");
14331
15291
  case 21:
14332
15292
  sn = seg ? seg.sn : audioSeg.sn;
14333
15293
  start = seg ? seg.start : audioSeg.start;
@@ -14341,26 +15301,26 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14341
15301
  logger.warn("update the new playlist liveEdge, segment id=".concat(sn, ", buffer start=").concat(segStart, ", liveEdge=").concat(this._playlist.liveEdge));
14342
15302
  start = segStart;
14343
15303
  }
14344
- _context14.next = 30;
15304
+ _context15.next = 30;
14345
15305
  return this._bufferService.appendBuffer(seg, audioSeg, data[0], data[1], discontinuity, contiguous, start);
14346
15306
  case 30:
14347
15307
  this.emit(Event$1.APPEND_COST, {
14348
15308
  elapsed: Date.now() - before,
14349
15309
  url: seg.url
14350
15310
  });
14351
- _context14.next = 33;
15311
+ _context15.next = 33;
14352
15312
  return this._bufferService.evictBuffer(this.config.bufferBehind);
14353
15313
  case 33:
14354
15314
  this._prevSegCc = cc;
14355
15315
  this._prevSegSn = sn;
14356
- return _context14.abrupt("return", true);
15316
+ return _context15.abrupt("return", true);
14357
15317
  case 36:
14358
15318
  case "end":
14359
- return _context14.stop();
15319
+ return _context15.stop();
14360
15320
  }
14361
- }, _callee14, this, [[3, 9]]);
15321
+ }, _callee15, this, [[3, 9]]);
14362
15322
  }));
14363
- function _reqAndBufferSegment(_x10, _x11) {
15323
+ function _reqAndBufferSegment(_x9, _x10) {
14364
15324
  return _reqAndBufferSegment2.apply(this, arguments);
14365
15325
  }
14366
15326
  return _reqAndBufferSegment;
@@ -14368,11 +15328,11 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14368
15328
  }, {
14369
15329
  key: "_onCheckQuotaExceeded",
14370
15330
  value: function() {
14371
- var _onCheckQuotaExceeded2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee15() {
15331
+ var _onCheckQuotaExceeded2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee16() {
14372
15332
  var seekTime, buffered, inBuffered, i, bufferBehind, mediaTime;
14373
- return _regeneratorRuntime$1().wrap(function _callee15$(_context15) {
15333
+ return _regeneratorRuntime$1().wrap(function _callee16$(_context16) {
14374
15334
  while (1)
14375
- switch (_context15.prev = _context15.next) {
15335
+ switch (_context16.prev = _context16.next) {
14376
15336
  case 0:
14377
15337
  seekTime = this.media.currentTime;
14378
15338
  buffered = this.media.buffered;
@@ -14380,37 +15340,37 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14380
15340
  i = 0;
14381
15341
  case 4:
14382
15342
  if (!(i < buffered.length)) {
14383
- _context15.next = 11;
15343
+ _context16.next = 11;
14384
15344
  break;
14385
15345
  }
14386
15346
  if (!(buffered.start(0) >= seekTime && seekTime < buffered.end(i))) {
14387
- _context15.next = 8;
15347
+ _context16.next = 8;
14388
15348
  break;
14389
15349
  }
14390
15350
  inBuffered = true;
14391
- return _context15.abrupt("break", 11);
15351
+ return _context16.abrupt("break", 11);
14392
15352
  case 8:
14393
15353
  i++;
14394
- _context15.next = 4;
15354
+ _context16.next = 4;
14395
15355
  break;
14396
15356
  case 11:
14397
15357
  if (!this._bufferService.isFull()) {
14398
- _context15.next = 17;
15358
+ _context16.next = 17;
14399
15359
  break;
14400
15360
  }
14401
15361
  bufferBehind = inBuffered ? this.config.bufferBehind : 5;
14402
15362
  mediaTime = this.media.currentTime;
14403
15363
  if (!(mediaTime - bufferBehind > 0)) {
14404
- _context15.next = 17;
15364
+ _context16.next = 17;
14405
15365
  break;
14406
15366
  }
14407
- _context15.next = 17;
15367
+ _context16.next = 17;
14408
15368
  return this._bufferService.removeBuffer(0, mediaTime - bufferBehind);
14409
15369
  case 17:
14410
15370
  case "end":
14411
- return _context15.stop();
15371
+ return _context16.stop();
14412
15372
  }
14413
- }, _callee15, this);
15373
+ }, _callee16, this);
14414
15374
  }));
14415
15375
  function _onCheckQuotaExceeded() {
14416
15376
  return _onCheckQuotaExceeded2.apply(this, arguments);
@@ -14428,22 +15388,22 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14428
15388
  }, {
14429
15389
  key: "_clear",
14430
15390
  value: function() {
14431
- var _clear2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee16() {
14432
- return _regeneratorRuntime$1().wrap(function _callee16$(_context16) {
15391
+ var _clear2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee17() {
15392
+ return _regeneratorRuntime$1().wrap(function _callee17$(_context17) {
14433
15393
  while (1)
14434
- switch (_context16.prev = _context16.next) {
15394
+ switch (_context17.prev = _context17.next) {
14435
15395
  case 0:
14436
15396
  clearTimeout(this._disconnectTimer);
14437
15397
  this._stopTick();
14438
- _context16.next = 4;
15398
+ _context17.next = 4;
14439
15399
  return Promise.all([this._segmentLoader.cancel(), this._manifestLoader.stopPoll()]);
14440
15400
  case 4:
14441
15401
  this._segmentProcessing = false;
14442
15402
  case 5:
14443
15403
  case "end":
14444
- return _context16.stop();
15404
+ return _context17.stop();
14445
15405
  }
14446
- }, _callee16, this);
15406
+ }, _callee17, this);
14447
15407
  }));
14448
15408
  function _clear() {
14449
15409
  return _clear2.apply(this, arguments);
@@ -14453,14 +15413,14 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14453
15413
  }, {
14454
15414
  key: "_reset",
14455
15415
  value: function() {
14456
- var _reset2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee17() {
15416
+ var _reset2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee18() {
14457
15417
  var _this$_seiService3;
14458
- var reuseMse, _args17 = arguments;
14459
- return _regeneratorRuntime$1().wrap(function _callee17$(_context17) {
15418
+ var reuseMse, _args18 = arguments;
15419
+ return _regeneratorRuntime$1().wrap(function _callee18$(_context18) {
14460
15420
  while (1)
14461
- switch (_context17.prev = _context17.next) {
15421
+ switch (_context18.prev = _context18.next) {
14462
15422
  case 0:
14463
- reuseMse = _args17.length > 0 && _args17[0] !== void 0 ? _args17[0] : false;
15423
+ reuseMse = _args18.length > 0 && _args18[0] !== void 0 ? _args18[0] : false;
14464
15424
  this._reloadOnPlay = false;
14465
15425
  this._prevSegSn = null;
14466
15426
  this._prevSegCc = null;
@@ -14469,15 +15429,15 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14469
15429
  this._segmentLoader.reset();
14470
15430
  (_this$_seiService3 = this._seiService) === null || _this$_seiService3 === void 0 ? void 0 : _this$_seiService3.reset();
14471
15431
  this._stats.reset();
14472
- _context17.next = 11;
15432
+ _context18.next = 11;
14473
15433
  return this._clear();
14474
15434
  case 11:
14475
- return _context17.abrupt("return", this._bufferService.reset(reuseMse));
15435
+ return _context18.abrupt("return", this._bufferService.reset(reuseMse));
14476
15436
  case 12:
14477
15437
  case "end":
14478
- return _context17.stop();
15438
+ return _context18.stop();
14479
15439
  }
14480
- }, _callee17, this);
15440
+ }, _callee18, this);
14481
15441
  }));
14482
15442
  function _reset() {
14483
15443
  return _reset2.apply(this, arguments);
@@ -14558,8 +15518,8 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14558
15518
  value: function _tryEos() {
14559
15519
  var _this$_bufferService3, _this$_bufferService4;
14560
15520
  var media = this.media;
14561
- var _this$_playlist = this._playlist, nextSegment = _this$_playlist.nextSegment, lastSegment = _this$_playlist.lastSegment;
14562
- var eosAllowed = !nextSegment && media.readyState && media.duration > 0 && ((_this$_bufferService3 = this._bufferService) === null || _this$_bufferService3 === void 0 ? void 0 : _this$_bufferService3.msIsOpened) && !((_this$_bufferService4 = this._bufferService) !== null && _this$_bufferService4 !== void 0 && _this$_bufferService4.msHasOpTasks);
15521
+ var _this$_playlist2 = this._playlist, nextSegment = _this$_playlist2.nextSegment, lastSegment = _this$_playlist2.lastSegment;
15522
+ var eosAllowed = (!nextSegment || lastSegment && Buffer$1.isBuffered(media, lastSegment.start + lastSegment.duration / 2)) && media.readyState && media.duration > 0 && ((_this$_bufferService3 = this._bufferService) === null || _this$_bufferService3 === void 0 ? void 0 : _this$_bufferService3.msIsOpened) && !((_this$_bufferService4 = this._bufferService) !== null && _this$_bufferService4 !== void 0 && _this$_bufferService4.msHasOpTasks);
14563
15523
  if (!eosAllowed) {
14564
15524
  return;
14565
15525
  }
@@ -14595,7 +15555,7 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14595
15555
  }]);
14596
15556
  return Hls2;
14597
15557
  }(EventEmitter);
14598
- _defineProperty$3(Hls, "version", "3.0.19-rc.0");
15558
+ _defineProperty$3(Hls, "version", "3.0.20-alpha.3");
14599
15559
  try {
14600
15560
  if (localStorage.getItem("xgd")) {
14601
15561
  Hls.enableLogger();
@@ -14686,6 +15646,7 @@ var PluginExtension = /* @__PURE__ */ function() {
14686
15646
  }]);
14687
15647
  return PluginExtension2;
14688
15648
  }();
15649
+ var _excluded = ["currentTime"];
14689
15650
  function parseSwitchUrlArgs(args, plugin) {
14690
15651
  var player = plugin.player;
14691
15652
  var curTime = player.currentTime;
@@ -14696,9 +15657,14 @@ function parseSwitchUrlArgs(args, plugin) {
14696
15657
  case "boolean":
14697
15658
  options.seamless = args;
14698
15659
  break;
14699
- case "object":
14700
- Object.assign(options, args);
15660
+ case "object": {
15661
+ var currentTime = args.currentTime, rest = _objectWithoutProperties$1(args, _excluded);
15662
+ Object.assign(options, rest);
15663
+ if (typeof currentTime === "number") {
15664
+ options.startTime = currentTime;
15665
+ }
14701
15666
  break;
15667
+ }
14702
15668
  }
14703
15669
  return options;
14704
15670
  }
@@ -14708,10 +15674,11 @@ var HlsPlugin = /* @__PURE__ */ function(_BasePlugin) {
14708
15674
  function HlsPlugin2() {
14709
15675
  var _this;
14710
15676
  _classCallCheck$3(this, HlsPlugin2);
14711
- for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {
14712
- _args[_key] = arguments[_key];
15677
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
15678
+ args[_key] = arguments[_key];
14713
15679
  }
14714
- _this = _super.call.apply(_super, [this].concat(_args));
15680
+ _this = _super.call.apply(_super, [this].concat(args));
15681
+ _defineProperty$3(_assertThisInitialized$2(_this), "logger", logger);
14715
15682
  _defineProperty$3(_assertThisInitialized$2(_this), "hls", null);
14716
15683
  _defineProperty$3(_assertThisInitialized$2(_this), "pluginExtension", null);
14717
15684
  _defineProperty$3(_assertThisInitialized$2(_this), "getStats", function() {
@@ -14723,24 +15690,6 @@ var HlsPlugin = /* @__PURE__ */ function(_BasePlugin) {
14723
15690
  var lang = _ref.lang;
14724
15691
  (_this$hls2 = _this.hls) === null || _this$hls2 === void 0 ? void 0 : _this$hls2.switchSubtitleStream(lang);
14725
15692
  });
14726
- _defineProperty$3(_assertThisInitialized$2(_this), "_onSwitchURL", function(url, args) {
14727
- return new Promise(function(resolve, reject) {
14728
- var _assertThisInitialize = _assertThisInitialized$2(_this), player = _assertThisInitialize.player, hls = _assertThisInitialize.hls;
14729
- if (hls) {
14730
- var _this$player$config, _this$player$config$h;
14731
- var options = parseSwitchUrlArgs(args, _assertThisInitialized$2(_this));
14732
- player.config.url = url;
14733
- hls.switchURL(url, options).then(function() {
14734
- return resolve(true);
14735
- }).catch(reject);
14736
- if (!options.seamless && (_this$player$config = _this.player.config) !== null && _this$player$config !== void 0 && (_this$player$config$h = _this$player$config.hls) !== null && _this$player$config$h !== void 0 && _this$player$config$h.keepStatusAfterSwitch) {
14737
- _this._keepPauseStatus();
14738
- }
14739
- } else {
14740
- reject();
14741
- }
14742
- });
14743
- });
14744
15693
  _defineProperty$3(_assertThisInitialized$2(_this), "_keepPauseStatus", function() {
14745
15694
  var paused = _this.player.paused;
14746
15695
  if (!paused)
@@ -14765,8 +15714,8 @@ var HlsPlugin = /* @__PURE__ */ function(_BasePlugin) {
14765
15714
  }, {
14766
15715
  key: "softDecode",
14767
15716
  get: function get() {
14768
- var _this$player, _this$player$config2;
14769
- var mediaType = (_this$player = this.player) === null || _this$player === void 0 ? void 0 : (_this$player$config2 = _this$player.config) === null || _this$player$config2 === void 0 ? void 0 : _this$player$config2.mediaType;
15717
+ var _this$player, _this$player$config;
15718
+ var mediaType = (_this$player = this.player) === null || _this$player === void 0 ? void 0 : (_this$player$config = _this$player.config) === null || _this$player$config === void 0 ? void 0 : _this$player$config.mediaType;
14770
15719
  return !!mediaType && mediaType !== "video" && mediaType !== "audio";
14771
15720
  }
14772
15721
  }, {
@@ -14774,13 +15723,35 @@ var HlsPlugin = /* @__PURE__ */ function(_BasePlugin) {
14774
15723
  value: function beforePlayerInit() {
14775
15724
  var _this2 = this;
14776
15725
  var config = this.player.config;
15726
+ var mediaElem = this.player.media || this.player.video;
14777
15727
  var hlsOpts = config.hls || {};
14778
15728
  if (!config.url && !config.__allowHlsEmptyUrl__ || !hlsOpts.preferMMS && MSE.isMMSOnly()) {
14779
15729
  return;
14780
15730
  }
14781
15731
  if (this.hls)
14782
15732
  this.hls.destroy();
14783
- this.player.switchURL = this._onSwitchURL;
15733
+ var descriptor = Object.getOwnPropertyDescriptor(this.player, "switchURL");
15734
+ if (!descriptor || descriptor.writable) {
15735
+ this.player.switchURL = function(url, args) {
15736
+ return new Promise(function(resolve, reject) {
15737
+ var player = _this2.player, hls = _this2.hls;
15738
+ if (hls) {
15739
+ var _this2$player$config, _this2$player$config$;
15740
+ var options = parseSwitchUrlArgs(args, _this2);
15741
+ player.config.url = url;
15742
+ hls.switchURL(url, options).then(function() {
15743
+ return resolve(true);
15744
+ }).catch(reject);
15745
+ if (!options.seamless && (_this2$player$config = _this2.player.config) !== null && _this2$player$config !== void 0 && (_this2$player$config$ = _this2$player$config.hls) !== null && _this2$player$config$ !== void 0 && _this2$player$config$.keepStatusAfterSwitch) {
15746
+ _this2._keepPauseStatus();
15747
+ }
15748
+ } else {
15749
+ reject();
15750
+ }
15751
+ });
15752
+ };
15753
+ }
15754
+ var onSwitchUrl = this.player.switchURL;
14784
15755
  this.player.handleSource = false;
14785
15756
  hlsOpts.innerDegrade = hlsOpts.innerDegrade || config.innerDegrade;
14786
15757
  if (hlsOpts.disconnectTime === null || hlsOpts.disconnectTime === void 0)
@@ -14788,7 +15759,7 @@ var HlsPlugin = /* @__PURE__ */ function(_BasePlugin) {
14788
15759
  this.hls = new Hls(_objectSpread2$2({
14789
15760
  softDecode: this.softDecode,
14790
15761
  isLive: config.isLive,
14791
- media: this.player.media || this.player.video,
15762
+ media: mediaElem,
14792
15763
  startTime: config.startTime,
14793
15764
  url: config.url
14794
15765
  }, hlsOpts));
@@ -14806,7 +15777,7 @@ var HlsPlugin = /* @__PURE__ */ function(_BasePlugin) {
14806
15777
  if (this.softDecode) {
14807
15778
  this.pluginExtension = new PluginExtension(_objectSpread2$2({
14808
15779
  isLive: config.isLive,
14809
- media: this.player.video
15780
+ media: mediaElem
14810
15781
  }, hlsOpts), this);
14811
15782
  this.player.forceDegradeToVideo = function() {
14812
15783
  var _this2$pluginExtensio;
@@ -14823,8 +15794,8 @@ var HlsPlugin = /* @__PURE__ */ function(_BasePlugin) {
14823
15794
  return (_this2$hls2 = _this2.hls) === null || _this2$hls2 === void 0 ? void 0 : _this2$hls2.replay();
14824
15795
  });
14825
15796
  }
15797
+ this.on(URL_CHANGE, onSwitchUrl);
14826
15798
  this.on(SWITCH_SUBTITLE, this._onSwitchSubtitle);
14827
- this.on(URL_CHANGE, this._onSwitchURL);
14828
15799
  this.on(DESTROY, this.destroy.bind(this));
14829
15800
  this._transError();
14830
15801
  this._transCoreEvent(EVENT.TTFB);
@@ -14834,6 +15805,7 @@ var HlsPlugin = /* @__PURE__ */ function(_BasePlugin) {
14834
15805
  this._transCoreEvent(EVENT.LOAD_RETRY);
14835
15806
  this._transCoreEvent(EVENT.SOURCEBUFFER_CREATED);
14836
15807
  this._transCoreEvent(EVENT.MEDIASOURCE_OPENED);
15808
+ this._transCoreEvent(EVENT.APPEND_BUFFER);
14837
15809
  this._transCoreEvent(EVENT.REMOVE_BUFFER);
14838
15810
  this._transCoreEvent(EVENT.BUFFEREOS);
14839
15811
  this._transCoreEvent(EVENT.KEYFRAME);
@@ -14853,7 +15825,9 @@ var HlsPlugin = /* @__PURE__ */ function(_BasePlugin) {
14853
15825
  this._transCoreEvent(Event$1.SUBTITLE_PLAYLIST);
14854
15826
  this._transCoreEvent(Event$1.APPEND_COST);
14855
15827
  if (config.url) {
14856
- this.hls.load(config.url, true).catch(function(e) {
15828
+ this.hls.load(config.url, {
15829
+ reuseMse: true
15830
+ }).catch(function(e) {
14857
15831
  });
14858
15832
  }
14859
15833
  }