@volcengine/veplayer-plugin 2.4.2-rc.2 → 2.4.3-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 (31) hide show
  1. package/esm/index.development.js +2048 -1313
  2. package/esm/index.production.js +4 -4
  3. package/esm/veplayer.plugin.abr.development.js +71 -3
  4. package/esm/veplayer.plugin.abr.production.js +1 -1
  5. package/esm/veplayer.plugin.drm.development.js +71 -3
  6. package/esm/veplayer.plugin.drm.production.js +1 -1
  7. package/esm/veplayer.plugin.flv.development.js +727 -196
  8. package/esm/veplayer.plugin.flv.production.js +1 -1
  9. package/esm/veplayer.plugin.hls.development.js +1237 -308
  10. package/esm/veplayer.plugin.hls.production.js +1 -1
  11. package/esm/veplayer.plugin.mp4.development.js +73 -5
  12. package/esm/veplayer.plugin.mp4.production.js +1 -1
  13. package/esm/veplayer.plugin.rtm.development.js +189 -778
  14. package/esm/veplayer.plugin.rtm.production.js +1 -1
  15. package/esm/veplayer.plugin.shaka.development.js +72 -4
  16. package/esm/veplayer.plugin.shaka.production.js +1 -1
  17. package/package.json +1 -1
  18. package/umd/veplayer.plugin.abr.development.js +71 -3
  19. package/umd/veplayer.plugin.abr.production.js +1 -1
  20. package/umd/veplayer.plugin.drm.development.js +71 -3
  21. package/umd/veplayer.plugin.drm.production.js +1 -1
  22. package/umd/veplayer.plugin.flv.development.js +727 -196
  23. package/umd/veplayer.plugin.flv.production.js +1 -1
  24. package/umd/veplayer.plugin.hls.development.js +1237 -308
  25. package/umd/veplayer.plugin.hls.production.js +1 -1
  26. package/umd/veplayer.plugin.mp4.development.js +73 -5
  27. package/umd/veplayer.plugin.mp4.production.js +1 -1
  28. package/umd/veplayer.plugin.rtm.development.js +189 -778
  29. package/umd/veplayer.plugin.rtm.production.js +1 -1
  30. package/umd/veplayer.plugin.shaka.development.js +72 -4
  31. package/umd/veplayer.plugin.shaka.production.js +1 -1
@@ -1640,7 +1640,7 @@ util.getCurrentTimeByOffset = function(offsetTime, segments) {
1640
1640
  }
1641
1641
  return offsetTime;
1642
1642
  };
