@volcengine/veplayer-plugin 2.4.5-rc.0 → 2.6.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/esm/index.d.ts +1 -0
  2. package/esm/index.development.css +11 -0
  3. package/esm/index.development.js +45800 -32626
  4. package/esm/index.production.css +1 -1
  5. package/esm/index.production.js +13 -4
  6. package/esm/veplayer.plugin.abr.development.js +71 -3
  7. package/esm/veplayer.plugin.abr.production.js +1 -1
  8. package/esm/veplayer.plugin.ad.development.css +11 -0
  9. package/esm/veplayer.plugin.ad.development.js +13194 -0
  10. package/esm/veplayer.plugin.ad.production.css +1 -0
  11. package/esm/veplayer.plugin.ad.production.js +4 -0
  12. package/esm/veplayer.plugin.drm.development.js +71 -3
  13. package/esm/veplayer.plugin.drm.production.js +1 -1
  14. package/esm/veplayer.plugin.flv.development.js +729 -196
  15. package/esm/veplayer.plugin.flv.production.js +1 -1
  16. package/esm/veplayer.plugin.hls.development.js +1509 -376
  17. package/esm/veplayer.plugin.hls.production.js +1 -1
  18. package/esm/veplayer.plugin.mp4.development.js +73 -5
  19. package/esm/veplayer.plugin.mp4.production.js +1 -1
  20. package/esm/veplayer.plugin.rtm.development.js +72 -4
  21. package/esm/veplayer.plugin.rtm.production.js +1 -1
  22. package/esm/veplayer.plugin.shaka.development.js +72 -4
  23. package/esm/veplayer.plugin.shaka.production.js +1 -1
  24. package/package.json +1 -1
  25. package/umd/index.d.ts +1 -0
  26. package/umd/veplayer.plugin.abr.development.js +71 -3
  27. package/umd/veplayer.plugin.abr.production.js +1 -1
  28. package/umd/veplayer.plugin.ad.development.css +11 -0
  29. package/umd/veplayer.plugin.ad.development.js +13197 -0
  30. package/umd/veplayer.plugin.ad.production.css +1 -0
  31. package/umd/veplayer.plugin.ad.production.js +1 -0
  32. package/umd/veplayer.plugin.drm.development.js +71 -3
  33. package/umd/veplayer.plugin.drm.production.js +1 -1
  34. package/umd/veplayer.plugin.flv.development.js +729 -196
  35. package/umd/veplayer.plugin.flv.production.js +1 -1
  36. package/umd/veplayer.plugin.hls.development.js +1476 -343
  37. package/umd/veplayer.plugin.hls.production.js +1 -1
  38. package/umd/veplayer.plugin.mp4.development.js +73 -5
  39. package/umd/veplayer.plugin.mp4.production.js +1 -1
  40. package/umd/veplayer.plugin.rtm.development.js +72 -4
  41. package/umd/veplayer.plugin.rtm.production.js +1 -1
  42. package/umd/veplayer.plugin.shaka.development.js +72 -4
  43. 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.21-rc.3";
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,16 @@ 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",
5776
+ MP3: "mp3"
5636
5777
  };