1643
- var version = "3.0.19-rc.0";
1643
+ var version = "3.0.20-rc.6";
1644
1644
  var ERROR_MAP = {
1645
1645
  1: 5101,
1646
1646
  2: 5102,
@@ -1749,8 +1749,7 @@ function hook(hookName, handler) {
1749
1749
  }
1750
1750
  if (this.__hooks && this.__hooks[hookName]) {
1751
1751
  try {
1752
- var _this$__hooks$hookNam;
1753
- var preRet = (_this$__hooks$hookNam = this.__hooks[hookName]).call.apply(_this$__hooks$hookNam, [this, this].concat(Array.prototype.slice.call(arguments)));
1752
+ var preRet = runHooks(this, hookName, handler);
1754
1753
  if (preRet) {
1755
1754
  if (preRet.then) {
1756
1755
  preRet.then(function(isContinue) {
@@ -1775,6 +1774,19 @@ function hook(hookName, handler) {
1775
1774
  }
1776
1775
  }.bind(this);
1777
1776
  }
1777
+ function findHookIndex(hookName, handler) {
1778
+ var __hooks = this.__hooks;
1779
+ if (!__hooks || !Array.isArray(__hooks[hookName])) {
1780
+ return -1;
1781
+ }
1782
+ var hookHandlers = __hooks[hookName];
1783
+ for (var i = 0; i < hookHandlers.length; i++) {
1784
+ if (hookHandlers[i] === handler) {
1785
+ return i;
1786
+ }
1787
+ }
1788
+ return -1;
1789
+ }
1778
1790
  function useHooks(hookName, handler) {
1779
1791
  var __hooks = this.__hooks;
1780
1792
  if (!__hooks) {
@@ -1784,7 +1796,12 @@ function useHooks(hookName, handler) {
1784
1796
  console.warn("has no supported hook which name [".concat(hookName, "]"));
1785
1797
  return false;
1786
1798
  }
1787
- __hooks && (__hooks[hookName] = handler);
1799
+ if (!Array.isArray(__hooks[hookName])) {
1800
+ __hooks[hookName] = [];
1801
+ }
1802
+ if (findHookIndex.call(this, hookName, handler) === -1) {
1803
+ __hooks[hookName].push(handler);
1804
+ }
1788
1805
  return true;
1789
1806
  }
1790
1807
  function removeHooks(hookName, handler) {
@@ -1792,6 +1809,13 @@ function removeHooks(hookName, handler) {
1792
1809
  if (!__hooks) {
1793
1810
  return;
1794
1811
  }
1812
+ if (Array.isArray(__hooks[hookName])) {
1813
+ var hooks = __hooks[hookName];
1814
+ var index = findHookIndex.call(this, hookName, handler);
1815
+ if (index !== -1) {
1816
+ hooks.splice(index, 1);
1817
+ }
1818
+ }
1795
1819
  delete __hooks[hookName];
1796
1820
  }
1797
1821
  function hooksDescriptor(instance) {
@@ -1813,6 +1837,38 @@ function hooksDescriptor(instance) {
1813
1837
  function delHooksDescriptor(instance) {
1814
1838
  instance.__hooks = null;
1815
1839
  }
1840
+ function runHooks(obj, hookName, handler) {
1841
+ for (var _len5 = arguments.length, args = new Array(_len5 > 3 ? _len5 - 3 : 0), _key5 = 3; _key5 < _len5; _key5++) {
1842
+ args[_key5 - 3] = arguments[_key5];
1843
+ }
1844
+ if (obj.__hooks && Array.isArray(obj.__hooks[hookName])) {
1845
+ var hooks = obj.__hooks[hookName];
1846
+ var index = -1;
1847
+ var runHooksRecursive = function runHooksRecursive2(obj2, hookName2, handler2) {
1848
+ for (var _len6 = arguments.length, args2 = new Array(_len6 > 3 ? _len6 - 3 : 0), _key6 = 3; _key6 < _len6; _key6++) {
1849
+ args2[_key6 - 3] = arguments[_key6];
1850
+ }
1851
+ index++;
1852
+ if (hooks.length === 0 || index === hooks.length) {
1853
+ return handler2.call.apply(handler2, [obj2, obj2].concat(args2));
1854
+ }
1855
+ var hook2 = hooks[index];
1856
+ var ret = hook2.call.apply(hook2, [obj2, obj2].concat(args2));
1857
+ if (ret && ret.then) {
1858
+ return ret.then(function(data) {
1859
+ return data === false ? null : runHooksRecursive2.apply(void 0, [obj2, hookName2, handler2].concat(args2));
1860
+ }).catch(function(e) {
1861
+ console.warn("[runHooks]".concat(hookName2, " reject"), e.message);
1862
+ });
1863
+ } else if (ret !== false) {
1864
+ return runHooksRecursive2.apply(void 0, [obj2, hookName2, handler2].concat(args2));
1865
+ }
1866
+ };
1867
+ return runHooksRecursive.apply(void 0, [obj, hookName, handler].concat(args));
1868
+ } else {
1869
+ return handler.call.apply(handler, [obj, obj].concat(args));
1870
+ }
1871
+ }
1816
1872
  function showErrorMsg(pluginName, msg) {
1817
1873
  XG_DEBUG.logError("[".concat(pluginName, "] event or callback cant be undefined or null when call ").concat(msg));
1818
1874
  }
@@ -2052,6 +2108,18 @@ var BasePlugin = /* @__PURE__ */ function() {
2052
2108
  }
2053
2109
  }
2054
2110
  }
2111
+ }, {
2112
+ key: "defineMethod",
2113
+ value: function defineMethod(Obj, map) {
2114
+ for (var key in map) {
2115
+ if (Object.prototype.hasOwnProperty.call(map, key) && typeof map[key] === "function") {
2116
+ Object.defineProperty(Obj, key, {
2117
+ configurable: true,
2118
+ value: map[key]
2119
+ });
2120
+ }
2121
+ }
2122
+ }
2055
2123
  }, {
2056
2124
  key: "defaultConfig",
2057
2125
  get: function get() {
@@ -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;
@@ -5604,6 +5688,60 @@ function _nonIterableSpread() {
5604
5688
  function _nonIterableRest() {
5605
5689
  throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
5606
5690
  }
5691
+ function _createForOfIteratorHelper(o, allowArrayLike) {
5692
+ var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
5693
+ if (!it) {
5694
+ if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
5695
+ if (it)
5696
+ o = it;
5697
+ var i = 0;
5698
+ var F = function() {
5699
+ };
5700
+ return {
5701
+ s: F,
5702
+ n: function() {
5703
+ if (i >= o.length)
5704
+ return {
5705
+ done: true
5706
+ };
5707
+ return {
5708
+ done: false,
5709
+ value: o[i++]
5710
+ };
5711
+ },
5712
+ e: function(e) {
5713
+ throw e;
5714
+ },
5715
+ f: F
5716
+ };
5717
+ }
5718
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
5719
+ }
5720
+ var normalCompletion = true, didErr = false, err;
5721
+ return {
5722
+ s: function() {
5723
+ it = it.call(o);
5724
+ },
5725
+ n: function() {
5726
+ var step = it.next();
5727
+ normalCompletion = step.done;
5728
+ return step;
5729
+ },
5730
+ e: function(e) {
5731
+ didErr = true;
5732
+ err = e;
5733
+ },
5734
+ f: function() {
5735
+ try {
5736
+ if (!normalCompletion && it.return != null)
5737
+ it.return();
5738
+ } finally {
5739
+ if (didErr)
5740
+ throw err;
5741
+ }
5742
+ }
5743
+ };
5744
+ }
5607
5745
  function _toPrimitive(input, hint) {
5608
5746
  if (typeof input !== "object" || input === null)
5609
5747
  return input;
@@ -5626,13 +5764,15 @@ var TrackType = {
5626
5764
  METADATA: "metadata"
5627
5765
  };
5628
5766
  var VideoCodecType = {
5767
+ AV1: "av1",
5629
5768
  AVC: "avc",
5630
5769
  HEVC: "hevc"
5631
5770
  };
5632
5771
  var AudioCodecType = {
5633
5772
  AAC: "aac",
5634
5773
  G711PCMA: "g7110a",
5635
- G711PCMU: "g7110m"
5774
+ G711PCMU: "g7110m",
5775
+ OPUS: "opus"
5636
5776
  };
5637
5777
  var WarningType = {
5638
5778
  LARGE_AV_SHIFT: "LARGE_AV_SHIFT",
@@ -5672,6 +5812,7 @@ var VideoTrack = /* @__PURE__ */ function() {
5672
5812
  _defineProperty(this, "isVideoEncryption", false);
5673
5813
  _defineProperty(this, "isAudioEncryption", false);
5674
5814
  _defineProperty(this, "isVideo", true);
5815
+ _defineProperty(this, "lastKeyFrameDts", 0);
5675
5816
  _defineProperty(this, "kid", null);
5676
5817
  _defineProperty(this, "pssh", null);
5677
5818
  _defineProperty(this, "ext", void 0);
@@ -5714,6 +5855,9 @@ var VideoTrack = /* @__PURE__ */ function() {
5714
5855
  }, {
5715
5856
  key: "exist",
5716
5857
  value: function exist() {
5858
+ if (/av01/.test(this.codec)) {
5859
+ return true;
5860
+ }
5717
5861
  return !!(this.pps.length && this.sps.length && this.codec);
5718
5862
  }
5719
5863
  }, {
@@ -5777,7 +5921,7 @@ var AudioTrack = /* @__PURE__ */ function() {
5777
5921
  }, {
5778
5922
  key: "exist",
5779
5923
  value: function exist() {
5780
- return !!(this.sampleRate && this.channelCount && this.codec && this.codecType === AudioCodecType.AAC);
5924
+ return !!(this.sampleRate && this.channelCount && this.codec && (this.codecType === AudioCodecType.AAC || this.codecType === AudioCodecType.G711PCMA || this.codecType === AudioCodecType.G711PCMU || this.codecType === AudioCodecType.OPUS));
5781
5925
  }
5782
5926
  }, {
5783
5927
  key: "hasSample",
@@ -5982,7 +6126,7 @@ var AAC = /* @__PURE__ */ function() {
5982
6126
  continue;
5983
6127
  }
5984
6128
  frameLength = (data[i + 3] & 3) << 11 | data[i + 4] << 3 | (data[i + 5] & 224) >> 5;
5985
- if (len - i < frameLength)
6129
+ if (!frameLength || len - i < frameLength)
5986
6130
  break;
5987
6131
  protectionSkipBytes = (~data[i + 1] & 1) * 2;
5988
6132
  frames.push({
@@ -6176,6 +6320,15 @@ function parse2(a) {
6176
6320
  return parseInt(item, 16);
6177
6321
  });
6178
6322
  }
6323
+ function combineToFloat(integer, decimal) {
6324
+ return Number(integer + "." + decimal);
6325
+ }
6326
+ function toDegree(matrix) {
6327
+ if (matrix.length < 5)
6328
+ return 0;
6329
+ var scaled0 = Math.hypot(matrix[0], matrix[3]), scaled1 = Math.hypot(matrix[1], matrix[4]);
6330
+ return 0 === scaled0 || 0 === scaled1 ? 0 : 180 * Math.atan2(matrix[1] / scaled1, matrix[0] / scaled0) / Math.PI;
6331
+ }
6179
6332
  var NALu = /* @__PURE__ */ function() {
6180
6333
  function NALu2() {
6181
6334
  _classCallCheck(this, NALu2);
@@ -6838,13 +6991,16 @@ var MAX_SILENT_FRAME_DURATION = 9e4;
6838
6991
  var AUDIO_EXCETION_LOG_EMIT_DURATION = 5 * 9e4;
6839
6992
  var MAX_VIDEO_FRAME_DURATION = 9e4;
6840
6993
  var MAX_DTS_DELTA_WITH_NEXT_CHUNK = 9e4 / 2;
6994
+ var LARGE_AV_FIRST_FRAME_FORCE_FIX_THRESHOLD = 9e4 * 5;
6841
6995
  var TsFixer = /* @__PURE__ */ function() {
6842
- function TsFixer2(videoTrack, audioTrack, metadataTrack) {
6996
+ function TsFixer2(videoTrack, audioTrack, metadataTrack, fixerConfig) {
6843
6997
  _classCallCheck(this, TsFixer2);
6844
6998
  this.videoTrack = videoTrack;
6845
6999
  this.audioTrack = audioTrack;
6846
7000
  this.metadataTrack = metadataTrack;
6847
7001
  this._baseDts = -1;
7002
+ this._baseVideoDts = -1;
7003
+ this._baseAudioDts = -1;
6848
7004
  this._baseDtsInited = false;
6849
7005
  this._audioNextPts = void 0;
6850
7006
  this._videoNextDts = void 0;
@@ -6853,6 +7009,8 @@ var TsFixer = /* @__PURE__ */ function() {
6853
7009
  this._lastAudioExceptionGapDot = 0;
6854
7010
  this._lastAudioExceptionOverlapDot = 0;
6855
7011
  this._lastAudioExceptionLargeGapDot = 0;
7012
+ this._needForceFixLargeGap = fixerConfig === null || fixerConfig === void 0 ? void 0 : fixerConfig.forceFixLargeGap;
7013
+ this._largeGapThreshold = (fixerConfig === null || fixerConfig === void 0 ? void 0 : fixerConfig.largeGapThreshold) || LARGE_AV_FIRST_FRAME_FORCE_FIX_THRESHOLD;
6856
7014
  }
6857
7015
  _createClass(TsFixer2, [{
6858
7016
  key: "fix",
@@ -6880,10 +7038,16 @@ var TsFixer = /* @__PURE__ */ function() {
6880
7038
  if (discontinuity) {
6881
7039
  this._calculateBaseDts(this.audioTrack, this.videoTrack);
6882
7040
  this._baseDts -= startTime;
7041
+ this._baseAudioDts -= startTime;
7042
+ this._baseVideoDts -= startTime;
6883
7043
  }
6884
7044
  if (!contiguous) {
6885
7045
  this._videoNextDts = vaDelta > 0 ? startTime + vaDelta : startTime;
6886
7046
  this._audioNextPts = vaDelta > 0 ? startTime : startTime - vaDelta;
7047
+ if (this._needForceFixLargeGap) {
7048
+ this._videoNextDts = 0;
7049
+ this._audioNextPts = 0;
7050
+ }
6887
7051
  var vDeltaToNextDts = firstVideoSample ? firstVideoSample.dts - this._baseDts - this._videoNextDts : 0;
6888
7052
  var aDeltaToNextDts = firstAudioSample ? firstAudioSample.pts - this._baseDts - this._audioNextPts : 0;
6889
7053
  if (Math.abs(vDeltaToNextDts || aDeltaToNextDts) > MAX_VIDEO_FRAME_DURATION) {
@@ -6916,8 +7080,8 @@ var TsFixer = /* @__PURE__ */ function() {
6916
7080
  if (!samples.length)
6917
7081
  return;
6918
7082
  samples.forEach(function(x) {
6919
- x.dts -= _this2._baseDts;
6920
- x.pts -= _this2._baseDts;
7083
+ x.dts -= _this2._needForceFixLargeGap ? _this2._baseVideoDts : _this2._baseDts;
7084
+ x.pts -= _this2._needForceFixLargeGap ? _this2._baseVideoDts : _this2._baseDts;
6921
7085
  });
6922
7086
  if (this._videoNextDts === void 0) {
6923
7087
  var samp0 = samples[0];
@@ -7010,7 +7174,7 @@ var TsFixer = /* @__PURE__ */ function() {
7010
7174
  if (!samples.length)
7011
7175
  return;
7012
7176
  samples.forEach(function(x) {
7013
- x.pts -= _this3._baseDts;
7177
+ x.pts -= _this3._needForceFixLargeGap ? _this3._baseAudioDts : _this3._baseDts;
7014
7178
  x.dts = x.pts;
7015
7179
  });
7016
7180
  this._doFixAudioInternal(audioTrack, samples, 9e4);
@@ -7027,12 +7191,15 @@ var TsFixer = /* @__PURE__ */ function() {
7027
7191
  var videoBaseDts = Infinity;
7028
7192
  if (audioSamps.length) {
7029
7193
  audioTrack.baseDts = audioBasePts = audioSamps[0].pts;
7194
+ this._baseAudioDts = audioBasePts;
7030
7195
  }
7031
7196
  if (videoSamps.length) {
7032
7197
  videoTrack.baseDts = videoBaseDts = videoSamps[0].dts;
7198
+ this._baseVideoDts = videoBaseDts;
7033
7199
  }
7034
7200
  this._baseDts = Math.min(audioBasePts, videoBaseDts);
7035
7201
  var delta = videoBaseDts - audioBasePts;
7202
+ var largeGap = false;
7036
7203
  if (Number.isFinite(delta) && Math.abs(delta) > LARGE_AV_FIRST_FRAME_GAP) {
7037
7204
  videoTrack.warnings.push({
7038
7205
  type: WarningType.LARGE_AV_SHIFT,
@@ -7042,6 +7209,16 @@ var TsFixer = /* @__PURE__ */ function() {
7042
7209
  delta
7043
7210
  });
7044
7211
  }
7212
+ if (Number.isFinite(delta) && Math.abs(delta) > this._largeGapThreshold * MAX_SILENT_FRAME_DURATION) {
7213
+ largeGap = true;
7214
+ }
7215
+ if (!this._baseDtsInited) {
7216
+ if (largeGap && this._needForceFixLargeGap) {
7217
+ this._needForceFixLargeGap = true;
7218
+ } else {
7219
+ this._needForceFixLargeGap = false;
7220
+ }
7221
+ }
7045
7222
  this._baseDtsInited = true;
7046
7223
  return true;
7047
7224
  }
@@ -7135,6 +7312,7 @@ var TsFixer = /* @__PURE__ */ function() {
7135
7312
  var logger$4 = new Logger$1("TsDemuxer");
7136
7313
  var TsDemuxer = /* @__PURE__ */ function() {
7137
7314
  function TsDemuxer2(videoTrack, audioTrack, metadataTrack) {
7315
+ var fixerConfig = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : {};
7138
7316
  _classCallCheck(this, TsDemuxer2);
7139
7317
  _defineProperty(this, "_pmtId", -1);
7140
7318
  _defineProperty(this, "_remainingPacketData", null);
@@ -7144,7 +7322,7 @@ var TsDemuxer = /* @__PURE__ */ function() {
7144
7322
  this.videoTrack = videoTrack || new VideoTrack();
7145
7323
  this.audioTrack = audioTrack || new AudioTrack();
7146
7324
  this.metadataTrack = metadataTrack || new MetadataTrack();
7147
- this._fixer = new TsFixer(this.videoTrack, this.audioTrack, this.metadataTrack);
7325
+ this._fixer = new TsFixer(this.videoTrack, this.audioTrack, this.metadataTrack, fixerConfig);
7148
7326
  }
7149
7327
  _createClass(TsDemuxer2, [{
7150
7328
  key: "demux",
@@ -7491,6 +7669,207 @@ var TsDemuxer = /* @__PURE__ */ function() {
7491
7669
  }]);
7492
7670
  return TsDemuxer2;
7493
7671
  }();
7672
+ var ByteReader = /* @__PURE__ */ function() {
7673
+ function ByteReader2(buf, offset, len) {
7674
+ _classCallCheck(this, ByteReader2);
7675
+ this.dv = new DataView(buf);
7676
+ this.start = this.offset = offset || this.dv.byteOffset;
7677
+ this.end = len ? this.start + len : this.start + this.dv.byteLength;
7678
+ }
7679
+ _createClass(ByteReader2, [{
7680
+ key: "buffer",
7681
+ get: function get() {
7682
+ return this.dv.buffer;
7683
+ }
7684
+ }, {
7685
+ key: "unreadLength",
7686
+ get: function get() {
7687
+ return Math.max(this.end - this.offset, 0);
7688
+ }
7689
+ }, {
7690
+ key: "size",
7691
+ get: function get() {
7692
+ return this.end - this.start;
7693
+ }
7694
+ }, {
7695
+ key: "readFloat",
7696
+ value: function readFloat(byteNum) {
7697
+ var val = 0;
7698
+ switch (byteNum) {
7699
+ case 4:
7700
+ val = this.dv.getFloat32(this.offset);
7701
+ break;
7702
+ case 8:
7703
+ val = this.dv.getFloat64(this.offset);
7704
+ break;
7705
+ default:
7706
+ throw new Error("read ".concat(byteNum, "-byte float is not supported"));
7707
+ }
7708
+ this.offset += byteNum;
7709
+ return val;
7710
+ }
7711
+ }, {
7712
+ key: "back",
7713
+ value: function back(byteNum) {
7714
+ this.offset -= byteNum;
7715
+ }
7716
+ }, {
7717
+ key: "skip",
7718
+ value: function skip(byteNum) {
7719
+ this.offset += byteNum;
7720
+ }
7721
+ }, {
7722
+ key: "readInt",
7723
+ value: function readInt(byteNum) {
7724
+ var offset = this.offset;
7725
+ this.offset += byteNum;
7726
+ switch (byteNum) {
7727
+ case 1:
7728
+ return this.dv.getInt8(offset);
7729
+ case 2:
7730
+ return this.dv.getInt16(offset);
7731
+ case 4:
7732
+ return this.dv.getInt32(offset);
7733
+ default:
7734
+ throw new Error("read ".concat(byteNum, "-byte integers is not supported"));
7735
+ }
7736
+ }
7737
+ }, {
7738
+ key: "read",
7739
+ value: function read(byteNum) {
7740
+ var offset = this.offset;
7741
+ this.offset += byteNum;
7742
+ switch (byteNum) {
7743
+ case 1:
7744
+ return this.dv.getUint8(offset);
7745
+ case 2:
7746
+ return this.dv.getUint16(offset);
7747
+ case 3:
7748
+ return (this.dv.getUint16(offset) << 8) + this.dv.getUint8(offset + 2);
7749
+ case 4:
7750
+ return this.dv.getUint32(offset);
7751
+ default:
7752
+ this.back(byteNum - 4);
7753
+ return this.read(byteNum - 4) + this.dv.getUint32(offset) * Math.pow(256, byteNum - 4);
7754
+ }
7755
+ }
7756
+ }, {
7757
+ key: "write",
7758
+ value: function write(byteNum, val) {
7759
+ var offset = this.offset;
7760
+ this.offset += byteNum;
7761
+ switch (byteNum) {
7762
+ case 1:
7763
+ return this.dv.setUint8(offset, val);
7764
+ case 2:
7765
+ return this.dv.setUint16(offset, val);
7766
+ case 3:
7767
+ return this.dv.setUint8(offset, val >>> 16), this.dv.setUint16(offset + 1, 65535 & val);
7768
+ case 4:
7769
+ return this.dv.setUint32(offset, val);
7770
+ default:
7771
+ throw new Error("write ".concat(byteNum, "-byte integers is not supported"));
7772
+ }
7773
+ }
7774
+ }, {
7775
+ key: "readToBuffer",
7776
+ value: function readToBuffer(len) {
7777
+ var buffer;
7778
+ if (this.offset || len) {
7779
+ buffer = this.dv.buffer.slice(this.offset, len ? this.offset + len : this.end);
7780
+ } else {
7781
+ buffer = this.dv.buffer;
7782
+ }
7783
+ this.offset += buffer.byteLength;
7784
+ return buffer;
7785
+ }
7786
+ }, {
7787
+ key: "readToUint8",
7788
+ value: function readToUint8(len) {
7789
+ var uint8 = new Uint8Array(this.dv.buffer, this.offset, len || this.unreadLength);
7790
+ this.offset += uint8.byteLength;
7791
+ return uint8;
7792
+ }
7793
+ }, {
7794
+ key: "readString",
7795
+ value: function readString(len) {
7796
+ var i = 0, str = "";
7797
+ for (; i < len; i++) {
7798
+ str += String.fromCharCode(this.dv.getUint8(this.offset));
7799
+ this.offset++;
7800
+ }
7801
+ return str;
7802
+ }
7803
+ }], [{
7804
+ key: "fromUint8",
7805
+ value: function fromUint8(uint8) {
7806
+ return new ByteReader2(uint8.buffer, uint8.byteOffset, uint8.byteLength);
7807
+ }
7808
+ }, {
7809
+ key: "concatUint8s",
7810
+ value: function concatUint8s(args) {
7811
+ var uint8 = new Uint8Array(args.reduce(function(ret, v) {
7812
+ return ret + v.byteLength;
7813
+ }, 0));
7814
+ var offset = 0;
7815
+ args.forEach(function(v) {
7816
+ uint8.set(v, offset);
7817
+ offset += v.byteLength;
7818
+ });
7819
+ return uint8;
7820
+ }
7821
+ }, {
7822
+ key: "concatUint8",
7823
+ value: function concatUint8() {
7824
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
7825
+ args[_key] = arguments[_key];
7826
+ }
7827
+ return this.concatUint8s(args);
7828
+ }
7829
+ }]);
7830
+ return ByteReader2;
7831
+ }();
7832
+ var BitReader = /* @__PURE__ */ function() {
7833
+ function BitReader2(val, size) {
7834
+ _classCallCheck(this, BitReader2);
7835
+ this.offset = 0;
7836
+ this.val = val;
7837
+ this.size = size;
7838
+ }
7839
+ _createClass(BitReader2, [{
7840
+ key: "skip",
7841
+ value: function skip(len) {
7842
+ this.offset += len;
7843
+ }
7844
+ }, {
7845
+ key: "read",
7846
+ value: function read(len) {
7847
+ var unreadLength = this.size - this.offset - len;
7848
+ if (unreadLength >= 0) {
7849
+ var bits = 0, i = 0;
7850
+ this.offset += len;
7851
+ if (this.size > 31) {
7852
+ for (; i < len; i++) {
7853
+ bits += Math.pow(2, i);
7854
+ }
7855
+ return this.val / Math.pow(2, unreadLength) & bits;
7856
+ } else {
7857
+ for (; i < len; i++) {
7858
+ bits += 1 << i;
7859
+ }
7860
+ return this.val >>> unreadLength & bits;
7861
+ }
7862
+ }
7863
+ throw new Error("the number of the read operation exceeds the total length limit of bits");
7864
+ }
7865
+ }], [{
7866
+ key: "fromByte",
7867
+ value: function fromByte(byte, len) {
7868
+ return new BitReader2(byte.read(len), len << 3);
7869
+ }
7870
+ }]);
7871
+ return BitReader2;
7872
+ }();
7494
7873
  var MP4Parser = /* @__PURE__ */ function() {
7495
7874
  function MP4Parser2() {
7496
7875
  _classCallCheck(this, MP4Parser2);
@@ -7648,18 +8027,36 @@ var MP4Parser = /* @__PURE__ */ function() {
7648
8027
  key: "tkhd",
7649
8028
  value: function tkhd(box) {
7650
8029
  return parseBox(box, true, function(ret, data) {
7651
- var start = 0;
8030
+ var byte = ByteReader.fromUint8(data);
7652
8031
  if (ret.version === 1) {
7653
- ret.trackId = readBig32(data, 16);
7654
- ret.duration = readBig64(data, 24);
7655
- start += 32;
8032
+ byte.read(8);
8033
+ byte.read(8);
8034
+ ret.trackId = byte.read(4);
8035
+ byte.read(4);
8036
+ ret.duration = byte.read(8);
7656
8037
  } else {
7657
- ret.trackId = readBig32(data, 8);
7658
- ret.duration = readBig32(data, 16);
7659
- start += 20;
8038
+ byte.read(4);
8039
+ byte.read(4);
8040
+ ret.trackId = byte.read(4);
8041
+ byte.read(4);
8042
+ ret.duration = byte.read(4);
7660
8043
  }
7661
- ret.width = readBig32(data, start + 52);
7662
- ret.height = readBig32(data, start + 56);
8044
+ byte.skip(16);
8045
+ ret.matrix = [];
8046
+ for (var i = 0; i < 36; i++) {
8047
+ ret.matrix.push(byte.read(1));
8048
+ }
8049
+ byte.back(36);
8050
+ var caculatedMatrix = [];
8051
+ for (var _i = 0, int32; _i < 3; _i++) {
8052
+ caculatedMatrix.push(combineToFloat(byte.readInt(2), byte.readInt(2)));
8053
+ caculatedMatrix.push(combineToFloat(byte.readInt(2), byte.readInt(2)));
8054
+ int32 = byte.readInt(4);
8055
+ caculatedMatrix.push(combineToFloat(int32 >> 30, int32 & 1073741823));
8056
+ }
8057
+ ret.rotation = toDegree(caculatedMatrix);
8058
+ ret.width = byte.read(4);
8059
+ ret.height = byte.read(4);
7663
8060
  });
7664
8061
  }
7665
8062
  }, {
@@ -7789,7 +8186,7 @@ var MP4Parser = /* @__PURE__ */ function() {
7789
8186
  if (ret.version > 0) {
7790
8187
  var numKeyIds = readBig32(data, start);
7791
8188
  start += 4;
7792
- for (var _i = 0; _i < ("" + numKeyIds).length; _i++) {
8189
+ for (var _i2 = 0; _i2 < ("" + numKeyIds).length; _i2++) {
7793
8190
  for (var j = 0; j < 16; j++) {
7794
8191
  var keyId = data[start];
7795
8192
  start += 1;
@@ -7812,6 +8209,8 @@ var MP4Parser = /* @__PURE__ */ function() {
7812
8209
  ret.entryCount = readBig32(data);
7813
8210
  ret.entries = MP4Parser2.findBox(data.subarray(4), [], start + 4).map(function(b) {
7814
8211
  switch (b.type) {
8212
+ case "av01":
8213
+ return MP4Parser2.av01(b);
7815
8214
  case "avc1":
7816
8215
  case "avc2":
7817
8216
  case "avc3":
@@ -7891,6 +8290,69 @@ var MP4Parser = /* @__PURE__ */ function() {
7891
8290
  }
7892
8291
  });
7893
8292
  }
8293
+ }, {
8294
+ key: "colr",
8295
+ value: function colr(box) {
8296
+ return parseBox(box, false, function(ret, data) {
8297
+ var byte = ByteReader.fromUint8(data);
8298
+ ret.data = box.data;
8299
+ ret.colorType = byte.readString(4);
8300
+ if (ret.colorType === "nclx") {
8301
+ ret.colorPrimaries = byte.read(2);
8302
+ ret.transferCharacteristics = byte.read(2);
8303
+ ret.matrixCoefficients = byte.read(2);
8304
+ ret.fullRangeFlag = byte.read(1) >> 7;
8305
+ } else if (ret.colorType === "rICC" || ret.colorType === "prof") {
8306
+ ret.iccProfile = data.readToUint8();
8307
+ }
8308
+ });
8309
+ }
8310
+ }, {
8311
+ key: "av01",
8312
+ value: function av01(box) {
8313
+ return parseBox(box, false, function(ret, data, start) {
8314
+ var bodyStart = parseVisualSampleEntry(ret, data);
8315
+ var bodyData = data.subarray(bodyStart);
8316
+ start += bodyStart;
8317
+ ret.av1C = MP4Parser2.av1C(MP4Parser2.findBox(bodyData, ["av1C"], start)[0]);
8318
+ ret.colr = MP4Parser2.colr(MP4Parser2.findBox(bodyData, ["colr"], start)[0]);
8319
+ });
8320
+ }
8321
+ }, {
8322
+ key: "av1C",
8323
+ value: function av1C(box) {
8324
+ return parseBox(box, false, function(ret, data) {
8325
+ ret.data = box.data;
8326
+ var byte = ByteReader.fromUint8(data);
8327
+ var bit = BitReader.fromByte(byte, 4);
8328
+ ret.marker = bit.read(1);
8329
+ ret.version = bit.read(7);
8330
+ ret.seqProfile = bit.read(3);
8331
+ ret.seqLevelIdx0 = bit.read(5);
8332
+ ret.seqTier0 = bit.read(1);
8333
+ ret.highBitdepth = bit.read(1);
8334
+ ret.twelveBit = bit.read(1);
8335
+ ret.monochrome = bit.read(1);
8336
+ ret.chromaSubsamplingX = bit.read(1);
8337
+ ret.chromaSubsamplingY = bit.read(1);
8338
+ ret.chromaSamplePosition = bit.read(2);
8339
+ ret.reserved = bit.read(3);
8340
+ ret.initialPresentationDelayPresent = bit.read(1);
8341
+ if (ret.initialPresentationDelayPresent) {
8342
+ ret.initialPresentationDelayMinusOne = bit.read(4);
8343
+ } else {
8344
+ ret.initialPresentationDelayMinusOne = 0;
8345
+ }
8346
+ ret.configOBUs = byte.readToUint8();
8347
+ var bitdepth;
8348
+ if (ret.seqLevelIdx0 === 2 && ret.highBitdepth === 1) {
8349
+ bitdepth = ret.twelveBit === 1 ? "12" : "10";
8350
+ } else if (ret.seqProfile <= 2) {
8351
+ bitdepth = ret.highBitdepth === 1 ? "10" : "08";
8352
+ }
8353
+ ret.codec = ["av01", ret.seqProfile, (ret.seqLevelIdx0 < 10 ? "0" + ret.seqLevelIdx0 : ret.seqLevelIdx0) + (ret.seqTier0 ? "H" : "M"), bitdepth].join(".");
8354
+ });
8355
+ }
7894
8356
  }, {
7895
8357
  key: "avc1",
7896
8358
  value: function avc1(box) {
@@ -7925,7 +8387,7 @@ var MP4Parser = /* @__PURE__ */ function() {
7925
8387
  ret.ppsLength = data[start];
7926
8388
  start += 1;
7927
8389
  ret.pps = [];
7928
- for (var _i2 = 0; _i2 < ret.ppsLength; _i2++) {
8390
+ for (var _i3 = 0; _i3 < ret.ppsLength; _i3++) {
7929
8391
  var _size = readBig16(data, start);
7930
8392
  start += 2;
7931
8393
  ret.pps.push(data.subarray(start, start += _size));
@@ -8094,7 +8556,7 @@ var MP4Parser = /* @__PURE__ */ function() {
8094
8556
  start += 8;
8095
8557
  }
8096
8558
  } else {
8097
- for (var _i3 = 0; _i3 < entryCount; _i3++) {
8559
+ for (var _i4 = 0; _i4 < entryCount; _i4++) {
8098
8560
  entries.push({
8099
8561
  count: readBig32(data, start),
8100
8562
  offset: -(~readBig32(data, start + 4) + 1)
@@ -8316,13 +8778,20 @@ var MP4Parser = /* @__PURE__ */ function() {
8316
8778
  v.mvhdTimecale = moov.mvhd.timescale;
8317
8779
  v.timescale = v.formatTimescale = vTrack.mdia.mdhd.timescale;
8318
8780
  v.duration = vTrack.mdia.mdhd.duration || v.mvhdDurtion / v.mvhdTimecale * v.timescale;
8781
+ v.rotation = vTrack.tkhd.rotation;
8782
+ v.matrix = vTrack.tkhd.matrix;
8319
8783
  var e1 = vTrack.mdia.minf.stbl.stsd.entries[0];
8320
8784
  v.width = e1.width;
8321
8785
  v.height = e1.height;
8322
8786
  if (e1.pasp) {
8323
8787
  v.sarRatio = [e1.pasp.hSpacing, e1.pasp.vSpacing];
8324
8788
  }
8325
- if (e1.hvcC) {
8789
+ if (e1.av1C) {
8790
+ v.codecType = VideoCodecType.AV1;
8791
+ v.codec = e1.av1C.codec;
8792
+ v.av1C = e1.av1C.data;
8793
+ v.colr = e1.colr.data;
8794
+ } else if (e1.hvcC) {
8326
8795
  v.codecType = VideoCodecType.HEVC;
8327
8796
  v.codec = e1.hvcC.codec;
8328
8797
  v.vps = e1.hvcC.vps;
@@ -8641,8 +9110,9 @@ function parseAudioSampleEntry(ret, data) {
8641
9110
  function parseBox(box, isFullBox, parse3) {
8642
9111
  if (!box)
8643
9112
  return;
8644
- if (box.size !== box.data.length)
9113
+ if (box.size !== box.data.length) {
8645
9114
  throw new Error("box ".concat(box.type, " size !== data.length"));
9115
+ }
8646
9116
  var ret = {
8647
9117
  start: box.start,
8648
9118
  size: box.size,
@@ -8681,11 +9151,167 @@ var toHex = function toHex2() {
8681
9151
  var FMP4Demuxer = /* @__PURE__ */ function() {
8682
9152
  function FMP4Demuxer2(videoTrack, audioTrack, metadataTrack) {
8683
9153
  _classCallCheck(this, FMP4Demuxer2);
9154
+ _defineProperty(this, "__loadedMoofWraps", []);
9155
+ _defineProperty(this, "__lastRemainData", null);
9156
+ _defineProperty(this, "__lastRemainDataStart", 0);
9157
+ _defineProperty(this, "__nextMoofStart", -1);
8684
9158
  this.videoTrack = videoTrack || new VideoTrack();
8685
9159
  this.audioTrack = audioTrack || new AudioTrack();
8686
9160
  this.metadataTrack = metadataTrack || new MetadataTrack();
8687
9161
  }
8688
9162
  _createClass(FMP4Demuxer2, [{
9163
+ key: "demuxPart",
9164
+ value: function demuxPart(partData, partDataStart, moov) {
9165
+ var _this = this;
9166
+ var videoTrack = this.videoTrack, audioTrack = this.audioTrack;
9167
+ var videoExist = videoTrack.exist();
9168
+ var audioExist = audioTrack.exist();
9169
+ var isAV01 = /av01/.test(videoTrack.codec);
9170
+ videoTrack.samples = [];
9171
+ audioTrack.samples = [];
9172
+ var data = partData;
9173
+ var dataStart = partDataStart;
9174
+ if (this.__lastRemainData) {
9175
+ var lastRemainDataEnd = this.__lastRemainDataStart + this.__lastRemainData.byteLength;
9176
+ var continuous = partDataStart <= lastRemainDataEnd && partDataStart > this.__lastRemainDataStart && partDataStart + partData.byteLength > lastRemainDataEnd;
9177
+ if (continuous) {
9178
+ var noDuplicateData = partData.subarray(this.__lastRemainData.byteLength + this.__lastRemainDataStart - partDataStart);
9179
+ data = concatUint8Array(this.__lastRemainData, noDuplicateData);
9180
+ dataStart = this.__lastRemainDataStart;
9181
+ this.__lastRemainData = null;
9182
+ } else {
9183
+ this.__lastRemainData = null;
9184
+ this.__lastRemainDataStart = 0;
9185
+ this.__nextMoofStart = -1;
9186
+ }
9187
+ }
9188
+ if (!moov) {
9189
+ var moovBox = MP4Parser.findBox(data, ["moov"])[0];
9190
+ if (!moovBox)
9191
+ throw new Error("cannot found moov box");
9192
+ moov = MP4Parser.moov(moovBox);
9193
+ }
9194
+ if (data) {
9195
+ var dataEnd = dataStart + data.byteLength;
9196
+ if (!videoExist && !audioExist) {
9197
+ MP4Parser.moovToTrack(moov, videoTrack, audioTrack);
9198
+ }
9199
+ var moofBoxes = [];
9200
+ if (this.__nextMoofStart < 0) {
9201
+ MP4Parser.findBox(data, ["moof"], dataStart).forEach(function(v) {
9202
+ return moofBoxes.push(v);
9203
+ });
9204
+ } else if (this.__nextMoofStart >= dataStart && this.__nextMoofStart <= dataEnd - 8) {
9205
+ MP4Parser.findBox(data.subarray(this.__nextMoofStart - dataStart), ["moof"], this.__nextMoofStart).forEach(function(v) {
9206
+ return moofBoxes.push(v);
9207
+ });
9208
+ }
9209
+ moofBoxes.filter(function(moofBox) {
9210
+ return moofBox.size <= moofBox.data.length;
9211
+ }).forEach(function(moofBox) {
9212
+ var moof = MP4Parser.moof(moofBox);
9213
+ _this.__nextMoofStart = moof.start + Math.max.apply(Math, _toConsumableArray(moof.traf.map(function(v) {
9214
+ return v.trun.samples.reduce(function(ret, w) {
9215
+ return ret + w.size;
9216
+ }, v.trun.dataOffset || 0);
9217
+ })));
9218
+ _this.__loadedMoofWraps.push({
9219
+ start: moof.start,
9220
+ nextMoofStart: _this.__nextMoofStart,
9221
+ moof
9222
+ });
9223
+ _this.__loadedMoofWraps.sort(function(p, n) {
9224
+ return p.start - n.start;
9225
+ });
9226
+ });
9227
+ var _iterator = _createForOfIteratorHelper(this.__loadedMoofWraps), _step;
9228
+ try {
9229
+ var _loop = function _loop2() {
9230
+ var moofWrap = _step.value;
9231
+ if (moofWrap.start > dataEnd || moofWrap.nextMoofStart < dataStart) {
9232
+ return "continue";
9233
+ }
9234
+ var moofStart = moofWrap.start;
9235
+ var tracks = MP4Parser.moofToSamples(moofWrap.moof, videoTrack, audioTrack);
9236
+ var videoBaseMediaDecodeTime = videoTrack.baseMediaDecodeTime;
9237
+ var audioBaseMediaDecodeTime = audioTrack.baseMediaDecodeTime;
9238
+ var nalSize;
9239
+ Object.keys(tracks).forEach(function(k) {
9240
+ if (videoTrack.id == k) {
9241
+ tracks[k].some(function(x) {
9242
+ var xStart = x.offset += moofStart;
9243
+ if (xStart < dataStart) {
9244
+ return;
9245
+ }
9246
+ if (xStart + x.size > dataEnd) {
9247
+ return true;
9248
+ }
9249
+ var sample = new VideoSample((x.pts || x.dts) + videoBaseMediaDecodeTime, x.dts + videoBaseMediaDecodeTime);
9250
+ sample.duration = x.duration;
9251
+ sample.gopId = x.gopId;
9252
+ if (x.keyframe)
9253
+ sample.setToKeyframe();
9254
+ var sampleData = data.subarray(xStart - dataStart, xStart - dataStart + x.size);
9255
+ sample.data = sampleData;
9256
+ if (!isAV01) {
9257
+ var start = 0;
9258
+ var len = sampleData.length - 1;
9259
+ while (start < len) {
9260
+ nalSize = readBig32(sampleData, start);
9261
+ start += 4;
9262
+ sample.units.push(sampleData.subarray(start, start + nalSize));
9263
+ start += nalSize;
9264
+ }
9265
+ }
9266
+ _this.__lastRemainDataStart = xStart + x.size;
9267
+ videoTrack.samples.push(sample);
9268
+ });
9269
+ } else if (audioTrack.id == k) {
9270
+ tracks[k].some(function(x) {
9271
+ var xStart = x.offset + moofStart;
9272
+ if (xStart < dataStart) {
9273
+ return;
9274
+ }
9275
+ if (xStart + x.size > dataEnd) {
9276
+ return true;
9277
+ }
9278
+ var sampleData = data.subarray(xStart - dataStart, xStart - dataStart + x.size);
9279
+ audioTrack.samples.push(new AudioSample(x.dts + audioBaseMediaDecodeTime, sampleData, x.duration));
9280
+ _this.__lastRemainDataStart = xStart + x.size;
9281
+ });
9282
+ }
9283
+ });
9284
+ };
9285
+ for (_iterator.s(); !(_step = _iterator.n()).done; ) {
9286
+ var _ret = _loop();
9287
+ if (_ret === "continue")
9288
+ continue;
9289
+ }
9290
+ } catch (err) {
9291
+ _iterator.e(err);
9292
+ } finally {
9293
+ _iterator.f();
9294
+ }
9295
+ }
9296
+ if (this.__lastRemainDataStart > dataStart && this.__lastRemainDataStart < data.byteLength + dataStart) {
9297
+ this.__lastRemainData = data.subarray(this.__lastRemainDataStart - dataStart);
9298
+ } else {
9299
+ this.__lastRemainData = data;
9300
+ this.__lastRemainDataStart = dataStart;
9301
+ }
9302
+ if (videoTrack.samples.length) {
9303
+ videoTrack.baseMediaDecodeTime = videoTrack.samples[0].pts;
9304
+ }
9305
+ if (audioTrack.samples.length) {
9306
+ audioTrack.baseMediaDecodeTime = audioTrack.samples[0].pts;
9307
+ }
9308
+ return {
9309
+ videoTrack,
9310
+ audioTrack,
9311
+ metadataTrack: this.metadataTrack
9312
+ };
9313
+ }
9314
+ }, {
8689
9315
  key: "demux",
8690
9316
  value: function demux(videoData, audioData) {
8691
9317
  var videoTrack = this.videoTrack, audioTrack = this.audioTrack;
@@ -9177,10 +9803,16 @@ var MP4 = /* @__PURE__ */ function() {
9177
9803
  if (track.useEME && track.enca) {
9178
9804
  content = MP42.enca(track);
9179
9805
  } else {
9180
- content = MP42.mp4a(track);
9806
+ if (track.codecType === AudioCodecType.OPUS) {
9807
+ content = MP42.opus(track);
9808
+ } else {
9809
+ content = MP42.mp4a(track);
9810
+ }
9181
9811
  }
9182
9812
  } else if (track.useEME && track.encv) {
9183
9813
  content = MP42.encv(track);
9814
+ } else if (track.av1C) {
9815
+ content = MP42.av01(track);
9184
9816
  } else {
9185
9817
  content = MP42.avc1hev1(track);
9186
9818
  }
@@ -9394,12 +10026,9 @@ var MP4 = /* @__PURE__ */ function() {
9394
10026
  return MP42.box(MP42.types.sinf, content, MP42.box(MP42.types.frma, frma), MP42.box(MP42.types.schm, schm), schi);
9395
10027
  }
9396
10028
  }, {
9397
- key: "avc1hev1",
9398
- value: function avc1hev1(track) {
9399
- var isHevc = track.codecType === VideoCodecType.HEVC;
9400
- var typ = isHevc ? MP42.types.hvc1 : MP42.types.avc1;
9401
- var config = isHevc ? MP42.hvcC(track) : MP42.avcC(track);
9402
- var boxes = [new Uint8Array([
10029
+ key: "av01",
10030
+ value: function av01(track) {
10031
+ return MP42.box(MP42.types.av01, new Uint8Array([
9403
10032
  0,
9404
10033
  0,
9405
10034
  0,
@@ -9478,10 +10107,97 @@ var MP4 = /* @__PURE__ */ function() {
9478
10107
  24,
9479
10108
  17,
9480
10109
  17
9481
- ]), config];
9482
- if (isHevc) {
9483
- boxes.push(MP42.box(MP42.types.fiel, new Uint8Array([1, 0])));
9484
- } else if (track.sarRatio && track.sarRatio.length > 1) {
10110
+ ]), track.av1C, track.colr);
10111
+ }
10112
+ }, {
10113
+ key: "avc1hev1",
10114
+ value: function avc1hev1(track) {
10115
+ var isHevc = track.codecType === VideoCodecType.HEVC;
10116
+ var typ = isHevc ? MP42.types.hvc1 : MP42.types.avc1;
10117
+ var config = isHevc ? MP42.hvcC(track) : MP42.avcC(track);
10118
+ var boxes = [new Uint8Array([
10119
+ 0,
10120
+ 0,
10121
+ 0,
10122
+ 0,
10123
+ 0,
10124
+ 0,
10125
+ 0,
10126
+ 1,
10127
+ 0,
10128
+ 0,
10129
+ 0,
10130
+ 0,
10131
+ 0,
10132
+ 0,
10133
+ 0,
10134
+ 0,
10135
+ 0,
10136
+ 0,
10137
+ 0,
10138
+ 0,
10139
+ 0,
10140
+ 0,
10141
+ 0,
10142
+ 0,
10143
+ track.width >> 8 & 255,
10144
+ track.width & 255,
10145
+ track.height >> 8 & 255,
10146
+ track.height & 255,
10147
+ 0,
10148
+ 72,
10149
+ 0,
10150
+ 0,
10151
+ 0,
10152
+ 72,
10153
+ 0,
10154
+ 0,
10155
+ 0,
10156
+ 0,
10157
+ 0,
10158
+ 0,
10159
+ 0,
10160
+ 1,
10161
+ 0,
10162
+ 0,
10163
+ 0,
10164
+ 0,
10165
+ 0,
10166
+ 0,
10167
+ 0,
10168
+ 0,
10169
+ 0,
10170
+ 0,
10171
+ 0,
10172
+ 0,
10173
+ 0,
10174
+ 0,
10175
+ 0,
10176
+ 0,
10177
+ 0,
10178
+ 0,
10179
+ 0,
10180
+ 0,
10181
+ 0,
10182
+ 0,
10183
+ 0,
10184
+ 0,
10185
+ 0,
10186
+ 0,
10187
+ 0,
10188
+ 0,
10189
+ 0,
10190
+ 0,
10191
+ 0,
10192
+ 0,
10193
+ 0,
10194
+ 24,
10195
+ 17,
10196
+ 17
10197
+ ]), config];
10198
+ if (isHevc) {
10199
+ boxes.push(MP42.box(MP42.types.fiel, new Uint8Array([1, 0])));
10200
+ } else if (track.sarRatio && track.sarRatio.length > 1) {
9485
10201
  boxes.push(MP42.pasp(track.sarRatio));
9486
10202
  }
9487
10203
  return MP42.box.apply(MP42, [typ].concat(boxes));
@@ -9763,6 +10479,53 @@ var MP4 = /* @__PURE__ */ function() {
9763
10479
  )));
9764
10480
  return esds2;
9765
10481
  }
10482
+ }, {
10483
+ key: "opus",
10484
+ value: function opus(track) {
10485
+ var opusAudioDescription = new Uint8Array([
10486
+ 0,
10487
+ 0,
10488
+ 0,
10489
+ 0,
10490
+ 0,
10491
+ 0,
10492
+ 0,
10493
+ 1,
10494
+ 0,
10495
+ 0,
10496
+ 0,
10497
+ 0,
10498
+ 0,
10499
+ 0,
10500
+ 0,
10501
+ 0,
10502
+ 0,
10503
+ track.channelCount,
10504
+ 0,
10505
+ 16,
10506
+ 0,
10507
+ 0,
10508
+ 0,
10509
+ 0,
10510
+ track.sampleRate >> 8 & 255,
10511
+ track.sampleRate & 255,
10512
+ 0,
10513
+ 0
10514
+ ]);
10515
+ var opusSpecificConfig = track.config.length ? MP42.dOps(track) : [];
10516
+ return MP42.box(MP42.types.Opus, opusAudioDescription, opusSpecificConfig);
10517
+ }
10518
+ }, {
10519
+ key: "dOps",
10520
+ value: function dOps(track) {
10521
+ if (track.config) {
10522
+ track.config[4] = track.sampleRate >>> 24 & 255;
10523
+ track.config[5] = track.sampleRate >>> 16 & 255;
10524
+ track.config[6] = track.sampleRate >>> 8 & 255;
10525
+ track.config[7] = track.sampleRate & 255;
10526
+ return MP42.box(MP42.types.dOps, track.config);
10527
+ }
10528
+ }
9766
10529
  }, {
9767
10530
  key: "mvex",
9768
10531
  value: function mvex(tracks) {
@@ -10365,7 +11128,7 @@ var MP4 = /* @__PURE__ */ function() {
10365
11128
  }]);
10366
11129
  return MP42;
10367
11130
  }();
10368
- _defineProperty(MP4, "types", ["avc1", "avcC", "hvc1", "hvcC", "dinf", "dref", "esds", "ftyp", "hdlr", "mdat", "mdhd", "mdia", "mfhd", "minf", "moof", "moov", "mp4a", "mvex", "mvhd", "pasp", "stbl", "stco", "stsc", "stsd", "stsz", "stts", "tfdt", "tfhd", "traf", "trak", "trex", "tkhd", "vmhd", "smhd", "ctts", "stss", "styp", "pssh", "sidx", "sbgp", "saiz", "saio", "senc", "trun", "encv", "enca", "sinf", "btrt", "frma", "tenc", "schm", "schi", "mehd", "fiel", "sdtp"].reduce(function(p, c) {
11131
+ _defineProperty(MP4, "types", ["Opus", "dOps", "av01", "av1C", "avc1", "avcC", "hvc1", "hvcC", "dinf", "dref", "esds", "ftyp", "hdlr", "mdat", "mdhd", "mdia", "mfhd", "minf", "moof", "moov", "mp4a", "mvex", "mvhd", "pasp", "stbl", "stco", "stsc", "stsd", "stsz", "stts", "tfdt", "tfhd", "traf", "trak", "trex", "tkhd", "vmhd", "smhd", "ctts", "stss", "styp", "pssh", "sidx", "sbgp", "saiz", "saio", "senc", "trun", "encv", "enca", "sinf", "btrt", "frma", "tenc", "schm", "schi", "mehd", "fiel", "sdtp"].reduce(function(p, c) {
10369
11132
  p[c] = [c.charCodeAt(0), c.charCodeAt(1), c.charCodeAt(2), c.charCodeAt(3)];
10370
11133
  return p;
10371
11134
  }, /* @__PURE__ */ Object.create(null)));
@@ -10700,30 +11463,46 @@ var FMP4Remuxer = /* @__PURE__ */ function() {
10700
11463
  };
10701
11464
  }
10702
11465
  var samples = track.samples;
11466
+ var isAV01 = /av01/.test(track.codec);
10703
11467
  var mdatSize = 0;
10704
- samples.forEach(function(s) {
10705
- mdatSize += s.units.reduce(function(t, c) {
10706
- return t + c.byteLength;
10707
- }, 0);
10708
- mdatSize += s.units.length * 4;
10709
- });
10710
- var mdata = new Uint8Array(mdatSize);
10711
- var mdatView = new DataView(mdata.buffer);
10712
- var _loop = function _loop2(_offset, _sample) {
10713
- _sample = samples[i];
10714
- var sampleSize = 0;
10715
- _sample.units.forEach(function(u) {
10716
- mdatView.setUint32(_offset, u.byteLength);
10717
- _offset += 4;
10718
- mdata.set(u, _offset);
10719
- _offset += u.byteLength;
10720
- sampleSize += 4 + u.byteLength;
11468
+ if (isAV01) {
11469
+ samples.forEach(function(s) {
11470
+ mdatSize += s.data.byteLength;
11471
+ });
11472
+ } else {
11473
+ samples.forEach(function(s) {
11474
+ mdatSize += s.units.reduce(function(t, c) {
11475
+ return t + c.byteLength;
11476
+ }, 0);
11477
+ mdatSize += s.units.length * 4;
10721
11478
  });
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);
11479
+ }
11480
+ var mdata = new Uint8Array(mdatSize);
11481
+ if (isAV01) {
11482
+ for (var i = 0, l = samples.length, offset = 0, sample; i < l; i++) {
11483
+ sample = samples[i];
11484
+ mdata.set(sample.data, offset);
11485
+ sample.size = sample.data.byteLength;
11486
+ offset += sample.size;
11487
+ }
11488
+ } else {
11489
+ var mdatView = new DataView(mdata.buffer);
11490
+ var _loop = function _loop2(_offset2, _sample2) {
11491
+ _sample2 = samples[_i];
11492
+ var sampleSize = 0;
11493
+ _sample2.units.forEach(function(u) {
11494
+ mdatView.setUint32(_offset2, u.byteLength);
11495
+ _offset2 += 4;
11496
+ mdata.set(u, _offset2);
11497
+ _offset2 += u.byteLength;
11498
+ sampleSize += 4 + u.byteLength;
11499
+ });
11500
+ _sample2.size = sampleSize;
11501
+ _offset = _offset2, _sample = _sample2;
11502
+ };
11503
+ for (var _i = 0, _l = samples.length, _offset = 0, _sample; _i < _l; _i++) {
11504
+ _loop(_offset, _sample);
11505
+ }
10727
11506
  }
10728
11507
  var mdat = MP4.mdat(mdata);
10729
11508
  var moof = MP4.moof([track]);
@@ -10882,11 +11661,11 @@ var Event$1 = _objectSpread2$2(_objectSpread2$2({}, EVENT), {}, {
10882
11661
  });
10883
11662
  var logger$3 = new Logger$2("Transmuxer");
10884
11663
  var Transmuxer = /* @__PURE__ */ function() {
10885
- function Transmuxer2(hls, isMP4, needRemux) {
11664
+ function Transmuxer2(hls, isMP4, needRemux, fixerConfig) {
10886
11665
  _classCallCheck$3(this, Transmuxer2);
10887
11666
  _defineProperty$3(this, "_initSegmentId", "");
10888
11667
  this.hls = hls;
10889
- this._demuxer = isMP4 ? new FMP4Demuxer() : new TsDemuxer();
11668
+ this._demuxer = isMP4 ? new FMP4Demuxer() : new TsDemuxer(null, null, null, fixerConfig);
10890
11669
  this._isMP4 = isMP4;
10891
11670
  if (needRemux)
10892
11671
  this._remuxer = new FMP4Remuxer(this._demuxer.videoTrack, this._demuxer.audioTrack);
@@ -11041,7 +11820,7 @@ var Transmuxer = /* @__PURE__ */ function() {
11041
11820
  }]);
11042
11821
  return Transmuxer2;
11043
11822
  }();
11044
- var _excluded = ["data"], _excluded2 = ["data"];
11823
+ var _excluded$1 = ["data"], _excluded2 = ["data"];
11045
11824
  var logger$2 = new Logger$2("BufferService");
11046
11825
  var BufferService = /* @__PURE__ */ function() {
11047
11826
  function BufferService2(hls) {
@@ -11153,11 +11932,11 @@ var BufferService = /* @__PURE__ */ function() {
11153
11932
  return;
11154
11933
  if (TsDemuxer.probe(chunk)) {
11155
11934
  if (!this._transmuxer)
11156
- this._transmuxer = new Transmuxer(this.hls, false, !this._softVideo);
11935
+ this._transmuxer = new Transmuxer(this.hls, false, !this._softVideo, this.hls.config.fixerConfig);
11157
11936
  } else if (MP4Parser.probe(chunk)) {
11158
11937
  if (this._softVideo) {
11159
11938
  if (!this._transmuxer)
11160
- this._transmuxer = new Transmuxer(this.hls, true);
11939
+ this._transmuxer = new Transmuxer(this.hls, true, null, this.hls.config.fixerConfig);
11161
11940
  } else {
11162
11941
  this._directAppend = true;
11163
11942
  var mix = false;
@@ -11207,7 +11986,8 @@ var BufferService = /* @__PURE__ */ function() {
11207
11986
  key: "appendBuffer",
11208
11987
  value: function() {
11209
11988
  var _appendBuffer = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee2(segment, audioSegment, videoChunk, audioChunk, discontinuity, contiguous, startTime) {
11210
- var p, needInit, _this$_transmuxer$tra, _this$_transmuxer$tra2, video, audio, isFirstAppend, mse, _p, videoData, videoRest, audioData, audioRest;
11989
+ var _this2 = this;
11990
+ var afterAppend, p, needInit, _this$_transmuxer$tra, _this$_transmuxer$tra2, video, audio, isFirstAppend, mse, _p, videoData, videoRest, audioData, audioRest;
11211
11991
  return _regeneratorRuntime$1().wrap(function _callee2$(_context2) {
11212
11992
  while (1)
11213
11993
  switch (_context2.prev = _context2.next) {
@@ -11218,8 +11998,18 @@ var BufferService = /* @__PURE__ */ function() {
11218
11998
  }
11219
11999
  return _context2.abrupt("return");
11220
12000
  case 2:
12001
+ afterAppend = function afterAppend2() {
12002
+ var _this2$hls;
12003
+ if ((_this2$hls = _this2.hls) !== null && _this2$hls !== void 0 && _this2$hls.emit) {
12004
+ var _this2$hls2;
12005
+ (_this2$hls2 = _this2.hls) === null || _this2$hls2 === void 0 ? void 0 : _this2$hls2.emit(EVENT.APPEND_BUFFER, {
12006
+ start: segment.start,
12007
+ end: segment.end
12008
+ });
12009
+ }
12010
+ };
11221
12011
  if (!this._directAppend) {
11222
- _context2.next = 7;
12012
+ _context2.next = 8;
11223
12013
  break;
11224
12014
  }
11225
12015
  p = [];
@@ -11227,8 +12017,8 @@ var BufferService = /* @__PURE__ */ function() {
11227
12017
  p.push(this._mse.append(MSE.VIDEO, videoChunk));
11228
12018
  if (audioChunk)
11229
12019
  p.push(this._mse.append(MSE.AUDIO, audioChunk));
11230
- return _context2.abrupt("return", Promise.all(p));
11231
- case 7:
12020
+ return _context2.abrupt("return", Promise.all(p).then(afterAppend));
12021
+ case 8:
11232
12022
  needInit = this._needInitSegment || discontinuity;
11233
12023
  _this$_transmuxer$tra = this._transmuxer.transmux(videoChunk, audioChunk, needInit, contiguous, startTime, this._needInitSegment || discontinuity), _this$_transmuxer$tra2 = _slicedToArray$1(_this$_transmuxer$tra, 2), video = _this$_transmuxer$tra2[0], audio = _this$_transmuxer$tra2[1];
11234
12024
  if (audioChunk && audioSegment) {
@@ -11244,16 +12034,17 @@ var BufferService = /* @__PURE__ */ function() {
11244
12034
  this.hls.emit(Event$1.NO_AUDIO_TRACK);
11245
12035
  }
11246
12036
  if (!this._softVideo) {
11247
- _context2.next = 18;
12037
+ _context2.next = 20;
11248
12038
  break;
11249
12039
  }
11250
12040
  this._softVideo.appendBuffer(video, audio);
11251
12041
  this._needInitSegment = false;
11252
- _context2.next = 28;
12042
+ afterAppend();
12043
+ _context2.next = 30;
11253
12044
  break;
11254
- case 18:
12045
+ case 20:
11255
12046
  if (!this._mse) {
11256
- _context2.next = 28;
12047
+ _context2.next = 30;
11257
12048
  break;
11258
12049
  }
11259
12050
  isFirstAppend = !this._sourceCreated;
@@ -11269,15 +12060,15 @@ var BufferService = /* @__PURE__ */ function() {
11269
12060
  });
11270
12061
  }
11271
12062
  if (video) {
11272
- videoData = video.data, videoRest = _objectWithoutProperties$1(video, _excluded);
12063
+ videoData = video.data, videoRest = _objectWithoutProperties$1(video, _excluded$1);
11273
12064
  _p.push(mse.append(MSE.VIDEO, videoData, videoRest));
11274
12065
  }
11275
12066
  if (audio) {
11276
12067
  audioData = audio.data, audioRest = _objectWithoutProperties$1(audio, _excluded2);
11277
12068
  _p.push(mse.append(MSE.AUDIO, audioData, audioRest));
11278
12069
  }
11279
- return _context2.abrupt("return", Promise.all(_p));
11280
- case 28:
12070
+ return _context2.abrupt("return", Promise.all(_p).then(afterAppend));
12071
+ case 30:
11281
12072
  case "end":
11282
12073
  return _context2.stop();
11283
12074
  }
@@ -11292,7 +12083,7 @@ var BufferService = /* @__PURE__ */ function() {
11292
12083
  key: "removeBuffer",
11293
12084
  value: function() {
11294
12085
  var _removeBuffer = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee3() {
11295
- var _this2 = this;
12086
+ var _this3 = this;
11296
12087
  var start, end, media, _args3 = arguments;
11297
12088
  return _regeneratorRuntime$1().wrap(function _callee3$(_context3) {
11298
12089
  while (1)
@@ -11308,7 +12099,7 @@ var BufferService = /* @__PURE__ */ function() {
11308
12099
  return _context3.abrupt("return");
11309
12100
  case 5:
11310
12101
  return _context3.abrupt("return", this._mse.clearBuffer(start, end).then(function() {
11311
- return _this2.hls.emit(EVENT.REMOVE_BUFFER, {
12102
+ return _this3.hls.emit(EVENT.REMOVE_BUFFER, {
11312
12103
  start,
11313
12104
  end,
11314
12105
  removeEnd: end
@@ -11489,30 +12280,51 @@ var BufferService = /* @__PURE__ */ function() {
11489
12280
  return setLiveSeekableRange;
11490
12281
  }()
11491
12282
  }, {
11492
- key: "destroy",
12283
+ key: "detachMedia",
11493
12284
  value: function() {
11494
- var _destroy = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee9() {
11495
- var _this$_decryptor;
12285
+ var _detachMedia = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee9() {
11496
12286
  return _regeneratorRuntime$1().wrap(function _callee9$(_context9) {
11497
12287
  while (1)
11498
12288
  switch (_context9.prev = _context9.next) {
11499
12289
  case 0:
11500
- (_this$_decryptor = this._decryptor) === null || _this$_decryptor === void 0 ? void 0 : _this$_decryptor.destroy();
11501
12290
  if (!this._mse) {
11502
- _context9.next = 4;
12291
+ _context9.next = 3;
11503
12292
  break;
11504
12293
  }
11505
- _context9.next = 4;
12294
+ _context9.next = 3;
11506
12295
  return this._mse.unbindMedia();
11507
- case 4:
12296
+ case 3:
12297
+ case "end":
12298
+ return _context9.stop();
12299
+ }
12300
+ }, _callee9, this);
12301
+ }));
12302
+ function detachMedia() {
12303
+ return _detachMedia.apply(this, arguments);
12304
+ }
12305
+ return detachMedia;
12306
+ }()
12307
+ }, {
12308
+ key: "destroy",
12309
+ value: function() {
12310
+ var _destroy = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee10() {
12311
+ var _this$_decryptor;
12312
+ return _regeneratorRuntime$1().wrap(function _callee10$(_context10) {
12313
+ while (1)
12314
+ switch (_context10.prev = _context10.next) {
12315
+ case 0:
12316
+ (_this$_decryptor = this._decryptor) === null || _this$_decryptor === void 0 ? void 0 : _this$_decryptor.destroy();
12317
+ _context10.next = 3;
12318
+ return this.detachMedia();
12319
+ case 3:
11508
12320
  this._decryptor = null;
11509
12321
  this._mse = null;
11510
12322
  this._softVideo = null;
11511
- case 7:
12323
+ case 6:
11512
12324
  case "end":
11513
- return _context9.stop();
12325
+ return _context10.stop();
11514
12326
  }
11515
- }, _callee9, this);
12327
+ }, _callee10, this);
11516
12328
  }));
11517
12329
  function destroy() {
11518
12330
  return _destroy.apply(this, arguments);
@@ -11600,7 +12412,11 @@ function getConfig(cfg) {
11600
12412
  minSegmentsStartPlay: 3,
11601
12413
  preferMMS: false,
11602
12414
  preferMMSStreaming: false,
11603
- mseLowLatency: true
12415
+ mseLowLatency: true,
12416
+ fixerConfig: {
12417
+ forceFixLargeGap: false,
12418
+ largeGapThreshold: 5
12419
+ }
11604
12420
  }, cfg), {}, {
11605
12421
  media
11606
12422
  });
@@ -11715,6 +12531,8 @@ var MediaPlaylist = /* @__PURE__ */ _createClass$3(function MediaPlaylist2() {
11715
12531
  _defineProperty$3(this, "lowLatency", false);
11716
12532
  _defineProperty$3(this, "endPartIndex", 0);
11717
12533
  _defineProperty$3(this, "segments", []);
12534
+ _defineProperty$3(this, "dateRanges", {});
12535
+ _defineProperty$3(this, "skippedSegments", 0);
11718
12536
  });
11719
12537
  var MediaSegment = /* @__PURE__ */ function() {
11720
12538
  function MediaSegment2(parentUrl) {
@@ -11886,6 +12704,38 @@ function getCodecs(type, codecs) {
11886
12704
  }
11887
12705
  }
11888
12706
  }
12707
+ function isValidDaterange(attr, dateRangeWithSameId) {
12708
+ var _badValueForSameId;
12709
+ if (dateRangeWithSameId) {
12710
+ for (var key in dateRangeWithSameId) {
12711
+ if (Object.prototype.hasOwnProperty.call(dateRangeWithSameId, key) && attr[key] !== dateRangeWithSameId[key]) {
12712
+ _badValueForSameId = key;
12713
+ break;
12714
+ }
12715
+ }
12716
+ }
12717
+ var duration = null;
12718
+ if (attr.DURATION) {
12719
+ duration = parseFloat(attr.DURATION);
12720
+ if (!Number.isFinite(duration)) {
12721
+ duration = null;
12722
+ } else if (attr._endDate) {
12723
+ duration = (attr._endDate.getTime() - attr._startDate.getTime()) / 1e3;
12724
+ }
12725
+ }
12726
+ var cue = enumeratedStringList(attr.CUE || attr["X-CUE"], {
12727
+ pre: false,
12728
+ post: false,
12729
+ once: false
12730
+ });
12731
+ 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);
12732
+ }
12733
+ function enumeratedStringList(attrValue, dict) {
12734
+ return (attrValue ? attrValue.split(/[ ,]+/) : []).reduce(function(result, identifier) {
12735
+ result[identifier.toLowerCase()] = true;
12736
+ return result;
12737
+ }, dict);
12738
+ }
11889
12739
  function parseMasterPlaylist(lines, parentUrl) {
11890
12740
  var master = new MasterPlaylist();
11891
12741
  var index = 0;
@@ -11994,9 +12844,6 @@ function parseMediaPlaylist(lines, parentUrl, useLowLatency) {
11994
12844
  var endOfList = false;
11995
12845
  var partSegmentIndex = 0;
11996
12846
  while (line = lines[index++]) {
11997
- if (endOfList) {
11998
- break;
11999
- }
12000
12847
  if (line[0] !== "#") {
12001
12848
  if (media.lowLatency) {
12002
12849
  curSN++;
@@ -12050,11 +12897,6 @@ function parseMediaPlaylist(lines, parentUrl, useLowLatency) {
12050
12897
  break;
12051
12898
  case "ENDLIST":
12052
12899
  {
12053
- var _lastSegment = media.segments[media.segments.length - 1];
12054
- if (_lastSegment) {
12055
- _lastSegment.isLast = true;
12056
- }
12057
- media.live = false;
12058
12900
  endOfList = true;
12059
12901
  }
12060
12902
  break;
@@ -12151,6 +12993,29 @@ function parseMediaPlaylist(lines, parentUrl, useLowLatency) {
12151
12993
  curSegment = new MediaSegment(parentUrl);
12152
12994
  }
12153
12995
  break;
12996
+ case "SKIP":
12997
+ {
12998
+ var _attr5 = parseAttr(data);
12999
+ var skippedSegments = parseInt(_attr5["SKIPPED-SEGMENTS"], 10);
13000
+ if (skippedSegments <= Number.MAX_SAFE_INTEGER) {
13001
+ media.skippedSegments += skippedSegments;
13002
+ }
13003
+ }
13004
+ break;
13005
+ case "DATERANGE":
13006
+ {
13007
+ var _attr6 = parseAttr(data);
13008
+ var dateRangeWithSameId = media.dateRanges[_attr6.ID];
13009
+ _attr6._startDate = dateRangeWithSameId ? dateRangeWithSameId._startDate : new Date(_attr6["START-DATE"]);
13010
+ var endDate = (dateRangeWithSameId === null || dateRangeWithSameId === void 0 ? void 0 : dateRangeWithSameId._endDate) || new Date(_attr6.END_DATE);
13011
+ if (Number.isFinite(endDate)) {
13012
+ _attr6._endDate = endDate;
13013
+ }
13014
+ if (isValidDaterange(_attr6, dateRangeWithSameId) || media.skippedSegments) {
13015
+ media.dateRanges[_attr6.ID] = _attr6;
13016
+ }
13017
+ }
13018
+ break;
12154
13019
  }
12155
13020
  }
12156
13021
  media.segments = media.segments.filter(function(x) {
@@ -12158,11 +13023,14 @@ function parseMediaPlaylist(lines, parentUrl, useLowLatency) {
12158
13023
  });
12159
13024
  var lastSegment = media.segments[media.segments.length - 1];
12160
13025
  if (lastSegment) {
12161
- media.endSN = lastSegment.sn;
12162
- media.endPartIndex = lastSegment.partIndex;
12163
- if (endOfList && !lastSegment.isLast) {
13026
+ if (endOfList) {
12164
13027
  lastSegment.isLast = true;
12165
13028
  }
13029
+ media.endSN = lastSegment.sn;
13030
+ media.endPartIndex = lastSegment.partIndex;
13031
+ }
13032
+ if (endOfList) {
13033
+ media.live = false;
12166
13034
  }
12167
13035
  media.totalDuration = totalDuration;
12168
13036
  media.endCC = curCC;
@@ -13259,7 +14127,7 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13259
14127
  _defineProperty$3(_assertThisInitialized$2(_this), "_switchUrlOpts", null);
13260
14128
  _defineProperty$3(_assertThisInitialized$2(_this), "_isProcessQuotaExceeded", false);
13261
14129
  _defineProperty$3(_assertThisInitialized$2(_this), "_loadSegment", /* @__PURE__ */ _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee() {
13262
- var nextSeg, _assertThisInitialize, config, bInfo, bufferThroughout;
14130
+ var _this$_playlist, nextSegment, lastSegment, _assertThisInitialize, config, minFrameDuration, maxBufferThroughout, bInfo, bufferThroughout;
13263
14131
  return _regeneratorRuntime$1().wrap(function _callee$(_context) {
13264
14132
  while (1)
13265
14133
  switch (_context.prev = _context.next) {
@@ -13270,42 +14138,44 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13270
14138
  }
13271
14139
  return _context.abrupt("return");
13272
14140
  case 2:
13273
- nextSeg = _this._playlist.nextSegment;
14141
+ _this$_playlist = _this._playlist, nextSegment = _this$_playlist.nextSegment, lastSegment = _this$_playlist.lastSegment;
13274
14142
  _assertThisInitialize = _assertThisInitialized$2(_this), config = _assertThisInitialize.config;
13275
- if (nextSeg) {
13276
- _context.next = 6;
14143
+ minFrameDuration = 0.016;
14144
+ maxBufferThroughout = Math.min(Math.max((lastSegment === null || lastSegment === void 0 ? void 0 : lastSegment.duration) - minFrameDuration / 2 || 0, minFrameDuration), 0.1);
14145
+ if (nextSegment) {
14146
+ _context.next = 8;
13277
14147
  break;
13278
14148
  }
13279
14149
  return _context.abrupt("return");
13280
- case 6:
14150
+ case 8:
13281
14151
  if (_this.isLive) {
13282
- _context.next = 16;
14152
+ _context.next = 18;
13283
14153
  break;
13284
14154
  }
13285
14155
  bInfo = _this.bufferInfo();
13286
14156
  if (_this.media.paused && !_this.media.currentTime) {
13287
14157
  bInfo = _this.bufferInfo(bInfo.nextStart || 0.5);
13288
14158
  }
13289
- bufferThroughout = Math.abs(bInfo.end - _this.media.duration) < 0.1;
14159
+ bufferThroughout = Math.abs(bInfo.end - _this.media.duration) < maxBufferThroughout;
13290
14160
  if (!(bInfo.remaining >= config.preloadTime || bufferThroughout)) {
13291
- _context.next = 13;
14161
+ _context.next = 15;
13292
14162
  break;
13293
14163
  }
13294
14164
  _this._tryEos();
13295
14165
  return _context.abrupt("return");
13296
- case 13:
14166
+ case 15:
13297
14167
  if (!(config.preferMMSStreaming && !_this._bufferService.msStreaming)) {
13298
- _context.next = 15;
14168
+ _context.next = 17;
13299
14169
  break;
13300
14170
  }
13301
14171
  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) {
14172
+ case 17:
14173
+ if (!_this._urlSwitching && _this._prevSegSn !== nextSegment.sn - 1 && bInfo.end && Math.abs(nextSegment.start - bInfo.end) > 1) {
13304
14174
  _this._playlist.setNextSegmentByIndex(_this._playlist.findSegmentIndexByTime(bInfo.end + 0.1));
13305
14175
  }
13306
- case 16:
14176
+ case 18:
13307
14177
  return _context.abrupt("return", _this._loadSegmentDirect());
13308
- case 17:
14178
+ case 19:
13309
14179
  case "end":
13310
14180
  return _context.stop();
13311
14181
  }
@@ -13553,6 +14423,12 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13553
14423
  var _this$_bufferService;
13554
14424
  return (_this$_bufferService = this._bufferService) === null || _this$_bufferService === void 0 ? void 0 : _this$_bufferService.baseDts;
13555
14425
  }
14426
+ }, {
14427
+ key: "abrSwitchPoint",
14428
+ get: function get() {
14429
+ var targetSeg = this._urlSwitching ? this._playlist.currentSegment : this._playlist.nextSegment;
14430
+ return targetSeg ? targetSeg.start + targetSeg.duration / 2 : null;
14431
+ }
13556
14432
  }, {
13557
14433
  key: "speedInfo",
13558
14434
  value: function speedInfo() {
@@ -13578,30 +14454,37 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13578
14454
  }, {
13579
14455
  key: "load",
13580
14456
  value: function() {
13581
- var _load = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee4(url) {
13582
- var reuseMse, _args4 = arguments;
14457
+ var _load = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee4() {
14458
+ var url, options, reuseMse, _args4 = arguments;
13583
14459
  return _regeneratorRuntime$1().wrap(function _callee4$(_context4) {
13584
14460
  while (1)
13585
14461
  switch (_context4.prev = _context4.next) {
13586
14462
  case 0:
13587
- reuseMse = _args4.length > 1 && _args4[1] !== void 0 ? _args4[1] : false;
14463
+ url = _args4.length > 0 && _args4[0] !== void 0 ? _args4[0] : "";
14464
+ options = _args4.length > 1 && _args4[1] !== void 0 ? _args4[1] : {};
14465
+ reuseMse = typeof options === "boolean" ? options : !!(options !== null && options !== void 0 && options.reuseMse);
14466
+ if (_typeof$2(options) === "object" && options !== null && options !== void 0 && options.clearSwitchStatus) {
14467
+ this._urlSwitching = false;
14468
+ this._switchUrlOpts = null;
14469
+ this.config.startTime = void 0;
14470
+ }
13588
14471
  if (url)
13589
14472
  this.config.url = url;
13590
14473
  url = this.config.url;
13591
- _context4.next = 5;
14474
+ _context4.next = 8;
13592
14475
  return this._reset(reuseMse);
13593
- case 5:
13594
- _context4.next = 7;
14476
+ case 8:
14477
+ _context4.next = 10;
13595
14478
  return this._loadData(url);
13596
- case 7:
14479
+ case 10:
13597
14480
  this._startTick();
13598
- case 8:
14481
+ case 11:
13599
14482
  case "end":
13600
14483
  return _context4.stop();
13601
14484
  }
13602
14485
  }, _callee4, this);
13603
14486
  }));
13604
- function load(_x) {
14487
+ function load() {
13605
14488
  return _load.apply(this, arguments);
13606
14489
  }
13607
14490
  return load;
@@ -13610,7 +14493,7 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13610
14493
  key: "_loadData",
13611
14494
  value: function() {
13612
14495
  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;
14496
+ var manifest, currentStream, preIndex, _this$_switchUrlOpts, _this$_switchUrlOpts3, _this$_switchUrlOpts4, _this$_switchUrlOpts2, switchTimePoint, segIdx, nextSeg, bufferClearStartPoint, startTime, _this$_switchUrlOpts5;
13614
14497
  return _regeneratorRuntime$1().wrap(function _callee5$(_context5) {
13615
14498
  while (1)
13616
14499
  switch (_context5.prev = _context5.next) {
@@ -13631,41 +14514,46 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13631
14514
  case 5:
13632
14515
  manifest = _context5.sent;
13633
14516
  currentStream = this._playlist.currentStream;
13634
- if (!(this._urlSwitching && !this.isLive)) {
13635
- _context5.next = 17;
14517
+ if (!this._urlSwitching) {
14518
+ _context5.next = 23;
13636
14519
  break;
13637
14520
  }
14521
+ if (!this.isLive) {
14522
+ _context5.next = 14;
14523
+ break;
14524
+ }
14525
+ preIndex = this._playlist.setNextSegmentBySN(this._prevSegSn);
14526
+ logger.log("segment nb=".concat(this._prevSegSn, " index of ").concat(preIndex, " in the new playlist"));
14527
+ if (preIndex === -1) {
14528
+ this._prevSegCc = null;
14529
+ this._prevSegSn = null;
14530
+ }
14531
+ _context5.next = 23;
14532
+ break;
14533
+ case 14:
13638
14534
  if (currentStream.bitrate === 0 && (_this$_switchUrlOpts = this._switchUrlOpts) !== null && _this$_switchUrlOpts !== void 0 && _this$_switchUrlOpts.bitrate) {
13639
14535
  currentStream.bitrate = (_this$_switchUrlOpts2 = this._switchUrlOpts) === null || _this$_switchUrlOpts2 === void 0 ? void 0 : _this$_switchUrlOpts2.bitrate;
13640
14536
  }
13641
- switchTimePoint = this._getSeamlessSwitchPoint();
14537
+ 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
14538
  this.config.startTime = switchTimePoint;
13643
14539
  segIdx = this._playlist.findSegmentIndexByTime(switchTimePoint);
13644
14540
  nextSeg = this._playlist.getSegmentByIndex(segIdx + 1);
13645
14541
  if (!nextSeg) {
13646
- _context5.next = 17;
14542
+ _context5.next = 23;
13647
14543
  break;
13648
14544
  }
13649
14545
  bufferClearStartPoint = nextSeg.start;
13650
- _context5.next = 17;
14546
+ _context5.next = 23;
13651
14547
  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
- }
14548
+ case 23:
13661
14549
  if (manifest) {
13662
- _context5.next = 20;
14550
+ _context5.next = 25;
13663
14551
  break;
13664
14552
  }
13665
14553
  return _context5.abrupt("return");
13666
- case 20:
14554
+ case 25:
13667
14555
  if (!this.isLive) {
13668
- _context5.next = 31;
14556
+ _context5.next = 36;
13669
14557
  break;
13670
14558
  }
13671
14559
  this._bufferService.setLiveSeekableRange(0, 4294967295);
@@ -13678,35 +14566,35 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13678
14566
  if (!manifest.isMaster)
13679
14567
  this._pollM3U8(url);
13680
14568
  if (!(this._playlist.nbSegments < this.config.minSegmentsStartPlay)) {
13681
- _context5.next = 28;
14569
+ _context5.next = 33;
13682
14570
  break;
13683
14571
  }
13684
14572
  return _context5.abrupt("return");
13685
- case 28:
13686
- _context5.next = 30;
14573
+ case 33:
14574
+ _context5.next = 35;
13687
14575
  return this._loadSegment();
13688
- case 30:
14576
+ case 35:
13689
14577
  return _context5.abrupt("return");
13690
- case 31:
13691
- _context5.next = 33;
14578
+ case 36:
14579
+ _context5.next = 38;
13692
14580
  return this._bufferService.updateDuration(currentStream.totalDuration);
13693
- case 33:
14581
+ case 38:
13694
14582
  startTime = this.config.startTime;
13695
14583
  if (startTime) {
13696
- if (!((_this$_switchUrlOpts3 = this._switchUrlOpts) !== null && _this$_switchUrlOpts3 !== void 0 && _this$_switchUrlOpts3.seamless)) {
14584
+ if (!((_this$_switchUrlOpts5 = this._switchUrlOpts) !== null && _this$_switchUrlOpts5 !== void 0 && _this$_switchUrlOpts5.seamless)) {
13697
14585
  this.media.currentTime = startTime;
13698
14586
  }
13699
14587
  this._playlist.setNextSegmentByIndex(this._playlist.findSegmentIndexByTime(startTime) || 0);
13700
14588
  }
13701
- _context5.next = 37;
14589
+ _context5.next = 42;
13702
14590
  return this._loadSegment();
13703
- case 37:
14591
+ case 42:
13704
14592
  case "end":
13705
14593
  return _context5.stop();
13706
14594
  }
13707
14595
  }, _callee5, this);
13708
14596
  }));
13709
- function _loadData(_x2) {
14597
+ function _loadData(_x) {
13710
14598
  return _loadData2.apply(this, arguments);
13711
14599
  }
13712
14600
  return _loadData;
@@ -13720,18 +14608,20 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13720
14608
  switch (_context6.prev = _context6.next) {
13721
14609
  case 0:
13722
14610
  this.config.startTime = 0;
13723
- _context6.next = 3;
14611
+ this._urlSwitching = false;
14612
+ this._switchUrlOpts = null;
14613
+ _context6.next = 5;
13724
14614
  return this.load();
13725
- case 3:
14615
+ case 5:
13726
14616
  this._reloadOnPlay = false;
13727
14617
  return _context6.abrupt("return", this.media.play(!isPlayEmit));
13728
- case 5:
14618
+ case 7:
13729
14619
  case "end":
13730
14620
  return _context6.stop();
13731
14621
  }
13732
14622
  }, _callee6, this);
13733
14623
  }));
13734
- function replay(_x3) {
14624
+ function replay(_x2) {
13735
14625
  return _replay.apply(this, arguments);
13736
14626
  }
13737
14627
  return replay;
@@ -13836,7 +14726,7 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13836
14726
  }
13837
14727
  }, _callee7, this, [[18, 29]]);
13838
14728
  }));
13839
- function switchURL(_x4) {
14729
+ function switchURL(_x3) {
13840
14730
  return _switchURL.apply(this, arguments);
13841
14731
  }
13842
14732
  return switchURL;
@@ -13922,7 +14812,7 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
13922
14812
  }
13923
14813
  }, _callee8, this, [[8, 16], [21, 31]]);
13924
14814
  }));
13925
- function switchStream(_x5) {
14815
+ function switchStream(_x4) {
13926
14816
  return _switchStream.apply(this, arguments);
13927
14817
  }
13928
14818
  return switchStream;
@@ -14008,7 +14898,7 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14008
14898
  }
14009
14899
  }, _callee9, this, [[10, 18], [22, 32]]);
14010
14900
  }));
14011
- function switchAudioStream(_x6) {
14901
+ function switchAudioStream(_x5) {
14012
14902
  return _switchAudioStream.apply(this, arguments);
14013
14903
  }
14014
14904
  return switchAudioStream;
@@ -14033,25 +14923,50 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14033
14923
  }
14034
14924
  }, _callee10, this);
14035
14925
  }));
14036
- function switchSubtitleStream(_x7) {
14926
+ function switchSubtitleStream(_x6) {
14037
14927
  return _switchSubtitleStream.apply(this, arguments);
14038
14928
  }
14039
14929
  return switchSubtitleStream;
14040
14930
  }()
14041
14931
  }, {
14042
- key: "destroy",
14932
+ key: "detachMedia",
14043
14933
  value: function() {
14044
- var _destroy = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee11() {
14045
- var _this$_seiService2;
14934
+ var _detachMedia = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee11() {
14046
14935
  return _regeneratorRuntime$1().wrap(function _callee11$(_context11) {
14047
14936
  while (1)
14048
14937
  switch (_context11.prev = _context11.next) {
14938
+ case 0:
14939
+ if (!this._bufferService) {
14940
+ _context11.next = 3;
14941
+ break;
14942
+ }
14943
+ _context11.next = 3;
14944
+ return this._bufferService.detachMedia();
14945
+ case 3:
14946
+ case "end":
14947
+ return _context11.stop();
14948
+ }
14949
+ }, _callee11, this);
14950
+ }));
14951
+ function detachMedia() {
14952
+ return _detachMedia.apply(this, arguments);
14953
+ }
14954
+ return detachMedia;
14955
+ }()
14956
+ }, {
14957
+ key: "destroy",
14958
+ value: function() {
14959
+ var _destroy = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee12() {
14960
+ var _this$_seiService2;
14961
+ return _regeneratorRuntime$1().wrap(function _callee12$(_context12) {
14962
+ while (1)
14963
+ switch (_context12.prev = _context12.next) {
14049
14964
  case 0:
14050
14965
  if (this.media) {
14051
- _context11.next = 2;
14966
+ _context12.next = 2;
14052
14967
  break;
14053
14968
  }
14054
- return _context11.abrupt("return");
14969
+ return _context12.abrupt("return");
14055
14970
  case 2:
14056
14971
  this.removeAllListeners();
14057
14972
  this._playlist.reset();
@@ -14062,15 +14977,15 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14062
14977
  this.media.removeEventListener("pause", this._onPause);
14063
14978
  this.media.removeEventListener("seeking", this._onSeeking);
14064
14979
  this.media.removeEventListener("timeupdate", this._onTimeupdate);
14065
- _context11.next = 13;
14980
+ _context12.next = 13;
14066
14981
  return Promise.all([this._clear(), this._bufferService.destroy()]);
14067
14982
  case 13:
14068
14983
  this.media = null;
14069
14984
  case 14:
14070
14985
  case "end":
14071
- return _context11.stop();
14986
+ return _context12.stop();
14072
14987
  }
14073
- }, _callee11, this);
14988
+ }, _callee12, this);
14074
14989
  }));
14075
14990
  function destroy() {
14076
14991
  return _destroy.apply(this, arguments);
@@ -14080,48 +14995,48 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14080
14995
  }, {
14081
14996
  key: "_loadM3U8",
14082
14997
  value: function() {
14083
- var _loadM3U = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee12(url) {
14998
+ var _loadM3U = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee13(url) {
14084
14999
  var playlist, _this$config$manifest, _this$config$manifest2, manifest, _ref4, _ref5, _this$_playlist$curre;
14085
- return _regeneratorRuntime$1().wrap(function _callee12$(_context12) {
15000
+ return _regeneratorRuntime$1().wrap(function _callee13$(_context13) {
14086
15001
  while (1)
14087
- switch (_context12.prev = _context12.next) {
15002
+ switch (_context13.prev = _context13.next) {
14088
15003
  case 0:
14089
- _context12.prev = 0;
15004
+ _context13.prev = 0;
14090
15005
  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
15006
  return x.url === url;
14092
15007
  })[0]) === null || _this$config$manifest2 === void 0 ? void 0 : _this$config$manifest2.manifest;
14093
15008
  if (!manifest) {
14094
- _context12.next = 6;
15009
+ _context13.next = 6;
14095
15010
  break;
14096
15011
  }
14097
- _context12.t0 = this._manifestLoader.parseText(manifest, url);
14098
- _context12.next = 9;
15012
+ _context13.t0 = this._manifestLoader.parseText(manifest, url);
15013
+ _context13.next = 9;
14099
15014
  break;
14100
15015
  case 6:
14101
- _context12.next = 8;
15016
+ _context13.next = 8;
14102
15017
  return this._manifestLoader.load(url);
14103
15018
  case 8:
14104
- _context12.t0 = _context12.sent;
15019
+ _context13.t0 = _context13.sent;
14105
15020
  case 9:
14106
- _ref4 = _context12.t0;
15021
+ _ref4 = _context13.t0;
14107
15022
  _ref5 = _slicedToArray$1(_ref4, 1);
14108
15023
  playlist = _ref5[0];
14109
- _context12.next = 17;
15024
+ _context13.next = 17;
14110
15025
  break;
14111
15026
  case 14:
14112
- _context12.prev = 14;
14113
- _context12.t1 = _context12["catch"](0);
14114
- throw this._emitError(StreamingError.create(_context12.t1));
15027
+ _context13.prev = 14;
15028
+ _context13.t1 = _context13["catch"](0);
15029
+ throw this._emitError(StreamingError.create(_context13.t1));
14115
15030
  case 17:
14116
15031
  if (playlist) {
14117
- _context12.next = 19;
15032
+ _context13.next = 19;
14118
15033
  break;
14119
15034
  }
14120
- return _context12.abrupt("return");
15035
+ return _context13.abrupt("return");
14121
15036
  case 19:
14122
15037
  this._playlist.upsertPlaylist(playlist);
14123
15038
  if (!playlist.isMaster) {
14124
- _context12.next = 24;
15039
+ _context13.next = 24;
14125
15040
  break;
14126
15041
  }
14127
15042
  if ((_this$_playlist$curre = this._playlist.currentStream.subtitleStreams) !== null && _this$_playlist$curre !== void 0 && _this$_playlist$curre.length) {
@@ -14129,18 +15044,18 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14129
15044
  list: this._playlist.currentStream.subtitleStreams
14130
15045
  });
14131
15046
  }
14132
- _context12.next = 24;
15047
+ _context13.next = 24;
14133
15048
  return this._refreshM3U8();
14134
15049
  case 24:
14135
15050
  this.emit(Event$1.STREAM_PARSED);
14136
- return _context12.abrupt("return", playlist);
15051
+ return _context13.abrupt("return", playlist);
14137
15052
  case 26:
14138
15053
  case "end":
14139
- return _context12.stop();
15054
+ return _context13.stop();
14140
15055
  }
14141
- }, _callee12, this, [[0, 14]]);
15056
+ }, _callee13, this, [[0, 14]]);
14142
15057
  }));
14143
- function _loadM3U8(_x8) {
15058
+ function _loadM3U8(_x7) {
14144
15059
  return _loadM3U.apply(this, arguments);
14145
15060
  }
14146
15061
  return _loadM3U8;
@@ -14174,7 +15089,7 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14174
15089
  var isEmpty = this._playlist.isEmpty;
14175
15090
  var pollInterval;
14176
15091
  if (this._playlist.lowLatency) {
14177
- pollInterval = (this._playlist.currentStream.partTargetDuration * 2 || 0) * 1e3;
15092
+ pollInterval = (this._playlist.currentStream.partTargetDuration || 0) * 1e3;
14178
15093
  } else {
14179
15094
  var _this$_playlist$lastS;
14180
15095
  pollInterval = (((_this$_playlist$lastS = this._playlist.lastSegment) === null || _this$_playlist$lastS === void 0 ? void 0 : _this$_playlist$lastS.duration) || 0) * 1e3;
@@ -14202,53 +15117,53 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14202
15117
  }, {
14203
15118
  key: "_loadSegmentDirect",
14204
15119
  value: function() {
14205
- var _loadSegmentDirect2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee13(loadOnce) {
15120
+ var _loadSegmentDirect2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee14(loadOnce) {
14206
15121
  var seg, appended, cachedError, _this$_playlist$curre2, bufferEnd, sameStream;
14207
- return _regeneratorRuntime$1().wrap(function _callee13$(_context13) {
15122
+ return _regeneratorRuntime$1().wrap(function _callee14$(_context14) {
14208
15123
  while (1)
14209
- switch (_context13.prev = _context13.next) {
15124
+ switch (_context14.prev = _context14.next) {
14210
15125
  case 0:
14211
15126
  seg = this._playlist.nextSegment;
14212
15127
  if (seg) {
14213
- _context13.next = 3;
15128
+ _context14.next = 3;
14214
15129
  break;
14215
15130
  }
14216
- return _context13.abrupt("return");
15131
+ return _context14.abrupt("return");
14217
15132
  case 3:
14218
15133
  appended = false;
14219
15134
  cachedError = null;
14220
- _context13.prev = 5;
15135
+ _context14.prev = 5;
14221
15136
  this._segmentProcessing = true;
14222
15137
  logger.log("load segment, sn:".concat(seg.sn, ", [").concat(seg.start, ", ").concat(seg.end, "], partIndex:").concat(seg.partIndex));
14223
- _context13.next = 10;
15138
+ _context14.next = 10;
14224
15139
  return this._reqAndBufferSegment(seg, this._playlist.getAudioSegment(seg));
14225
15140
  case 10:
14226
- appended = _context13.sent;
14227
- _context13.next = 16;
15141
+ appended = _context14.sent;
15142
+ _context14.next = 16;
14228
15143
  break;
14229
15144
  case 13:
14230
- _context13.prev = 13;
14231
- _context13.t0 = _context13["catch"](5);
14232
- cachedError = _context13.t0;
15145
+ _context14.prev = 13;
15146
+ _context14.t0 = _context14["catch"](5);
15147
+ cachedError = _context14.t0;
14233
15148
  case 16:
14234
- _context13.prev = 16;
15149
+ _context14.prev = 16;
14235
15150
  this._segmentProcessing = false;
14236
- return _context13.finish(16);
15151
+ return _context14.finish(16);
14237
15152
  case 19:
14238
15153
  if (!cachedError) {
14239
- _context13.next = 26;
15154
+ _context14.next = 26;
14240
15155
  break;
14241
15156
  }
14242
15157
  if (!this._bufferService.isFull()) {
14243
- _context13.next = 25;
15158
+ _context14.next = 25;
14244
15159
  break;
14245
15160
  }
14246
15161
  logger.log("load segment, sn:".concat(seg.sn, ", partIndex:").concat(seg.partIndex));
14247
15162
  this._segmentProcessing = true;
14248
15163
  this._isProcessQuotaExceeded = true;
14249
- return _context13.abrupt("return", false);
15164
+ return _context14.abrupt("return", false);
14250
15165
  case 25:
14251
- return _context13.abrupt("return", this._emitError(StreamingError.create(cachedError)));
15166
+ return _context14.abrupt("return", this._emitError(StreamingError.create(cachedError)));
14252
15167
  case 26:
14253
15168
  if (appended) {
14254
15169
  bufferEnd = this.bufferInfo().end;
@@ -14274,14 +15189,14 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14274
15189
  this._loadSegment();
14275
15190
  }
14276
15191
  }
14277
- return _context13.abrupt("return", appended);
15192
+ return _context14.abrupt("return", appended);
14278
15193
  case 28:
14279
15194
  case "end":
14280
- return _context13.stop();
15195
+ return _context14.stop();
14281
15196
  }
14282
- }, _callee13, this, [[5, 13, 16, 19]]);
15197
+ }, _callee14, this, [[5, 13, 16, 19]]);
14283
15198
  }));
14284
- function _loadSegmentDirect(_x9) {
15199
+ function _loadSegmentDirect(_x8) {
14285
15200
  return _loadSegmentDirect2.apply(this, arguments);
14286
15201
  }
14287
15202
  return _loadSegmentDirect;
@@ -14289,45 +15204,45 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14289
15204
  }, {
14290
15205
  key: "_reqAndBufferSegment",
14291
15206
  value: function() {
14292
- var _reqAndBufferSegment2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee14(seg, audioSeg) {
15207
+ var _reqAndBufferSegment2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee15(seg, audioSeg) {
14293
15208
  var _this$_bufferService2;
14294
15209
  var cc, discontinuity, responses, data, sn, start, stream, before, contiguous, segStart;
14295
- return _regeneratorRuntime$1().wrap(function _callee14$(_context14) {
15210
+ return _regeneratorRuntime$1().wrap(function _callee15$(_context15) {
14296
15211
  while (1)
14297
- switch (_context14.prev = _context14.next) {
15212
+ switch (_context15.prev = _context15.next) {
14298
15213
  case 0:
14299
15214
  cc = seg ? seg.cc : audioSeg.cc;
14300
15215
  discontinuity = this._prevSegCc !== cc;
14301
15216
  responses = [];
14302
- _context14.prev = 3;
14303
- _context14.next = 6;
15217
+ _context15.prev = 3;
15218
+ _context15.next = 6;
14304
15219
  return this._segmentLoader.load(seg, audioSeg, discontinuity);
14305
15220
  case 6:
14306
- responses = _context14.sent;
14307
- _context14.next = 14;
15221
+ responses = _context15.sent;
15222
+ _context15.next = 14;
14308
15223
  break;
14309
15224
  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;
15225
+ _context15.prev = 9;
15226
+ _context15.t0 = _context15["catch"](3);
15227
+ _context15.t0.fatal = false;
15228
+ this._segmentLoader.error = _context15.t0;
15229
+ throw _context15.t0;
14315
15230
  case 14:
14316
15231
  if (responses[0]) {
14317
- _context14.next = 16;
15232
+ _context15.next = 16;
14318
15233
  break;
14319
15234
  }
14320
- return _context14.abrupt("return");
15235
+ return _context15.abrupt("return");
14321
15236
  case 16:
14322
- _context14.next = 18;
15237
+ _context15.next = 18;
14323
15238
  return (_this$_bufferService2 = this._bufferService).decryptBuffer.apply(_this$_bufferService2, _toConsumableArray$2(responses));
14324
15239
  case 18:
14325
- data = _context14.sent;
15240
+ data = _context15.sent;
14326
15241
  if (data) {
14327
- _context14.next = 21;
15242
+ _context15.next = 21;
14328
15243
  break;
14329
15244
  }
14330
- return _context14.abrupt("return");
15245
+ return _context15.abrupt("return");
14331
15246
  case 21:
14332
15247
  sn = seg ? seg.sn : audioSeg.sn;
14333
15248
  start = seg ? seg.start : audioSeg.start;
@@ -14341,26 +15256,26 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14341
15256
  logger.warn("update the new playlist liveEdge, segment id=".concat(sn, ", buffer start=").concat(segStart, ", liveEdge=").concat(this._playlist.liveEdge));
14342
15257
  start = segStart;
14343
15258
  }
14344
- _context14.next = 30;
15259
+ _context15.next = 30;
14345
15260
  return this._bufferService.appendBuffer(seg, audioSeg, data[0], data[1], discontinuity, contiguous, start);
14346
15261
  case 30:
14347
15262
  this.emit(Event$1.APPEND_COST, {
14348
15263
  elapsed: Date.now() - before,
14349
15264
  url: seg.url
14350
15265
  });
14351
- _context14.next = 33;
15266
+ _context15.next = 33;
14352
15267
  return this._bufferService.evictBuffer(this.config.bufferBehind);
14353
15268
  case 33:
14354
15269
  this._prevSegCc = cc;
14355
15270
  this._prevSegSn = sn;
14356
- return _context14.abrupt("return", true);
15271
+ return _context15.abrupt("return", true);
14357
15272
  case 36:
14358
15273
  case "end":
14359
- return _context14.stop();
15274
+ return _context15.stop();
14360
15275
  }
14361
- }, _callee14, this, [[3, 9]]);
15276
+ }, _callee15, this, [[3, 9]]);
14362
15277
  }));
14363
- function _reqAndBufferSegment(_x10, _x11) {
15278
+ function _reqAndBufferSegment(_x9, _x10) {
14364
15279
  return _reqAndBufferSegment2.apply(this, arguments);
14365
15280
  }
14366
15281
  return _reqAndBufferSegment;
@@ -14368,11 +15283,11 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14368
15283
  }, {
14369
15284
  key: "_onCheckQuotaExceeded",
14370
15285
  value: function() {
14371
- var _onCheckQuotaExceeded2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee15() {
15286
+ var _onCheckQuotaExceeded2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee16() {
14372
15287
  var seekTime, buffered, inBuffered, i, bufferBehind, mediaTime;
14373
- return _regeneratorRuntime$1().wrap(function _callee15$(_context15) {
15288
+ return _regeneratorRuntime$1().wrap(function _callee16$(_context16) {
14374
15289
  while (1)
14375
- switch (_context15.prev = _context15.next) {
15290
+ switch (_context16.prev = _context16.next) {
14376
15291
  case 0:
14377
15292
  seekTime = this.media.currentTime;
14378
15293
  buffered = this.media.buffered;
@@ -14380,37 +15295,37 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14380
15295
  i = 0;
14381
15296
  case 4:
14382
15297
  if (!(i < buffered.length)) {
14383
- _context15.next = 11;
15298
+ _context16.next = 11;
14384
15299
  break;
14385
15300
  }
14386
15301
  if (!(buffered.start(0) >= seekTime && seekTime < buffered.end(i))) {
14387
- _context15.next = 8;
15302
+ _context16.next = 8;
14388
15303
  break;
14389
15304
  }
14390
15305
  inBuffered = true;
14391
- return _context15.abrupt("break", 11);
15306
+ return _context16.abrupt("break", 11);
14392
15307
  case 8:
14393
15308
  i++;
14394
- _context15.next = 4;
15309
+ _context16.next = 4;
14395
15310
  break;
14396
15311
  case 11:
14397
15312
  if (!this._bufferService.isFull()) {
14398
- _context15.next = 17;
15313
+ _context16.next = 17;
14399
15314
  break;
14400
15315
  }
14401
15316
  bufferBehind = inBuffered ? this.config.bufferBehind : 5;
14402
15317
  mediaTime = this.media.currentTime;
14403
15318
  if (!(mediaTime - bufferBehind > 0)) {
14404
- _context15.next = 17;
15319
+ _context16.next = 17;
14405
15320
  break;
14406
15321
  }
14407
- _context15.next = 17;
15322
+ _context16.next = 17;
14408
15323
  return this._bufferService.removeBuffer(0, mediaTime - bufferBehind);
14409
15324
  case 17:
14410
15325
  case "end":
14411
- return _context15.stop();
15326
+ return _context16.stop();
14412
15327
  }
14413
- }, _callee15, this);
15328
+ }, _callee16, this);
14414
15329
  }));
14415
15330
  function _onCheckQuotaExceeded() {
14416
15331
  return _onCheckQuotaExceeded2.apply(this, arguments);
@@ -14428,22 +15343,22 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14428
15343
  }, {
14429
15344
  key: "_clear",
14430
15345
  value: function() {
14431
- var _clear2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee16() {
14432
- return _regeneratorRuntime$1().wrap(function _callee16$(_context16) {
15346
+ var _clear2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee17() {
15347
+ return _regeneratorRuntime$1().wrap(function _callee17$(_context17) {
14433
15348
  while (1)
14434
- switch (_context16.prev = _context16.next) {
15349
+ switch (_context17.prev = _context17.next) {
14435
15350
  case 0:
14436
15351
  clearTimeout(this._disconnectTimer);
14437
15352
  this._stopTick();
14438
- _context16.next = 4;
15353
+ _context17.next = 4;
14439
15354
  return Promise.all([this._segmentLoader.cancel(), this._manifestLoader.stopPoll()]);
14440
15355
  case 4:
14441
15356
  this._segmentProcessing = false;
14442
15357
  case 5:
14443
15358
  case "end":
14444
- return _context16.stop();
15359
+ return _context17.stop();
14445
15360
  }
14446
- }, _callee16, this);
15361
+ }, _callee17, this);
14447
15362
  }));
14448
15363
  function _clear() {
14449
15364
  return _clear2.apply(this, arguments);
@@ -14453,14 +15368,14 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14453
15368
  }, {
14454
15369
  key: "_reset",
14455
15370
  value: function() {
14456
- var _reset2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee17() {
15371
+ var _reset2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee18() {
14457
15372
  var _this$_seiService3;
14458
- var reuseMse, _args17 = arguments;
14459
- return _regeneratorRuntime$1().wrap(function _callee17$(_context17) {
15373
+ var reuseMse, _args18 = arguments;
15374
+ return _regeneratorRuntime$1().wrap(function _callee18$(_context18) {
14460
15375
  while (1)
14461
- switch (_context17.prev = _context17.next) {
15376
+ switch (_context18.prev = _context18.next) {
14462
15377
  case 0:
14463
- reuseMse = _args17.length > 0 && _args17[0] !== void 0 ? _args17[0] : false;
15378
+ reuseMse = _args18.length > 0 && _args18[0] !== void 0 ? _args18[0] : false;
14464
15379
  this._reloadOnPlay = false;
14465
15380
  this._prevSegSn = null;
14466
15381
  this._prevSegCc = null;
@@ -14469,15 +15384,15 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14469
15384
  this._segmentLoader.reset();
14470
15385
  (_this$_seiService3 = this._seiService) === null || _this$_seiService3 === void 0 ? void 0 : _this$_seiService3.reset();
14471
15386
  this._stats.reset();
14472
- _context17.next = 11;
15387
+ _context18.next = 11;
14473
15388
  return this._clear();
14474
15389
  case 11:
14475
- return _context17.abrupt("return", this._bufferService.reset(reuseMse));
15390
+ return _context18.abrupt("return", this._bufferService.reset(reuseMse));
14476
15391
  case 12:
14477
15392
  case "end":
14478
- return _context17.stop();
15393
+ return _context18.stop();
14479
15394
  }
14480
- }, _callee17, this);
15395
+ }, _callee18, this);
14481
15396
  }));
14482
15397
  function _reset() {
14483
15398
  return _reset2.apply(this, arguments);
@@ -14558,8 +15473,8 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14558
15473
  value: function _tryEos() {
14559
15474
  var _this$_bufferService3, _this$_bufferService4;
14560
15475
  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);
15476
+ var _this$_playlist2 = this._playlist, nextSegment = _this$_playlist2.nextSegment, lastSegment = _this$_playlist2.lastSegment;
15477
+ 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
15478
  if (!eosAllowed) {
14564
15479
  return;
14565
15480
  }
@@ -14595,7 +15510,7 @@ var Hls = /* @__PURE__ */ function(_EventEmitter) {
14595
15510
  }]);
14596
15511
  return Hls2;
14597
15512
  }(EventEmitter);
14598
- _defineProperty$3(Hls, "version", "3.0.19-rc.0");
15513
+ _defineProperty$3(Hls, "version", "3.0.20-rc.6");
14599
15514
  try {
14600
15515
  if (localStorage.getItem("xgd")) {
14601
15516
  Hls.enableLogger();
@@ -14686,6 +15601,7 @@ var PluginExtension = /* @__PURE__ */ function() {
14686
15601
  }]);
14687
15602
  return PluginExtension2;
14688
15603
  }();
15604
+ var _excluded = ["currentTime"];
14689
15605
  function parseSwitchUrlArgs(args, plugin) {
14690
15606
  var player = plugin.player;
14691
15607
  var curTime = player.currentTime;
@@ -14696,9 +15612,14 @@ function parseSwitchUrlArgs(args, plugin) {
14696
15612
  case "boolean":
14697
15613
  options.seamless = args;
14698
15614
  break;
14699
- case "object":
14700
- Object.assign(options, args);
15615
+ case "object": {
15616
+ var currentTime = args.currentTime, rest = _objectWithoutProperties$1(args, _excluded);
15617
+ Object.assign(options, rest);
15618
+ if (typeof currentTime === "number") {
15619
+ options.startTime = currentTime;
15620
+ }
14701
15621
  break;
15622
+ }
14702
15623
  }
14703
15624
  return options;
14704
15625
  }
@@ -14708,10 +15629,11 @@ var HlsPlugin = /* @__PURE__ */ function(_BasePlugin) {
14708
15629
  function HlsPlugin2() {
14709
15630
  var _this;
14710
15631
  _classCallCheck$3(this, HlsPlugin2);
14711
- for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {
14712
- _args[_key] = arguments[_key];
15632
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
15633
+ args[_key] = arguments[_key];
14713
15634
  }
14714
- _this = _super.call.apply(_super, [this].concat(_args));
15635
+ _this = _super.call.apply(_super, [this].concat(args));
15636
+ _defineProperty$3(_assertThisInitialized$2(_this), "logger", logger);
14715
15637
  _defineProperty$3(_assertThisInitialized$2(_this), "hls", null);
14716
15638
  _defineProperty$3(_assertThisInitialized$2(_this), "pluginExtension", null);
14717
15639
  _defineProperty$3(_assertThisInitialized$2(_this), "getStats", function() {
@@ -14723,24 +15645,6 @@ var HlsPlugin = /* @__PURE__ */ function(_BasePlugin) {
14723
15645
  var lang = _ref.lang;
14724
15646
  (_this$hls2 = _this.hls) === null || _this$hls2 === void 0 ? void 0 : _this$hls2.switchSubtitleStream(lang);
14725
15647
  });
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
15648
  _defineProperty$3(_assertThisInitialized$2(_this), "_keepPauseStatus", function() {
14745
15649
  var paused = _this.player.paused;
14746
15650
  if (!paused)
@@ -14765,8 +15669,8 @@ var HlsPlugin = /* @__PURE__ */ function(_BasePlugin) {
14765
15669
  }, {
14766
15670
  key: "softDecode",
14767
15671
  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;
15672
+ var _this$player, _this$player$config;
15673
+ 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
15674
  return !!mediaType && mediaType !== "video" && mediaType !== "audio";
14771
15675
  }
14772
15676
  }, {
@@ -14774,13 +15678,35 @@ var HlsPlugin = /* @__PURE__ */ function(_BasePlugin) {
14774
15678
  value: function beforePlayerInit() {
14775
15679
  var _this2 = this;
14776
15680
  var config = this.player.config;
15681
+ var mediaElem = this.player.media || this.player.video;
14777
15682
  var hlsOpts = config.hls || {};
14778
15683
  if (!config.url && !config.__allowHlsEmptyUrl__ || !hlsOpts.preferMMS && MSE.isMMSOnly()) {
14779
15684
  return;
14780
15685
  }
14781
15686
  if (this.hls)
14782
15687
  this.hls.destroy();
14783
- this.player.switchURL = this._onSwitchURL;
15688
+ var descriptor = Object.getOwnPropertyDescriptor(this.player, "switchURL");
15689
+ if (!descriptor || descriptor.writable) {
15690
+ this.player.switchURL = function(url, args) {
15691
+ return new Promise(function(resolve, reject) {
15692
+ var player = _this2.player, hls = _this2.hls;
15693
+ if (hls) {
15694
+ var _this2$player$config, _this2$player$config$;
15695
+ var options = parseSwitchUrlArgs(args, _this2);
15696
+ player.config.url = url;
15697
+ hls.switchURL(url, options).then(function() {
15698
+ return resolve(true);
15699
+ }).catch(reject);
15700
+ 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) {
15701
+ _this2._keepPauseStatus();
15702
+ }
15703
+ } else {
15704
+ reject();
15705
+ }
15706
+ });
15707
+ };
15708
+ }
15709
+ var onSwitchUrl = this.player.switchURL;
14784
15710
  this.player.handleSource = false;
14785
15711
  hlsOpts.innerDegrade = hlsOpts.innerDegrade || config.innerDegrade;
14786
15712
  if (hlsOpts.disconnectTime === null || hlsOpts.disconnectTime === void 0)
@@ -14788,7 +15714,7 @@ var HlsPlugin = /* @__PURE__ */ function(_BasePlugin) {
14788
15714
  this.hls = new Hls(_objectSpread2$2({
14789
15715
  softDecode: this.softDecode,
14790
15716
  isLive: config.isLive,
14791
- media: this.player.media || this.player.video,
15717
+ media: mediaElem,
14792
15718
  startTime: config.startTime,
14793
15719
  url: config.url
14794
15720
  }, hlsOpts));
@@ -14806,7 +15732,7 @@ var HlsPlugin = /* @__PURE__ */ function(_BasePlugin) {
14806
15732
  if (this.softDecode) {
14807
15733
  this.pluginExtension = new PluginExtension(_objectSpread2$2({
14808
15734
  isLive: config.isLive,
14809
- media: this.player.video
15735
+ media: mediaElem
14810
15736
  }, hlsOpts), this);
14811
15737
  this.player.forceDegradeToVideo = function() {
14812
15738
  var _this2$pluginExtensio;
@@ -14823,8 +15749,8 @@ var HlsPlugin = /* @__PURE__ */ function(_BasePlugin) {
14823
15749
  return (_this2$hls2 = _this2.hls) === null || _this2$hls2 === void 0 ? void 0 : _this2$hls2.replay();
14824
15750
  });
14825
15751
  }
15752
+ this.on(URL_CHANGE, onSwitchUrl);
14826
15753
  this.on(SWITCH_SUBTITLE, this._onSwitchSubtitle);
14827
- this.on(URL_CHANGE, this._onSwitchURL);
14828
15754
  this.on(DESTROY, this.destroy.bind(this));
14829
15755
  this._transError();
14830
15756
  this._transCoreEvent(EVENT.TTFB);
@@ -14834,6 +15760,7 @@ var HlsPlugin = /* @__PURE__ */ function(_BasePlugin) {
14834
15760
  this._transCoreEvent(EVENT.LOAD_RETRY);
14835
15761
  this._transCoreEvent(EVENT.SOURCEBUFFER_CREATED);
14836
15762
  this._transCoreEvent(EVENT.MEDIASOURCE_OPENED);
15763
+ this._transCoreEvent(EVENT.APPEND_BUFFER);
14837
15764
  this._transCoreEvent(EVENT.REMOVE_BUFFER);
14838
15765
  this._transCoreEvent(EVENT.BUFFEREOS);
14839
15766
  this._transCoreEvent(EVENT.KEYFRAME);
@@ -14853,7 +15780,9 @@ var HlsPlugin = /* @__PURE__ */ function(_BasePlugin) {
14853
15780
  this._transCoreEvent(Event$1.SUBTITLE_PLAYLIST);
14854
15781
  this._transCoreEvent(Event$1.APPEND_COST);
14855
15782
  if (config.url) {
14856
- this.hls.load(config.url, true).catch(function(e) {
15783
+ this.hls.load(config.url, {
15784
+ reuseMse: true
15785
+ }).catch(function(e) {
14857
15786
  });
14858
15787
  }
14859
15788
  }