5637
5778
  var WarningType = {
5638
5779
  LARGE_AV_SHIFT: "LARGE_AV_SHIFT",
@@ -5672,6 +5813,7 @@ var VideoTrack = /* @__PURE__ */ function() {
5672
5813
  _defineProperty(this, "isVideoEncryption", false);
5673
5814
  _defineProperty(this, "isAudioEncryption", false);
5674
5815
  _defineProperty(this, "isVideo", true);
5816
+ _defineProperty(this, "lastKeyFrameDts", 0);
5675
5817
  _defineProperty(this, "kid", null);
5676
5818
  _defineProperty(this, "pssh", null);
5677
5819
  _defineProperty(this, "ext", void 0);
@@ -5714,6 +5856,9 @@ var VideoTrack = /* @__PURE__ */ function() {
5714
5856
  }, {
5715
5857
  key: "exist",
5716
5858
  value: function exist() {
5859
+ if (/av01/.test(this.codec)) {
5860
+ return true;
5861
+ }
5717
5862
  return !!(this.pps.length && this.sps.length && this.codec);
5718
5863
  }
5719
5864
  }, {
@@ -5737,6 +5882,7 @@ var AudioTrack = /* @__PURE__ */ function() {
5737
5882
  _defineProperty(this, "codecType", AudioCodecType.AAC);
5738
5883
  _defineProperty(this, "pid", -1);
5739
5884
  _defineProperty(this, "codec", "");
5885
+ _defineProperty(this, "container", "");
5740
5886
  _defineProperty(this, "sequenceNumber", 0);
5741
5887
  _defineProperty(this, "sampleDuration", 0);
5742
5888
  _defineProperty(this, "timescale", 0);
@@ -5777,7 +5923,7 @@ var AudioTrack = /* @__PURE__ */ function() {
5777
5923
  }, {
5778
5924
  key: "exist",
5779
5925
  value: function exist() {
5780
- return !!(this.sampleRate && this.channelCount && this.codec && this.codecType === AudioCodecType.AAC);
5926
+ return !!(this.sampleRate && this.channelCount && (this.codec || this.container) && (this.codecType === AudioCodecType.AAC || this.codecType === AudioCodecType.G711PCMA || this.codecType === AudioCodecType.G711PCMU || this.codecType === AudioCodecType.OPUS || this.codecType === AudioCodecType.MP3));
5781
5927
  }
5782
5928
  }, {
5783
5929
  key: "hasSample",
@@ -5982,7 +6128,7 @@ var AAC = /* @__PURE__ */ function() {
5982
6128
  continue;
5983
6129
  }
5984
6130
  frameLength = (data[i + 3] & 3) << 11 | data[i + 4] << 3 | (data[i + 5] & 224) >> 5;
5985
- if (len - i < frameLength)
6131
+ if (!frameLength || len - i < frameLength)
5986
6132
  break;
5987
6133
  protectionSkipBytes = (~data[i + 1] & 1) * 2;
5988
6134
  frames.push({
@@ -6176,6 +6322,15 @@ function parse2(a) {
6176
6322
  return parseInt(item, 16);
6177
6323
  });
6178
6324
  }
6325
+ function combineToFloat(integer, decimal) {
6326
+ return Number(integer + "." + decimal);
6327
+ }
6328
+ function toDegree(matrix) {
6329
+ if (matrix.length < 5)
6330
+ return 0;
6331
+ var scaled0 = Math.hypot(matrix[0], matrix[3]), scaled1 = Math.hypot(matrix[1], matrix[4]);
6332
+ return 0 === scaled0 || 0 === scaled1 ? 0 : 180 * Math.atan2(matrix[1] / scaled1, matrix[0] / scaled0) / Math.PI;
6333
+ }
6179
6334
  var NALu = /* @__PURE__ */ function() {
6180
6335
  function NALu2() {
6181
6336
  _classCallCheck(this, NALu2);
@@ -6838,13 +6993,16 @@ var MAX_SILENT_FRAME_DURATION = 9e4;
6838
6993
  var AUDIO_EXCETION_LOG_EMIT_DURATION = 5 * 9e4;
6839
6994
  var MAX_VIDEO_FRAME_DURATION = 9e4;
6840
6995
  var MAX_DTS_DELTA_WITH_NEXT_CHUNK = 9e4 / 2;
6996
+ var LARGE_AV_FIRST_FRAME_FORCE_FIX_THRESHOLD = 9e4 * 5;
6841
6997
  var TsFixer = /* @__PURE__ */ function() {
6842
- function TsFixer2(videoTrack, audioTrack, metadataTrack) {
6998
+ function TsFixer2(videoTrack, audioTrack, metadataTrack, fixerConfig) {
6843
6999
  _classCallCheck(this, TsFixer2);
6844
7000
  this.videoTrack = videoTrack;
6845
7001
  this.audioTrack = audioTrack;
6846
7002
  this.metadataTrack = metadataTrack;
6847
7003
  this._baseDts = -1;
7004
+ this._baseVideoDts = -1;
7005
+ this._baseAudioDts = -1;
6848
7006
  this._baseDtsInited = false;
6849
7007
  this._audioNextPts = void 0;
6850
7008
  this._videoNextDts = void 0;
@@ -6853,6 +7011,8 @@ var TsFixer = /* @__PURE__ */ function() {
6853
7011
  this._lastAudioExceptionGapDot = 0;
6854
7012
  this._lastAudioExceptionOverlapDot = 0;
6855
7013
  this._lastAudioExceptionLargeGapDot = 0;
7014
+ this._needForceFixLargeGap = fixerConfig === null || fixerConfig === void 0 ? void 0 : fixerConfig.forceFixLargeGap;
7015
+ this._largeGapThreshold = (fixerConfig === null || fixerConfig === void 0 ? void 0 : fixerConfig.largeGapThreshold) || LARGE_AV_FIRST_FRAME_FORCE_FIX_THRESHOLD;
6856
7016
  }
6857
7017
  _createClass(TsFixer2, [{
6858
7018
  key: "fix",
@@ -6880,10 +7040,16 @@ var TsFixer = /* @__PURE__ */ function() {
6880
7040
  if (discontinuity) {
6881
7041
  this._calculateBaseDts(this.audioTrack, this.videoTrack);
6882
7042
  this._baseDts -= startTime;
7043
+ this._baseAudioDts -= startTime;
7044
+ this._baseVideoDts -= startTime;
6883
7045
  }
6884
7046
  if (!contiguous) {
6885
7047
  this._videoNextDts = vaDelta > 0 ? startTime + vaDelta : startTime;
6886
7048
  this._audioNextPts = vaDelta > 0 ? startTime : startTime - vaDelta;
7049
+ if (this._needForceFixLargeGap) {
7050
+ this._videoNextDts = 0;
7051
+ this._audioNextPts = 0;
7052
+ }
6887
7053
  var vDeltaToNextDts = firstVideoSample ? firstVideoSample.dts - this._baseDts - this._videoNextDts : 0;
6888
7054
  var aDeltaToNextDts = firstAudioSample ? firstAudioSample.pts - this._baseDts - this._audioNextPts : 0;
6889
7055
  if (Math.abs(vDeltaToNextDts || aDeltaToNextDts) > MAX_VIDEO_FRAME_DURATION) {
@@ -6916,8 +7082,8 @@ var TsFixer = /* @__PURE__ */ function() {
6916
7082
  if (!samples.length)
6917
7083
  return;
6918
7084
  samples.forEach(function(x) {
6919
- x.dts -= _this2._baseDts;
6920
- x.pts -= _this2._baseDts;
7085
+ x.dts -= _this2._needForceFixLargeGap ? _this2._baseVideoDts : _this2._baseDts;
7086
+ x.pts -= _this2._needForceFixLargeGap ? _this2._baseVideoDts : _this2._baseDts;
6921
7087
  });
6922
7088
  if (this._videoNextDts === void 0) {
6923
7089
  var samp0 = samples[0];
@@ -7010,7 +7176,7 @@ var TsFixer = /* @__PURE__ */ function() {
7010
7176
  if (!samples.length)
7011
7177
  return;
7012
7178
  samples.forEach(function(x) {
7013
- x.pts -= _this3._baseDts;
7179
+ x.pts -= _this3._needForceFixLargeGap ? _this3._baseAudioDts : _this3._baseDts;
7014
7180
  x.dts = x.pts;
7015
7181
  });
7016
7182
  this._doFixAudioInternal(audioTrack, samples, 9e4);
@@ -7027,12 +7193,15 @@ var TsFixer = /* @__PURE__ */ function() {
7027
7193
  var videoBaseDts = Infinity;
7028
7194
  if (audioSamps.length) {
7029
7195
  audioTrack.baseDts = audioBasePts = audioSamps[0].pts;
7196
+ this._baseAudioDts = audioBasePts;
7030
7197
  }
7031
7198
  if (videoSamps.length) {
7032
7199
  videoTrack.baseDts = videoBaseDts = videoSamps[0].dts;
7200
+ this._baseVideoDts = videoBaseDts;
7033
7201
  }
7034
7202
  this._baseDts = Math.min(audioBasePts, videoBaseDts);
7035
7203
  var delta = videoBaseDts - audioBasePts;
7204
+ var largeGap = false;
7036
7205
  if (Number.isFinite(delta) && Math.abs(delta) > LARGE_AV_FIRST_FRAME_GAP) {
7037
7206
  videoTrack.warnings.push({
7038
7207
  type: WarningType.LARGE_AV_SHIFT,
@@ -7042,6 +7211,16 @@ var TsFixer = /* @__PURE__ */ function() {
7042
7211
  delta
7043
7212
  });
7044
7213
  }
7214
+ if (Number.isFinite(delta) && Math.abs(delta) > this._largeGapThreshold * MAX_SILENT_FRAME_DURATION) {
7215
+ largeGap = true;
7216
+ }
7217
+ if (!this._baseDtsInited) {
7218
+ if (largeGap && this._needForceFixLargeGap) {
7219
+ this._needForceFixLargeGap = true;
7220
+ } else {
7221
+ this._needForceFixLargeGap = false;
7222
+ }
7223
+ }
7045
7224
  this._baseDtsInited = true;
7046
7225
  return true;
7047
7226
  }
@@ -7132,9 +7311,123 @@ var TsFixer = /* @__PURE__ */ function() {
7132
7311
  }]);
7133
7312
  return TsFixer2;
7134
7313
  }();
7314
+ var BitratesMap = [32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160];
7315
+ var FREQ = [44100, 48e3, 32e3, 22050, 24e3, 16e3, 11025, 12e3, 8e3];
7316
+ var SamplesCoefficients = [
7317
+ [
7318
+ 0,
7319
+ 72,
7320
+ 144,
7321
+ 12
7322
+ ],
7323
+ [
7324
+ 0,
7325
+ 0,
7326
+ 0,
7327
+ 0
7328
+ ],
7329
+ [
7330
+ 0,
7331
+ 72,
7332
+ 144,
7333
+ 12
7334
+ ],
7335
+ [
7336
+ 0,
7337
+ 144,
7338
+ 144,
7339
+ 12
7340
+ ]
7341
+ ];
7342
+ var BytesInSlot = [
7343
+ 0,
7344
+ 1,
7345
+ 1,
7346
+ 4
7347
+ ];
7348
+ var chromeVersion = null;
7349
+ var MPEG = /* @__PURE__ */ function() {
7350
+ function MPEG2() {
7351
+ _classCallCheck(this, MPEG2);
7352
+ }
7353
+ _createClass(MPEG2, null, [{
7354
+ key: "isHeader",
7355
+ value: function isHeader(data, offset) {
7356
+ return offset + 1 < data.length && data[offset] === 255 && (data[offset + 1] & 224) === 224 && (data[offset + 1] & 6) !== 0;
7357
+ }
7358
+ }, {
7359
+ key: "appendFrame",
7360
+ value: function appendFrame(track, data, offset, pts, frameIndex) {
7361
+ if (offset + 24 > data.length) {
7362
+ return;
7363
+ }
7364
+ var header = MPEG2.parseHeader(data, offset);
7365
+ if (header && offset + header.frameLength <= data.length) {
7366
+ var frameDuration = header.samplesPerFrame * 9e4 / header.sampleRate;
7367
+ var stamp = pts + frameIndex * frameDuration;
7368
+ var sample = {
7369
+ data: data.subarray(offset, offset + header.frameLength),
7370
+ pts: stamp,
7371
+ dts: stamp
7372
+ };
7373
+ sample.size = sample.data.byteLength;
7374
+ track.config = [];
7375
+ track.channelCount = header.channelCount;
7376
+ track.sampleRate = header.sampleRate;
7377
+ if (isFirefox) {
7378
+ track.codec = "mp3";
7379
+ } else {
7380
+ track.container = "audio/mpeg";
7381
+ }
7382
+ track.samples.push(sample);
7383
+ return {
7384
+ length: header.frameLength
7385
+ };
7386
+ }
7387
+ }
7388
+ }, {
7389
+ key: "parseHeader",
7390
+ value: function parseHeader(data, offset) {
7391
+ var mpegVersion = data[offset + 1] >> 3 & 3;
7392
+ var mpegLayer = data[offset + 1] >> 1 & 3;
7393
+ var bitRateIndex = data[offset + 2] >> 4 & 15;
7394
+ var sampleRateIndex = data[offset + 2] >> 2 & 3;
7395
+ if (mpegVersion !== 1 && bitRateIndex !== 0 && bitRateIndex !== 15 && sampleRateIndex !== 3) {
7396
+ var paddingBit = data[offset + 2] >> 1 & 1;
7397
+ var channelMode = data[offset + 3] >> 6;
7398
+ var columnInBitrates = mpegVersion === 3 ? 3 - mpegLayer : mpegLayer === 3 ? 3 : 4;
7399
+ var bitRate = BitratesMap[columnInBitrates * 14 + bitRateIndex - 1] * 1e3;
7400
+ var columnInSampleRates = mpegVersion === 3 ? 0 : mpegVersion === 2 ? 1 : 2;
7401
+ var sampleRate = FREQ[columnInSampleRates * 3 + sampleRateIndex];
7402
+ var channelCount = channelMode === 3 ? 1 : 2;
7403
+ var sampleCoefficient = SamplesCoefficients[mpegVersion][mpegLayer];
7404
+ var bytesInSlot = BytesInSlot[mpegLayer];
7405
+ var samplesPerFrame = sampleCoefficient * 8 * bytesInSlot;
7406
+ var frameLength = Math.floor(sampleCoefficient * bitRate / sampleRate + paddingBit) * bytesInSlot;
7407
+ if (chromeVersion === null) {
7408
+ var userAgent = navigator.userAgent || "";
7409
+ var result = userAgent.match(/Chrome\/(\d+)/i);
7410
+ chromeVersion = result ? parseInt(result[1]) : 0;
7411
+ }
7412
+ var needChromeFix = !!chromeVersion && chromeVersion <= 87;
7413
+ if (needChromeFix && mpegLayer === 2 && bitRate >= 224e3 && channelMode === 0) {
7414
+ data[offset + 3] = data[offset + 3] | 128;
7415
+ }
7416
+ return {
7417
+ sampleRate,
7418
+ channelCount,
7419
+ frameLength,
7420
+ samplesPerFrame
7421
+ };
7422
+ }
7423
+ }
7424
+ }]);
7425
+ return MPEG2;
7426
+ }();
7135
7427
  var logger$4 = new Logger$1("TsDemuxer");
7136
7428
  var TsDemuxer = /* @__PURE__ */ function() {
7137
7429
  function TsDemuxer2(videoTrack, audioTrack, metadataTrack) {
7430
+ var fixerConfig = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : {};
7138
7431
  _classCallCheck(this, TsDemuxer2);
7139
7432
  _defineProperty(this, "_pmtId", -1);
7140
7433
  _defineProperty(this, "_remainingPacketData", null);
@@ -7144,7 +7437,7 @@ var TsDemuxer = /* @__PURE__ */ function() {
7144
7437
  this.videoTrack = videoTrack || new VideoTrack();
7145
7438
  this.audioTrack = audioTrack || new AudioTrack();
7146
7439
  this.metadataTrack = metadataTrack || new MetadataTrack();
7147
- this._fixer = new TsFixer(this.videoTrack, this.audioTrack, this.metadataTrack);
7440
+ this._fixer = new TsFixer(this.videoTrack, this.audioTrack, this.metadataTrack, fixerConfig);
7148
7441
  }
7149
7442
  _createClass(TsDemuxer2, [{
7150
7443
  key: "demux",
@@ -7214,6 +7507,13 @@ var TsDemuxer = /* @__PURE__ */ function() {
7214
7507
  case 15:
7215
7508
  audioTrack.pid = audioPid = esPid;
7216
7509
  break;
7510
+ case 3:
7511
+ case 4:
7512
+ if (audioTrack.pid === -1) {
7513
+ audioTrack.pid = audioPid = esPid;
7514
+ audioTrack.codecType = AudioCodecType.MP3;
7515
+ }
7516
+ break;
7217
7517
  case 27:
7218
7518
  if (videoPid !== -1)
7219
7519
  break;
@@ -7413,7 +7713,14 @@ var TsDemuxer = /* @__PURE__ */ function() {
7413
7713
  logger$4.warn("Cannot parse audio pes", this._audioPesData);
7414
7714
  return;
7415
7715
  }
7416
- this._parseAacData(pes);
7716
+ switch (this.audioTrack.codecType) {
7717
+ case AudioCodecType.AAC:
7718
+ this._parseAacData(pes);
7719
+ break;
7720
+ case AudioCodecType.MP3:
7721
+ this._parseMPEG(pes);
7722
+ break;
7723
+ }
7417
7724
  this._audioPesData = [];
7418
7725
  }
7419
7726
  }, {
@@ -7450,6 +7757,32 @@ var TsDemuxer = /* @__PURE__ */ function() {
7450
7757
  logger$4.warn("Cannot parse aac adts", pes);
7451
7758
  }
7452
7759
  }
7760
+ }, {
7761
+ key: "_parseMPEG",
7762
+ value: function _parseMPEG(pes) {
7763
+ var data = pes.data;
7764
+ var length = data.length;
7765
+ var frameIndex = 0;
7766
+ var offset = 0;
7767
+ var pts = pes.pts;
7768
+ if (pts === void 0) {
7769
+ logger$4.warn("[tsdemuxer]: MPEG PES unknown PTS");
7770
+ return;
7771
+ }
7772
+ while (offset < length) {
7773
+ if (MPEG.isHeader(data, offset)) {
7774
+ var frame = MPEG.appendFrame(this.audioTrack, data, offset, pts, frameIndex);
7775
+ if (frame) {
7776
+ offset += frame.length;
7777
+ frameIndex++;
7778
+ } else {
7779
+ break;
7780
+ }
7781
+ } else {
7782
+ offset++;
7783
+ }
7784
+ }
7785
+ }
7453
7786
  }], [{
7454
7787
  key: "probe",
7455
7788
  value: function probe(data) {
@@ -7491,6 +7824,207 @@ var TsDemuxer = /* @__PURE__ */ function() {
7491
7824
  }]);
7492
7825
  return TsDemuxer2;
7493
7826
  }();
7827
+ var ByteReader = /* @__PURE__ */ function() {
7828
+ function ByteReader2(buf, offset, len) {
7829
+ _classCallCheck(this, ByteReader2);
7830
+ this.dv = new DataView(buf);
7831
+ this.start = this.offset = offset || this.dv.byteOffset;
7832
+ this.end = len ? this.start + len : this.start + this.dv.byteLength;
7833
+ }
7834
+ _createClass(ByteReader2, [{
7835
+ key: "buffer",
7836
+ get: function get() {
7837
+ return this.dv.buffer;
7838
+ }
7839
+ }, {
7840
+ key: "unreadLength",
7841
+ get: function get() {
7842
+ return Math.max(this.end - this.offset, 0);
7843
+ }
7844
+ }, {
7845
+ key: "size",
7846
+ get: function get() {
7847
+ return this.end - this.start;
7848
+ }
7849
+ }, {
7850
+ key: "readFloat",
7851
+ value: function readFloat(byteNum) {
7852
+ var val = 0;
7853
+ switch (byteNum) {
7854
+ case 4:
7855
+ val = this.dv.getFloat32(this.offset);
7856
+ break;
7857
+ case 8:
7858
+ val = this.dv.getFloat64(this.offset);
7859
+ break;
7860
+ default:
7861
+ throw new Error("read ".concat(byteNum, "-byte float is not supported"));
7862
+ }
7863
+ this.offset += byteNum;
7864
+ return val;
7865
+ }
7866
+ }, {
7867
+ key: "back",
7868
+ value: function back(byteNum) {
7869
+ this.offset -= byteNum;
7870
+ }
7871
+ }, {
7872
+ key: "skip",
7873
+ value: function skip(byteNum) {
7874
+ this.offset += byteNum;
7875
+ }
7876
+ }, {
7877
+ key: "readInt",
7878
+ value: function readInt(byteNum) {
7879
+ var offset = this.offset;
7880
+ this.offset += byteNum;
7881
+ switch (byteNum) {
7882
+ case 1:
7883
+ return this.dv.getInt8(offset);
7884
+ case 2:
7885
+ return this.dv.getInt16(offset);
7886
+ case 4:
7887
+ return this.dv.getInt32(offset);
7888
+ default:
7889
+ throw new Error("read ".concat(byteNum, "-byte integers is not supported"));
7890
+ }
7891
+ }
7892
+ }, {
7893
+ key: "read",
7894
+ value: function read(byteNum) {
7895
+ var offset = this.offset;
7896
+ this.offset += byteNum;
7897
+ switch (byteNum) {
7898
+ case 1:
7899
+ return this.dv.getUint8(offset);
7900
+ case 2:
7901
+ return this.dv.getUint16(offset);
7902
+ case 3:
7903
+ return (this.dv.getUint16(offset) << 8) + this.dv.getUint8(offset + 2);
7904
+ case 4:
7905
+ return this.dv.getUint32(offset);
7906
+ default:
7907
+ this.back(byteNum - 4);
7908
+ return this.read(byteNum - 4) + this.dv.getUint32(offset) * Math.pow(256, byteNum - 4);
7909
+ }
7910
+ }
7911
+ }, {
7912
+ key: "write",
7913
+ value: function write(byteNum, val) {
7914
+ var offset = this.offset;
7915
+ this.offset += byteNum;
7916
+ switch (byteNum) {
7917
+ case 1:
7918
+ return this.dv.setUint8(offset, val);
7919
+ case 2:
7920
+ return this.dv.setUint16(offset, val);
7921
+ case 3:
7922
+ return this.dv.setUint8(offset, val >>> 16), this.dv.setUint16(offset + 1, 65535 & val);
7923
+ case 4:
7924
+ return this.dv.setUint32(offset, val);
7925
+ default:
7926
+ throw new Error("write ".concat(byteNum, "-byte integers is not supported"));
7927
+ }
7928
+ }
7929
+ }, {
7930
+ key: "readToBuffer",
7931
+ value: function readToBuffer(len) {
7932
+ var buffer;
7933
+ if (this.offset || len) {
7934
+ buffer = this.dv.buffer.slice(this.offset, len ? this.offset + len : this.end);
7935
+ } else {
7936
+ buffer = this.dv.buffer;
7937
+ }
7938
+ this.offset += buffer.byteLength;
7939
+ return buffer;
7940
+ }
7941
+ }, {
7942
+ key: "readToUint8",
7943
+ value: function readToUint8(len) {
7944
+ var uint8 = new Uint8Array(this.dv.buffer, this.offset, len || this.unreadLength);
7945
+ this.offset += uint8.byteLength;
7946
+ return uint8;
7947
+ }
7948
+ }, {
7949
+ key: "readString",
7950
+ value: function readString(len) {
7951
+ var i = 0, str = "";
7952
+ for (; i < len; i++) {
7953
+ str += String.fromCharCode(this.dv.getUint8(this.offset));
7954
+ this.offset++;
7955
+ }
7956
+ return str;
7957
+ }
7958
+ }], [{
7959
+ key: "fromUint8",
7960
+ value: function fromUint8(uint8) {
7961
+ return new ByteReader2(uint8.buffer, uint8.byteOffset, uint8.byteLength);
7962
+ }
7963
+ }, {
7964
+ key: "concatUint8s",
7965
+ value: function concatUint8s(args) {
7966
+ var uint8 = new Uint8Array(args.reduce(function(ret, v) {
7967
+ return ret + v.byteLength;
7968
+ }, 0));
7969
+ var offset = 0;
7970
+ args.forEach(function(v) {
7971
+ uint8.set(v, offset);
7972
+ offset += v.byteLength;
7973
+ });
7974
+ return uint8;
7975
+ }
7976
+ }, {
7977
+ key: "concatUint8",
7978
+ value: function concatUint8() {
7979
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
7980
+ args[_key] = arguments[_key];
7981
+ }
7982
+ return this.concatUint8s(args);
7983
+ }
7984
+ }]);
7985
+ return ByteReader2;
7986
+ }();
7987
+ var BitReader = /* @__PURE__ */ function() {
7988
+ function BitReader2(val, size) {
7989
+ _classCallCheck(this, BitReader2);
7990
+ this.offset = 0;
7991
+ this.val = val;
7992
+ this.size = size;
7993
+ }
7994
+ _createClass(BitReader2, [{
7995
+ key: "skip",
7996
+ value: function skip(len) {
7997
+ this.offset += len;
7998
+ }
7999
+ }, {
8000
+ key: "read",
8001
+ value: function read(len) {
8002
+ var unreadLength = this.size - this.offset - len;
8003
+ if (unreadLength >= 0) {
8004
+ var bits = 0, i = 0;
8005
+ this.offset += len;
8006
+ if (this.size > 31) {
8007
+ for (; i < len; i++) {
8008
+ bits += Math.pow(2, i);
8009
+ }
8010
+ return this.val / Math.pow(2, unreadLength) & bits;
8011
+ } else {
8012
+ for (; i < len; i++) {
8013
+ bits += 1 << i;
8014
+ }
8015
+ return this.val >>> unreadLength & bits;
8016
+ }
8017
+ }
8018
+ throw new Error("the number of the read operation exceeds the total length limit of bits");
8019
+ }
8020
+ }], [{
8021
+ key: "fromByte",
8022
+ value: function fromByte(byte, len) {
8023
+ return new BitReader2(byte.read(len), len << 3);
8024
+ }
8025
+ }]);
8026
+ return BitReader2;
8027
+ }();
7494
8028
  var MP4Parser = /* @__PURE__ */ function() {
7495
8029
  function MP4Parser2() {
7496
8030
  _classCallCheck(this, MP4Parser2);
@@ -7648,18 +8182,36 @@ var MP4Parser = /* @__PURE__ */ function() {
7648
8182
  key: "tkhd",
7649
8183
  value: function tkhd(box) {
7650
8184
  return parseBox(box, true, function(ret, data) {
7651
- var start = 0;
8185
+ var byte = ByteReader.fromUint8(data);
7652
8186
  if (ret.version === 1) {
7653
- ret.trackId = readBig32(data, 16);
7654
- ret.duration = readBig64(data, 24);
7655
- start += 32;
8187
+ byte.read(8);
8188
+ byte.read(8);
8189
+ ret.trackId = byte.read(4);
8190
+ byte.read(4);
8191
+ ret.duration = byte.read(8);
7656
8192
  } else {
7657
- ret.trackId = readBig32(data, 8);
7658
- ret.duration = readBig32(data, 16);
7659
- start += 20;
8193
+ byte.read(4);
8194
+ byte.read(4);
8195
+ ret.trackId = byte.read(4);
8196
+ byte.read(4);
8197
+ ret.duration = byte.read(4);
7660
8198
  }
7661
- ret.width = readBig32(data, start + 52);
7662
- ret.height = readBig32(data, start + 56);
8199
+ byte.skip(16);
8200
+ ret.matrix = [];
8201
+ for (var i = 0; i < 36; i++) {
8202
+ ret.matrix.push(byte.read(1));
8203
+ }
8204
+ byte.back(36);
8205
+ var caculatedMatrix = [];
8206
+ for (var _i = 0, int32; _i < 3; _i++) {
8207
+ caculatedMatrix.push(combineToFloat(byte.readInt(2), byte.readInt(2)));
8208
+ caculatedMatrix.push(combineToFloat(byte.readInt(2), byte.readInt(2)));
8209
+ int32 = byte.readInt(4);
8210
+ caculatedMatrix.push(combineToFloat(int32 >> 30, int32 & 1073741823));
8211
+ }
8212
+ ret.rotation = toDegree(caculatedMatrix);
8213
+ ret.width = byte.read(4);
8214
+ ret.height = byte.read(4);
7663
8215
  });
7664
8216
  }
7665
8217
  }, {
@@ -7789,7 +8341,7 @@ var MP4Parser = /* @__PURE__ */ function() {
7789
8341
  if (ret.version > 0) {
7790
8342
  var numKeyIds = readBig32(data, start);
7791
8343
  start += 4;
7792
- for (var _i = 0; _i < ("" + numKeyIds).length; _i++) {
8344
+ for (var _i2 = 0; _i2 < ("" + numKeyIds).length; _i2++) {
7793
8345
  for (var j = 0; j < 16; j++) {
7794
8346
  var keyId = data[start];
7795
8347
  start += 1;
@@ -7812,6 +8364,8 @@ var MP4Parser = /* @__PURE__ */ function() {
7812
8364
  ret.entryCount = readBig32(data);
7813
8365
  ret.entries = MP4Parser2.findBox(data.subarray(4), [], start + 4).map(function(b) {
7814
8366
  switch (b.type) {
8367
+ case "av01":
8368
+ return MP4Parser2.av01(b);
7815
8369
  case "avc1":
7816
8370
  case "avc2":
7817
8371
  case "avc3":
@@ -7891,6 +8445,69 @@ var MP4Parser = /* @__PURE__ */ function() {
7891
8445
  }
7892
8446
  });
7893
8447
  }
8448
+ }, {
8449
+ key: "colr",
8450
+ value: function colr(box) {
8451
+ return parseBox(box, false, function(ret, data) {
8452
+ var byte = ByteReader.fromUint8(data);
8453
+ ret.data = box.data;
8454
+ ret.colorType = byte.readString(4);
8455
+ if (ret.colorType === "nclx") {
8456
+ ret.colorPrimaries = byte.read(2);
8457
+ ret.transferCharacteristics = byte.read(2);
8458
+ ret.matrixCoefficients = byte.read(2);
8459
+ ret.fullRangeFlag = byte.read(1) >> 7;
8460
+ } else if (ret.colorType === "rICC" || ret.colorType === "prof") {
8461
+ ret.iccProfile = data.readToUint8();
8462
+ }
8463
+ });
8464
+ }
8465
+ }, {
8466
+ key: "av01",
8467
+ value: function av01(box) {
8468
+ return parseBox(box, false, function(ret, data, start) {
8469
+ var bodyStart = parseVisualSampleEntry(ret, data);
8470
+ var bodyData = data.subarray(bodyStart);
8471
+ start += bodyStart;
8472
+ ret.av1C = MP4Parser2.av1C(MP4Parser2.findBox(bodyData, ["av1C"], start)[0]);
8473
+ ret.colr = MP4Parser2.colr(MP4Parser2.findBox(bodyData, ["colr"], start)[0]);
8474
+ });
8475
+ }
8476
+ }, {
8477
+ key: "av1C",
8478
+ value: function av1C(box) {
8479
+ return parseBox(box, false, function(ret, data) {
8480
+ ret.data = box.data;
8481
+ var byte = ByteReader.fromUint8(data);
8482
+ var bit = BitReader.fromByte(byte, 4);
8483
+ ret.marker = bit.read(1);
8484
+ ret.version = bit.read(7);
8485
+ ret.seqProfile = bit.read(3);
8486
+ ret.seqLevelIdx0 = bit.read(5);
8487
+ ret.seqTier0 = bit.read(1);
8488
+ ret.highBitdepth = bit.read(1);
8489
+ ret.twelveBit = bit.read(1);
8490
+ ret.monochrome = bit.read(1);
8491
+ ret.chromaSubsamplingX = bit.read(1);
8492
+ ret.chromaSubsamplingY = bit.read(1);
8493
+ ret.chromaSamplePosition = bit.read(2);
8494
+ ret.reserved = bit.read(3);
8495
+ ret.initialPresentationDelayPresent = bit.read(1);
8496
+ if (ret.initialPresentationDelayPresent) {
8497
+ ret.initialPresentationDelayMinusOne = bit.read(4);
8498
+ } else {
8499
+ ret.initialPresentationDelayMinusOne = 0;
8500
+ }
8501
+ ret.configOBUs = byte.readToUint8();
8502
+ var bitdepth;
8503
+ if (ret.seqLevelIdx0 === 2 && ret.highBitdepth === 1) {
8504
+ bitdepth = ret.twelveBit === 1 ? "12" : "10";
8505
+ } else if (ret.seqProfile <= 2) {
8506
+ bitdepth = ret.highBitdepth === 1 ? "10" : "08";
8507
+ }
8508
+ ret.codec = ["av01", ret.seqProfile, (ret.seqLevelIdx0 < 10 ? "0" + ret.seqLevelIdx0 : ret.seqLevelIdx0) + (ret.seqTier0 ? "H" : "M"), bitdepth].join(".");
8509
+ });
8510
+ }
7894
8511
  }, {
7895
8512
  key: "avc1",
7896
8513
  value: function avc1(box) {
@@ -7925,7 +8542,7 @@ var MP4Parser = /* @__PURE__ */ function() {
7925
8542
  ret.ppsLength = data[start];
7926
8543
  start += 1;
7927
8544
  ret.pps = [];
7928
- for (var _i2 = 0; _i2 < ret.ppsLength; _i2++) {
8545
+ for (var _i3 = 0; _i3 < ret.ppsLength; _i3++) {
7929
8546
  var _size = readBig16(data, start);
7930
8547
  start += 2;
7931
8548
  ret.pps.push(data.subarray(start, start += _size));
@@ -8094,7 +8711,7 @@ var MP4Parser = /* @__PURE__ */ function() {
8094
8711
  start += 8;
8095
8712
  }
8096
8713
  } else {
8097
- for (var _i3 = 0; _i3 < entryCount; _i3++) {
8714
+ for (var _i4 = 0; _i4 < entryCount; _i4++) {
8098
8715
  entries.push({
8099
8716
  count: readBig32(data, start),
8100
8717
  offset: -(~readBig32(data, start + 4) + 1)
@@ -8316,13 +8933,20 @@ var MP4Parser = /* @__PURE__ */ function() {
8316
8933
  v.mvhdTimecale = moov.mvhd.timescale;
8317
8934
  v.timescale = v.formatTimescale = vTrack.mdia.mdhd.timescale;
8318
8935
  v.duration = vTrack.mdia.mdhd.duration || v.mvhdDurtion / v.mvhdTimecale * v.timescale;
8936
+ v.rotation = vTrack.tkhd.rotation;
8937
+ v.matrix = vTrack.tkhd.matrix;
8319
8938
  var e1 = vTrack.mdia.minf.stbl.stsd.entries[0];
8320
8939
  v.width = e1.width;
8321
8940
  v.height = e1.height;
8322
8941
  if (e1.pasp) {
8323
8942
  v.sarRatio = [e1.pasp.hSpacing, e1.pasp.vSpacing];
8324
8943
  }
8325
- if (e1.hvcC) {
8944
+ if (e1.av1C) {
8945
+ v.codecType = VideoCodecType.AV1;
8946
+ v.codec = e1.av1C.codec;
8947
+ v.av1C = e1.av1C.data;
8948
+ v.colr = e1.colr.data;
8949
+ } else if (e1.hvcC) {
8326
8950
  v.codecType = VideoCodecType.HEVC;
8327
8951
  v.codec = e1.hvcC.codec;
8328
8952
  v.vps = e1.hvcC.vps;
@@ -8641,8 +9265,9 @@ function parseAudioSampleEntry(ret, data) {
8641
9265
  function parseBox(box, isFullBox, parse3) {
8642
9266
  if (!box)
8643
9267
  return;
8644
- if (box.size !== box.data.length)
9268
+ if (box.size !== box.data.length) {
8645
9269
  throw new Error("box ".concat(box.type, " size !== data.length"));
9270
+ }
8646
9271
  var ret = {
8647
9272
  start: box.start,
8648
9273
  size: box.size,
@@ -8681,27 +9306,183 @@ var toHex = function toHex2() {
8681
9306
  var FMP4Demuxer = /* @__PURE__ */ function() {
8682
9307
  function FMP4Demuxer2(videoTrack, audioTrack, metadataTrack) {
8683
9308
  _classCallCheck(this, FMP4Demuxer2);
9309
+ _defineProperty(this, "__loadedMoofWraps", []);
9310
+ _defineProperty(this, "__lastRemainData", null);
9311
+ _defineProperty(this, "__lastRemainDataStart", 0);
9312
+ _defineProperty(this, "__nextMoofStart", -1);
8684
9313
  this.videoTrack = videoTrack || new VideoTrack();
8685
9314
  this.audioTrack = audioTrack || new AudioTrack();
8686
9315
  this.metadataTrack = metadataTrack || new MetadataTrack();
8687
9316
  }
8688
9317
  _createClass(FMP4Demuxer2, [{
8689
- key: "demux",
8690
- value: function demux(videoData, audioData) {
9318
+ key: "demuxPart",
9319
+ value: function demuxPart(partData, partDataStart, moov) {
9320
+ var _this = this;
8691
9321
  var videoTrack = this.videoTrack, audioTrack = this.audioTrack;
8692
9322
  var videoExist = videoTrack.exist();
8693
9323
  var audioExist = audioTrack.exist();
9324
+ var isAV01 = /av01/.test(videoTrack.codec);
8694
9325
  videoTrack.samples = [];
8695
9326
  audioTrack.samples = [];
8696
- if (audioData) {
8697
- if (!audioExist) {
8698
- var moovBox = MP4Parser.findBox(audioData, ["moov"])[0];
8699
- if (!moovBox)
8700
- throw new Error("cannot found moov box");
8701
- MP4Parser.moovToTrack(MP4Parser.moov(moovBox), null, audioTrack);
9327
+ var data = partData;
9328
+ var dataStart = partDataStart;
9329
+ if (this.__lastRemainData) {
9330
+ var lastRemainDataEnd = this.__lastRemainDataStart + this.__lastRemainData.byteLength;
9331
+ var continuous = partDataStart <= lastRemainDataEnd && partDataStart > this.__lastRemainDataStart && partDataStart + partData.byteLength > lastRemainDataEnd;
9332
+ if (continuous) {
9333
+ var noDuplicateData = partData.subarray(this.__lastRemainData.byteLength + this.__lastRemainDataStart - partDataStart);
9334
+ data = concatUint8Array(this.__lastRemainData, noDuplicateData);
9335
+ dataStart = this.__lastRemainDataStart;
9336
+ this.__lastRemainData = null;
9337
+ } else {
9338
+ this.__lastRemainData = null;
9339
+ this.__lastRemainDataStart = 0;
9340
+ this.__nextMoofStart = -1;
8702
9341
  }
8703
- var moofBox = MP4Parser.findBox(audioData, ["moof"])[0];
8704
- if (moofBox) {
9342
+ }
9343
+ if (!moov) {
9344
+ var moovBox = MP4Parser.findBox(data, ["moov"])[0];
9345
+ if (!moovBox)
9346
+ throw new Error("cannot found moov box");
9347
+ moov = MP4Parser.moov(moovBox);
9348
+ }
9349
+ if (data) {
9350
+ var dataEnd = dataStart + data.byteLength;
9351
+ if (!videoExist && !audioExist) {
9352
+ MP4Parser.moovToTrack(moov, videoTrack, audioTrack);
9353
+ }
9354
+ var moofBoxes = [];
9355
+ if (this.__nextMoofStart < 0) {
9356
+ MP4Parser.findBox(data, ["moof"], dataStart).forEach(function(v) {
9357
+ return moofBoxes.push(v);
9358
+ });
9359
+ } else if (this.__nextMoofStart >= dataStart && this.__nextMoofStart <= dataEnd - 8) {
9360
+ MP4Parser.findBox(data.subarray(this.__nextMoofStart - dataStart), ["moof"], this.__nextMoofStart).forEach(function(v) {
9361
+ return moofBoxes.push(v);
9362
+ });
9363
+ }
9364
+ moofBoxes.filter(function(moofBox) {
9365
+ return moofBox.size <= moofBox.data.length;
9366
+ }).forEach(function(moofBox) {
9367
+ var moof = MP4Parser.moof(moofBox);
9368
+ _this.__nextMoofStart = moof.start + Math.max.apply(Math, _toConsumableArray(moof.traf.map(function(v) {
9369
+ return v.trun.samples.reduce(function(ret, w) {
9370
+ return ret + w.size;
9371
+ }, v.trun.dataOffset || 0);
9372
+ })));
9373
+ _this.__loadedMoofWraps.push({
9374
+ start: moof.start,
9375
+ nextMoofStart: _this.__nextMoofStart,
9376
+ moof
9377
+ });
9378
+ _this.__loadedMoofWraps.sort(function(p, n) {
9379
+ return p.start - n.start;
9380
+ });
9381
+ });
9382
+ var _iterator = _createForOfIteratorHelper(this.__loadedMoofWraps), _step;
9383
+ try {
9384
+ var _loop = function _loop2() {
9385
+ var moofWrap = _step.value;
9386
+ if (moofWrap.start > dataEnd || moofWrap.nextMoofStart < dataStart) {
9387
+ return "continue";
9388
+ }
9389
+ var moofStart = moofWrap.start;
9390
+ var tracks = MP4Parser.moofToSamples(moofWrap.moof, videoTrack, audioTrack);
9391
+ var videoBaseMediaDecodeTime = videoTrack.baseMediaDecodeTime;
9392
+ var audioBaseMediaDecodeTime = audioTrack.baseMediaDecodeTime;
9393
+ var nalSize;
9394
+ Object.keys(tracks).forEach(function(k) {
9395
+ if (videoTrack.id == k) {
9396
+ tracks[k].some(function(x) {
9397
+ var xStart = x.offset += moofStart;
9398
+ if (xStart < dataStart) {
9399
+ return;
9400
+ }
9401
+ if (xStart + x.size > dataEnd) {
9402
+ return true;
9403
+ }
9404
+ var sample = new VideoSample((x.pts || x.dts) + videoBaseMediaDecodeTime, x.dts + videoBaseMediaDecodeTime);
9405
+ sample.duration = x.duration;
9406
+ sample.gopId = x.gopId;
9407
+ if (x.keyframe)
9408
+ sample.setToKeyframe();
9409
+ var sampleData = data.subarray(xStart - dataStart, xStart - dataStart + x.size);
9410
+ sample.data = sampleData;
9411
+ if (!isAV01) {
9412
+ var start = 0;
9413
+ var len = sampleData.length - 1;
9414
+ while (start < len) {
9415
+ nalSize = readBig32(sampleData, start);
9416
+ start += 4;
9417
+ sample.units.push(sampleData.subarray(start, start + nalSize));
9418
+ start += nalSize;
9419
+ }
9420
+ }
9421
+ _this.__lastRemainDataStart = xStart + x.size;
9422
+ videoTrack.samples.push(sample);
9423
+ });
9424
+ } else if (audioTrack.id == k) {
9425
+ tracks[k].some(function(x) {
9426
+ var xStart = x.offset + moofStart;
9427
+ if (xStart < dataStart) {
9428
+ return;
9429
+ }
9430
+ if (xStart + x.size > dataEnd) {
9431
+ return true;
9432
+ }
9433
+ var sampleData = data.subarray(xStart - dataStart, xStart - dataStart + x.size);
9434
+ audioTrack.samples.push(new AudioSample(x.dts + audioBaseMediaDecodeTime, sampleData, x.duration));
9435
+ _this.__lastRemainDataStart = xStart + x.size;
9436
+ });
9437
+ }
9438
+ });
9439
+ };
9440
+ for (_iterator.s(); !(_step = _iterator.n()).done; ) {
9441
+ var _ret = _loop();
9442
+ if (_ret === "continue")
9443
+ continue;
9444
+ }
9445
+ } catch (err) {
9446
+ _iterator.e(err);
9447
+ } finally {
9448
+ _iterator.f();
9449
+ }
9450
+ }
9451
+ if (this.__lastRemainDataStart > dataStart && this.__lastRemainDataStart < data.byteLength + dataStart) {
9452
+ this.__lastRemainData = data.subarray(this.__lastRemainDataStart - dataStart);
9453
+ } else {
9454
+ this.__lastRemainData = data;
9455
+ this.__lastRemainDataStart = dataStart;
9456
+ }
9457
+ if (videoTrack.samples.length) {
9458
+ videoTrack.baseMediaDecodeTime = videoTrack.samples[0].pts;
9459
+ }
9460
+ if (audioTrack.samples.length) {
9461
+ audioTrack.baseMediaDecodeTime = audioTrack.samples[0].pts;
9462
+ }
9463
+ return {
9464
+ videoTrack,
9465
+ audioTrack,
9466
+ metadataTrack: this.metadataTrack
9467
+ };
9468
+ }
9469
+ }, {
9470
+ key: "demux",
9471
+ value: function demux(videoData, audioData) {
9472
+ var videoTrack = this.videoTrack, audioTrack = this.audioTrack;
9473
+ var videoExist = videoTrack.exist();
9474
+ var audioExist = audioTrack.exist();
9475
+ videoTrack.samples = [];
9476
+ audioTrack.samples = [];
9477
+ if (audioData) {
9478
+ if (!audioExist) {
9479
+ var moovBox = MP4Parser.findBox(audioData, ["moov"])[0];
9480
+ if (!moovBox)
9481
+ throw new Error("cannot found moov box");
9482
+ MP4Parser.moovToTrack(MP4Parser.moov(moovBox), null, audioTrack);
9483
+ }
9484
+ var moofBox = MP4Parser.findBox(audioData, ["moof"])[0];
9485
+ if (moofBox) {
8705
9486
  var samples = MP4Parser.moofToSamples(MP4Parser.moof(moofBox), null, audioTrack)[audioTrack.id];
8706
9487
  var baseMediaDecodeTime = audioTrack.baseMediaDecodeTime;
8707
9488
  if (samples) {
@@ -8804,13 +9585,13 @@ var Buffer = /* @__PURE__ */ function() {
8804
9585
  _createClass(Buffer2, [{
8805
9586
  key: "write",
8806
9587
  value: function write() {
8807
- var self = this;
9588
+ var self2 = this;
8808
9589
  for (var _len2 = arguments.length, buffer = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
8809
9590
  buffer[_key2] = arguments[_key2];
8810
9591
  }
8811
9592
  buffer.forEach(function(item) {
8812
9593
  if (item) {
8813
- self.buffer = Concat(Uint8Array, self.buffer, item);
9594
+ self2.buffer = Concat(Uint8Array, self2.buffer, item);
8814
9595
  } else {
8815
9596
  window.console.warn(item);
8816
9597
  }
@@ -9177,10 +9958,16 @@ var MP4 = /* @__PURE__ */ function() {
9177
9958
  if (track.useEME && track.enca) {
9178
9959
  content = MP42.enca(track);
9179
9960
  } else {
9180
- content = MP42.mp4a(track);
9961
+ if (track.codecType === AudioCodecType.OPUS) {
9962
+ content = MP42.opus(track);
9963
+ } else {
9964
+ content = MP42.mp4a(track);
9965
+ }
9181
9966
  }
9182
9967
  } else if (track.useEME && track.encv) {
9183
9968
  content = MP42.encv(track);
9969
+ } else if (track.av1C) {
9970
+ content = MP42.av01(track);
9184
9971
  } else {
9185
9972
  content = MP42.avc1hev1(track);
9186
9973
  }
@@ -9393,6 +10180,90 @@ var MP4 = /* @__PURE__ */ function() {
9393
10180
  var schi = MP42.schi(data);
9394
10181
  return MP42.box(MP42.types.sinf, content, MP42.box(MP42.types.frma, frma), MP42.box(MP42.types.schm, schm), schi);
9395
10182
  }
10183
+ }, {
10184
+ key: "av01",
10185
+ value: function av01(track) {
10186
+ return MP42.box(MP42.types.av01, new Uint8Array([
10187
+ 0,
10188
+ 0,
10189
+ 0,
10190
+ 0,
10191
+ 0,
10192
+ 0,
10193
+ 0,
10194
+ 1,
10195
+ 0,
10196
+ 0,
10197
+ 0,
10198
+ 0,
10199
+ 0,
10200
+ 0,
10201
+ 0,
10202
+ 0,
10203
+ 0,
10204
+ 0,
10205
+ 0,
10206
+ 0,
10207
+ 0,
10208
+ 0,
10209
+ 0,
10210
+ 0,
10211
+ track.width >> 8 & 255,
10212
+ track.width & 255,
10213
+ track.height >> 8 & 255,
10214
+ track.height & 255,
10215
+ 0,
10216
+ 72,
10217
+ 0,
10218
+ 0,
10219
+ 0,
10220
+ 72,
10221
+ 0,
10222
+ 0,
10223
+ 0,
10224
+ 0,
10225
+ 0,
10226
+ 0,
10227
+ 0,
10228
+ 1,
10229
+ 0,
10230
+ 0,
10231
+ 0,
10232
+ 0,
10233
+ 0,
10234
+ 0,
10235
+ 0,
10236
+ 0,
10237
+ 0,
10238
+ 0,
10239
+ 0,
10240
+ 0,
10241
+ 0,
10242
+ 0,
10243
+ 0,
10244
+ 0,
10245
+ 0,
10246
+ 0,
10247
+ 0,
10248
+ 0,
10249
+ 0,
10250
+ 0,
10251
+ 0,
10252
+ 0,
10253
+ 0,
10254
+ 0,
10255
+ 0,
10256
+ 0,
10257
+ 0,
10258
+ 0,
10259
+ 0,
10260
+ 0,
10261
+ 0,
10262
+ 24,
10263
+ 17,
10264
+ 17
10265
+ ]), track.av1C, track.colr);
10266
+ }
9396
10267
  }, {
9397
10268
  key: "avc1hev1",
9398
10269
  value: function avc1hev1(track) {
@@ -9763,6 +10634,53 @@ var MP4 = /* @__PURE__ */ function() {
9763
10634
  )));
9764
10635
  return esds2;
9765
10636
  }
10637
+ }, {
10638
+ key: "opus",
10639
+ value: function opus(track) {
10640
+ var opusAudioDescription = new Uint8Array([
10641
+ 0,
10642
+ 0,
10643
+ 0,
10644
+ 0,
10645
+ 0,
10646
+ 0,
10647
+ 0,
10648
+ 1,
10649
+ 0,
10650
+ 0,
10651
+ 0,
10652
+ 0,
10653
+ 0,
10654
+ 0,
10655
+ 0,
10656
+ 0,
10657
+ 0,
10658
+ track.channelCount,
10659
+ 0,
10660
+ 16,
10661
+ 0,
10662
+ 0,
10663
+ 0,
10664
+ 0,
10665
+ track.sampleRate >> 8 & 255,
10666
+ track.sampleRate & 255,
10667
+ 0,
10668
+ 0
10669
+ ]);
10670
+ var opusSpecificConfig = track.config.length ? MP42.dOps(track) : [];
10671
+ return MP42.box(MP42.types.Opus, opusAudioDescription, opusSpecificConfig);
10672
+ }
10673
+ }, {
10674
+ key: "dOps",
10675
+ value: function dOps(track) {
10676
+ if (track.config) {
10677
+ track.config[4] = track.sampleRate >>> 24 & 255;
10678
+ track.config[5] = track.sampleRate >>> 16 & 255;
10679
+ track.config[6] = track.sampleRate >>> 8 & 255;
10680
+ track.config[7] = track.sampleRate & 255;
10681
+ return MP42.box(MP42.types.dOps, track.config);
10682
+ }
10683
+ }
9766
10684
  }, {
9767
10685
  key: "mvex",
9768
10686
  value: function mvex(tracks) {
@@ -10365,7 +11283,7 @@ var MP4 = /* @__PURE__ */ function() {
10365
11283
  }]);
10366
11284
  return MP42;
10367
11285
  }();
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) {
11286
+ _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
11287
  p[c] = [c.charCodeAt(0), c.charCodeAt(1), c.charCodeAt(2), c.charCodeAt(3)];
10370
11288
  return p;
10371
11289
  }, /* @__PURE__ */ Object.create(null)));
@@ -10700,30 +11618,46 @@ var FMP4Remuxer = /* @__PURE__ */ function() {
10700
11618
  };
10701
11619
  }
10702
11620
  var samples = track.samples;
11621
+ var isAV01 = /av01/.test(track.codec);
10703
11622
  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;
11623
+ if (isAV01) {
11624
+ samples.forEach(function(s) {
11625
+ mdatSize += s.data.byteLength;
10721
11626
  });
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);
11627
+ } else {
11628
+ samples.forEach(function(s) {
11629
+ mdatSize += s.units.reduce(function(t, c) {
11630
+ return t + c.byteLength;
11631
+ }, 0);
11632
+ mdatSize += s.units.length * 4;
11633
+ });
11634
+ }
11635
+ var mdata = new Uint8Array(mdatSize);
11636
+ if (isAV01) {
11637
+ for (var i = 0, l = samples.length, offset = 0, sample; i < l; i++) {
11638
+ sample = samples[i];
11639
+ mdata.set(sample.data, offset);
11640
+ sample.size = sample.data.byteLength;
11641
+ offset += sample.size;
11642
+ }
11643
+ } else {
11644
+ var mdatView = new DataView(mdata.buffer);
11645
+ var _loop = function _loop2(_offset2, _sample2) {
11646
+ _sample2 = samples[_i];
11647
+ var sampleSize = 0;
11648
+ _sample2.units.forEach(function(u) {
11649
+ mdatView.setUint32(_offset2, u.byteLength);
11650
+ _offset2 += 4;
11651
+ mdata.set(u, _offset2);
11652
+ _offset2 += u.byteLength;
11653
+ sampleSize += 4 + u.byteLength;
11654
+ });
11655
+ _sample2.size = sampleSize;
11656
+ _offset = _offset2, _sample = _sample2;
11657
+ };
11658
+ for (var _i = 0, _l = samples.length, _offset = 0, _sample; _i < _l; _i++) {
11659
+ _loop(_offset, _sample);
11660
+ }
10727
11661
  }
10728
11662
  var mdat = MP4.mdat(mdata);
10729
11663
  var moof = MP4.moof([track]);
@@ -10882,11 +11816,11 @@ var Event$1 = _objectSpread2$2(_objectSpread2$2({}, EVENT), {}, {
10882
11816
  });
10883
11817
  var logger$3 = new Logger$2("Transmuxer");
10884
11818
  var Transmuxer = /* @__PURE__ */ function() {
10885
- function Transmuxer2(hls, isMP4, needRemux) {
11819
+ function Transmuxer2(hls, isMP4, needRemux, fixerConfig) {
10886
11820
  _classCallCheck$3(this, Transmuxer2);
10887
11821
  _defineProperty$3(this, "_initSegmentId", "");
10888
11822
  this.hls = hls;
10889
- this._demuxer = isMP4 ? new FMP4Demuxer() : new TsDemuxer();
11823
+ this._demuxer = isMP4 ? new FMP4Demuxer() : new TsDemuxer(null, null, null, fixerConfig);
10890
11824
  this._isMP4 = isMP4;
10891
11825
  if (needRemux)
10892
11826
  this._remuxer = new FMP4Remuxer(this._demuxer.videoTrack, this._demuxer.audioTrack);
@@ -10917,7 +11851,8 @@ var Transmuxer = /* @__PURE__ */ function() {
10917
11851
  timescale: audioTrack.timescale,
10918
11852
  firstDts: audioTrack.firstDts / videoTrack.timescale,
10919
11853
  firstPts: audioTrack.firstPts / videoTrack.timescale,
10920
- duration: audioTrack.samplesDuration / videoTrack.timescale
11854
+ duration: audioTrack.samplesDuration / videoTrack.timescale,
11855
+ container: audioTrack.container
10921
11856
  };
10922
11857
  var newId = "".concat(videoTrack.codec, "/").concat(videoTrack.width, "/").concat(videoTrack.height, "/").concat(audioTrack.codec, "/").concat(audioTrack.config);
10923
11858
  if (newId !== this._initSegmentId) {
@@ -11041,7 +11976,7 @@ var Transmuxer = /* @__PURE__ */ function() {
11041
11976
  }]);
11042
11977
  return Transmuxer2;
11043
11978
  }();
11044
- var _excluded = ["data"], _excluded2 = ["data"];
11979
+ var _excluded$1 = ["data"], _excluded2 = ["data"];
11045
11980
  var logger$2 = new Logger$2("BufferService");
11046
11981
  var BufferService = /* @__PURE__ */ function() {
11047
11982
  function BufferService2(hls) {
@@ -11153,11 +12088,11 @@ var BufferService = /* @__PURE__ */ function() {
11153
12088
  return;
11154
12089
  if (TsDemuxer.probe(chunk)) {
11155
12090
  if (!this._transmuxer)
11156
- this._transmuxer = new Transmuxer(this.hls, false, !this._softVideo);
12091
+ this._transmuxer = new Transmuxer(this.hls, false, !this._softVideo, this.hls.config.fixerConfig);
11157
12092
  } else if (MP4Parser.probe(chunk)) {
11158
12093
  if (this._softVideo) {
11159
12094
  if (!this._transmuxer)
11160
- this._transmuxer = new Transmuxer(this.hls, true);
12095
+ this._transmuxer = new Transmuxer(this.hls, true, null, this.hls.config.fixerConfig);
11161
12096
  } else {
11162
12097
  this._directAppend = true;
11163
12098
  var mix = false;
@@ -11207,7 +12142,8 @@ var BufferService = /* @__PURE__ */ function() {
11207
12142
  key: "appendBuffer",
11208
12143
  value: function() {
11209
12144
  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;
12145
+ var _this2 = this;
12146
+ var afterAppend, p, needInit, _this$_transmuxer$tra, _this$_transmuxer$tra2, video, audio, isFirstAppend, mse, _p, videoData, videoRest, audioData, audioRest;
11211
12147
  return _regeneratorRuntime$1().wrap(function _callee2$(_context2) {
11212
12148
  while (1)
11213
12149
  switch (_context2.prev = _context2.next) {
@@ -11218,8 +12154,18 @@ var BufferService = /* @__PURE__ */ function() {
11218
12154
  }
11219
12155
  return _context2.abrupt("return");
11220
12156
  case 2:
12157
+ afterAppend = function afterAppend2() {
12158
+ var _this2$hls;
12159
+ if ((_this2$hls = _this2.hls) !== null && _this2$hls !== void 0 && _this2$hls.emit) {
12160
+ var _this2$hls2;
12161
+ (_this2$hls2 = _this2.hls) === null || _this2$hls2 === void 0 ? void 0 : _this2$hls2.emit(EVENT.APPEND_BUFFER, {
12162
+ start: segment.start,
12163
+ end: segment.end
12164
+ });
12165
+ }
12166
+ };
11221
12167
  if (!this._directAppend) {
11222
- _context2.next = 7;
12168
+ _context2.next = 8;
11223
12169
  break;
11224
12170
  }
11225
12171
  p = [];
@@ -11227,8 +12173,8 @@ var BufferService = /* @__PURE__ */ function() {
11227
12173
  p.push(this._mse.append(MSE.VIDEO, videoChunk));
11228
12174
  if (audioChunk)
11229
12175
  p.push(this._mse.append(MSE.AUDIO, audioChunk));
11230
- return _context2.abrupt("return", Promise.all(p));
11231
- case 7:
12176
+ return _context2.abrupt("return", Promise.all(p).then(afterAppend));
12177
+ case 8:
11232
12178
  needInit = this._needInitSegment || discontinuity;
11233
12179
  _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
12180
  if (audioChunk && audioSegment) {
@@ -11244,21 +12190,22 @@ var BufferService = /* @__PURE__ */ function() {
11244
12190
  this.hls.emit(Event$1.NO_AUDIO_TRACK);
11245
12191
  }
11246
12192
  if (!this._softVideo) {
11247
- _context2.next = 18;
12193
+ _context2.next = 20;
11248
12194
  break;
11249
12195
  }
11250
12196
  this._softVideo.appendBuffer(video, audio);
11251
12197
  this._needInitSegment = false;
11252
- _context2.next = 28;
12198
+ afterAppend();
12199
+ _context2.next = 30;
11253
12200
  break;
11254
- case 18:
12201
+ case 20:
11255
12202
  if (!this._mse) {
11256
- _context2.next = 28;
12203
+ _context2.next = 30;
11257
12204
  break;
11258
12205
  }
11259
12206
  isFirstAppend = !this._sourceCreated;
11260
12207
  if (isFirstAppend) {
11261
- this._createMseSource(video === null || video === void 0 ? void 0 : video.codec, audio === null || audio === void 0 ? void 0 : audio.codec);
12208
+ this._createMseSource(video === null || video === void 0 ? void 0 : video.codec, audio === null || audio === void 0 ? void 0 : audio.codec, audio === null || audio === void 0 ? void 0 : audio.container);
11262
12209
  }
11263
12210
  this._needInitSegment = false;
11264
12211
  mse = this._mse;
@@ -11269,15 +12216,15 @@ var BufferService = /* @__PURE__ */ function() {
11269
12216
  });
11270
12217
  }
11271
12218
  if (video) {
11272
- videoData = video.data, videoRest = _objectWithoutProperties$1(video, _excluded);
12219
+ videoData = video.data, videoRest = _objectWithoutProperties$1(video, _excluded$1);
11273
12220
  _p.push(mse.append(MSE.VIDEO, videoData, videoRest));
11274
12221
  }
11275
12222
  if (audio) {
11276
12223
  audioData = audio.data, audioRest = _objectWithoutProperties$1(audio, _excluded2);
11277
12224
  _p.push(mse.append(MSE.AUDIO, audioData, audioRest));
11278
12225
  }
11279
- return _context2.abrupt("return", Promise.all(_p));
11280
- case 28:
12226
+ return _context2.abrupt("return", Promise.all(_p).then(afterAppend));
12227
+ case 30:
11281
12228
  case "end":
11282
12229
  return _context2.stop();
11283
12230
  }
@@ -11292,7 +12239,7 @@ var BufferService = /* @__PURE__ */ function() {
11292
12239
  key: "removeBuffer",
11293
12240
  value: function() {
11294
12241
  var _removeBuffer = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee3() {
11295
- var _this2 = this;
12242
+ var _this3 = this;
11296
12243
  var start, end, media, _args3 = arguments;
11297
12244
  return _regeneratorRuntime$1().wrap(function _callee3$(_context3) {
11298
12245
  while (1)
@@ -11308,7 +12255,7 @@ var BufferService = /* @__PURE__ */ function() {
11308
12255
  return _context3.abrupt("return");
11309
12256
  case 5:
11310
12257
  return _context3.abrupt("return", this._mse.clearBuffer(start, end).then(function() {
11311
- return _this2.hls.emit(EVENT.REMOVE_BUFFER, {
12258
+ return _this3.hls.emit(EVENT.REMOVE_BUFFER, {
11312
12259
  start,
11313
12260
  end,
11314
12261
  removeEnd: end
@@ -11489,30 +12436,51 @@ var BufferService = /* @__PURE__ */ function() {
11489
12436
  return setLiveSeekableRange;
11490
12437
  }()
11491
12438
  }, {
11492
- key: "destroy",
12439
+ key: "detachMedia",
11493
12440
  value: function() {
11494
- var _destroy = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee9() {
11495
- var _this$_decryptor;
12441
+ var _detachMedia = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee9() {
11496
12442
  return _regeneratorRuntime$1().wrap(function _callee9$(_context9) {
11497
12443
  while (1)
11498
12444
  switch (_context9.prev = _context9.next) {
11499
12445
  case 0:
11500
- (_this$_decryptor = this._decryptor) === null || _this$_decryptor === void 0 ? void 0 : _this$_decryptor.destroy();
11501
12446
  if (!this._mse) {
11502
- _context9.next = 4;
12447
+ _context9.next = 3;
11503
12448
  break;
11504
12449
  }
11505
- _context9.next = 4;
12450
+ _context9.next = 3;
11506
12451
  return this._mse.unbindMedia();
11507
- case 4:
12452
+ case 3:
12453
+ case "end":
12454
+ return _context9.stop();
12455
+ }
12456
+ }, _callee9, this);
12457
+ }));
12458
+ function detachMedia() {
12459
+ return _detachMedia.apply(this, arguments);
12460
+ }
12461
+ return detachMedia;
12462
+ }()
12463
+ }, {
12464
+ key: "destroy",
12465
+ value: function() {
12466
+ var _destroy = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee10() {
12467
+ var _this$_decryptor;
12468
+ return _regeneratorRuntime$1().wrap(function _callee10$(_context10) {
12469
+ while (1)
12470
+ switch (_context10.prev = _context10.next) {
12471
+ case 0:
12472
+ (_this$_decryptor = this._decryptor) === null || _this$_decryptor === void 0 ? void 0 : _this$_decryptor.destroy();
12473
+ _context10.next = 3;
12474
+ return this.detachMedia();
12475
+ case 3:
11508
12476
  this._decryptor = null;
11509
12477
  this._mse = null;
11510
12478
  this._softVideo = null;
11511
- case 7:
12479
+ case 6:
11512
12480
  case "end":
11513
- return _context9.stop();
12481
+ return _context10.stop();
11514
12482
  }
11515
- }, _callee9, this);
12483
+ }, _callee10, this);
11516
12484
  }));
11517
12485
  function destroy() {
11518
12486
  return _destroy.apply(this, arguments);
@@ -11521,7 +12489,7 @@ var BufferService = /* @__PURE__ */ function() {
11521
12489
  }()
11522
12490
  }, {
11523
12491
  key: "_createMseSource",
11524
- value: function _createMseSource(videoCodec, audioCodec) {
12492
+ value: function _createMseSource(videoCodec, audioCodec, container) {
11525
12493
  logger$2.debug("create mse source, videoCodec=".concat(videoCodec, ", audioCodec=").concat(audioCodec));
11526
12494
  var mse = this._mse;
11527
12495
  if (!mse)
@@ -11533,6 +12501,9 @@ var BufferService = /* @__PURE__ */ function() {
11533
12501
  if (audioCodec) {
11534
12502
  mse.createSource(MSE.AUDIO, "audio/mp4;codecs=".concat(audioCodec));
11535
12503
  this._sourceCreated = true;
12504
+ } else if (container) {
12505
+ mse.createSource(MSE.AUDIO, "".concat(container, ';codecs=""'));
12506
+ this._sourceCreated = true;
11536
12507
  }
11537
12508
  this.hls.emit(EVENT.SOURCEBUFFER_CREATED);
11538
12509
  }
@@ -11600,7 +12571,11 @@ function getConfig(cfg) {
11600
12571
  minSegmentsStartPlay: 3,
11601
12572
  preferMMS: false,
11602
12573
  preferMMSStreaming: false,
11603
- mseLowLatency: true
12574
+ mseLowLatency: true,
12575
+ fixerConfig: {
12576
+ forceFixLargeGap: false,
12577
+ largeGapThreshold: 5
12578
+ }
11604
12579
  }, cfg), {}, {
11605
12580
  media
11606
12581
  });
@@ -11715,6 +12690,8 @@ var MediaPlaylist = /* @__PURE__ */ _createClass$3(function MediaPlaylist2() {
11715
12690
  _defineProperty$3(this, "lowLatency", false);
11716
12691
  _defineProperty$3(this, "endPartIndex", 0);
11717
12692
  _defineProperty$3(this, "segments", []);
12693
+ _defineProperty$3(this, "dateRanges", {});
12694
+ _defineProperty$3(this, "skippedSegments", 0);
11718
12695
  });
11719
12696
  var MediaSegment = /* @__PURE__ */ function() {
11720
12697
  function MediaSegment2(parentUrl) {
@@ -11836,6 +12813,31 @@ var MediaSegmentKey = /* @__PURE__ */ function() {
11836
12813
  }]);
11837
12814
  return MediaSegmentKey2;
11838
12815
  }();
12816
+ var HlsUrlParameters = /* @__PURE__ */ function() {
12817
+ function HlsUrlParameters2(msn, part, skip) {
12818
+ _classCallCheck$3(this, HlsUrlParameters2);
12819
+ this.msn = msn;
12820
+ this.part = part;
12821
+ this.skip = skip;
12822
+ }
12823
+ _createClass$3(HlsUrlParameters2, [{
12824
+ key: "addDirectives",
12825
+ value: function addDirectives(uri) {
12826
+ var url = new self.URL(uri);
12827
+ if (this.msn !== void 0) {
12828
+ url.searchParams.set("_HLS_msn", this.msn.toString());
12829
+ }
12830
+ if (this.part) {
12831
+ url.searchParams.set("_HLS_part", this.part.toString());
12832
+ }
12833
+ if (this.skip) {
12834
+ url.searchParams.set("_HLS_skip", this.skip);
12835
+ }
12836
+ return url.href;
12837
+ }
12838
+ }]);
12839
+ return HlsUrlParameters2;
12840
+ }();
11839
12841
  var REGEXP_TAG = /^#(EXT[^:]*)(?::(.*))?$/;
11840
12842
  var REGEXP_ATTR = /([^=]+)=(?:"([^"]*)"|([^",]*))(?:,|$)/g;
11841
12843
  var REGEXP_ABSOLUTE_URL = /^(?:[a-zA-Z0-9+\-.]+:)?\/\//;
@@ -11886,6 +12888,38 @@ function getCodecs(type, codecs) {
11886
12888
  }
11887
12889
  }
11888
12890
  }
12891
+ function isValidDaterange(attr, dateRangeWithSameId) {
12892
+ var _badValueForSameId;
12893
+ if (dateRangeWithSameId) {
12894
+ for (var key in dateRangeWithSameId) {
12895
+ if (Object.prototype.hasOwnProperty.call(dateRangeWithSameId, key) && attr[key] !== dateRangeWithSameId[key]) {
12896
+ _badValueForSameId = key;
12897
+ break;
12898
+ }
12899
+ }
12900
+ }
12901
+ var duration = null;
12902
+ if (attr.DURATION) {
12903
+ duration = parseFloat(attr.DURATION);
12904
+ if (!Number.isFinite(duration)) {
12905
+ duration = null;
12906
+ } else if (attr._endDate) {
12907
+ duration = (attr._endDate.getTime() - attr._startDate.getTime()) / 1e3;
12908
+ }
12909
+ }
12910
+ var cue = enumeratedStringList(attr.CUE || attr["X-CUE"], {
12911
+ pre: false,
12912
+ post: false,
12913
+ once: false
12914
+ });
12915
+ 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);
12916
+ }
12917
+ function enumeratedStringList(attrValue, dict) {
12918
+ return (attrValue ? attrValue.split(/[ ,]+/) : []).reduce(function(result, identifier) {
12919
+ result[identifier.toLowerCase()] = true;
12920
+ return result;
12921
+ }, dict);
12922
+ }
11889
12923
  function parseMasterPlaylist(lines, parentUrl) {
11890
12924
  var master = new MasterPlaylist();
11891
12925
  var index = 0;
@@ -11994,9 +13028,6 @@ function parseMediaPlaylist(lines, parentUrl, useLowLatency) {
11994
13028
  var endOfList = false;
11995
13029
  var partSegmentIndex = 0;
11996
13030
  while (line = lines[index++]) {
11997
- if (endOfList) {
11998
- break;
11999
- }
12000
13031
  if (line[0] !== "#") {
12001
13032
  if (media.lowLatency) {
12002
13033
  curSN++;
@@ -12045,16 +13076,11 @@ function parseMediaPlaylist(lines, parentUrl, useLowLatency) {
12045
13076
  media.canBlockReload = _attr["CAN-BLOCK-RELOAD"] === "YES";
12046
13077
  media.partHoldBack = parseFloat(_attr["PART-HOLD-BACK"] || 0);
12047
13078
  media.canSkipUntil = parseFloat(_attr["CAN-SKIP-UNTIL"] || 0);
12048
- media.canSkipDateRanges = _attr["CAN-SKIP-DATERANGES"] === "YES";
13079
+ media.canSkipDateRanges = media.canSkipUntil > 0 && _attr["CAN-SKIP-DATERANGES"] === "YES";
12049
13080
  }
12050
13081
  break;
12051
13082
  case "ENDLIST":
12052
13083
  {
12053
- var _lastSegment = media.segments[media.segments.length - 1];
12054
- if (_lastSegment) {
12055
- _lastSegment.isLast = true;
12056
- }
12057
- media.live = false;
12058
13084
  endOfList = true;
12059
13085
  }
12060
13086
  break;
@@ -12094,6 +13120,15 @@ function parseMediaPlaylist(lines, parentUrl, useLowLatency) {
12094
13120
  }
12095
13121
  break;
12096
13122
  case "PRELOAD-HINT":
13123
+ {
13124
+ var _attr3 = parseAttr(data);
13125
+ media.preloadHint = _attr3;
13126
+ if (_attr3["TYPE"] === "PART" && _attr3["URI"]) {
13127
+ var tmp = _attr3["URI"].split(".ts")[0].split("-");
13128
+ media.nextSN = tmp[3];
13129
+ media.nextIndex = tmp[tmp.length - 1];
13130
+ }
13131
+ }
12097
13132
  break;
12098
13133
  case "PROGRAM-DATE-TIME":
12099
13134
  curSegment.dataTime = data;
@@ -12113,21 +13148,21 @@ function parseMediaPlaylist(lines, parentUrl, useLowLatency) {
12113
13148
  break;
12114
13149
  case "KEY":
12115
13150
  {
12116
- var _attr3 = parseAttr(data);
12117
- if (_attr3.METHOD === "NONE") {
13151
+ var _attr4 = parseAttr(data);
13152
+ if (_attr4.METHOD === "NONE") {
12118
13153
  curKey = null;
12119
13154
  break;
12120
13155
  }
12121
13156
  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;
13157
+ curKey.method = _attr4.METHOD;
13158
+ curKey.url = /^blob:/.test(_attr4.URI) ? _attr4.URI : getAbsoluteUrl(_attr4.URI, parentUrl);
13159
+ curKey.keyFormat = _attr4.KEYFORMAT || "identity";
13160
+ curKey.keyFormatVersions = _attr4.KEYFORMATVERSIONS;
12126
13161
  if (!curKey.isSupported()) {
12127
- throw new Error("encrypt ".concat(_attr3.METHOD, "/").concat(_attr3.KEYFORMAT, " is not supported"));
13162
+ throw new Error("encrypt ".concat(_attr4.METHOD, "/").concat(_attr4.KEYFORMAT, " is not supported"));
12128
13163
  }
12129
- if (_attr3.IV) {
12130
- var str = _attr3.IV.slice(2);
13164
+ if (_attr4.IV) {
13165
+ var str = _attr4.IV.slice(2);
12131
13166
  str = (str.length & 1 ? "0" : "") + str;
12132
13167
  curKey.iv = new Uint8Array(str.length / 2);
12133
13168
  for (var i = 0, l = str.length / 2; i < l; i++) {
@@ -12138,10 +13173,10 @@ function parseMediaPlaylist(lines, parentUrl, useLowLatency) {
12138
13173
  break;
12139
13174
  case "MAP":
12140
13175
  {
12141
- var _attr4 = parseAttr(data);
12142
- curSegment.url = getAbsoluteUrl(_attr4.URI, parentUrl);
12143
- if (_attr4.BYTERANGE)
12144
- curSegment.setByteRange(_attr4.BYTERANGE);
13176
+ var _attr5 = parseAttr(data);
13177
+ curSegment.url = getAbsoluteUrl(_attr5.URI, parentUrl);
13178
+ if (_attr5.BYTERANGE)
13179
+ curSegment.setByteRange(_attr5.BYTERANGE);
12145
13180
  curSegment.isInitSegment = true;
12146
13181
  curSegment.sn = 0;
12147
13182
  if (curKey) {
@@ -12151,6 +13186,30 @@ function parseMediaPlaylist(lines, parentUrl, useLowLatency) {
12151
13186
  curSegment = new MediaSegment(parentUrl);
12152
13187
  }
12153
13188
  break;
13189
+ case "SKIP":
13190
+ {
13191
+ var _attr6 = parseAttr(data);
13192
+ var skippedSegments = parseInt(_attr6["SKIPPED-SEGMENTS"], 10);
13193
+ if (skippedSegments <= Number.MAX_SAFE_INTEGER) {
13194
+ media.skippedSegments += skippedSegments;
13195
+ curSN += skippedSegments;
13196
+ }
13197
+ }
13198
+ break;
13199
+ case "DATERANGE":
13200
+ {
13201
+ var _attr7 = parseAttr(data);
13202
+ var dateRangeWithSameId = media.dateRanges[_attr7.ID];
13203
+ _attr7._startDate = dateRangeWithSameId ? dateRangeWithSameId._startDate : new Date(_attr7["START-DATE"]);
13204
+ var endDate = (dateRangeWithSameId === null || dateRangeWithSameId === void 0 ? void 0 : dateRangeWithSameId._endDate) || new Date(_attr7.END_DATE);
13205
+ if (Number.isFinite(endDate)) {
13206
+ _attr7._endDate = endDate;
13207
+ }
13208
+ if (isValidDaterange(_attr7, dateRangeWithSameId) || media.skippedSegments) {
13209
+ media.dateRanges[_attr7.ID] = _attr7;
13210
+ }
13211
+ }
13212
+ break;
12154
13213
  }
12155
13214
  }
12156
13215
  media.segments = media.segments.filter(function(x) {
@@ -12158,11 +13217,14 @@ function parseMediaPlaylist(lines, parentUrl, useLowLatency) {
12158
13217
  });
12159
13218
  var lastSegment = media.segments[media.segments.length - 1];
12160
13219
  if (lastSegment) {
12161
- media.endSN = lastSegment.sn;
12162
- media.endPartIndex = lastSegment.partIndex;
12163
- if (endOfList && !lastSegment.isLast) {
13220
+ if (endOfList) {
12164
13221
  lastSegment.isLast = true;
12165
13222
  }
13223
+ media.endSN = lastSegment.sn;
13224
+ media.endPartIndex = lastSegment.partIndex;
13225
+ }
13226
+ if (endOfList) {
13227
+ media.live = false;
12166
13228
  }
12167
13229
  media.totalDuration = totalDuration;
12168
13230
  media.endCC = curCC;
@@ -12341,6 +13403,13 @@ var ManifestLoader = /* @__PURE__ */ function() {
12341
13403
  playlist
12342
13404
  });
12343
13405
  } else {
13406
+ if (this._useLowLatency) {
13407
+ if (playlist.canBlockReload) {
13408
+ this.deliveryDirectives = new HlsUrlParameters(playlist.nextSN, playlist.nextIndex, "");
13409
+ } else {
13410
+ this.deliveryDirectives = null;
13411
+ }
13412
+ }
12344
13413
  this.hls.emit(Event$1.HLS_LEVEL_LOADED, {
12345
13414
  playlist
12346
13415
  });
@@ -12397,41 +13466,45 @@ var ManifestLoader = /* @__PURE__ */ function() {
12397
13466
  var retryCount = this.hls.config.pollRetryCount;
12398
13467
  var fn = /* @__PURE__ */ function() {
12399
13468
  var _ref2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee2() {
12400
- var res;
13469
+ var reqUrl, res;
12401
13470
  return _regeneratorRuntime$1().wrap(function _callee2$(_context2) {
12402
13471
  while (1)
12403
13472
  switch (_context2.prev = _context2.next) {
12404
13473
  case 0:
12405
13474
  clearTimeout(_this2._timer);
12406
- _context2.prev = 1;
12407
- _context2.next = 4;
12408
- return _this2.load(url, audioUrl, subtitleUrl);
12409
- case 4:
13475
+ reqUrl = url;
13476
+ _context2.prev = 2;
13477
+ if (_this2.deliveryDirectives) {
13478
+ reqUrl = _this2.deliveryDirectives.addDirectives(url);
13479
+ }
13480
+ _context2.next = 6;
13481
+ return _this2.load(reqUrl, audioUrl, subtitleUrl);
13482
+ case 6:
12410
13483
  res = _context2.sent;
12411
13484
  if (res[0]) {
12412
- _context2.next = 7;
13485
+ _context2.next = 9;
12413
13486
  break;
12414
13487
  }
12415
13488
  return _context2.abrupt("return");
12416
- case 7:
13489
+ case 9:
12417
13490
  retryCount = _this2.hls.config.pollRetryCount;
12418
13491
  cb(res[0], res[1], res[2]);
12419
- _context2.next = 15;
13492
+ _context2.next = 17;
12420
13493
  break;
12421
- case 11:
12422
- _context2.prev = 11;
12423
- _context2.t0 = _context2["catch"](1);
13494
+ case 13:
13495
+ _context2.prev = 13;
13496
+ _context2.t0 = _context2["catch"](2);
12424
13497
  retryCount--;
12425
13498
  if (retryCount <= 0) {
12426
13499
  errorCb(_context2.t0);
12427
13500
  }
12428
- case 15:
13501
+ case 17:
12429
13502
  _this2._timer = setTimeout(fn, time);
12430
- case 16:
13503
+ case 18:
12431
13504
  case "end":
12432
13505
  return _context2.stop();
12433
13506
  }
12434
- }, _callee2, null, [[1, 11]]);
13507
+ }, _callee2, null, [[2, 13]]);
12435
13508
  }));
12436
13509
  return function fn2() {
12437
13510
  return _ref2.apply(this, arguments);
@@ -12961,7 +14034,7 @@ var Playlist = /* @__PURE__ */ function() {
12961
14034
  }, {
12962
14035
  key: "clearOldSegment",
12963
14036
  value: function clearOldSegment() {
12964
- var maxPlaylistSize = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 50;
14037
+ var maxPlaylistSize = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : this.hls.config.maxPlaylistSize || 50;
12965
14038
  var stream = this.currentStream;
12966
14039
  if (!this.dvrWindow || !stream)
12967
14040
  return;
@@ -13259,7 +14332,7 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13259
14332
  _defineProperty$3(_assertThisInitialized$2(_this), "_switchUrlOpts", null);
13260
14333
  _defineProperty$3(_assertThisInitialized$2(_this), "_isProcessQuotaExceeded", false);
13261
14334
  _defineProperty$3(_assertThisInitialized$2(_this), "_loadSegment", /* @__PURE__ */ _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee() {
13262
- var nextSeg, _assertThisInitialize, config, bInfo, bufferThroughout;
14335
+ var _this$_playlist, nextSegment, lastSegment, _assertThisInitialize, config, minFrameDuration, maxBufferThroughout, bInfo, bufferThroughout;
13263
14336
  return _regeneratorRuntime$1().wrap(function _callee$(_context) {
13264
14337
  while (1)
13265
14338
  switch (_context.prev = _context.next) {
@@ -13270,42 +14343,44 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13270
14343
  }
13271
14344
  return _context.abrupt("return");
13272
14345
  case 2:
13273
- nextSeg = _this._playlist.nextSegment;
14346
+ _this$_playlist = _this._playlist, nextSegment = _this$_playlist.nextSegment, lastSegment = _this$_playlist.lastSegment;
13274
14347
  _assertThisInitialize = _assertThisInitialized$2(_this), config = _assertThisInitialize.config;
13275
- if (nextSeg) {
13276
- _context.next = 6;
14348
+ minFrameDuration = 0.016;
14349
+ maxBufferThroughout = Math.min(Math.max((lastSegment === null || lastSegment === void 0 ? void 0 : lastSegment.duration) - minFrameDuration / 2 || 0, minFrameDuration), 0.1);
14350
+ if (nextSegment) {
14351
+ _context.next = 8;
13277
14352
  break;
13278
14353
  }
13279
14354
  return _context.abrupt("return");
13280
- case 6:
14355
+ case 8:
13281
14356
  if (_this.isLive) {
13282
- _context.next = 16;
14357
+ _context.next = 18;
13283
14358
  break;
13284
14359
  }
13285
14360
  bInfo = _this.bufferInfo();
13286
14361
  if (_this.media.paused && !_this.media.currentTime) {
13287
14362
  bInfo = _this.bufferInfo(bInfo.nextStart || 0.5);
13288
14363
  }
13289
- bufferThroughout = Math.abs(bInfo.end - _this.media.duration) < 0.1;
14364
+ bufferThroughout = Math.abs(bInfo.end - _this.media.duration) < maxBufferThroughout;
13290
14365
  if (!(bInfo.remaining >= config.preloadTime || bufferThroughout)) {
13291
- _context.next = 13;
14366
+ _context.next = 15;
13292
14367
  break;
13293
14368
  }
13294
14369
  _this._tryEos();
13295
14370
  return _context.abrupt("return");
13296
- case 13:
14371
+ case 15:
13297
14372
  if (!(config.preferMMSStreaming && !_this._bufferService.msStreaming)) {
13298
- _context.next = 15;
14373
+ _context.next = 17;
13299
14374
  break;
13300
14375
  }
13301
14376
  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) {
14377
+ case 17:
14378
+ if (!_this._urlSwitching && _this._prevSegSn !== nextSegment.sn - 1 && bInfo.end && Math.abs(nextSegment.start - bInfo.end) > 1) {
13304
14379
  _this._playlist.setNextSegmentByIndex(_this._playlist.findSegmentIndexByTime(bInfo.end + 0.1));
13305
14380
  }
13306
- case 16:
14381
+ case 18:
13307
14382
  return _context.abrupt("return", _this._loadSegmentDirect());
13308
- case 17:
14383
+ case 19:
13309
14384
  case "end":
13310
14385
  return _context.stop();
13311
14386
  }
@@ -13470,7 +14545,6 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13470
14545
  return;
13471
14546
  _this._startTick();
13472
14547
  var media = _this.media;
13473
- var buffered = Buffer$1.get(media);
13474
14548
  var segLoaderError = _this._segmentLoader.error;
13475
14549
  _this._onCheckQuotaExceeded();
13476
14550
  if (_this._isProcessQuotaExceeded) {
@@ -13487,7 +14561,7 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13487
14561
  }
13488
14562
  return;
13489
14563
  }
13490
- if (Buffer$1.end(buffered) >= 0.1 && media.readyState) {
14564
+ if (media.readyState) {
13491
14565
  if (isMediaPlaying(media)) {
13492
14566
  _this._loadSegment();
13493
14567
  if (_this._gapService) {
@@ -13553,6 +14627,12 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13553
14627
  var _this$_bufferService;
13554
14628
  return (_this$_bufferService = this._bufferService) === null || _this$_bufferService === void 0 ? void 0 : _this$_bufferService.baseDts;
13555
14629
  }
14630
+ }, {
14631
+ key: "abrSwitchPoint",
14632
+ get: function get() {
14633
+ var targetSeg = this._urlSwitching ? this._playlist.currentSegment : this._playlist.nextSegment;
14634
+ return targetSeg ? targetSeg.start + targetSeg.duration / 2 : null;
14635
+ }
13556
14636
  }, {
13557
14637
  key: "speedInfo",
13558
14638
  value: function speedInfo() {
@@ -13578,30 +14658,37 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13578
14658
  }, {
13579
14659
  key: "load",
13580
14660
  value: function() {
13581
- var _load = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee4(url) {
13582
- var reuseMse, _args4 = arguments;
14661
+ var _load = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee4() {
14662
+ var url, options, reuseMse, _args4 = arguments;
13583
14663
  return _regeneratorRuntime$1().wrap(function _callee4$(_context4) {
13584
14664
  while (1)
13585
14665
  switch (_context4.prev = _context4.next) {
13586
14666
  case 0:
13587
- reuseMse = _args4.length > 1 && _args4[1] !== void 0 ? _args4[1] : false;
14667
+ url = _args4.length > 0 && _args4[0] !== void 0 ? _args4[0] : "";
14668
+ options = _args4.length > 1 && _args4[1] !== void 0 ? _args4[1] : {};
14669
+ reuseMse = typeof options === "boolean" ? options : !!(options !== null && options !== void 0 && options.reuseMse);
14670
+ if (_typeof$2(options) === "object" && options !== null && options !== void 0 && options.clearSwitchStatus) {
14671
+ this._urlSwitching = false;
14672
+ this._switchUrlOpts = null;
14673
+ this.config.startTime = void 0;
14674
+ }
13588
14675
  if (url)
13589
14676
  this.config.url = url;
13590
14677
  url = this.config.url;
13591
- _context4.next = 5;
14678
+ _context4.next = 8;
13592
14679
  return this._reset(reuseMse);
13593
- case 5:
13594
- _context4.next = 7;
14680
+ case 8:
14681
+ _context4.next = 10;
13595
14682
  return this._loadData(url);
13596
- case 7:
14683
+ case 10:
13597
14684
  this._startTick();
13598
- case 8:
14685
+ case 11:
13599
14686
  case "end":
13600
14687
  return _context4.stop();
13601
14688
  }
13602
14689
  }, _callee4, this);
13603
14690
  }));
13604
- function load(_x) {
14691
+ function load() {
13605
14692
  return _load.apply(this, arguments);
13606
14693
  }
13607
14694
  return load;
@@ -13610,7 +14697,7 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13610
14697
  key: "_loadData",
13611
14698
  value: function() {
13612
14699
  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;
14700
+ var manifest, currentStream, preIndex, _this$_switchUrlOpts, _this$_switchUrlOpts3, _this$_switchUrlOpts4, _this$_switchUrlOpts2, switchTimePoint, segIdx, nextSeg, bufferClearStartPoint, startTime, _this$_switchUrlOpts5;
13614
14701
  return _regeneratorRuntime$1().wrap(function _callee5$(_context5) {
13615
14702
  while (1)
13616
14703
  switch (_context5.prev = _context5.next) {
@@ -13631,41 +14718,46 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13631
14718
  case 5:
13632
14719
  manifest = _context5.sent;
13633
14720
  currentStream = this._playlist.currentStream;
13634
- if (!(this._urlSwitching && !this.isLive)) {
13635
- _context5.next = 17;
14721
+ if (!this._urlSwitching) {
14722
+ _context5.next = 23;
13636
14723
  break;
13637
14724
  }
14725
+ if (!this.isLive) {
14726
+ _context5.next = 14;
14727
+ break;
14728
+ }
14729
+ preIndex = this._playlist.setNextSegmentBySN(this._prevSegSn);
14730
+ logger.log("segment nb=".concat(this._prevSegSn, " index of ").concat(preIndex, " in the new playlist"));
14731
+ if (preIndex === -1) {
14732
+ this._prevSegCc = null;
14733
+ this._prevSegSn = null;
14734
+ }
14735
+ _context5.next = 23;
14736
+ break;
14737
+ case 14:
13638
14738
  if (currentStream.bitrate === 0 && (_this$_switchUrlOpts = this._switchUrlOpts) !== null && _this$_switchUrlOpts !== void 0 && _this$_switchUrlOpts.bitrate) {
13639
14739
  currentStream.bitrate = (_this$_switchUrlOpts2 = this._switchUrlOpts) === null || _this$_switchUrlOpts2 === void 0 ? void 0 : _this$_switchUrlOpts2.bitrate;
13640
14740
  }
13641
- switchTimePoint = this._getSeamlessSwitchPoint();
14741
+ 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
14742
  this.config.startTime = switchTimePoint;
13643
14743
  segIdx = this._playlist.findSegmentIndexByTime(switchTimePoint);
13644
14744
  nextSeg = this._playlist.getSegmentByIndex(segIdx + 1);
13645
14745
  if (!nextSeg) {
13646
- _context5.next = 17;
14746
+ _context5.next = 23;
13647
14747
  break;
13648
14748
  }
13649
14749
  bufferClearStartPoint = nextSeg.start;
13650
- _context5.next = 17;
14750
+ _context5.next = 23;
13651
14751
  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
- }
14752
+ case 23:
13661
14753
  if (manifest) {
13662
- _context5.next = 20;
14754
+ _context5.next = 25;
13663
14755
  break;
13664
14756
  }
13665
14757
  return _context5.abrupt("return");
13666
- case 20:
14758
+ case 25:
13667
14759
  if (!this.isLive) {
13668
- _context5.next = 31;
14760
+ _context5.next = 36;
13669
14761
  break;
13670
14762
  }
13671
14763
  this._bufferService.setLiveSeekableRange(0, 4294967295);
@@ -13678,35 +14770,35 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13678
14770
  if (!manifest.isMaster)
13679
14771
  this._pollM3U8(url);
13680
14772
  if (!(this._playlist.nbSegments < this.config.minSegmentsStartPlay)) {
13681
- _context5.next = 28;
14773
+ _context5.next = 33;
13682
14774
  break;
13683
14775
  }
13684
14776
  return _context5.abrupt("return");
13685
- case 28:
13686
- _context5.next = 30;
14777
+ case 33:
14778
+ _context5.next = 35;
13687
14779
  return this._loadSegment();
13688
- case 30:
14780
+ case 35:
13689
14781
  return _context5.abrupt("return");
13690
- case 31:
13691
- _context5.next = 33;
14782
+ case 36:
14783
+ _context5.next = 38;
13692
14784
  return this._bufferService.updateDuration(currentStream.totalDuration);
13693
- case 33:
14785
+ case 38:
13694
14786
  startTime = this.config.startTime;
13695
14787
  if (startTime) {
13696
- if (!((_this$_switchUrlOpts3 = this._switchUrlOpts) !== null && _this$_switchUrlOpts3 !== void 0 && _this$_switchUrlOpts3.seamless)) {
14788
+ if (!((_this$_switchUrlOpts5 = this._switchUrlOpts) !== null && _this$_switchUrlOpts5 !== void 0 && _this$_switchUrlOpts5.seamless)) {
13697
14789
  this.media.currentTime = startTime;
13698
14790
  }
13699
14791
  this._playlist.setNextSegmentByIndex(this._playlist.findSegmentIndexByTime(startTime) || 0);
13700
14792
  }
13701
- _context5.next = 37;
14793
+ _context5.next = 42;
13702
14794
  return this._loadSegment();
13703
- case 37:
14795
+ case 42:
13704
14796
  case "end":
13705
14797
  return _context5.stop();
13706
14798
  }
13707
14799
  }, _callee5, this);
13708
14800
  }));
13709
- function _loadData(_x2) {
14801
+ function _loadData(_x) {
13710
14802
  return _loadData2.apply(this, arguments);
13711
14803
  }
13712
14804
  return _loadData;
@@ -13720,18 +14812,20 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13720
14812
  switch (_context6.prev = _context6.next) {
13721
14813
  case 0:
13722
14814
  this.config.startTime = 0;
13723
- _context6.next = 3;
14815
+ this._urlSwitching = false;
14816
+ this._switchUrlOpts = null;
14817
+ _context6.next = 5;
13724
14818
  return this.load();
13725
- case 3:
14819
+ case 5:
13726
14820
  this._reloadOnPlay = false;
13727
14821
  return _context6.abrupt("return", this.media.play(!isPlayEmit));
13728
- case 5:
14822
+ case 7:
13729
14823
  case "end":
13730
14824
  return _context6.stop();
13731
14825
  }
13732
14826
  }, _callee6, this);
13733
14827
  }));
13734
- function replay(_x3) {
14828
+ function replay(_x2) {
13735
14829
  return _replay.apply(this, arguments);
13736
14830
  }
13737
14831
  return replay;
@@ -13836,7 +14930,7 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13836
14930
  }
13837
14931
  }, _callee7, this, [[18, 29]]);
13838
14932
  }));
13839
- function switchURL(_x4) {
14933
+ function switchURL(_x3) {
13840
14934
  return _switchURL.apply(this, arguments);
13841
14935
  }
13842
14936
  return switchURL;
@@ -13922,7 +15016,7 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13922
15016
  }
13923
15017
  }, _callee8, this, [[8, 16], [21, 31]]);
13924
15018
  }));
13925
- function switchStream(_x5) {
15019
+ function switchStream(_x4) {
13926
15020
  return _switchStream.apply(this, arguments);
13927
15021
  }
13928
15022
  return switchStream;
@@ -14008,7 +15102,7 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14008
15102
  }
14009
15103
  }, _callee9, this, [[10, 18], [22, 32]]);
14010
15104
  }));
14011
- function switchAudioStream(_x6) {
15105
+ function switchAudioStream(_x5) {
14012
15106
  return _switchAudioStream.apply(this, arguments);
14013
15107
  }
14014
15108
  return switchAudioStream;
@@ -14033,25 +15127,50 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14033
15127
  }
14034
15128
  }, _callee10, this);
14035
15129
  }));
14036
- function switchSubtitleStream(_x7) {
15130
+ function switchSubtitleStream(_x6) {
14037
15131
  return _switchSubtitleStream.apply(this, arguments);
14038
15132
  }
14039
15133
  return switchSubtitleStream;
14040
15134
  }()
14041
15135
  }, {
14042
- key: "destroy",
15136
+ key: "detachMedia",
14043
15137
  value: function() {
14044
- var _destroy = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee11() {
14045
- var _this$_seiService2;
15138
+ var _detachMedia = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee11() {
14046
15139
  return _regeneratorRuntime$1().wrap(function _callee11$(_context11) {
14047
15140
  while (1)
14048
15141
  switch (_context11.prev = _context11.next) {
15142
+ case 0:
15143
+ if (!this._bufferService) {
15144
+ _context11.next = 3;
15145
+ break;
15146
+ }
15147
+ _context11.next = 3;
15148
+ return this._bufferService.detachMedia();
15149
+ case 3:
15150
+ case "end":
15151
+ return _context11.stop();
15152
+ }
15153
+ }, _callee11, this);
15154
+ }));
15155
+ function detachMedia() {
15156
+ return _detachMedia.apply(this, arguments);
15157
+ }
15158
+ return detachMedia;
15159
+ }()
15160
+ }, {
15161
+ key: "destroy",
15162
+ value: function() {
15163
+ var _destroy = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee12() {
15164
+ var _this$_seiService2;
15165
+ return _regeneratorRuntime$1().wrap(function _callee12$(_context12) {
15166
+ while (1)
15167
+ switch (_context12.prev = _context12.next) {
14049
15168
  case 0:
14050
15169
  if (this.media) {
14051
- _context11.next = 2;
15170
+ _context12.next = 2;
14052
15171
  break;
14053
15172
  }
14054
- return _context11.abrupt("return");
15173
+ return _context12.abrupt("return");
14055
15174
  case 2:
14056
15175
  this.removeAllListeners();
14057
15176
  this._playlist.reset();
@@ -14062,15 +15181,15 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14062
15181
  this.media.removeEventListener("pause", this._onPause);
14063
15182
  this.media.removeEventListener("seeking", this._onSeeking);
14064
15183
  this.media.removeEventListener("timeupdate", this._onTimeupdate);
14065
- _context11.next = 13;
15184
+ _context12.next = 13;
14066
15185
  return Promise.all([this._clear(), this._bufferService.destroy()]);
14067
15186
  case 13:
14068
15187
  this.media = null;
14069
15188
  case 14:
14070
15189
  case "end":
14071
- return _context11.stop();
15190
+ return _context12.stop();
14072
15191
  }
14073
- }, _callee11, this);
15192
+ }, _callee12, this);
14074
15193
  }));
14075
15194
  function destroy() {
14076
15195
  return _destroy.apply(this, arguments);
@@ -14080,48 +15199,48 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14080
15199
  }, {
14081
15200
  key: "_loadM3U8",
14082
15201
  value: function() {
14083
- var _loadM3U = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee12(url) {
15202
+ var _loadM3U = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee13(url) {
14084
15203
  var playlist, _this$config$manifest, _this$config$manifest2, manifest, _ref4, _ref5, _this$_playlist$curre;
14085
- return _regeneratorRuntime$1().wrap(function _callee12$(_context12) {
15204
+ return _regeneratorRuntime$1().wrap(function _callee13$(_context13) {
14086
15205
  while (1)
14087
- switch (_context12.prev = _context12.next) {
15206
+ switch (_context13.prev = _context13.next) {
14088
15207
  case 0:
14089
- _context12.prev = 0;
15208
+ _context13.prev = 0;
14090
15209
  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
15210
  return x.url === url;
14092
15211
  })[0]) === null || _this$config$manifest2 === void 0 ? void 0 : _this$config$manifest2.manifest;
14093
15212
  if (!manifest) {
14094
- _context12.next = 6;
15213
+ _context13.next = 6;
14095
15214
  break;
14096
15215
  }
14097
- _context12.t0 = this._manifestLoader.parseText(manifest, url);
14098
- _context12.next = 9;
15216
+ _context13.t0 = this._manifestLoader.parseText(manifest, url);
15217
+ _context13.next = 9;
14099
15218
  break;
14100
15219
  case 6:
14101
- _context12.next = 8;
15220
+ _context13.next = 8;
14102
15221
  return this._manifestLoader.load(url);
14103
15222
  case 8:
14104
- _context12.t0 = _context12.sent;
15223
+ _context13.t0 = _context13.sent;
14105
15224
  case 9:
14106
- _ref4 = _context12.t0;
15225
+ _ref4 = _context13.t0;
14107
15226
  _ref5 = _slicedToArray$1(_ref4, 1);
14108
15227
  playlist = _ref5[0];
14109
- _context12.next = 17;
15228
+ _context13.next = 17;
14110
15229
  break;
14111
15230
  case 14:
14112
- _context12.prev = 14;
14113
- _context12.t1 = _context12["catch"](0);
14114
- throw this._emitError(StreamingError.create(_context12.t1));
15231
+ _context13.prev = 14;
15232
+ _context13.t1 = _context13["catch"](0);
15233
+ throw this._emitError(StreamingError.create(_context13.t1));
14115
15234
  case 17:
14116
15235
  if (playlist) {
14117
- _context12.next = 19;
15236
+ _context13.next = 19;
14118
15237
  break;
14119
15238
  }
14120
- return _context12.abrupt("return");
15239
+ return _context13.abrupt("return");
14121
15240
  case 19:
14122
15241
  this._playlist.upsertPlaylist(playlist);
14123
15242
  if (!playlist.isMaster) {
14124
- _context12.next = 24;
15243
+ _context13.next = 24;
14125
15244
  break;
14126
15245
  }
14127
15246
  if ((_this$_playlist$curre = this._playlist.currentStream.subtitleStreams) !== null && _this$_playlist$curre !== void 0 && _this$_playlist$curre.length) {
@@ -14129,18 +15248,18 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14129
15248
  list: this._playlist.currentStream.subtitleStreams
14130
15249
  });
14131
15250
  }
14132
- _context12.next = 24;
15251
+ _context13.next = 24;
14133
15252
  return this._refreshM3U8();
14134
15253
  case 24:
14135
15254
  this.emit(Event$1.STREAM_PARSED);
14136
- return _context12.abrupt("return", playlist);
15255
+ return _context13.abrupt("return", playlist);
14137
15256
  case 26:
14138
15257
  case "end":
14139
- return _context12.stop();
15258
+ return _context13.stop();
14140
15259
  }
14141
- }, _callee12, this, [[0, 14]]);
15260
+ }, _callee13, this, [[0, 14]]);
14142
15261
  }));
14143
- function _loadM3U8(_x8) {
15262
+ function _loadM3U8(_x7) {
14144
15263
  return _loadM3U.apply(this, arguments);
14145
15264
  }
14146
15265
  return _loadM3U8;
@@ -14174,7 +15293,7 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14174
15293
  var isEmpty = this._playlist.isEmpty;
14175
15294
  var pollInterval;
14176
15295
  if (this._playlist.lowLatency) {
14177
- pollInterval = (this._playlist.currentStream.partTargetDuration * 2 || 0) * 1e3;
15296
+ pollInterval = (this._playlist.currentStream.partTargetDuration || 0) * 1e3;
14178
15297
  } else {
14179
15298
  var _this$_playlist$lastS;
14180
15299
  pollInterval = (((_this$_playlist$lastS = this._playlist.lastSegment) === null || _this$_playlist$lastS === void 0 ? void 0 : _this$_playlist$lastS.duration) || 0) * 1e3;
@@ -14202,53 +15321,53 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14202
15321
  }, {
14203
15322
  key: "_loadSegmentDirect",
14204
15323
  value: function() {
14205
- var _loadSegmentDirect2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee13(loadOnce) {
15324
+ var _loadSegmentDirect2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee14(loadOnce) {
14206
15325
  var seg, appended, cachedError, _this$_playlist$curre2, bufferEnd, sameStream;
14207
- return _regeneratorRuntime$1().wrap(function _callee13$(_context13) {
15326
+ return _regeneratorRuntime$1().wrap(function _callee14$(_context14) {
14208
15327
  while (1)
14209
- switch (_context13.prev = _context13.next) {
15328
+ switch (_context14.prev = _context14.next) {
14210
15329
  case 0:
14211
15330
  seg = this._playlist.nextSegment;
14212
15331
  if (seg) {
14213
- _context13.next = 3;
15332
+ _context14.next = 3;
14214
15333
  break;
14215
15334
  }
14216
- return _context13.abrupt("return");
15335
+ return _context14.abrupt("return");
14217
15336
  case 3:
14218
15337
  appended = false;
14219
15338
  cachedError = null;
14220
- _context13.prev = 5;
15339
+ _context14.prev = 5;
14221
15340
  this._segmentProcessing = true;
14222
15341
  logger.log("load segment, sn:".concat(seg.sn, ", [").concat(seg.start, ", ").concat(seg.end, "], partIndex:").concat(seg.partIndex));
14223
- _context13.next = 10;
15342
+ _context14.next = 10;
14224
15343
  return this._reqAndBufferSegment(seg, this._playlist.getAudioSegment(seg));
14225
15344
  case 10:
14226
- appended = _context13.sent;
14227
- _context13.next = 16;
15345
+ appended = _context14.sent;
15346
+ _context14.next = 16;
14228
15347
  break;
14229
15348
  case 13:
14230
- _context13.prev = 13;
14231
- _context13.t0 = _context13["catch"](5);
14232
- cachedError = _context13.t0;
15349
+ _context14.prev = 13;
15350
+ _context14.t0 = _context14["catch"](5);
15351
+ cachedError = _context14.t0;
14233
15352
  case 16:
14234
- _context13.prev = 16;
15353
+ _context14.prev = 16;
14235
15354
  this._segmentProcessing = false;
14236
- return _context13.finish(16);
15355
+ return _context14.finish(16);
14237
15356
  case 19:
14238
15357
  if (!cachedError) {
14239
- _context13.next = 26;
15358
+ _context14.next = 26;
14240
15359
  break;
14241
15360
  }
14242
15361
  if (!this._bufferService.isFull()) {
14243
- _context13.next = 25;
15362
+ _context14.next = 25;
14244
15363
  break;
14245
15364
  }
14246
15365
  logger.log("load segment, sn:".concat(seg.sn, ", partIndex:").concat(seg.partIndex));
14247
15366
  this._segmentProcessing = true;
14248
15367
  this._isProcessQuotaExceeded = true;
14249
- return _context13.abrupt("return", false);
15368
+ return _context14.abrupt("return", false);
14250
15369
  case 25:
14251
- return _context13.abrupt("return", this._emitError(StreamingError.create(cachedError)));
15370
+ return _context14.abrupt("return", this._emitError(StreamingError.create(cachedError)));
14252
15371
  case 26:
14253
15372
  if (appended) {
14254
15373
  bufferEnd = this.bufferInfo().end;
@@ -14274,14 +15393,14 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14274
15393
  this._loadSegment();
14275
15394
  }
14276
15395
  }
14277
- return _context13.abrupt("return", appended);
15396
+ return _context14.abrupt("return", appended);
14278
15397
  case 28:
14279
15398
  case "end":
14280
- return _context13.stop();
15399
+ return _context14.stop();
14281
15400
  }
14282
- }, _callee13, this, [[5, 13, 16, 19]]);
15401
+ }, _callee14, this, [[5, 13, 16, 19]]);
14283
15402
  }));
14284
- function _loadSegmentDirect(_x9) {
15403
+ function _loadSegmentDirect(_x8) {
14285
15404
  return _loadSegmentDirect2.apply(this, arguments);
14286
15405
  }
14287
15406
  return _loadSegmentDirect;
@@ -14289,45 +15408,45 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14289
15408
  }, {
14290
15409
  key: "_reqAndBufferSegment",
14291
15410
  value: function() {
14292
- var _reqAndBufferSegment2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee14(seg, audioSeg) {
15411
+ var _reqAndBufferSegment2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee15(seg, audioSeg) {
14293
15412
  var _this$_bufferService2;
14294
15413
  var cc, discontinuity, responses, data, sn, start, stream, before, contiguous, segStart;
14295
- return _regeneratorRuntime$1().wrap(function _callee14$(_context14) {
15414
+ return _regeneratorRuntime$1().wrap(function _callee15$(_context15) {
14296
15415
  while (1)
14297
- switch (_context14.prev = _context14.next) {
15416
+ switch (_context15.prev = _context15.next) {
14298
15417
  case 0:
14299
15418
  cc = seg ? seg.cc : audioSeg.cc;
14300
15419
  discontinuity = this._prevSegCc !== cc;
14301
15420
  responses = [];
14302
- _context14.prev = 3;
14303
- _context14.next = 6;
15421
+ _context15.prev = 3;
15422
+ _context15.next = 6;
14304
15423
  return this._segmentLoader.load(seg, audioSeg, discontinuity);
14305
15424
  case 6:
14306
- responses = _context14.sent;
14307
- _context14.next = 14;
15425
+ responses = _context15.sent;
15426
+ _context15.next = 14;
14308
15427
  break;
14309
15428
  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;
15429
+ _context15.prev = 9;
15430
+ _context15.t0 = _context15["catch"](3);
15431
+ _context15.t0.fatal = false;
15432
+ this._segmentLoader.error = _context15.t0;
15433
+ throw _context15.t0;
14315
15434
  case 14:
14316
15435
  if (responses[0]) {
14317
- _context14.next = 16;
15436
+ _context15.next = 16;
14318
15437
  break;
14319
15438
  }
14320
- return _context14.abrupt("return");
15439
+ return _context15.abrupt("return");
14321
15440
  case 16:
14322
- _context14.next = 18;
15441
+ _context15.next = 18;
14323
15442
  return (_this$_bufferService2 = this._bufferService).decryptBuffer.apply(_this$_bufferService2, _toConsumableArray$2(responses));
14324
15443
  case 18:
14325
- data = _context14.sent;
15444
+ data = _context15.sent;
14326
15445
  if (data) {
14327
- _context14.next = 21;
15446
+ _context15.next = 21;
14328
15447
  break;
14329
15448
  }
14330
- return _context14.abrupt("return");
15449
+ return _context15.abrupt("return");
14331
15450
  case 21:
14332
15451
  sn = seg ? seg.sn : audioSeg.sn;
14333
15452
  start = seg ? seg.start : audioSeg.start;
@@ -14341,26 +15460,26 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14341
15460
  logger.warn("update the new playlist liveEdge, segment id=".concat(sn, ", buffer start=").concat(segStart, ", liveEdge=").concat(this._playlist.liveEdge));
14342
15461
  start = segStart;
14343
15462
  }
14344
- _context14.next = 30;
15463
+ _context15.next = 30;
14345
15464
  return this._bufferService.appendBuffer(seg, audioSeg, data[0], data[1], discontinuity, contiguous, start);
14346
15465
  case 30:
14347
15466
  this.emit(Event$1.APPEND_COST, {
14348
15467
  elapsed: Date.now() - before,
14349
15468
  url: seg.url
14350
15469
  });
14351
- _context14.next = 33;
15470
+ _context15.next = 33;
14352
15471
  return this._bufferService.evictBuffer(this.config.bufferBehind);
14353
15472
  case 33:
14354
15473
  this._prevSegCc = cc;
14355
15474
  this._prevSegSn = sn;
14356
- return _context14.abrupt("return", true);
15475
+ return _context15.abrupt("return", true);
14357
15476
  case 36:
14358
15477
  case "end":
14359
- return _context14.stop();
15478
+ return _context15.stop();
14360
15479
  }
14361
- }, _callee14, this, [[3, 9]]);
15480
+ }, _callee15, this, [[3, 9]]);
14362
15481
  }));
14363
- function _reqAndBufferSegment(_x10, _x11) {
15482
+ function _reqAndBufferSegment(_x9, _x10) {
14364
15483
  return _reqAndBufferSegment2.apply(this, arguments);
14365
15484
  }
14366
15485
  return _reqAndBufferSegment;
@@ -14368,11 +15487,11 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14368
15487
  }, {
14369
15488
  key: "_onCheckQuotaExceeded",
14370
15489
  value: function() {
14371
- var _onCheckQuotaExceeded2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee15() {
15490
+ var _onCheckQuotaExceeded2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee16() {
14372
15491
  var seekTime, buffered, inBuffered, i, bufferBehind, mediaTime;
14373
- return _regeneratorRuntime$1().wrap(function _callee15$(_context15) {
15492
+ return _regeneratorRuntime$1().wrap(function _callee16$(_context16) {
14374
15493
  while (1)
14375
- switch (_context15.prev = _context15.next) {
15494
+ switch (_context16.prev = _context16.next) {
14376
15495
  case 0:
14377
15496
  seekTime = this.media.currentTime;
14378
15497
  buffered = this.media.buffered;
@@ -14380,37 +15499,37 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14380
15499
  i = 0;
14381
15500
  case 4:
14382
15501
  if (!(i < buffered.length)) {
14383
- _context15.next = 11;
15502
+ _context16.next = 11;
14384
15503
  break;
14385
15504
  }
14386
15505
  if (!(buffered.start(0) >= seekTime && seekTime < buffered.end(i))) {
14387
- _context15.next = 8;
15506
+ _context16.next = 8;
14388
15507
  break;
14389
15508
  }
14390
15509
  inBuffered = true;
14391
- return _context15.abrupt("break", 11);
15510
+ return _context16.abrupt("break", 11);
14392
15511
  case 8:
14393
15512
  i++;
14394
- _context15.next = 4;
15513
+ _context16.next = 4;
14395
15514
  break;
14396
15515
  case 11:
14397
15516
  if (!this._bufferService.isFull()) {
14398
- _context15.next = 17;
15517
+ _context16.next = 17;
14399
15518
  break;
14400
15519
  }
14401
15520
  bufferBehind = inBuffered ? this.config.bufferBehind : 5;
14402
15521
  mediaTime = this.media.currentTime;
14403
15522
  if (!(mediaTime - bufferBehind > 0)) {
14404
- _context15.next = 17;
15523
+ _context16.next = 17;
14405
15524
  break;
14406
15525
  }
14407
- _context15.next = 17;
15526
+ _context16.next = 17;
14408
15527
  return this._bufferService.removeBuffer(0, mediaTime - bufferBehind);
14409
15528
  case 17:
14410
15529
  case "end":
14411
- return _context15.stop();
15530
+ return _context16.stop();
14412
15531
  }
14413
- }, _callee15, this);
15532
+ }, _callee16, this);
14414
15533
  }));
14415
15534
  function _onCheckQuotaExceeded() {
14416
15535
  return _onCheckQuotaExceeded2.apply(this, arguments);
@@ -14428,22 +15547,22 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14428
15547
  }, {
14429
15548
  key: "_clear",
14430
15549
  value: function() {
14431
- var _clear2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee16() {
14432
- return _regeneratorRuntime$1().wrap(function _callee16$(_context16) {
15550
+ var _clear2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee17() {
15551
+ return _regeneratorRuntime$1().wrap(function _callee17$(_context17) {
14433
15552
  while (1)
14434
- switch (_context16.prev = _context16.next) {
15553
+ switch (_context17.prev = _context17.next) {
14435
15554
  case 0:
14436
15555
  clearTimeout(this._disconnectTimer);
14437
15556
  this._stopTick();
14438
- _context16.next = 4;
15557
+ _context17.next = 4;
14439
15558
  return Promise.all([this._segmentLoader.cancel(), this._manifestLoader.stopPoll()]);
14440
15559
  case 4:
14441
15560
  this._segmentProcessing = false;
14442
15561
  case 5:
14443
15562
  case "end":
14444
- return _context16.stop();
15563
+ return _context17.stop();
14445
15564
  }
14446
- }, _callee16, this);
15565
+ }, _callee17, this);
14447
15566
  }));
14448
15567
  function _clear() {
14449
15568
  return _clear2.apply(this, arguments);
@@ -14453,14 +15572,14 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14453
15572
  }, {
14454
15573
  key: "_reset",
14455
15574
  value: function() {
14456
- var _reset2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee17() {
15575
+ var _reset2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee18() {
14457
15576
  var _this$_seiService3;
14458
- var reuseMse, _args17 = arguments;
14459
- return _regeneratorRuntime$1().wrap(function _callee17$(_context17) {
15577
+ var reuseMse, _args18 = arguments;
15578
+ return _regeneratorRuntime$1().wrap(function _callee18$(_context18) {
14460
15579
  while (1)
14461
- switch (_context17.prev = _context17.next) {
15580
+ switch (_context18.prev = _context18.next) {
14462
15581
  case 0:
14463
- reuseMse = _args17.length > 0 && _args17[0] !== void 0 ? _args17[0] : false;
15582
+ reuseMse = _args18.length > 0 && _args18[0] !== void 0 ? _args18[0] : false;
14464
15583
  this._reloadOnPlay = false;
14465
15584
  this._prevSegSn = null;
14466
15585
  this._prevSegCc = null;
@@ -14469,15 +15588,15 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14469
15588
  this._segmentLoader.reset();
14470
15589
  (_this$_seiService3 = this._seiService) === null || _this$_seiService3 === void 0 ? void 0 : _this$_seiService3.reset();
14471
15590
  this._stats.reset();
14472
- _context17.next = 11;
15591
+ _context18.next = 11;
14473
15592
  return this._clear();
14474
15593
  case 11:
14475
- return _context17.abrupt("return", this._bufferService.reset(reuseMse));
15594
+ return _context18.abrupt("return", this._bufferService.reset(reuseMse));
14476
15595
  case 12:
14477
15596
  case "end":
14478
- return _context17.stop();
15597
+ return _context18.stop();
14479
15598
  }
14480
- }, _callee17, this);
15599
+ }, _callee18, this);
14481
15600
  }));
14482
15601
  function _reset() {
14483
15602
  return _reset2.apply(this, arguments);
@@ -14558,8 +15677,8 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14558
15677
  value: function _tryEos() {
14559
15678
  var _this$_bufferService3, _this$_bufferService4;
14560
15679
  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);
15680
+ var _this$_playlist2 = this._playlist, nextSegment = _this$_playlist2.nextSegment, lastSegment = _this$_playlist2.lastSegment;
15681
+ 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
15682
  if (!eosAllowed) {
14564
15683
  return;
14565
15684
  }
@@ -14595,7 +15714,7 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14595
15714
  }]);
14596
15715
  return Hls2;
14597
15716
  }(EventEmitter);
14598
- _defineProperty$3(Hls, "version", "3.0.19-rc.0");
15717
+ _defineProperty$3(Hls, "version", "3.0.21-rc.3");
14599
15718
  try {
14600
15719
  if (localStorage.getItem("xgd")) {
14601
15720
  Hls.enableLogger();
@@ -14686,6 +15805,7 @@ var PluginExtension = /* @__PURE__ */ function() {
14686
15805
  }]);
14687
15806
  return PluginExtension2;
14688
15807
  }();
15808
+ var _excluded = ["currentTime"];
14689
15809
  function parseSwitchUrlArgs(args, plugin) {
14690
15810
  var player = plugin.player;
14691
15811
  var curTime = player.currentTime;
@@ -14696,9 +15816,14 @@ function parseSwitchUrlArgs(args, plugin) {
14696
15816
  case "boolean":
14697
15817
  options.seamless = args;
14698
15818
  break;
14699
- case "object":
14700
- Object.assign(options, args);
15819
+ case "object": {
15820
+ var currentTime = args.currentTime, rest = _objectWithoutProperties$1(args, _excluded);
15821
+ Object.assign(options, rest);
15822
+ if (typeof currentTime === "number") {
15823
+ options.startTime = currentTime;
15824
+ }
14701
15825
  break;
15826
+ }
14702
15827
  }
14703
15828
  return options;
14704
15829
  }
@@ -14708,10 +15833,11 @@ var HlsPlugin = /* @__PURE__ */ function(_BasePlugin) {
14708
15833
  function HlsPlugin2() {
14709
15834
  var _this;
14710
15835
  _classCallCheck$3(this, HlsPlugin2);
14711
- for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {
14712
- _args[_key] = arguments[_key];
15836
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
15837
+ args[_key] = arguments[_key];
14713
15838
  }
14714
- _this = _super.call.apply(_super, [this].concat(_args));
15839
+ _this = _super.call.apply(_super, [this].concat(args));
15840
+ _defineProperty$3(_assertThisInitialized$2(_this), "logger", logger);
14715
15841
  _defineProperty$3(_assertThisInitialized$2(_this), "hls", null);
14716
15842
  _defineProperty$3(_assertThisInitialized$2(_this), "pluginExtension", null);
14717
15843
  _defineProperty$3(_assertThisInitialized$2(_this), "getStats", function() {
@@ -14723,24 +15849,6 @@ var HlsPlugin = /* @__PURE__ */ function(_BasePlugin) {
14723
15849
  var lang = _ref.lang;
14724
15850
  (_this$hls2 = _this.hls) === null || _this$hls2 === void 0 ? void 0 : _this$hls2.switchSubtitleStream(lang);
14725
15851
  });
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
15852
  _defineProperty$3(_assertThisInitialized$2(_this), "_keepPauseStatus", function() {
14745
15853
  var paused = _this.player.paused;
14746
15854
  if (!paused)
@@ -14765,8 +15873,8 @@ var HlsPlugin = /* @__PURE__ */ function(_BasePlugin) {
14765
15873
  }, {
14766
15874
  key: "softDecode",
14767
15875
  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;
15876
+ var _this$player, _this$player$config;
15877
+ 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
15878
  return !!mediaType && mediaType !== "video" && mediaType !== "audio";
14771
15879
  }
14772
15880
  }, {
@@ -14774,13 +15882,35 @@ var HlsPlugin = /* @__PURE__ */ function(_BasePlugin) {
14774
15882
  value: function beforePlayerInit() {
14775
15883
  var _this2 = this;
14776
15884
  var config = this.player.config;
15885
+ var mediaElem = this.player.media || this.player.video;
14777
15886
  var hlsOpts = config.hls || {};
14778
15887
  if (!config.url && !config.__allowHlsEmptyUrl__ || !hlsOpts.preferMMS && MSE.isMMSOnly()) {
14779
15888
  return;
14780
15889
  }
14781
15890
  if (this.hls)
14782
15891
  this.hls.destroy();
14783
- this.player.switchURL = this._onSwitchURL;
15892
+ var descriptor = Object.getOwnPropertyDescriptor(this.player, "switchURL");
15893
+ if (!descriptor || descriptor.writable) {
15894
+ this.player.switchURL = function(url, args) {
15895
+ return new Promise(function(resolve, reject) {
15896
+ var player = _this2.player, hls = _this2.hls;
15897
+ if (hls) {
15898
+ var _this2$player$config, _this2$player$config$;
15899
+ var options = parseSwitchUrlArgs(args, _this2);
15900
+ player.config.url = url;
15901
+ hls.switchURL(url, options).then(function() {
15902
+ return resolve(true);
15903
+ }).catch(reject);
15904
+ 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) {
15905
+ _this2._keepPauseStatus();
15906
+ }
15907
+ } else {
15908
+ reject();
15909
+ }
15910
+ });
15911
+ };
15912
+ }
15913
+ var onSwitchUrl = this.player.switchURL;
14784
15914
  this.player.handleSource = false;
14785
15915
  hlsOpts.innerDegrade = hlsOpts.innerDegrade || config.innerDegrade;
14786
15916
  if (hlsOpts.disconnectTime === null || hlsOpts.disconnectTime === void 0)
@@ -14788,7 +15918,7 @@ var HlsPlugin = /* @__PURE__ */ function(_BasePlugin) {
14788
15918
  this.hls = new Hls(_objectSpread2$2({
14789
15919
  softDecode: this.softDecode,
14790
15920
  isLive: config.isLive,
14791
- media: this.player.media || this.player.video,
15921
+ media: mediaElem,
14792
15922
  startTime: config.startTime,
14793
15923
  url: config.url
14794
15924
  }, hlsOpts));
@@ -14806,7 +15936,7 @@ var HlsPlugin = /* @__PURE__ */ function(_BasePlugin) {
14806
15936
  if (this.softDecode) {
14807
15937
  this.pluginExtension = new PluginExtension(_objectSpread2$2({
14808
15938
  isLive: config.isLive,
14809
- media: this.player.video
15939
+ media: mediaElem
14810
15940
  }, hlsOpts), this);
14811
15941
  this.player.forceDegradeToVideo = function() {
14812
15942
  var _this2$pluginExtensio;
@@ -14823,8 +15953,8 @@ var HlsPlugin = /* @__PURE__ */ function(_BasePlugin) {
14823
15953
  return (_this2$hls2 = _this2.hls) === null || _this2$hls2 === void 0 ? void 0 : _this2$hls2.replay();
14824
15954
  });
14825
15955
  }
15956
+ this.on(URL_CHANGE, onSwitchUrl);
14826
15957
  this.on(SWITCH_SUBTITLE, this._onSwitchSubtitle);
14827
- this.on(URL_CHANGE, this._onSwitchURL);
14828
15958
  this.on(DESTROY, this.destroy.bind(this));
14829
15959
  this._transError();
14830
15960
  this._transCoreEvent(EVENT.TTFB);
@@ -14834,6 +15964,7 @@ var HlsPlugin = /* @__PURE__ */ function(_BasePlugin) {
14834
15964
  this._transCoreEvent(EVENT.LOAD_RETRY);
14835
15965
  this._transCoreEvent(EVENT.SOURCEBUFFER_CREATED);
14836
15966
  this._transCoreEvent(EVENT.MEDIASOURCE_OPENED);
15967
+ this._transCoreEvent(EVENT.APPEND_BUFFER);
14837
15968
  this._transCoreEvent(EVENT.REMOVE_BUFFER);
14838
15969
  this._transCoreEvent(EVENT.BUFFEREOS);
14839
15970
  this._transCoreEvent(EVENT.KEYFRAME);
@@ -14853,7 +15984,9 @@ var HlsPlugin = /* @__PURE__ */ function(_BasePlugin) {
14853
15984
  this._transCoreEvent(Event$1.SUBTITLE_PLAYLIST);
14854
15985
  this._transCoreEvent(Event$1.APPEND_COST);
14855
15986
  if (config.url) {
14856
- this.hls.load(config.url, true).catch(function(e) {
15987
+ this.hls.load(config.url, {
15988
+ reuseMse: true
15989
+ }).catch(function(e) {
14857
15990
  });
14858
15991
  }
14859
15992
  }