@volcengine/veplayer-plugin 2.5.0-rc.0 → 2.5.1-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/esm/index.d.ts +0 -1
  2. package/esm/index.development.css +0 -7
  3. package/esm/index.development.js +47274 -53342
  4. package/esm/index.production.css +1 -1
  5. package/esm/index.production.js +4 -13
  6. package/esm/veplayer.plugin.abr.development.js +12 -0
  7. package/esm/veplayer.plugin.abr.production.js +1 -1
  8. package/esm/veplayer.plugin.drm.development.js +12 -0
  9. package/esm/veplayer.plugin.drm.production.js +1 -1
  10. package/esm/veplayer.plugin.flv.development.js +675 -194
  11. package/esm/veplayer.plugin.flv.production.js +1 -1
  12. package/esm/veplayer.plugin.hls.development.js +1159 -369
  13. package/esm/veplayer.plugin.hls.production.js +1 -1
  14. package/esm/veplayer.plugin.mp4.development.js +13 -1
  15. package/esm/veplayer.plugin.mp4.production.js +1 -1
  16. package/esm/veplayer.plugin.rtm.development.js +167 -51
  17. package/esm/veplayer.plugin.rtm.production.js +1 -1
  18. package/esm/veplayer.plugin.shaka.development.js +12 -0
  19. package/esm/veplayer.plugin.shaka.production.js +1 -1
  20. package/package.json +1 -1
  21. package/umd/index.d.ts +0 -1
  22. package/umd/veplayer.plugin.abr.development.js +12 -0
  23. package/umd/veplayer.plugin.abr.production.js +1 -1
  24. package/umd/veplayer.plugin.drm.development.js +12 -0
  25. package/umd/veplayer.plugin.drm.production.js +1 -1
  26. package/umd/veplayer.plugin.flv.development.js +675 -194
  27. package/umd/veplayer.plugin.flv.production.js +1 -1
  28. package/umd/veplayer.plugin.hls.development.js +1126 -336
  29. package/umd/veplayer.plugin.hls.production.js +1 -1
  30. package/umd/veplayer.plugin.mp4.development.js +13 -1
  31. package/umd/veplayer.plugin.mp4.production.js +1 -1
  32. package/umd/veplayer.plugin.rtm.development.js +167 -51
  33. package/umd/veplayer.plugin.rtm.production.js +1 -1
  34. package/umd/veplayer.plugin.shaka.development.js +12 -0
  35. package/umd/veplayer.plugin.shaka.production.js +1 -1
  36. package/esm/veplayer.plugin.ad.development.css +0 -7
  37. package/esm/veplayer.plugin.ad.development.js +0 -9042
  38. package/esm/veplayer.plugin.ad.production.css +0 -1
  39. package/esm/veplayer.plugin.ad.production.js +0 -4
  40. package/umd/veplayer.plugin.ad.development.css +0 -7
  41. package/umd/veplayer.plugin.ad.development.js +0 -9045
  42. package/umd/veplayer.plugin.ad.production.css +0 -1
  43. package/umd/veplayer.plugin.ad.production.js +0 -1
@@ -1644,7 +1644,7 @@
1644
1644
  }
1645
1645
  return offsetTime;
1646
1646
  };
1647
- var version = "3.0.20-alpha.4";
1647
+ var version = "3.0.21-rc.5";
1648
1648
  var ERROR_MAP = {
1649
1649
  1: 5101,
1650
1650
  2: 5102,
@@ -2112,6 +2112,18 @@
2112
2112
  }
2113
2113
  }
2114
2114
  }
2115
+ }, {
2116
+ key: "defineMethod",
2117
+ value: function defineMethod(Obj, map) {
2118
+ for (var key in map) {
2119
+ if (Object.prototype.hasOwnProperty.call(map, key) && typeof map[key] === "function") {
2120
+ Object.defineProperty(Obj, key, {
2121
+ configurable: true,
2122
+ value: map[key]
2123
+ });
2124
+ }
2125
+ }
2126
+ }
2115
2127
  }, {
2116
2128
  key: "defaultConfig",
2117
2129
  get: function get() {
@@ -2734,7 +2746,7 @@
2734
2746
  arr2[i] = arr[i];
2735
2747
  return arr2;
2736
2748
  }
2737
- function _createForOfIteratorHelper(o, allowArrayLike) {
2749
+ function _createForOfIteratorHelper$1(o, allowArrayLike) {
2738
2750
  var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
2739
2751
  if (!it) {
2740
2752
  if (Array.isArray(o) || (it = _unsupportedIterableToArray$1(o)) || allowArrayLike && o && typeof o.length === "number") {
@@ -3089,7 +3101,7 @@
3089
3101
  this.logCache.apply(this, [LogCacheLevel.DEBUG].concat(args));
3090
3102
  if (Logger2.disabled)
3091
3103
  return;
3092
- (_console = console).debug.apply(_console, [this._prefix, nowTime$1()].concat(args));
3104
+ (_console = console).debug.apply(_console, ["[".concat(nowTime$1(), "]"), this._prefix].concat(args));
3093
3105
  }
3094
3106
  }, {
3095
3107
  key: "log",
@@ -3101,7 +3113,7 @@
3101
3113
  this.logCache.apply(this, [LogCacheLevel.LOG].concat(args));
3102
3114
  if (Logger2.disabled)
3103
3115
  return;
3104
- (_console2 = console).log.apply(_console2, [this._prefix, nowTime$1()].concat(args));
3116
+ (_console2 = console).log.apply(_console2, ["[".concat(nowTime$1(), "]"), this._prefix].concat(args));
3105
3117
  }
3106
3118
  }, {
3107
3119
  key: "warn",
@@ -3113,7 +3125,7 @@
3113
3125
  this.logCache.apply(this, [LogCacheLevel.WARN].concat(args));
3114
3126
  if (Logger2.disabled)
3115
3127
  return;
3116
- (_console3 = console).warn.apply(_console3, [this._prefix, nowTime$1()].concat(args));
3128
+ (_console3 = console).warn.apply(_console3, ["[".concat(nowTime$1(), "]"), this._prefix].concat(args));
3117
3129
  }
3118
3130
  }, {
3119
3131
  key: "error",
@@ -3125,7 +3137,7 @@
3125
3137
  this.logCache.apply(this, [LogCacheLevel.ERROR].concat(args));
3126
3138
  if (Logger2.disabled)
3127
3139
  return;
3128
- (_console4 = console).error.apply(_console4, [this._prefix, nowTime$1()].concat(args));
3140
+ (_console4 = console).error.apply(_console4, ["[".concat(nowTime$1(), "]"), this._prefix].concat(args));
3129
3141
  }
3130
3142
  }, {
3131
3143
  key: "logCache",
@@ -3140,7 +3152,7 @@
3140
3152
  var finLogText = logText.map(function(item) {
3141
3153
  return logable(item);
3142
3154
  });
3143
- text = this._prefix + nowTime$1() + JSON.stringify(finLogText);
3155
+ text = "[".concat(nowTime$1(), "]") + this._prefix + JSON.stringify(finLogText);
3144
3156
  } catch (e) {
3145
3157
  return;
3146
3158
  }
@@ -4056,8 +4068,8 @@
4056
4068
  response
4057
4069
  };
4058
4070
  }
4059
- function calculateSpeed(byteLen, millisec) {
4060
- return Math.round(byteLen * 8 * 1e3 / millisec / 1024);
4071
+ function calculateSpeed(byteLen, milliSecond) {
4072
+ return Math.round(byteLen * 8 * 1e3 / milliSecond / 1024);
4061
4073
  }
4062
4074
  var EVENT = {
4063
4075
  ERROR: "error",
@@ -4069,6 +4081,7 @@
4069
4081
  SOURCEBUFFER_CREATED: "core.sourcebuffercreated",
4070
4082
  MEDIASOURCE_OPENED: "core.mediasourceopened",
4071
4083
  ANALYZE_DURATION_EXCEEDED: "core.analyzedurationexceeded",
4084
+ APPEND_BUFFER: "core.appendbuffer",
4072
4085
  REMOVE_BUFFER: "core.removebuffer",
4073
4086
  BUFFEREOS: "core.buffereos",
4074
4087
  KEYFRAME: "core.keyframe",
@@ -4841,7 +4854,7 @@
4841
4854
  value: function _getHeaders(xhr) {
4842
4855
  var headerLines = xhr.getAllResponseHeaders().trim().split("\r\n");
4843
4856
  var headers = {};
4844
- var _iterator = _createForOfIteratorHelper(headerLines), _step;
4857
+ var _iterator = _createForOfIteratorHelper$1(headerLines), _step;
4845
4858
  try {
4846
4859
  for (_iterator.s(); !(_step = _iterator.n()).done; ) {
4847
4860
  var header = _step.value;
@@ -4863,7 +4876,7 @@
4863
4876
  }]);
4864
4877
  return XhrLoader2;
4865
4878
  }(EventEmitter);
4866
- var _excluded$1 = ["retry", "retryDelay", "onRetryError", "transformError"];
4879
+ var _excluded$2 = ["retry", "retryDelay", "onRetryError", "transformError"];
4867
4880
  var Task = /* @__PURE__ */ function() {
4868
4881
  function Task2(type, config) {
4869
4882
  _classCallCheck$1(this, Task2);
@@ -4883,7 +4896,7 @@
4883
4896
  key: "exec",
4884
4897
  value: function exec() {
4885
4898
  var _this = this;
4886
- 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);
4899
+ 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);
4887
4900
  var request = /* @__PURE__ */ function() {
4888
4901
  var _ref = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee() {
4889
4902
  var response, error, isRetry;
@@ -5679,6 +5692,60 @@
5679
5692
  function _nonIterableRest() {
5680
5693
  throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
5681
5694
  }
5695
+ function _createForOfIteratorHelper(o, allowArrayLike) {
5696
+ var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
5697
+ if (!it) {
5698
+ if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
5699
+ if (it)
5700
+ o = it;
5701
+ var i = 0;
5702
+ var F = function() {
5703
+ };
5704
+ return {
5705
+ s: F,
5706
+ n: function() {
5707
+ if (i >= o.length)
5708
+ return {
5709
+ done: true
5710
+ };
5711
+ return {
5712
+ done: false,
5713
+ value: o[i++]
5714
+ };
5715
+ },
5716
+ e: function(e) {
5717
+ throw e;
5718
+ },
5719
+ f: F
5720
+ };
5721
+ }
5722
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
5723
+ }
5724
+ var normalCompletion = true, didErr = false, err;
5725
+ return {
5726
+ s: function() {
5727
+ it = it.call(o);
5728
+ },
5729
+ n: function() {
5730
+ var step = it.next();
5731
+ normalCompletion = step.done;
5732
+ return step;
5733
+ },
5734
+ e: function(e) {
5735
+ didErr = true;
5736
+ err = e;
5737
+ },
5738
+ f: function() {
5739
+ try {
5740
+ if (!normalCompletion && it.return != null)
5741
+ it.return();
5742
+ } finally {
5743
+ if (didErr)
5744
+ throw err;
5745
+ }
5746
+ }
5747
+ };
5748
+ }
5682
5749
  function _toPrimitive(input, hint) {
5683
5750
  if (typeof input !== "object" || input === null)
5684
5751
  return input;
@@ -5701,13 +5768,16 @@
5701
5768
  METADATA: "metadata"
5702
5769
  };
5703
5770
  var VideoCodecType = {
5771
+ AV1: "av1",
5704
5772
  AVC: "avc",
5705
5773
  HEVC: "hevc"
5706
5774
  };
5707
5775
  var AudioCodecType = {
5708
5776
  AAC: "aac",
5709
5777
  G711PCMA: "g7110a",
5710
- G711PCMU: "g7110m"
5778
+ G711PCMU: "g7110m",
5779
+ OPUS: "opus",
5780
+ MP3: "mp3"
5711
5781
  };
5712
5782
  var WarningType = {
5713
5783
  LARGE_AV_SHIFT: "LARGE_AV_SHIFT",
@@ -5747,6 +5817,7 @@
5747
5817
  _defineProperty(this, "isVideoEncryption", false);
5748
5818
  _defineProperty(this, "isAudioEncryption", false);
5749
5819
  _defineProperty(this, "isVideo", true);
5820
+ _defineProperty(this, "lastKeyFrameDts", 0);
5750
5821
  _defineProperty(this, "kid", null);
5751
5822
  _defineProperty(this, "pssh", null);
5752
5823
  _defineProperty(this, "ext", void 0);
@@ -5789,6 +5860,9 @@
5789
5860
  }, {
5790
5861
  key: "exist",
5791
5862
  value: function exist() {
5863
+ if (/av01/.test(this.codec)) {
5864
+ return true;
5865
+ }
5792
5866
  return !!(this.pps.length && this.sps.length && this.codec);
5793
5867
  }
5794
5868
  }, {
@@ -5812,6 +5886,7 @@
5812
5886
  _defineProperty(this, "codecType", AudioCodecType.AAC);
5813
5887
  _defineProperty(this, "pid", -1);
5814
5888
  _defineProperty(this, "codec", "");
5889
+ _defineProperty(this, "container", "");
5815
5890
  _defineProperty(this, "sequenceNumber", 0);
5816
5891
  _defineProperty(this, "sampleDuration", 0);
5817
5892
  _defineProperty(this, "timescale", 0);
@@ -5852,7 +5927,7 @@
5852
5927
  }, {
5853
5928
  key: "exist",
5854
5929
  value: function exist() {
5855
- return !!(this.sampleRate && this.channelCount && this.codec && this.codecType === AudioCodecType.AAC);
5930
+ return !!(this.sampleRate && this.channelCount && (this.codec || this.container) && (this.codecType === AudioCodecType.AAC || this.codecType === AudioCodecType.G711PCMA || this.codecType === AudioCodecType.G711PCMU || this.codecType === AudioCodecType.OPUS || this.codecType === AudioCodecType.MP3));
5856
5931
  }
5857
5932
  }, {
5858
5933
  key: "hasSample",
@@ -7240,6 +7315,119 @@
7240
7315
  }]);
7241
7316
  return TsFixer2;
7242
7317
  }();
7318
+ var BitratesMap = [32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160];
7319
+ var FREQ = [44100, 48e3, 32e3, 22050, 24e3, 16e3, 11025, 12e3, 8e3];
7320
+ var SamplesCoefficients = [
7321
+ [
7322
+ 0,
7323
+ 72,
7324
+ 144,
7325
+ 12
7326
+ ],
7327
+ [
7328
+ 0,
7329
+ 0,
7330
+ 0,
7331
+ 0
7332
+ ],
7333
+ [
7334
+ 0,
7335
+ 72,
7336
+ 144,
7337
+ 12
7338
+ ],
7339
+ [
7340
+ 0,
7341
+ 144,
7342
+ 144,
7343
+ 12
7344
+ ]
7345
+ ];
7346
+ var BytesInSlot = [
7347
+ 0,
7348
+ 1,
7349
+ 1,
7350
+ 4
7351
+ ];
7352
+ var chromeVersion = null;
7353
+ var MPEG = /* @__PURE__ */ function() {
7354
+ function MPEG2() {
7355
+ _classCallCheck(this, MPEG2);
7356
+ }
7357
+ _createClass(MPEG2, null, [{
7358
+ key: "isHeader",
7359
+ value: function isHeader(data, offset) {
7360
+ return offset + 1 < data.length && data[offset] === 255 && (data[offset + 1] & 224) === 224 && (data[offset + 1] & 6) !== 0;
7361
+ }
7362
+ }, {
7363
+ key: "appendFrame",
7364
+ value: function appendFrame(track, data, offset, pts, frameIndex) {
7365
+ if (offset + 24 > data.length) {
7366
+ return;
7367
+ }
7368
+ var header = MPEG2.parseHeader(data, offset);
7369
+ if (header && offset + header.frameLength <= data.length) {
7370
+ var frameDuration = header.samplesPerFrame * 9e4 / header.sampleRate;
7371
+ var stamp = pts + frameIndex * frameDuration;
7372
+ var sample = {
7373
+ data: data.subarray(offset, offset + header.frameLength),
7374
+ pts: stamp,
7375
+ dts: stamp
7376
+ };
7377
+ sample.size = sample.data.byteLength;
7378
+ track.config = [];
7379
+ track.channelCount = header.channelCount;
7380
+ track.sampleRate = header.sampleRate;
7381
+ if (isFirefox) {
7382
+ track.codec = "mp3";
7383
+ } else {
7384
+ track.container = "audio/mpeg";
7385
+ }
7386
+ track.samples.push(sample);
7387
+ return {
7388
+ length: header.frameLength
7389
+ };
7390
+ }
7391
+ }
7392
+ }, {
7393
+ key: "parseHeader",
7394
+ value: function parseHeader(data, offset) {
7395
+ var mpegVersion = data[offset + 1] >> 3 & 3;
7396
+ var mpegLayer = data[offset + 1] >> 1 & 3;
7397
+ var bitRateIndex = data[offset + 2] >> 4 & 15;
7398
+ var sampleRateIndex = data[offset + 2] >> 2 & 3;
7399
+ if (mpegVersion !== 1 && bitRateIndex !== 0 && bitRateIndex !== 15 && sampleRateIndex !== 3) {
7400
+ var paddingBit = data[offset + 2] >> 1 & 1;
7401
+ var channelMode = data[offset + 3] >> 6;
7402
+ var columnInBitrates = mpegVersion === 3 ? 3 - mpegLayer : mpegLayer === 3 ? 3 : 4;
7403
+ var bitRate = BitratesMap[columnInBitrates * 14 + bitRateIndex - 1] * 1e3;
7404
+ var columnInSampleRates = mpegVersion === 3 ? 0 : mpegVersion === 2 ? 1 : 2;
7405
+ var sampleRate = FREQ[columnInSampleRates * 3 + sampleRateIndex];
7406
+ var channelCount = channelMode === 3 ? 1 : 2;
7407
+ var sampleCoefficient = SamplesCoefficients[mpegVersion][mpegLayer];
7408
+ var bytesInSlot = BytesInSlot[mpegLayer];
7409
+ var samplesPerFrame = sampleCoefficient * 8 * bytesInSlot;
7410
+ var frameLength = Math.floor(sampleCoefficient * bitRate / sampleRate + paddingBit) * bytesInSlot;
7411
+ if (chromeVersion === null) {
7412
+ var userAgent = navigator.userAgent || "";
7413
+ var result = userAgent.match(/Chrome\/(\d+)/i);
7414
+ chromeVersion = result ? parseInt(result[1]) : 0;
7415
+ }
7416
+ var needChromeFix = !!chromeVersion && chromeVersion <= 87;
7417
+ if (needChromeFix && mpegLayer === 2 && bitRate >= 224e3 && channelMode === 0) {
7418
+ data[offset + 3] = data[offset + 3] | 128;
7419
+ }
7420
+ return {
7421
+ sampleRate,
7422
+ channelCount,
7423
+ frameLength,
7424
+ samplesPerFrame
7425
+ };
7426
+ }
7427
+ }
7428
+ }]);
7429
+ return MPEG2;
7430
+ }();
7243
7431
  var logger$4 = new Logger$1("TsDemuxer");
7244
7432
  var TsDemuxer = /* @__PURE__ */ function() {
7245
7433
  function TsDemuxer2(videoTrack, audioTrack, metadataTrack) {
@@ -7323,6 +7511,13 @@
7323
7511
  case 15:
7324
7512
  audioTrack.pid = audioPid = esPid;
7325
7513
  break;
7514
+ case 3:
7515
+ case 4:
7516
+ if (audioTrack.pid === -1) {
7517
+ audioTrack.pid = audioPid = esPid;
7518
+ audioTrack.codecType = AudioCodecType.MP3;
7519
+ }
7520
+ break;
7326
7521
  case 27:
7327
7522
  if (videoPid !== -1)
7328
7523
  break;
@@ -7522,7 +7717,14 @@
7522
7717
  logger$4.warn("Cannot parse audio pes", this._audioPesData);
7523
7718
  return;
7524
7719
  }
7525
- this._parseAacData(pes);
7720
+ switch (this.audioTrack.codecType) {
7721
+ case AudioCodecType.AAC:
7722
+ this._parseAacData(pes);
7723
+ break;
7724
+ case AudioCodecType.MP3:
7725
+ this._parseMPEG(pes);
7726
+ break;
7727
+ }
7526
7728
  this._audioPesData = [];
7527
7729
  }
7528
7730
  }, {
@@ -7559,6 +7761,32 @@
7559
7761
  logger$4.warn("Cannot parse aac adts", pes);
7560
7762
  }
7561
7763
  }
7764
+ }, {
7765
+ key: "_parseMPEG",
7766
+ value: function _parseMPEG(pes) {
7767
+ var data = pes.data;
7768
+ var length = data.length;
7769
+ var frameIndex = 0;
7770
+ var offset = 0;
7771
+ var pts = pes.pts;
7772
+ if (pts === void 0) {
7773
+ logger$4.warn("[tsdemuxer]: MPEG PES unknown PTS");
7774
+ return;
7775
+ }
7776
+ while (offset < length) {
7777
+ if (MPEG.isHeader(data, offset)) {
7778
+ var frame = MPEG.appendFrame(this.audioTrack, data, offset, pts, frameIndex);
7779
+ if (frame) {
7780
+ offset += frame.length;
7781
+ frameIndex++;
7782
+ } else {
7783
+ break;
7784
+ }
7785
+ } else {
7786
+ offset++;
7787
+ }
7788
+ }
7789
+ }
7562
7790
  }], [{
7563
7791
  key: "probe",
7564
7792
  value: function probe(data) {
@@ -7605,7 +7833,7 @@
7605
7833
  _classCallCheck(this, ByteReader2);
7606
7834
  this.dv = new DataView(buf);
7607
7835
  this.start = this.offset = offset || this.dv.byteOffset;
7608
- this.end = len ? this.start + len : this.dv.byteLength;
7836
+ this.end = len ? this.start + len : this.start + this.dv.byteLength;
7609
7837
  }
7610
7838
  _createClass(ByteReader2, [{
7611
7839
  key: "buffer",
@@ -7707,7 +7935,7 @@
7707
7935
  value: function readToBuffer(len) {
7708
7936
  var buffer;
7709
7937
  if (this.offset || len) {
7710
- buffer = this.dv.buffer.slice(this.offset, len ? this.offset + len : void 0);
7938
+ buffer = this.dv.buffer.slice(this.offset, len ? this.offset + len : this.end);
7711
7939
  } else {
7712
7940
  buffer = this.dv.buffer;
7713
7941
  }
@@ -7760,6 +7988,47 @@
7760
7988
  }]);
7761
7989
  return ByteReader2;
7762
7990
  }();
7991
+ var BitReader = /* @__PURE__ */ function() {
7992
+ function BitReader2(val, size) {
7993
+ _classCallCheck(this, BitReader2);
7994
+ this.offset = 0;
7995
+ this.val = val;
7996
+ this.size = size;
7997
+ }
7998
+ _createClass(BitReader2, [{
7999
+ key: "skip",
8000
+ value: function skip(len) {
8001
+ this.offset += len;
8002
+ }
8003
+ }, {
8004
+ key: "read",
8005
+ value: function read(len) {
8006
+ var unreadLength = this.size - this.offset - len;
8007
+ if (unreadLength >= 0) {
8008
+ var bits = 0, i = 0;
8009
+ this.offset += len;
8010
+ if (this.size > 31) {
8011
+ for (; i < len; i++) {
8012
+ bits += Math.pow(2, i);
8013
+ }
8014
+ return this.val / Math.pow(2, unreadLength) & bits;
8015
+ } else {
8016
+ for (; i < len; i++) {
8017
+ bits += 1 << i;
8018
+ }
8019
+ return this.val >>> unreadLength & bits;
8020
+ }
8021
+ }
8022
+ throw new Error("the number of the read operation exceeds the total length limit of bits");
8023
+ }
8024
+ }], [{
8025
+ key: "fromByte",
8026
+ value: function fromByte(byte, len) {
8027
+ return new BitReader2(byte.read(len), len << 3);
8028
+ }
8029
+ }]);
8030
+ return BitReader2;
8031
+ }();
7763
8032
  var MP4Parser = /* @__PURE__ */ function() {
7764
8033
  function MP4Parser2() {
7765
8034
  _classCallCheck(this, MP4Parser2);
@@ -8099,6 +8368,8 @@
8099
8368
  ret.entryCount = readBig32(data);
8100
8369
  ret.entries = MP4Parser2.findBox(data.subarray(4), [], start + 4).map(function(b) {
8101
8370
  switch (b.type) {
8371
+ case "av01":
8372
+ return MP4Parser2.av01(b);
8102
8373
  case "avc1":
8103
8374
  case "avc2":
8104
8375
  case "avc3":
@@ -8178,6 +8449,69 @@
8178
8449
  }
8179
8450
  });
8180
8451
  }
8452
+ }, {
8453
+ key: "colr",
8454
+ value: function colr(box) {
8455
+ return parseBox(box, false, function(ret, data) {
8456
+ var byte = ByteReader.fromUint8(data);
8457
+ ret.data = box.data;
8458
+ ret.colorType = byte.readString(4);
8459
+ if (ret.colorType === "nclx") {
8460
+ ret.colorPrimaries = byte.read(2);
8461
+ ret.transferCharacteristics = byte.read(2);
8462
+ ret.matrixCoefficients = byte.read(2);
8463
+ ret.fullRangeFlag = byte.read(1) >> 7;
8464
+ } else if (ret.colorType === "rICC" || ret.colorType === "prof") {
8465
+ ret.iccProfile = data.readToUint8();
8466
+ }
8467
+ });
8468
+ }
8469
+ }, {
8470
+ key: "av01",
8471
+ value: function av01(box) {
8472
+ return parseBox(box, false, function(ret, data, start) {
8473
+ var bodyStart = parseVisualSampleEntry(ret, data);
8474
+ var bodyData = data.subarray(bodyStart);
8475
+ start += bodyStart;
8476
+ ret.av1C = MP4Parser2.av1C(MP4Parser2.findBox(bodyData, ["av1C"], start)[0]);
8477
+ ret.colr = MP4Parser2.colr(MP4Parser2.findBox(bodyData, ["colr"], start)[0]);
8478
+ });
8479
+ }
8480
+ }, {
8481
+ key: "av1C",
8482
+ value: function av1C(box) {
8483
+ return parseBox(box, false, function(ret, data) {
8484
+ ret.data = box.data;
8485
+ var byte = ByteReader.fromUint8(data);
8486
+ var bit = BitReader.fromByte(byte, 4);
8487
+ ret.marker = bit.read(1);
8488
+ ret.version = bit.read(7);
8489
+ ret.seqProfile = bit.read(3);
8490
+ ret.seqLevelIdx0 = bit.read(5);
8491
+ ret.seqTier0 = bit.read(1);
8492
+ ret.highBitdepth = bit.read(1);
8493
+ ret.twelveBit = bit.read(1);
8494
+ ret.monochrome = bit.read(1);
8495
+ ret.chromaSubsamplingX = bit.read(1);
8496
+ ret.chromaSubsamplingY = bit.read(1);
8497
+ ret.chromaSamplePosition = bit.read(2);
8498
+ ret.reserved = bit.read(3);
8499
+ ret.initialPresentationDelayPresent = bit.read(1);
8500
+ if (ret.initialPresentationDelayPresent) {
8501
+ ret.initialPresentationDelayMinusOne = bit.read(4);
8502
+ } else {
8503
+ ret.initialPresentationDelayMinusOne = 0;
8504
+ }
8505
+ ret.configOBUs = byte.readToUint8();
8506
+ var bitdepth;
8507
+ if (ret.seqLevelIdx0 === 2 && ret.highBitdepth === 1) {
8508
+ bitdepth = ret.twelveBit === 1 ? "12" : "10";
8509
+ } else if (ret.seqProfile <= 2) {
8510
+ bitdepth = ret.highBitdepth === 1 ? "10" : "08";
8511
+ }
8512
+ ret.codec = ["av01", ret.seqProfile, (ret.seqLevelIdx0 < 10 ? "0" + ret.seqLevelIdx0 : ret.seqLevelIdx0) + (ret.seqTier0 ? "H" : "M"), bitdepth].join(".");
8513
+ });
8514
+ }
8181
8515
  }, {
8182
8516
  key: "avc1",
8183
8517
  value: function avc1(box) {
@@ -8611,7 +8945,12 @@
8611
8945
  if (e1.pasp) {
8612
8946
  v.sarRatio = [e1.pasp.hSpacing, e1.pasp.vSpacing];
8613
8947
  }
8614
- if (e1.hvcC) {
8948
+ if (e1.av1C) {
8949
+ v.codecType = VideoCodecType.AV1;
8950
+ v.codec = e1.av1C.codec;
8951
+ v.av1C = e1.av1C.data;
8952
+ v.colr = e1.colr.data;
8953
+ } else if (e1.hvcC) {
8615
8954
  v.codecType = VideoCodecType.HEVC;
8616
8955
  v.codec = e1.hvcC.codec;
8617
8956
  v.vps = e1.hvcC.vps;
@@ -8930,8 +9269,9 @@
8930
9269
  function parseBox(box, isFullBox, parse2) {
8931
9270
  if (!box)
8932
9271
  return;
8933
- if (box.size !== box.data.length)
9272
+ if (box.size !== box.data.length) {
8934
9273
  throw new Error("box ".concat(box.type, " size !== data.length"));
9274
+ }
8935
9275
  var ret = {
8936
9276
  start: box.start,
8937
9277
  size: box.size,
@@ -8970,11 +9310,167 @@
8970
9310
  var FMP4Demuxer = /* @__PURE__ */ function() {
8971
9311
  function FMP4Demuxer2(videoTrack, audioTrack, metadataTrack) {
8972
9312
  _classCallCheck(this, FMP4Demuxer2);
9313
+ _defineProperty(this, "__loadedMoofWraps", []);
9314
+ _defineProperty(this, "__lastRemainData", null);
9315
+ _defineProperty(this, "__lastRemainDataStart", 0);
9316
+ _defineProperty(this, "__nextMoofStart", -1);
8973
9317
  this.videoTrack = videoTrack || new VideoTrack();
8974
9318
  this.audioTrack = audioTrack || new AudioTrack();
8975
9319
  this.metadataTrack = metadataTrack || new MetadataTrack();
8976
9320
  }
8977
9321
  _createClass(FMP4Demuxer2, [{
9322
+ key: "demuxPart",
9323
+ value: function demuxPart(partData, partDataStart, moov) {
9324
+ var _this = this;
9325
+ var videoTrack = this.videoTrack, audioTrack = this.audioTrack;
9326
+ var videoExist = videoTrack.exist();
9327
+ var audioExist = audioTrack.exist();
9328
+ var isAV01 = /av01/.test(videoTrack.codec);
9329
+ videoTrack.samples = [];
9330
+ audioTrack.samples = [];
9331
+ var data = partData;
9332
+ var dataStart = partDataStart;
9333
+ if (this.__lastRemainData) {
9334
+ var lastRemainDataEnd = this.__lastRemainDataStart + this.__lastRemainData.byteLength;
9335
+ var continuous = partDataStart <= lastRemainDataEnd && partDataStart > this.__lastRemainDataStart && partDataStart + partData.byteLength > lastRemainDataEnd;
9336
+ if (continuous) {
9337
+ var noDuplicateData = partData.subarray(this.__lastRemainData.byteLength + this.__lastRemainDataStart - partDataStart);
9338
+ data = concatUint8Array(this.__lastRemainData, noDuplicateData);
9339
+ dataStart = this.__lastRemainDataStart;
9340
+ this.__lastRemainData = null;
9341
+ } else {
9342
+ this.__lastRemainData = null;
9343
+ this.__lastRemainDataStart = 0;
9344
+ this.__nextMoofStart = -1;
9345
+ }
9346
+ }
9347
+ if (!moov) {
9348
+ var moovBox = MP4Parser.findBox(data, ["moov"])[0];
9349
+ if (!moovBox)
9350
+ throw new Error("cannot found moov box");
9351
+ moov = MP4Parser.moov(moovBox);
9352
+ }
9353
+ if (data) {
9354
+ var dataEnd = dataStart + data.byteLength;
9355
+ if (!videoExist && !audioExist) {
9356
+ MP4Parser.moovToTrack(moov, videoTrack, audioTrack);
9357
+ }
9358
+ var moofBoxes = [];
9359
+ if (this.__nextMoofStart < 0) {
9360
+ MP4Parser.findBox(data, ["moof"], dataStart).forEach(function(v) {
9361
+ return moofBoxes.push(v);
9362
+ });
9363
+ } else if (this.__nextMoofStart >= dataStart && this.__nextMoofStart <= dataEnd - 8) {
9364
+ MP4Parser.findBox(data.subarray(this.__nextMoofStart - dataStart), ["moof"], this.__nextMoofStart).forEach(function(v) {
9365
+ return moofBoxes.push(v);
9366
+ });
9367
+ }
9368
+ moofBoxes.filter(function(moofBox) {
9369
+ return moofBox.size <= moofBox.data.length;
9370
+ }).forEach(function(moofBox) {
9371
+ var moof = MP4Parser.moof(moofBox);
9372
+ _this.__nextMoofStart = moof.start + Math.max.apply(Math, _toConsumableArray(moof.traf.map(function(v) {
9373
+ return v.trun.samples.reduce(function(ret, w) {
9374
+ return ret + w.size;
9375
+ }, v.trun.dataOffset || 0);
9376
+ })));
9377
+ _this.__loadedMoofWraps.push({
9378
+ start: moof.start,
9379
+ nextMoofStart: _this.__nextMoofStart,
9380
+ moof
9381
+ });
9382
+ _this.__loadedMoofWraps.sort(function(p, n) {
9383
+ return p.start - n.start;
9384
+ });
9385
+ });
9386
+ var _iterator = _createForOfIteratorHelper(this.__loadedMoofWraps), _step;
9387
+ try {
9388
+ var _loop = function _loop2() {
9389
+ var moofWrap = _step.value;
9390
+ if (moofWrap.start > dataEnd || moofWrap.nextMoofStart < dataStart) {
9391
+ return "continue";
9392
+ }
9393
+ var moofStart = moofWrap.start;
9394
+ var tracks = MP4Parser.moofToSamples(moofWrap.moof, videoTrack, audioTrack);
9395
+ var videoBaseMediaDecodeTime = videoTrack.baseMediaDecodeTime;
9396
+ var audioBaseMediaDecodeTime = audioTrack.baseMediaDecodeTime;
9397
+ var nalSize;
9398
+ Object.keys(tracks).forEach(function(k) {
9399
+ if (videoTrack.id == k) {
9400
+ tracks[k].some(function(x) {
9401
+ var xStart = x.offset += moofStart;
9402
+ if (xStart < dataStart) {
9403
+ return;
9404
+ }
9405
+ if (xStart + x.size > dataEnd) {
9406
+ return true;
9407
+ }
9408
+ var sample = new VideoSample((x.pts || x.dts) + videoBaseMediaDecodeTime, x.dts + videoBaseMediaDecodeTime);
9409
+ sample.duration = x.duration;
9410
+ sample.gopId = x.gopId;
9411
+ if (x.keyframe)
9412
+ sample.setToKeyframe();
9413
+ var sampleData = data.subarray(xStart - dataStart, xStart - dataStart + x.size);
9414
+ sample.data = sampleData;
9415
+ if (!isAV01) {
9416
+ var start = 0;
9417
+ var len = sampleData.length - 1;
9418
+ while (start < len) {
9419
+ nalSize = readBig32(sampleData, start);
9420
+ start += 4;
9421
+ sample.units.push(sampleData.subarray(start, start + nalSize));
9422
+ start += nalSize;
9423
+ }
9424
+ }
9425
+ _this.__lastRemainDataStart = xStart + x.size;
9426
+ videoTrack.samples.push(sample);
9427
+ });
9428
+ } else if (audioTrack.id == k) {
9429
+ tracks[k].some(function(x) {
9430
+ var xStart = x.offset + moofStart;
9431
+ if (xStart < dataStart) {
9432
+ return;
9433
+ }
9434
+ if (xStart + x.size > dataEnd) {
9435
+ return true;
9436
+ }
9437
+ var sampleData = data.subarray(xStart - dataStart, xStart - dataStart + x.size);
9438
+ audioTrack.samples.push(new AudioSample(x.dts + audioBaseMediaDecodeTime, sampleData, x.duration));
9439
+ _this.__lastRemainDataStart = xStart + x.size;
9440
+ });
9441
+ }
9442
+ });
9443
+ };
9444
+ for (_iterator.s(); !(_step = _iterator.n()).done; ) {
9445
+ var _ret = _loop();
9446
+ if (_ret === "continue")
9447
+ continue;
9448
+ }
9449
+ } catch (err) {
9450
+ _iterator.e(err);
9451
+ } finally {
9452
+ _iterator.f();
9453
+ }
9454
+ }
9455
+ if (this.__lastRemainDataStart > dataStart && this.__lastRemainDataStart < data.byteLength + dataStart) {
9456
+ this.__lastRemainData = data.subarray(this.__lastRemainDataStart - dataStart);
9457
+ } else {
9458
+ this.__lastRemainData = data;
9459
+ this.__lastRemainDataStart = dataStart;
9460
+ }
9461
+ if (videoTrack.samples.length) {
9462
+ videoTrack.baseMediaDecodeTime = videoTrack.samples[0].pts;
9463
+ }
9464
+ if (audioTrack.samples.length) {
9465
+ audioTrack.baseMediaDecodeTime = audioTrack.samples[0].pts;
9466
+ }
9467
+ return {
9468
+ videoTrack,
9469
+ audioTrack,
9470
+ metadataTrack: this.metadataTrack
9471
+ };
9472
+ }
9473
+ }, {
8978
9474
  key: "demux",
8979
9475
  value: function demux(videoData, audioData) {
8980
9476
  var videoTrack = this.videoTrack, audioTrack = this.audioTrack;
@@ -9466,10 +9962,16 @@
9466
9962
  if (track.useEME && track.enca) {
9467
9963
  content = MP42.enca(track);
9468
9964
  } else {
9469
- content = MP42.mp4a(track);
9965
+ if (track.codecType === AudioCodecType.OPUS) {
9966
+ content = MP42.opus(track);
9967
+ } else {
9968
+ content = MP42.mp4a(track);
9969
+ }
9470
9970
  }
9471
9971
  } else if (track.useEME && track.encv) {
9472
9972
  content = MP42.encv(track);
9973
+ } else if (track.av1C) {
9974
+ content = MP42.av01(track);
9473
9975
  } else {
9474
9976
  content = MP42.avc1hev1(track);
9475
9977
  }
@@ -9683,12 +10185,9 @@
9683
10185
  return MP42.box(MP42.types.sinf, content, MP42.box(MP42.types.frma, frma), MP42.box(MP42.types.schm, schm), schi);
9684
10186
  }
9685
10187
  }, {
9686
- key: "avc1hev1",
9687
- value: function avc1hev1(track) {
9688
- var isHevc = track.codecType === VideoCodecType.HEVC;
9689
- var typ = isHevc ? MP42.types.hvc1 : MP42.types.avc1;
9690
- var config = isHevc ? MP42.hvcC(track) : MP42.avcC(track);
9691
- var boxes = [new Uint8Array([
10188
+ key: "av01",
10189
+ value: function av01(track) {
10190
+ return MP42.box(MP42.types.av01, new Uint8Array([
9692
10191
  0,
9693
10192
  0,
9694
10193
  0,
@@ -9767,48 +10266,135 @@
9767
10266
  24,
9768
10267
  17,
9769
10268
  17
9770
- ]), config];
9771
- if (isHevc) {
9772
- boxes.push(MP42.box(MP42.types.fiel, new Uint8Array([1, 0])));
9773
- } else if (track.sarRatio && track.sarRatio.length > 1) {
9774
- boxes.push(MP42.pasp(track.sarRatio));
9775
- }
9776
- return MP42.box.apply(MP42, [typ].concat(boxes));
10269
+ ]), track.av1C, track.colr);
9777
10270
  }
9778
10271
  }, {
9779
- key: "avcC",
9780
- value: function avcC(track) {
9781
- var _concat$concat2, _ref2;
9782
- var sps = [];
9783
- var pps = [];
9784
- var len;
9785
- track.sps.forEach(function(s) {
9786
- len = s.byteLength;
9787
- sps.push(len >>> 8 & 255);
9788
- sps.push(len & 255);
9789
- sps.push.apply(sps, _toConsumableArray(s));
9790
- });
9791
- track.pps.forEach(function(p) {
9792
- len = p.byteLength;
9793
- pps.push(len >>> 8 & 255);
9794
- pps.push(len & 255);
9795
- pps.push.apply(pps, _toConsumableArray(p));
9796
- });
9797
- return MP42.box(MP42.types.avcC, new Uint8Array((_concat$concat2 = (_ref2 = [
10272
+ key: "avc1hev1",
10273
+ value: function avc1hev1(track) {
10274
+ var isHevc = track.codecType === VideoCodecType.HEVC;
10275
+ var typ = isHevc ? MP42.types.hvc1 : MP42.types.avc1;
10276
+ var config = isHevc ? MP42.hvcC(track) : MP42.avcC(track);
10277
+ var boxes = [new Uint8Array([
10278
+ 0,
10279
+ 0,
10280
+ 0,
10281
+ 0,
10282
+ 0,
10283
+ 0,
10284
+ 0,
9798
10285
  1,
9799
- sps[3],
9800
- sps[4],
9801
- sps[5],
9802
- 252 | 3,
9803
- 224 | track.sps.length
9804
- ]).concat.apply(_ref2, sps).concat([track.pps.length])).concat.apply(_concat$concat2, pps)));
9805
- }
9806
- }, {
9807
- key: "hvcC",
9808
- value: function hvcC(track) {
9809
- var hvcC2 = track.hvcC;
9810
- if (hvcC2 instanceof ArrayBuffer || hvcC2 instanceof Uint8Array)
9811
- return hvcC2;
10286
+ 0,
10287
+ 0,
10288
+ 0,
10289
+ 0,
10290
+ 0,
10291
+ 0,
10292
+ 0,
10293
+ 0,
10294
+ 0,
10295
+ 0,
10296
+ 0,
10297
+ 0,
10298
+ 0,
10299
+ 0,
10300
+ 0,
10301
+ 0,
10302
+ track.width >> 8 & 255,
10303
+ track.width & 255,
10304
+ track.height >> 8 & 255,
10305
+ track.height & 255,
10306
+ 0,
10307
+ 72,
10308
+ 0,
10309
+ 0,
10310
+ 0,
10311
+ 72,
10312
+ 0,
10313
+ 0,
10314
+ 0,
10315
+ 0,
10316
+ 0,
10317
+ 0,
10318
+ 0,
10319
+ 1,
10320
+ 0,
10321
+ 0,
10322
+ 0,
10323
+ 0,
10324
+ 0,
10325
+ 0,
10326
+ 0,
10327
+ 0,
10328
+ 0,
10329
+ 0,
10330
+ 0,
10331
+ 0,
10332
+ 0,
10333
+ 0,
10334
+ 0,
10335
+ 0,
10336
+ 0,
10337
+ 0,
10338
+ 0,
10339
+ 0,
10340
+ 0,
10341
+ 0,
10342
+ 0,
10343
+ 0,
10344
+ 0,
10345
+ 0,
10346
+ 0,
10347
+ 0,
10348
+ 0,
10349
+ 0,
10350
+ 0,
10351
+ 0,
10352
+ 0,
10353
+ 24,
10354
+ 17,
10355
+ 17
10356
+ ]), config];
10357
+ if (isHevc) {
10358
+ boxes.push(MP42.box(MP42.types.fiel, new Uint8Array([1, 0])));
10359
+ } else if (track.sarRatio && track.sarRatio.length > 1) {
10360
+ boxes.push(MP42.pasp(track.sarRatio));
10361
+ }
10362
+ return MP42.box.apply(MP42, [typ].concat(boxes));
10363
+ }
10364
+ }, {
10365
+ key: "avcC",
10366
+ value: function avcC(track) {
10367
+ var _concat$concat2, _ref2;
10368
+ var sps = [];
10369
+ var pps = [];
10370
+ var len;
10371
+ track.sps.forEach(function(s) {
10372
+ len = s.byteLength;
10373
+ sps.push(len >>> 8 & 255);
10374
+ sps.push(len & 255);
10375
+ sps.push.apply(sps, _toConsumableArray(s));
10376
+ });
10377
+ track.pps.forEach(function(p) {
10378
+ len = p.byteLength;
10379
+ pps.push(len >>> 8 & 255);
10380
+ pps.push(len & 255);
10381
+ pps.push.apply(pps, _toConsumableArray(p));
10382
+ });
10383
+ return MP42.box(MP42.types.avcC, new Uint8Array((_concat$concat2 = (_ref2 = [
10384
+ 1,
10385
+ sps[3],
10386
+ sps[4],
10387
+ sps[5],
10388
+ 252 | 3,
10389
+ 224 | track.sps.length
10390
+ ]).concat.apply(_ref2, sps).concat([track.pps.length])).concat.apply(_concat$concat2, pps)));
10391
+ }
10392
+ }, {
10393
+ key: "hvcC",
10394
+ value: function hvcC(track) {
10395
+ var hvcC2 = track.hvcC;
10396
+ if (hvcC2 instanceof ArrayBuffer || hvcC2 instanceof Uint8Array)
10397
+ return hvcC2;
9812
10398
  var vps = track.vps, sps = track.sps, pps = track.pps;
9813
10399
  var data;
9814
10400
  if (hvcC2) {
@@ -10052,6 +10638,53 @@
10052
10638
  )));
10053
10639
  return esds2;
10054
10640
  }
10641
+ }, {
10642
+ key: "opus",
10643
+ value: function opus(track) {
10644
+ var opusAudioDescription = new Uint8Array([
10645
+ 0,
10646
+ 0,
10647
+ 0,
10648
+ 0,
10649
+ 0,
10650
+ 0,
10651
+ 0,
10652
+ 1,
10653
+ 0,
10654
+ 0,
10655
+ 0,
10656
+ 0,
10657
+ 0,
10658
+ 0,
10659
+ 0,
10660
+ 0,
10661
+ 0,
10662
+ track.channelCount,
10663
+ 0,
10664
+ 16,
10665
+ 0,
10666
+ 0,
10667
+ 0,
10668
+ 0,
10669
+ track.sampleRate >> 8 & 255,
10670
+ track.sampleRate & 255,
10671
+ 0,
10672
+ 0
10673
+ ]);
10674
+ var opusSpecificConfig = track.config.length ? MP42.dOps(track) : [];
10675
+ return MP42.box(MP42.types.Opus, opusAudioDescription, opusSpecificConfig);
10676
+ }
10677
+ }, {
10678
+ key: "dOps",
10679
+ value: function dOps(track) {
10680
+ if (track.config) {
10681
+ track.config[4] = track.sampleRate >>> 24 & 255;
10682
+ track.config[5] = track.sampleRate >>> 16 & 255;
10683
+ track.config[6] = track.sampleRate >>> 8 & 255;
10684
+ track.config[7] = track.sampleRate & 255;
10685
+ return MP42.box(MP42.types.dOps, track.config);
10686
+ }
10687
+ }
10055
10688
  }, {
10056
10689
  key: "mvex",
10057
10690
  value: function mvex(tracks) {
@@ -10654,7 +11287,7 @@
10654
11287
  }]);
10655
11288
  return MP42;
10656
11289
  }();
10657
- _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) {
11290
+ _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) {
10658
11291
  p[c] = [c.charCodeAt(0), c.charCodeAt(1), c.charCodeAt(2), c.charCodeAt(3)];
10659
11292
  return p;
10660
11293
  }, /* @__PURE__ */ Object.create(null)));
@@ -10989,30 +11622,46 @@
10989
11622
  };
10990
11623
  }
10991
11624
  var samples = track.samples;
11625
+ var isAV01 = /av01/.test(track.codec);
10992
11626
  var mdatSize = 0;
10993
- samples.forEach(function(s) {
10994
- mdatSize += s.units.reduce(function(t, c) {
10995
- return t + c.byteLength;
10996
- }, 0);
10997
- mdatSize += s.units.length * 4;
10998
- });
10999
- var mdata = new Uint8Array(mdatSize);
11000
- var mdatView = new DataView(mdata.buffer);
11001
- var _loop = function _loop2(_offset, _sample) {
11002
- _sample = samples[i];
11003
- var sampleSize = 0;
11004
- _sample.units.forEach(function(u) {
11005
- mdatView.setUint32(_offset, u.byteLength);
11006
- _offset += 4;
11007
- mdata.set(u, _offset);
11008
- _offset += u.byteLength;
11009
- sampleSize += 4 + u.byteLength;
11627
+ if (isAV01) {
11628
+ samples.forEach(function(s) {
11629
+ mdatSize += s.data.byteLength;
11010
11630
  });
11011
- _sample.size = sampleSize;
11012
- offset = _offset, sample = _sample;
11013
- };
11014
- for (var i = 0, l = samples.length, offset = 0, sample; i < l; i++) {
11015
- _loop(offset, sample);
11631
+ } else {
11632
+ samples.forEach(function(s) {
11633
+ mdatSize += s.units.reduce(function(t, c) {
11634
+ return t + c.byteLength;
11635
+ }, 0);
11636
+ mdatSize += s.units.length * 4;
11637
+ });
11638
+ }
11639
+ var mdata = new Uint8Array(mdatSize);
11640
+ if (isAV01) {
11641
+ for (var i = 0, l = samples.length, offset = 0, sample; i < l; i++) {
11642
+ sample = samples[i];
11643
+ mdata.set(sample.data, offset);
11644
+ sample.size = sample.data.byteLength;
11645
+ offset += sample.size;
11646
+ }
11647
+ } else {
11648
+ var mdatView = new DataView(mdata.buffer);
11649
+ var _loop = function _loop2(_offset2, _sample2) {
11650
+ _sample2 = samples[_i];
11651
+ var sampleSize = 0;
11652
+ _sample2.units.forEach(function(u) {
11653
+ mdatView.setUint32(_offset2, u.byteLength);
11654
+ _offset2 += 4;
11655
+ mdata.set(u, _offset2);
11656
+ _offset2 += u.byteLength;
11657
+ sampleSize += 4 + u.byteLength;
11658
+ });
11659
+ _sample2.size = sampleSize;
11660
+ _offset = _offset2, _sample = _sample2;
11661
+ };
11662
+ for (var _i = 0, _l = samples.length, _offset = 0, _sample; _i < _l; _i++) {
11663
+ _loop(_offset, _sample);
11664
+ }
11016
11665
  }
11017
11666
  var mdat = MP4.mdat(mdata);
11018
11667
  var moof = MP4.moof([track]);
@@ -11206,7 +11855,8 @@
11206
11855
  timescale: audioTrack.timescale,
11207
11856
  firstDts: audioTrack.firstDts / videoTrack.timescale,
11208
11857
  firstPts: audioTrack.firstPts / videoTrack.timescale,
11209
- duration: audioTrack.samplesDuration / videoTrack.timescale
11858
+ duration: audioTrack.samplesDuration / videoTrack.timescale,
11859
+ container: audioTrack.container
11210
11860
  };
11211
11861
  var newId = "".concat(videoTrack.codec, "/").concat(videoTrack.width, "/").concat(videoTrack.height, "/").concat(audioTrack.codec, "/").concat(audioTrack.config);
11212
11862
  if (newId !== this._initSegmentId) {
@@ -11330,7 +11980,7 @@
11330
11980
  }]);
11331
11981
  return Transmuxer2;
11332
11982
  }();
11333
- var _excluded = ["data"], _excluded2 = ["data"];
11983
+ var _excluded$1 = ["data"], _excluded2 = ["data"];
11334
11984
  var logger$2 = new Logger$2("BufferService");
11335
11985
  var BufferService = /* @__PURE__ */ function() {
11336
11986
  function BufferService2(hls) {
@@ -11496,7 +12146,8 @@
11496
12146
  key: "appendBuffer",
11497
12147
  value: function() {
11498
12148
  var _appendBuffer = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee2(segment, audioSegment, videoChunk, audioChunk, discontinuity, contiguous, startTime) {
11499
- var p, needInit, _this$_transmuxer$tra, _this$_transmuxer$tra2, video, audio, isFirstAppend, mse, _p, videoData, videoRest, audioData, audioRest;
12149
+ var _this2 = this;
12150
+ var afterAppend, p, needInit, _this$_transmuxer$tra, _this$_transmuxer$tra2, video, audio, isFirstAppend, mse, _p, videoData, videoRest, audioData, audioRest;
11500
12151
  return _regeneratorRuntime$1().wrap(function _callee2$(_context2) {
11501
12152
  while (1)
11502
12153
  switch (_context2.prev = _context2.next) {
@@ -11507,8 +12158,18 @@
11507
12158
  }
11508
12159
  return _context2.abrupt("return");
11509
12160
  case 2:
12161
+ afterAppend = function afterAppend2() {
12162
+ var _this2$hls;
12163
+ if ((_this2$hls = _this2.hls) !== null && _this2$hls !== void 0 && _this2$hls.emit) {
12164
+ var _this2$hls2;
12165
+ (_this2$hls2 = _this2.hls) === null || _this2$hls2 === void 0 ? void 0 : _this2$hls2.emit(EVENT.APPEND_BUFFER, {
12166
+ start: segment.start,
12167
+ end: segment.end
12168
+ });
12169
+ }
12170
+ };
11510
12171
  if (!this._directAppend) {
11511
- _context2.next = 7;
12172
+ _context2.next = 8;
11512
12173
  break;
11513
12174
  }
11514
12175
  p = [];
@@ -11516,8 +12177,8 @@
11516
12177
  p.push(this._mse.append(MSE.VIDEO, videoChunk));
11517
12178
  if (audioChunk)
11518
12179
  p.push(this._mse.append(MSE.AUDIO, audioChunk));
11519
- return _context2.abrupt("return", Promise.all(p));
11520
- case 7:
12180
+ return _context2.abrupt("return", Promise.all(p).then(afterAppend));
12181
+ case 8:
11521
12182
  needInit = this._needInitSegment || discontinuity;
11522
12183
  _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];
11523
12184
  if (audioChunk && audioSegment) {
@@ -11533,21 +12194,22 @@
11533
12194
  this.hls.emit(Event$1.NO_AUDIO_TRACK);
11534
12195
  }
11535
12196
  if (!this._softVideo) {
11536
- _context2.next = 18;
12197
+ _context2.next = 20;
11537
12198
  break;
11538
12199
  }
11539
12200
  this._softVideo.appendBuffer(video, audio);
11540
12201
  this._needInitSegment = false;
11541
- _context2.next = 28;
12202
+ afterAppend();
12203
+ _context2.next = 30;
11542
12204
  break;
11543
- case 18:
12205
+ case 20:
11544
12206
  if (!this._mse) {
11545
- _context2.next = 28;
12207
+ _context2.next = 30;
11546
12208
  break;
11547
12209
  }
11548
12210
  isFirstAppend = !this._sourceCreated;
11549
12211
  if (isFirstAppend) {
11550
- this._createMseSource(video === null || video === void 0 ? void 0 : video.codec, audio === null || audio === void 0 ? void 0 : audio.codec);
12212
+ this._createMseSource(video === null || video === void 0 ? void 0 : video.codec, audio === null || audio === void 0 ? void 0 : audio.codec, audio === null || audio === void 0 ? void 0 : audio.container);
11551
12213
  }
11552
12214
  this._needInitSegment = false;
11553
12215
  mse = this._mse;
@@ -11558,15 +12220,15 @@
11558
12220
  });
11559
12221
  }
11560
12222
  if (video) {
11561
- videoData = video.data, videoRest = _objectWithoutProperties$1(video, _excluded);
12223
+ videoData = video.data, videoRest = _objectWithoutProperties$1(video, _excluded$1);
11562
12224
  _p.push(mse.append(MSE.VIDEO, videoData, videoRest));
11563
12225
  }
11564
12226
  if (audio) {
11565
12227
  audioData = audio.data, audioRest = _objectWithoutProperties$1(audio, _excluded2);
11566
12228
  _p.push(mse.append(MSE.AUDIO, audioData, audioRest));
11567
12229
  }
11568
- return _context2.abrupt("return", Promise.all(_p));
11569
- case 28:
12230
+ return _context2.abrupt("return", Promise.all(_p).then(afterAppend));
12231
+ case 30:
11570
12232
  case "end":
11571
12233
  return _context2.stop();
11572
12234
  }
@@ -11581,7 +12243,7 @@
11581
12243
  key: "removeBuffer",
11582
12244
  value: function() {
11583
12245
  var _removeBuffer = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee3() {
11584
- var _this2 = this;
12246
+ var _this3 = this;
11585
12247
  var start, end, media, _args3 = arguments;
11586
12248
  return _regeneratorRuntime$1().wrap(function _callee3$(_context3) {
11587
12249
  while (1)
@@ -11597,7 +12259,7 @@
11597
12259
  return _context3.abrupt("return");
11598
12260
  case 5:
11599
12261
  return _context3.abrupt("return", this._mse.clearBuffer(start, end).then(function() {
11600
- return _this2.hls.emit(EVENT.REMOVE_BUFFER, {
12262
+ return _this3.hls.emit(EVENT.REMOVE_BUFFER, {
11601
12263
  start,
11602
12264
  end,
11603
12265
  removeEnd: end
@@ -11778,30 +12440,51 @@
11778
12440
  return setLiveSeekableRange;
11779
12441
  }()
11780
12442
  }, {
11781
- key: "destroy",
12443
+ key: "detachMedia",
11782
12444
  value: function() {
11783
- var _destroy = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee9() {
11784
- var _this$_decryptor;
12445
+ var _detachMedia = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee9() {
11785
12446
  return _regeneratorRuntime$1().wrap(function _callee9$(_context9) {
11786
12447
  while (1)
11787
12448
  switch (_context9.prev = _context9.next) {
11788
12449
  case 0:
11789
- (_this$_decryptor = this._decryptor) === null || _this$_decryptor === void 0 ? void 0 : _this$_decryptor.destroy();
11790
12450
  if (!this._mse) {
11791
- _context9.next = 4;
12451
+ _context9.next = 3;
11792
12452
  break;
11793
12453
  }
11794
- _context9.next = 4;
12454
+ _context9.next = 3;
11795
12455
  return this._mse.unbindMedia();
11796
- case 4:
12456
+ case 3:
12457
+ case "end":
12458
+ return _context9.stop();
12459
+ }
12460
+ }, _callee9, this);
12461
+ }));
12462
+ function detachMedia() {
12463
+ return _detachMedia.apply(this, arguments);
12464
+ }
12465
+ return detachMedia;
12466
+ }()
12467
+ }, {
12468
+ key: "destroy",
12469
+ value: function() {
12470
+ var _destroy = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee10() {
12471
+ var _this$_decryptor;
12472
+ return _regeneratorRuntime$1().wrap(function _callee10$(_context10) {
12473
+ while (1)
12474
+ switch (_context10.prev = _context10.next) {
12475
+ case 0:
12476
+ (_this$_decryptor = this._decryptor) === null || _this$_decryptor === void 0 ? void 0 : _this$_decryptor.destroy();
12477
+ _context10.next = 3;
12478
+ return this.detachMedia();
12479
+ case 3:
11797
12480
  this._decryptor = null;
11798
12481
  this._mse = null;
11799
12482
  this._softVideo = null;
11800
- case 7:
12483
+ case 6:
11801
12484
  case "end":
11802
- return _context9.stop();
12485
+ return _context10.stop();
11803
12486
  }
11804
- }, _callee9, this);
12487
+ }, _callee10, this);
11805
12488
  }));
11806
12489
  function destroy() {
11807
12490
  return _destroy.apply(this, arguments);
@@ -11810,7 +12493,7 @@
11810
12493
  }()
11811
12494
  }, {
11812
12495
  key: "_createMseSource",
11813
- value: function _createMseSource(videoCodec, audioCodec) {
12496
+ value: function _createMseSource(videoCodec, audioCodec, container) {
11814
12497
  logger$2.debug("create mse source, videoCodec=".concat(videoCodec, ", audioCodec=").concat(audioCodec));
11815
12498
  var mse = this._mse;
11816
12499
  if (!mse)
@@ -11822,6 +12505,9 @@
11822
12505
  if (audioCodec) {
11823
12506
  mse.createSource(MSE.AUDIO, "audio/mp4;codecs=".concat(audioCodec));
11824
12507
  this._sourceCreated = true;
12508
+ } else if (container) {
12509
+ mse.createSource(MSE.AUDIO, "".concat(container, ';codecs=""'));
12510
+ this._sourceCreated = true;
11825
12511
  }
11826
12512
  this.hls.emit(EVENT.SOURCEBUFFER_CREATED);
11827
12513
  }
@@ -12131,6 +12817,31 @@
12131
12817
  }]);
12132
12818
  return MediaSegmentKey2;
12133
12819
  }();
12820
+ var HlsUrlParameters = /* @__PURE__ */ function() {
12821
+ function HlsUrlParameters2(msn, part, skip) {
12822
+ _classCallCheck$3(this, HlsUrlParameters2);
12823
+ this.msn = msn;
12824
+ this.part = part;
12825
+ this.skip = skip;
12826
+ }
12827
+ _createClass$3(HlsUrlParameters2, [{
12828
+ key: "addDirectives",
12829
+ value: function addDirectives(uri) {
12830
+ var url = new self.URL(uri);
12831
+ if (this.msn !== void 0) {
12832
+ url.searchParams.set("_HLS_msn", this.msn.toString());
12833
+ }
12834
+ if (this.part) {
12835
+ url.searchParams.set("_HLS_part", this.part.toString());
12836
+ }
12837
+ if (this.skip) {
12838
+ url.searchParams.set("_HLS_skip", this.skip);
12839
+ }
12840
+ return url.href;
12841
+ }
12842
+ }]);
12843
+ return HlsUrlParameters2;
12844
+ }();
12134
12845
  var REGEXP_TAG = /^#(EXT[^:]*)(?::(.*))?$/;
12135
12846
  var REGEXP_ATTR = /([^=]+)=(?:"([^"]*)"|([^",]*))(?:,|$)/g;
12136
12847
  var REGEXP_ABSOLUTE_URL = /^(?:[a-zA-Z0-9+\-.]+:)?\/\//;
@@ -12369,7 +13080,7 @@
12369
13080
  media.canBlockReload = _attr["CAN-BLOCK-RELOAD"] === "YES";
12370
13081
  media.partHoldBack = parseFloat(_attr["PART-HOLD-BACK"] || 0);
12371
13082
  media.canSkipUntil = parseFloat(_attr["CAN-SKIP-UNTIL"] || 0);
12372
- media.canSkipDateRanges = _attr["CAN-SKIP-DATERANGES"] === "YES";
13083
+ media.canSkipDateRanges = media.canSkipUntil > 0 && _attr["CAN-SKIP-DATERANGES"] === "YES";
12373
13084
  }
12374
13085
  break;
12375
13086
  case "ENDLIST":
@@ -12413,6 +13124,15 @@
12413
13124
  }
12414
13125
  break;
12415
13126
  case "PRELOAD-HINT":
13127
+ {
13128
+ var _attr3 = parseAttr(data);
13129
+ media.preloadHint = _attr3;
13130
+ if (_attr3["TYPE"] === "PART" && _attr3["URI"]) {
13131
+ var tmp = _attr3["URI"].split(".ts")[0].split("-");
13132
+ media.nextSN = tmp[3];
13133
+ media.nextIndex = tmp[tmp.length - 1];
13134
+ }
13135
+ }
12416
13136
  break;
12417
13137
  case "PROGRAM-DATE-TIME":
12418
13138
  curSegment.dataTime = data;
@@ -12432,21 +13152,21 @@
12432
13152
  break;
12433
13153
  case "KEY":
12434
13154
  {
12435
- var _attr3 = parseAttr(data);
12436
- if (_attr3.METHOD === "NONE") {
13155
+ var _attr4 = parseAttr(data);
13156
+ if (_attr4.METHOD === "NONE") {
12437
13157
  curKey = null;
12438
13158
  break;
12439
13159
  }
12440
13160
  curKey = new MediaSegmentKey();
12441
- curKey.method = _attr3.METHOD;
12442
- curKey.url = /^blob:/.test(_attr3.URI) ? _attr3.URI : getAbsoluteUrl(_attr3.URI, parentUrl);
12443
- curKey.keyFormat = _attr3.KEYFORMAT || "identity";
12444
- curKey.keyFormatVersions = _attr3.KEYFORMATVERSIONS;
13161
+ curKey.method = _attr4.METHOD;
13162
+ curKey.url = /^blob:/.test(_attr4.URI) ? _attr4.URI : getAbsoluteUrl(_attr4.URI, parentUrl);
13163
+ curKey.keyFormat = _attr4.KEYFORMAT || "identity";
13164
+ curKey.keyFormatVersions = _attr4.KEYFORMATVERSIONS;
12445
13165
  if (!curKey.isSupported()) {
12446
- throw new Error("encrypt ".concat(_attr3.METHOD, "/").concat(_attr3.KEYFORMAT, " is not supported"));
13166
+ throw new Error("encrypt ".concat(_attr4.METHOD, "/").concat(_attr4.KEYFORMAT, " is not supported"));
12447
13167
  }
12448
- if (_attr3.IV) {
12449
- var str = _attr3.IV.slice(2);
13168
+ if (_attr4.IV) {
13169
+ var str = _attr4.IV.slice(2);
12450
13170
  str = (str.length & 1 ? "0" : "") + str;
12451
13171
  curKey.iv = new Uint8Array(str.length / 2);
12452
13172
  for (var i = 0, l = str.length / 2; i < l; i++) {
@@ -12457,10 +13177,10 @@
12457
13177
  break;
12458
13178
  case "MAP":
12459
13179
  {
12460
- var _attr4 = parseAttr(data);
12461
- curSegment.url = getAbsoluteUrl(_attr4.URI, parentUrl);
12462
- if (_attr4.BYTERANGE)
12463
- curSegment.setByteRange(_attr4.BYTERANGE);
13180
+ var _attr5 = parseAttr(data);
13181
+ curSegment.url = getAbsoluteUrl(_attr5.URI, parentUrl);
13182
+ if (_attr5.BYTERANGE)
13183
+ curSegment.setByteRange(_attr5.BYTERANGE);
12464
13184
  curSegment.isInitSegment = true;
12465
13185
  curSegment.sn = 0;
12466
13186
  if (curKey) {
@@ -12472,24 +13192,25 @@
12472
13192
  break;
12473
13193
  case "SKIP":
12474
13194
  {
12475
- var _attr5 = parseAttr(data);
12476
- var skippedSegments = parseInt(_attr5["SKIPPED-SEGMENTS"], 10);
13195
+ var _attr6 = parseAttr(data);
13196
+ var skippedSegments = parseInt(_attr6["SKIPPED-SEGMENTS"], 10);
12477
13197
  if (skippedSegments <= Number.MAX_SAFE_INTEGER) {
12478
13198
  media.skippedSegments += skippedSegments;
13199
+ curSN += skippedSegments;
12479
13200
  }
12480
13201
  }
12481
13202
  break;
12482
13203
  case "DATERANGE":
12483
13204
  {
12484
- var _attr6 = parseAttr(data);
12485
- var dateRangeWithSameId = media.dateRanges[_attr6.ID];
12486
- _attr6._startDate = dateRangeWithSameId ? dateRangeWithSameId._startDate : new Date(_attr6["START-DATE"]);
12487
- var endDate = (dateRangeWithSameId === null || dateRangeWithSameId === void 0 ? void 0 : dateRangeWithSameId._endDate) || new Date(_attr6.END_DATE);
13205
+ var _attr7 = parseAttr(data);
13206
+ var dateRangeWithSameId = media.dateRanges[_attr7.ID];
13207
+ _attr7._startDate = dateRangeWithSameId ? dateRangeWithSameId._startDate : new Date(_attr7["START-DATE"]);
13208
+ var endDate = (dateRangeWithSameId === null || dateRangeWithSameId === void 0 ? void 0 : dateRangeWithSameId._endDate) || new Date(_attr7.END_DATE);
12488
13209
  if (Number.isFinite(endDate)) {
12489
- _attr6._endDate = endDate;
13210
+ _attr7._endDate = endDate;
12490
13211
  }
12491
- if (isValidDaterange(_attr6, dateRangeWithSameId) || media.skippedSegments) {
12492
- media.dateRanges[_attr6.ID] = _attr6;
13212
+ if (isValidDaterange(_attr7, dateRangeWithSameId) || media.skippedSegments) {
13213
+ media.dateRanges[_attr7.ID] = _attr7;
12493
13214
  }
12494
13215
  }
12495
13216
  break;
@@ -12686,6 +13407,13 @@
12686
13407
  playlist
12687
13408
  });
12688
13409
  } else {
13410
+ if (this._useLowLatency) {
13411
+ if (playlist.canBlockReload) {
13412
+ this.deliveryDirectives = new HlsUrlParameters(playlist.nextSN, playlist.nextIndex, "");
13413
+ } else {
13414
+ this.deliveryDirectives = null;
13415
+ }
13416
+ }
12689
13417
  this.hls.emit(Event$1.HLS_LEVEL_LOADED, {
12690
13418
  playlist
12691
13419
  });
@@ -12742,41 +13470,45 @@
12742
13470
  var retryCount = this.hls.config.pollRetryCount;
12743
13471
  var fn = /* @__PURE__ */ function() {
12744
13472
  var _ref2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee2() {
12745
- var res;
13473
+ var reqUrl, res;
12746
13474
  return _regeneratorRuntime$1().wrap(function _callee2$(_context2) {
12747
13475
  while (1)
12748
13476
  switch (_context2.prev = _context2.next) {
12749
13477
  case 0:
12750
13478
  clearTimeout(_this2._timer);
12751
- _context2.prev = 1;
12752
- _context2.next = 4;
12753
- return _this2.load(url, audioUrl, subtitleUrl);
12754
- case 4:
13479
+ reqUrl = url;
13480
+ _context2.prev = 2;
13481
+ if (_this2.deliveryDirectives) {
13482
+ reqUrl = _this2.deliveryDirectives.addDirectives(url);
13483
+ }
13484
+ _context2.next = 6;
13485
+ return _this2.load(reqUrl, audioUrl, subtitleUrl);
13486
+ case 6:
12755
13487
  res = _context2.sent;
12756
13488
  if (res[0]) {
12757
- _context2.next = 7;
13489
+ _context2.next = 9;
12758
13490
  break;
12759
13491
  }
12760
13492
  return _context2.abrupt("return");
12761
- case 7:
13493
+ case 9:
12762
13494
  retryCount = _this2.hls.config.pollRetryCount;
12763
13495
  cb(res[0], res[1], res[2]);
12764
- _context2.next = 15;
13496
+ _context2.next = 17;
12765
13497
  break;
12766
- case 11:
12767
- _context2.prev = 11;
12768
- _context2.t0 = _context2["catch"](1);
13498
+ case 13:
13499
+ _context2.prev = 13;
13500
+ _context2.t0 = _context2["catch"](2);
12769
13501
  retryCount--;
12770
13502
  if (retryCount <= 0) {
12771
13503
  errorCb(_context2.t0);
12772
13504
  }
12773
- case 15:
13505
+ case 17:
12774
13506
  _this2._timer = setTimeout(fn, time);
12775
- case 16:
13507
+ case 18:
12776
13508
  case "end":
12777
13509
  return _context2.stop();
12778
13510
  }
12779
- }, _callee2, null, [[1, 11]]);
13511
+ }, _callee2, null, [[2, 13]]);
12780
13512
  }));
12781
13513
  return function fn2() {
12782
13514
  return _ref2.apply(this, arguments);
@@ -13306,7 +14038,7 @@
13306
14038
  }, {
13307
14039
  key: "clearOldSegment",
13308
14040
  value: function clearOldSegment() {
13309
- var maxPlaylistSize = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 50;
14041
+ var maxPlaylistSize = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : this.hls.config.maxPlaylistSize || 50;
13310
14042
  var stream = this.currentStream;
13311
14043
  if (!this.dvrWindow || !stream)
13312
14044
  return;
@@ -13817,7 +14549,6 @@
13817
14549
  return;
13818
14550
  _this._startTick();
13819
14551
  var media = _this.media;
13820
- var buffered = Buffer$1.get(media);
13821
14552
  var segLoaderError = _this._segmentLoader.error;
13822
14553
  _this._onCheckQuotaExceeded();
13823
14554
  if (_this._isProcessQuotaExceeded) {
@@ -13834,7 +14565,7 @@
13834
14565
  }
13835
14566
  return;
13836
14567
  }
13837
- if (Buffer$1.end(buffered) >= 0.1 && media.readyState) {
14568
+ if (media.readyState) {
13838
14569
  if (isMediaPlaying(media)) {
13839
14570
  _this._loadSegment();
13840
14571
  if (_this._gapService) {
@@ -13900,6 +14631,12 @@
13900
14631
  var _this$_bufferService;
13901
14632
  return (_this$_bufferService = this._bufferService) === null || _this$_bufferService === void 0 ? void 0 : _this$_bufferService.baseDts;
13902
14633
  }
14634
+ }, {
14635
+ key: "abrSwitchPoint",
14636
+ get: function get() {
14637
+ var targetSeg = this._urlSwitching ? this._playlist.currentSegment : this._playlist.nextSegment;
14638
+ return targetSeg ? targetSeg.start + targetSeg.duration / 2 : null;
14639
+ }
13903
14640
  }, {
13904
14641
  key: "speedInfo",
13905
14642
  value: function speedInfo() {
@@ -13925,30 +14662,37 @@
13925
14662
  }, {
13926
14663
  key: "load",
13927
14664
  value: function() {
13928
- var _load = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee4(url) {
13929
- var reuseMse, _args4 = arguments;
14665
+ var _load = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee4() {
14666
+ var url, options, reuseMse, _args4 = arguments;
13930
14667
  return _regeneratorRuntime$1().wrap(function _callee4$(_context4) {
13931
14668
  while (1)
13932
14669
  switch (_context4.prev = _context4.next) {
13933
14670
  case 0:
13934
- reuseMse = _args4.length > 1 && _args4[1] !== void 0 ? _args4[1] : false;
14671
+ url = _args4.length > 0 && _args4[0] !== void 0 ? _args4[0] : "";
14672
+ options = _args4.length > 1 && _args4[1] !== void 0 ? _args4[1] : {};
14673
+ reuseMse = typeof options === "boolean" ? options : !!(options !== null && options !== void 0 && options.reuseMse);
14674
+ if (_typeof$2(options) === "object" && options !== null && options !== void 0 && options.clearSwitchStatus) {
14675
+ this._urlSwitching = false;
14676
+ this._switchUrlOpts = null;
14677
+ this.config.startTime = void 0;
14678
+ }
13935
14679
  if (url)
13936
14680
  this.config.url = url;
13937
14681
  url = this.config.url;
13938
- _context4.next = 5;
14682
+ _context4.next = 8;
13939
14683
  return this._reset(reuseMse);
13940
- case 5:
13941
- _context4.next = 7;
14684
+ case 8:
14685
+ _context4.next = 10;
13942
14686
  return this._loadData(url);
13943
- case 7:
14687
+ case 10:
13944
14688
  this._startTick();
13945
- case 8:
14689
+ case 11:
13946
14690
  case "end":
13947
14691
  return _context4.stop();
13948
14692
  }
13949
14693
  }, _callee4, this);
13950
14694
  }));
13951
- function load(_x) {
14695
+ function load() {
13952
14696
  return _load.apply(this, arguments);
13953
14697
  }
13954
14698
  return load;
@@ -13957,7 +14701,7 @@
13957
14701
  key: "_loadData",
13958
14702
  value: function() {
13959
14703
  var _loadData2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee5(url) {
13960
- var manifest, currentStream, _this$_switchUrlOpts, _this$_switchUrlOpts2, switchTimePoint, segIdx, nextSeg, bufferClearStartPoint, preIndex, startTime, _this$_switchUrlOpts3;
14704
+ var manifest, currentStream, preIndex, _this$_switchUrlOpts, _this$_switchUrlOpts3, _this$_switchUrlOpts4, _this$_switchUrlOpts2, switchTimePoint, segIdx, nextSeg, bufferClearStartPoint, startTime, _this$_switchUrlOpts5;
13961
14705
  return _regeneratorRuntime$1().wrap(function _callee5$(_context5) {
13962
14706
  while (1)
13963
14707
  switch (_context5.prev = _context5.next) {
@@ -13978,41 +14722,46 @@
13978
14722
  case 5:
13979
14723
  manifest = _context5.sent;
13980
14724
  currentStream = this._playlist.currentStream;
13981
- if (!(this._urlSwitching && !this.isLive)) {
13982
- _context5.next = 17;
14725
+ if (!this._urlSwitching) {
14726
+ _context5.next = 23;
13983
14727
  break;
13984
14728
  }
14729
+ if (!this.isLive) {
14730
+ _context5.next = 14;
14731
+ break;
14732
+ }
14733
+ preIndex = this._playlist.setNextSegmentBySN(this._prevSegSn);
14734
+ logger.log("segment nb=".concat(this._prevSegSn, " index of ").concat(preIndex, " in the new playlist"));
14735
+ if (preIndex === -1) {
14736
+ this._prevSegCc = null;
14737
+ this._prevSegSn = null;
14738
+ }
14739
+ _context5.next = 23;
14740
+ break;
14741
+ case 14:
13985
14742
  if (currentStream.bitrate === 0 && (_this$_switchUrlOpts = this._switchUrlOpts) !== null && _this$_switchUrlOpts !== void 0 && _this$_switchUrlOpts.bitrate) {
13986
14743
  currentStream.bitrate = (_this$_switchUrlOpts2 = this._switchUrlOpts) === null || _this$_switchUrlOpts2 === void 0 ? void 0 : _this$_switchUrlOpts2.bitrate;
13987
14744
  }
13988
- switchTimePoint = this._getSeamlessSwitchPoint();
14745
+ 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();
13989
14746
  this.config.startTime = switchTimePoint;
13990
14747
  segIdx = this._playlist.findSegmentIndexByTime(switchTimePoint);
13991
14748
  nextSeg = this._playlist.getSegmentByIndex(segIdx + 1);
13992
14749
  if (!nextSeg) {
13993
- _context5.next = 17;
14750
+ _context5.next = 23;
13994
14751
  break;
13995
14752
  }
13996
14753
  bufferClearStartPoint = nextSeg.start;
13997
- _context5.next = 17;
14754
+ _context5.next = 23;
13998
14755
  return this._bufferService.removeBuffer(bufferClearStartPoint);
13999
- case 17:
14000
- if (this._urlSwitching && this.isLive) {
14001
- preIndex = this._playlist.setNextSegmentBySN(this._prevSegSn);
14002
- logger.log("segment nb=".concat(this._prevSegSn, " index of ").concat(preIndex, " in the new playlist"));
14003
- if (preIndex === -1) {
14004
- this._prevSegCc = null;
14005
- this._prevSegSn = null;
14006
- }
14007
- }
14756
+ case 23:
14008
14757
  if (manifest) {
14009
- _context5.next = 20;
14758
+ _context5.next = 25;
14010
14759
  break;
14011
14760
  }
14012
14761
  return _context5.abrupt("return");
14013
- case 20:
14762
+ case 25:
14014
14763
  if (!this.isLive) {
14015
- _context5.next = 31;
14764
+ _context5.next = 36;
14016
14765
  break;
14017
14766
  }
14018
14767
  this._bufferService.setLiveSeekableRange(0, 4294967295);
@@ -14025,35 +14774,35 @@
14025
14774
  if (!manifest.isMaster)
14026
14775
  this._pollM3U8(url);
14027
14776
  if (!(this._playlist.nbSegments < this.config.minSegmentsStartPlay)) {
14028
- _context5.next = 28;
14777
+ _context5.next = 33;
14029
14778
  break;
14030
14779
  }
14031
14780
  return _context5.abrupt("return");
14032
- case 28:
14033
- _context5.next = 30;
14781
+ case 33:
14782
+ _context5.next = 35;
14034
14783
  return this._loadSegment();
14035
- case 30:
14784
+ case 35:
14036
14785
  return _context5.abrupt("return");
14037
- case 31:
14038
- _context5.next = 33;
14786
+ case 36:
14787
+ _context5.next = 38;
14039
14788
  return this._bufferService.updateDuration(currentStream.totalDuration);
14040
- case 33:
14789
+ case 38:
14041
14790
  startTime = this.config.startTime;
14042
14791
  if (startTime) {
14043
- if (!((_this$_switchUrlOpts3 = this._switchUrlOpts) !== null && _this$_switchUrlOpts3 !== void 0 && _this$_switchUrlOpts3.seamless)) {
14792
+ if (!((_this$_switchUrlOpts5 = this._switchUrlOpts) !== null && _this$_switchUrlOpts5 !== void 0 && _this$_switchUrlOpts5.seamless)) {
14044
14793
  this.media.currentTime = startTime;
14045
14794
  }
14046
14795
  this._playlist.setNextSegmentByIndex(this._playlist.findSegmentIndexByTime(startTime) || 0);
14047
14796
  }
14048
- _context5.next = 37;
14797
+ _context5.next = 42;
14049
14798
  return this._loadSegment();
14050
- case 37:
14799
+ case 42:
14051
14800
  case "end":
14052
14801
  return _context5.stop();
14053
14802
  }
14054
14803
  }, _callee5, this);
14055
14804
  }));
14056
- function _loadData(_x2) {
14805
+ function _loadData(_x) {
14057
14806
  return _loadData2.apply(this, arguments);
14058
14807
  }
14059
14808
  return _loadData;
@@ -14067,18 +14816,20 @@
14067
14816
  switch (_context6.prev = _context6.next) {
14068
14817
  case 0:
14069
14818
  this.config.startTime = 0;
14070
- _context6.next = 3;
14819
+ this._urlSwitching = false;
14820
+ this._switchUrlOpts = null;
14821
+ _context6.next = 5;
14071
14822
  return this.load();
14072
- case 3:
14823
+ case 5:
14073
14824
  this._reloadOnPlay = false;
14074
14825
  return _context6.abrupt("return", this.media.play(!isPlayEmit));
14075
- case 5:
14826
+ case 7:
14076
14827
  case "end":
14077
14828
  return _context6.stop();
14078
14829
  }
14079
14830
  }, _callee6, this);
14080
14831
  }));
14081
- function replay(_x3) {
14832
+ function replay(_x2) {
14082
14833
  return _replay.apply(this, arguments);
14083
14834
  }
14084
14835
  return replay;
@@ -14183,7 +14934,7 @@
14183
14934
  }
14184
14935
  }, _callee7, this, [[18, 29]]);
14185
14936
  }));
14186
- function switchURL(_x4) {
14937
+ function switchURL(_x3) {
14187
14938
  return _switchURL.apply(this, arguments);
14188
14939
  }
14189
14940
  return switchURL;
@@ -14269,7 +15020,7 @@
14269
15020
  }
14270
15021
  }, _callee8, this, [[8, 16], [21, 31]]);
14271
15022
  }));
14272
- function switchStream(_x5) {
15023
+ function switchStream(_x4) {
14273
15024
  return _switchStream.apply(this, arguments);
14274
15025
  }
14275
15026
  return switchStream;
@@ -14355,7 +15106,7 @@
14355
15106
  }
14356
15107
  }, _callee9, this, [[10, 18], [22, 32]]);
14357
15108
  }));
14358
- function switchAudioStream(_x6) {
15109
+ function switchAudioStream(_x5) {
14359
15110
  return _switchAudioStream.apply(this, arguments);
14360
15111
  }
14361
15112
  return switchAudioStream;
@@ -14380,25 +15131,50 @@
14380
15131
  }
14381
15132
  }, _callee10, this);
14382
15133
  }));
14383
- function switchSubtitleStream(_x7) {
15134
+ function switchSubtitleStream(_x6) {
14384
15135
  return _switchSubtitleStream.apply(this, arguments);
14385
15136
  }
14386
15137
  return switchSubtitleStream;
14387
15138
  }()
14388
15139
  }, {
14389
- key: "destroy",
15140
+ key: "detachMedia",
14390
15141
  value: function() {
14391
- var _destroy = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee11() {
14392
- var _this$_seiService2;
15142
+ var _detachMedia = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee11() {
14393
15143
  return _regeneratorRuntime$1().wrap(function _callee11$(_context11) {
14394
15144
  while (1)
14395
15145
  switch (_context11.prev = _context11.next) {
15146
+ case 0:
15147
+ if (!this._bufferService) {
15148
+ _context11.next = 3;
15149
+ break;
15150
+ }
15151
+ _context11.next = 3;
15152
+ return this._bufferService.detachMedia();
15153
+ case 3:
15154
+ case "end":
15155
+ return _context11.stop();
15156
+ }
15157
+ }, _callee11, this);
15158
+ }));
15159
+ function detachMedia() {
15160
+ return _detachMedia.apply(this, arguments);
15161
+ }
15162
+ return detachMedia;
15163
+ }()
15164
+ }, {
15165
+ key: "destroy",
15166
+ value: function() {
15167
+ var _destroy = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee12() {
15168
+ var _this$_seiService2;
15169
+ return _regeneratorRuntime$1().wrap(function _callee12$(_context12) {
15170
+ while (1)
15171
+ switch (_context12.prev = _context12.next) {
14396
15172
  case 0:
14397
15173
  if (this.media) {
14398
- _context11.next = 2;
15174
+ _context12.next = 2;
14399
15175
  break;
14400
15176
  }
14401
- return _context11.abrupt("return");
15177
+ return _context12.abrupt("return");
14402
15178
  case 2:
14403
15179
  this.removeAllListeners();
14404
15180
  this._playlist.reset();
@@ -14409,15 +15185,15 @@
14409
15185
  this.media.removeEventListener("pause", this._onPause);
14410
15186
  this.media.removeEventListener("seeking", this._onSeeking);
14411
15187
  this.media.removeEventListener("timeupdate", this._onTimeupdate);
14412
- _context11.next = 13;
15188
+ _context12.next = 13;
14413
15189
  return Promise.all([this._clear(), this._bufferService.destroy()]);
14414
15190
  case 13:
14415
15191
  this.media = null;
14416
15192
  case 14:
14417
15193
  case "end":
14418
- return _context11.stop();
15194
+ return _context12.stop();
14419
15195
  }
14420
- }, _callee11, this);
15196
+ }, _callee12, this);
14421
15197
  }));
14422
15198
  function destroy() {
14423
15199
  return _destroy.apply(this, arguments);
@@ -14427,48 +15203,48 @@
14427
15203
  }, {
14428
15204
  key: "_loadM3U8",
14429
15205
  value: function() {
14430
- var _loadM3U = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee12(url) {
15206
+ var _loadM3U = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee13(url) {
14431
15207
  var playlist, _this$config$manifest, _this$config$manifest2, manifest, _ref4, _ref5, _this$_playlist$curre;
14432
- return _regeneratorRuntime$1().wrap(function _callee12$(_context12) {
15208
+ return _regeneratorRuntime$1().wrap(function _callee13$(_context13) {
14433
15209
  while (1)
14434
- switch (_context12.prev = _context12.next) {
15210
+ switch (_context13.prev = _context13.next) {
14435
15211
  case 0:
14436
- _context12.prev = 0;
15212
+ _context13.prev = 0;
14437
15213
  manifest = (_this$config$manifest = this.config.manifestList) === null || _this$config$manifest === void 0 ? void 0 : (_this$config$manifest2 = _this$config$manifest.filter(function(x) {
14438
15214
  return x.url === url;
14439
15215
  })[0]) === null || _this$config$manifest2 === void 0 ? void 0 : _this$config$manifest2.manifest;
14440
15216
  if (!manifest) {
14441
- _context12.next = 6;
15217
+ _context13.next = 6;
14442
15218
  break;
14443
15219
  }
14444
- _context12.t0 = this._manifestLoader.parseText(manifest, url);
14445
- _context12.next = 9;
15220
+ _context13.t0 = this._manifestLoader.parseText(manifest, url);
15221
+ _context13.next = 9;
14446
15222
  break;
14447
15223
  case 6:
14448
- _context12.next = 8;
15224
+ _context13.next = 8;
14449
15225
  return this._manifestLoader.load(url);
14450
15226
  case 8:
14451
- _context12.t0 = _context12.sent;
15227
+ _context13.t0 = _context13.sent;
14452
15228
  case 9:
14453
- _ref4 = _context12.t0;
15229
+ _ref4 = _context13.t0;
14454
15230
  _ref5 = _slicedToArray$1(_ref4, 1);
14455
15231
  playlist = _ref5[0];
14456
- _context12.next = 17;
15232
+ _context13.next = 17;
14457
15233
  break;
14458
15234
  case 14:
14459
- _context12.prev = 14;
14460
- _context12.t1 = _context12["catch"](0);
14461
- throw this._emitError(StreamingError.create(_context12.t1));
15235
+ _context13.prev = 14;
15236
+ _context13.t1 = _context13["catch"](0);
15237
+ throw this._emitError(StreamingError.create(_context13.t1));
14462
15238
  case 17:
14463
15239
  if (playlist) {
14464
- _context12.next = 19;
15240
+ _context13.next = 19;
14465
15241
  break;
14466
15242
  }
14467
- return _context12.abrupt("return");
15243
+ return _context13.abrupt("return");
14468
15244
  case 19:
14469
15245
  this._playlist.upsertPlaylist(playlist);
14470
15246
  if (!playlist.isMaster) {
14471
- _context12.next = 24;
15247
+ _context13.next = 24;
14472
15248
  break;
14473
15249
  }
14474
15250
  if ((_this$_playlist$curre = this._playlist.currentStream.subtitleStreams) !== null && _this$_playlist$curre !== void 0 && _this$_playlist$curre.length) {
@@ -14476,18 +15252,18 @@
14476
15252
  list: this._playlist.currentStream.subtitleStreams
14477
15253
  });
14478
15254
  }
14479
- _context12.next = 24;
15255
+ _context13.next = 24;
14480
15256
  return this._refreshM3U8();
14481
15257
  case 24:
14482
15258
  this.emit(Event$1.STREAM_PARSED);
14483
- return _context12.abrupt("return", playlist);
15259
+ return _context13.abrupt("return", playlist);
14484
15260
  case 26:
14485
15261
  case "end":
14486
- return _context12.stop();
15262
+ return _context13.stop();
14487
15263
  }
14488
- }, _callee12, this, [[0, 14]]);
15264
+ }, _callee13, this, [[0, 14]]);
14489
15265
  }));
14490
- function _loadM3U8(_x8) {
15266
+ function _loadM3U8(_x7) {
14491
15267
  return _loadM3U.apply(this, arguments);
14492
15268
  }
14493
15269
  return _loadM3U8;
@@ -14521,7 +15297,7 @@
14521
15297
  var isEmpty = this._playlist.isEmpty;
14522
15298
  var pollInterval;
14523
15299
  if (this._playlist.lowLatency) {
14524
- pollInterval = (this._playlist.currentStream.partTargetDuration * 2 || 0) * 1e3;
15300
+ pollInterval = (this._playlist.currentStream.partTargetDuration || 0) * 1e3;
14525
15301
  } else {
14526
15302
  var _this$_playlist$lastS;
14527
15303
  pollInterval = (((_this$_playlist$lastS = this._playlist.lastSegment) === null || _this$_playlist$lastS === void 0 ? void 0 : _this$_playlist$lastS.duration) || 0) * 1e3;
@@ -14549,53 +15325,53 @@
14549
15325
  }, {
14550
15326
  key: "_loadSegmentDirect",
14551
15327
  value: function() {
14552
- var _loadSegmentDirect2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee13(loadOnce) {
15328
+ var _loadSegmentDirect2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee14(loadOnce) {
14553
15329
  var seg, appended, cachedError, _this$_playlist$curre2, bufferEnd, sameStream;
14554
- return _regeneratorRuntime$1().wrap(function _callee13$(_context13) {
15330
+ return _regeneratorRuntime$1().wrap(function _callee14$(_context14) {
14555
15331
  while (1)
14556
- switch (_context13.prev = _context13.next) {
15332
+ switch (_context14.prev = _context14.next) {
14557
15333
  case 0:
14558
15334
  seg = this._playlist.nextSegment;
14559
15335
  if (seg) {
14560
- _context13.next = 3;
15336
+ _context14.next = 3;
14561
15337
  break;
14562
15338
  }
14563
- return _context13.abrupt("return");
15339
+ return _context14.abrupt("return");
14564
15340
  case 3:
14565
15341
  appended = false;
14566
15342
  cachedError = null;
14567
- _context13.prev = 5;
15343
+ _context14.prev = 5;
14568
15344
  this._segmentProcessing = true;
14569
15345
  logger.log("load segment, sn:".concat(seg.sn, ", [").concat(seg.start, ", ").concat(seg.end, "], partIndex:").concat(seg.partIndex));
14570
- _context13.next = 10;
15346
+ _context14.next = 10;
14571
15347
  return this._reqAndBufferSegment(seg, this._playlist.getAudioSegment(seg));
14572
15348
  case 10:
14573
- appended = _context13.sent;
14574
- _context13.next = 16;
15349
+ appended = _context14.sent;
15350
+ _context14.next = 16;
14575
15351
  break;
14576
15352
  case 13:
14577
- _context13.prev = 13;
14578
- _context13.t0 = _context13["catch"](5);
14579
- cachedError = _context13.t0;
15353
+ _context14.prev = 13;
15354
+ _context14.t0 = _context14["catch"](5);
15355
+ cachedError = _context14.t0;
14580
15356
  case 16:
14581
- _context13.prev = 16;
15357
+ _context14.prev = 16;
14582
15358
  this._segmentProcessing = false;
14583
- return _context13.finish(16);
15359
+ return _context14.finish(16);
14584
15360
  case 19:
14585
15361
  if (!cachedError) {
14586
- _context13.next = 26;
15362
+ _context14.next = 26;
14587
15363
  break;
14588
15364
  }
14589
15365
  if (!this._bufferService.isFull()) {
14590
- _context13.next = 25;
15366
+ _context14.next = 25;
14591
15367
  break;
14592
15368
  }
14593
15369
  logger.log("load segment, sn:".concat(seg.sn, ", partIndex:").concat(seg.partIndex));
14594
15370
  this._segmentProcessing = true;
14595
15371
  this._isProcessQuotaExceeded = true;
14596
- return _context13.abrupt("return", false);
15372
+ return _context14.abrupt("return", false);
14597
15373
  case 25:
14598
- return _context13.abrupt("return", this._emitError(StreamingError.create(cachedError)));
15374
+ return _context14.abrupt("return", this._emitError(StreamingError.create(cachedError)));
14599
15375
  case 26:
14600
15376
  if (appended) {
14601
15377
  bufferEnd = this.bufferInfo().end;
@@ -14621,14 +15397,14 @@
14621
15397
  this._loadSegment();
14622
15398
  }
14623
15399
  }
14624
- return _context13.abrupt("return", appended);
15400
+ return _context14.abrupt("return", appended);
14625
15401
  case 28:
14626
15402
  case "end":
14627
- return _context13.stop();
15403
+ return _context14.stop();
14628
15404
  }
14629
- }, _callee13, this, [[5, 13, 16, 19]]);
15405
+ }, _callee14, this, [[5, 13, 16, 19]]);
14630
15406
  }));
14631
- function _loadSegmentDirect(_x9) {
15407
+ function _loadSegmentDirect(_x8) {
14632
15408
  return _loadSegmentDirect2.apply(this, arguments);
14633
15409
  }
14634
15410
  return _loadSegmentDirect;
@@ -14636,45 +15412,45 @@
14636
15412
  }, {
14637
15413
  key: "_reqAndBufferSegment",
14638
15414
  value: function() {
14639
- var _reqAndBufferSegment2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee14(seg, audioSeg) {
15415
+ var _reqAndBufferSegment2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee15(seg, audioSeg) {
14640
15416
  var _this$_bufferService2;
14641
15417
  var cc, discontinuity, responses, data, sn, start, stream, before, contiguous, segStart;
14642
- return _regeneratorRuntime$1().wrap(function _callee14$(_context14) {
15418
+ return _regeneratorRuntime$1().wrap(function _callee15$(_context15) {
14643
15419
  while (1)
14644
- switch (_context14.prev = _context14.next) {
15420
+ switch (_context15.prev = _context15.next) {
14645
15421
  case 0:
14646
15422
  cc = seg ? seg.cc : audioSeg.cc;
14647
15423
  discontinuity = this._prevSegCc !== cc;
14648
15424
  responses = [];
14649
- _context14.prev = 3;
14650
- _context14.next = 6;
15425
+ _context15.prev = 3;
15426
+ _context15.next = 6;
14651
15427
  return this._segmentLoader.load(seg, audioSeg, discontinuity);
14652
15428
  case 6:
14653
- responses = _context14.sent;
14654
- _context14.next = 14;
15429
+ responses = _context15.sent;
15430
+ _context15.next = 14;
14655
15431
  break;
14656
15432
  case 9:
14657
- _context14.prev = 9;
14658
- _context14.t0 = _context14["catch"](3);
14659
- _context14.t0.fatal = false;
14660
- this._segmentLoader.error = _context14.t0;
14661
- throw _context14.t0;
15433
+ _context15.prev = 9;
15434
+ _context15.t0 = _context15["catch"](3);
15435
+ _context15.t0.fatal = false;
15436
+ this._segmentLoader.error = _context15.t0;
15437
+ throw _context15.t0;
14662
15438
  case 14:
14663
15439
  if (responses[0]) {
14664
- _context14.next = 16;
15440
+ _context15.next = 16;
14665
15441
  break;
14666
15442
  }
14667
- return _context14.abrupt("return");
15443
+ return _context15.abrupt("return");
14668
15444
  case 16:
14669
- _context14.next = 18;
15445
+ _context15.next = 18;
14670
15446
  return (_this$_bufferService2 = this._bufferService).decryptBuffer.apply(_this$_bufferService2, _toConsumableArray$2(responses));
14671
15447
  case 18:
14672
- data = _context14.sent;
15448
+ data = _context15.sent;
14673
15449
  if (data) {
14674
- _context14.next = 21;
15450
+ _context15.next = 21;
14675
15451
  break;
14676
15452
  }
14677
- return _context14.abrupt("return");
15453
+ return _context15.abrupt("return");
14678
15454
  case 21:
14679
15455
  sn = seg ? seg.sn : audioSeg.sn;
14680
15456
  start = seg ? seg.start : audioSeg.start;
@@ -14688,26 +15464,26 @@
14688
15464
  logger.warn("update the new playlist liveEdge, segment id=".concat(sn, ", buffer start=").concat(segStart, ", liveEdge=").concat(this._playlist.liveEdge));
14689
15465
  start = segStart;
14690
15466
  }
14691
- _context14.next = 30;
15467
+ _context15.next = 30;
14692
15468
  return this._bufferService.appendBuffer(seg, audioSeg, data[0], data[1], discontinuity, contiguous, start);
14693
15469
  case 30:
14694
15470
  this.emit(Event$1.APPEND_COST, {
14695
15471
  elapsed: Date.now() - before,
14696
15472
  url: seg.url
14697
15473
  });
14698
- _context14.next = 33;
15474
+ _context15.next = 33;
14699
15475
  return this._bufferService.evictBuffer(this.config.bufferBehind);
14700
15476
  case 33:
14701
15477
  this._prevSegCc = cc;
14702
15478
  this._prevSegSn = sn;
14703
- return _context14.abrupt("return", true);
15479
+ return _context15.abrupt("return", true);
14704
15480
  case 36:
14705
15481
  case "end":
14706
- return _context14.stop();
15482
+ return _context15.stop();
14707
15483
  }
14708
- }, _callee14, this, [[3, 9]]);
15484
+ }, _callee15, this, [[3, 9]]);
14709
15485
  }));
14710
- function _reqAndBufferSegment(_x10, _x11) {
15486
+ function _reqAndBufferSegment(_x9, _x10) {
14711
15487
  return _reqAndBufferSegment2.apply(this, arguments);
14712
15488
  }
14713
15489
  return _reqAndBufferSegment;
@@ -14715,11 +15491,11 @@
14715
15491
  }, {
14716
15492
  key: "_onCheckQuotaExceeded",
14717
15493
  value: function() {
14718
- var _onCheckQuotaExceeded2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee15() {
15494
+ var _onCheckQuotaExceeded2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee16() {
14719
15495
  var seekTime, buffered, inBuffered, i, bufferBehind, mediaTime;
14720
- return _regeneratorRuntime$1().wrap(function _callee15$(_context15) {
15496
+ return _regeneratorRuntime$1().wrap(function _callee16$(_context16) {
14721
15497
  while (1)
14722
- switch (_context15.prev = _context15.next) {
15498
+ switch (_context16.prev = _context16.next) {
14723
15499
  case 0:
14724
15500
  seekTime = this.media.currentTime;
14725
15501
  buffered = this.media.buffered;
@@ -14727,37 +15503,37 @@
14727
15503
  i = 0;
14728
15504
  case 4:
14729
15505
  if (!(i < buffered.length)) {
14730
- _context15.next = 11;
15506
+ _context16.next = 11;
14731
15507
  break;
14732
15508
  }
14733
15509
  if (!(buffered.start(0) >= seekTime && seekTime < buffered.end(i))) {
14734
- _context15.next = 8;
15510
+ _context16.next = 8;
14735
15511
  break;
14736
15512
  }
14737
15513
  inBuffered = true;
14738
- return _context15.abrupt("break", 11);
15514
+ return _context16.abrupt("break", 11);
14739
15515
  case 8:
14740
15516
  i++;
14741
- _context15.next = 4;
15517
+ _context16.next = 4;
14742
15518
  break;
14743
15519
  case 11:
14744
15520
  if (!this._bufferService.isFull()) {
14745
- _context15.next = 17;
15521
+ _context16.next = 17;
14746
15522
  break;
14747
15523
  }
14748
15524
  bufferBehind = inBuffered ? this.config.bufferBehind : 5;
14749
15525
  mediaTime = this.media.currentTime;
14750
15526
  if (!(mediaTime - bufferBehind > 0)) {
14751
- _context15.next = 17;
15527
+ _context16.next = 17;
14752
15528
  break;
14753
15529
  }
14754
- _context15.next = 17;
15530
+ _context16.next = 17;
14755
15531
  return this._bufferService.removeBuffer(0, mediaTime - bufferBehind);
14756
15532
  case 17:
14757
15533
  case "end":
14758
- return _context15.stop();
15534
+ return _context16.stop();
14759
15535
  }
14760
- }, _callee15, this);
15536
+ }, _callee16, this);
14761
15537
  }));
14762
15538
  function _onCheckQuotaExceeded() {
14763
15539
  return _onCheckQuotaExceeded2.apply(this, arguments);
@@ -14775,22 +15551,22 @@
14775
15551
  }, {
14776
15552
  key: "_clear",
14777
15553
  value: function() {
14778
- var _clear2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee16() {
14779
- return _regeneratorRuntime$1().wrap(function _callee16$(_context16) {
15554
+ var _clear2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee17() {
15555
+ return _regeneratorRuntime$1().wrap(function _callee17$(_context17) {
14780
15556
  while (1)
14781
- switch (_context16.prev = _context16.next) {
15557
+ switch (_context17.prev = _context17.next) {
14782
15558
  case 0:
14783
15559
  clearTimeout(this._disconnectTimer);
14784
15560
  this._stopTick();
14785
- _context16.next = 4;
15561
+ _context17.next = 4;
14786
15562
  return Promise.all([this._segmentLoader.cancel(), this._manifestLoader.stopPoll()]);
14787
15563
  case 4:
14788
15564
  this._segmentProcessing = false;
14789
15565
  case 5:
14790
15566
  case "end":
14791
- return _context16.stop();
15567
+ return _context17.stop();
14792
15568
  }
14793
- }, _callee16, this);
15569
+ }, _callee17, this);
14794
15570
  }));
14795
15571
  function _clear() {
14796
15572
  return _clear2.apply(this, arguments);
@@ -14800,14 +15576,14 @@
14800
15576
  }, {
14801
15577
  key: "_reset",
14802
15578
  value: function() {
14803
- var _reset2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee17() {
15579
+ var _reset2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee18() {
14804
15580
  var _this$_seiService3;
14805
- var reuseMse, _args17 = arguments;
14806
- return _regeneratorRuntime$1().wrap(function _callee17$(_context17) {
15581
+ var reuseMse, _args18 = arguments;
15582
+ return _regeneratorRuntime$1().wrap(function _callee18$(_context18) {
14807
15583
  while (1)
14808
- switch (_context17.prev = _context17.next) {
15584
+ switch (_context18.prev = _context18.next) {
14809
15585
  case 0:
14810
- reuseMse = _args17.length > 0 && _args17[0] !== void 0 ? _args17[0] : false;
15586
+ reuseMse = _args18.length > 0 && _args18[0] !== void 0 ? _args18[0] : false;
14811
15587
  this._reloadOnPlay = false;
14812
15588
  this._prevSegSn = null;
14813
15589
  this._prevSegCc = null;
@@ -14816,15 +15592,15 @@
14816
15592
  this._segmentLoader.reset();
14817
15593
  (_this$_seiService3 = this._seiService) === null || _this$_seiService3 === void 0 ? void 0 : _this$_seiService3.reset();
14818
15594
  this._stats.reset();
14819
- _context17.next = 11;
15595
+ _context18.next = 11;
14820
15596
  return this._clear();
14821
15597
  case 11:
14822
- return _context17.abrupt("return", this._bufferService.reset(reuseMse));
15598
+ return _context18.abrupt("return", this._bufferService.reset(reuseMse));
14823
15599
  case 12:
14824
15600
  case "end":
14825
- return _context17.stop();
15601
+ return _context18.stop();
14826
15602
  }
14827
- }, _callee17, this);
15603
+ }, _callee18, this);
14828
15604
  }));
14829
15605
  function _reset() {
14830
15606
  return _reset2.apply(this, arguments);
@@ -14942,7 +15718,7 @@
14942
15718
  }]);
14943
15719
  return Hls2;
14944
15720
  }(EventEmitter);
14945
- _defineProperty$3(Hls, "version", "3.0.20-alpha.2");
15721
+ _defineProperty$3(Hls, "version", "3.0.21-rc.5");
14946
15722
  try {
14947
15723
  if (localStorage.getItem("xgd")) {
14948
15724
  Hls.enableLogger();
@@ -15033,6 +15809,7 @@
15033
15809
  }]);
15034
15810
  return PluginExtension2;
15035
15811
  }();
15812
+ var _excluded = ["currentTime"];
15036
15813
  function parseSwitchUrlArgs(args, plugin) {
15037
15814
  var player = plugin.player;
15038
15815
  var curTime = player.currentTime;
@@ -15043,9 +15820,14 @@
15043
15820
  case "boolean":
15044
15821
  options.seamless = args;
15045
15822
  break;
15046
- case "object":
15047
- Object.assign(options, args);
15823
+ case "object": {
15824
+ var currentTime = args.currentTime, rest = _objectWithoutProperties$1(args, _excluded);
15825
+ Object.assign(options, rest);
15826
+ if (typeof currentTime === "number") {
15827
+ options.startTime = currentTime;
15828
+ }
15048
15829
  break;
15830
+ }
15049
15831
  }
15050
15832
  return options;
15051
15833
  }
@@ -15055,10 +15837,11 @@
15055
15837
  function HlsPlugin2() {
15056
15838
  var _this;
15057
15839
  _classCallCheck$3(this, HlsPlugin2);
15058
- for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {
15059
- _args[_key] = arguments[_key];
15840
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
15841
+ args[_key] = arguments[_key];
15060
15842
  }
15061
- _this = _super.call.apply(_super, [this].concat(_args));
15843
+ _this = _super.call.apply(_super, [this].concat(args));
15844
+ _defineProperty$3(_assertThisInitialized$2(_this), "logger", logger);
15062
15845
  _defineProperty$3(_assertThisInitialized$2(_this), "hls", null);
15063
15846
  _defineProperty$3(_assertThisInitialized$2(_this), "pluginExtension", null);
15064
15847
  _defineProperty$3(_assertThisInitialized$2(_this), "getStats", function() {
@@ -15070,24 +15853,6 @@
15070
15853
  var lang = _ref.lang;
15071
15854
  (_this$hls2 = _this.hls) === null || _this$hls2 === void 0 ? void 0 : _this$hls2.switchSubtitleStream(lang);
15072
15855
  });
15073
- _defineProperty$3(_assertThisInitialized$2(_this), "_onSwitchURL", function(url, args) {
15074
- return new Promise(function(resolve, reject) {
15075
- var _assertThisInitialize = _assertThisInitialized$2(_this), player = _assertThisInitialize.player, hls = _assertThisInitialize.hls;
15076
- if (hls) {
15077
- var _this$player$config, _this$player$config$h;
15078
- var options = parseSwitchUrlArgs(args, _assertThisInitialized$2(_this));
15079
- player.config.url = url;
15080
- hls.switchURL(url, options).then(function() {
15081
- return resolve(true);
15082
- }).catch(reject);
15083
- 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) {
15084
- _this._keepPauseStatus();
15085
- }
15086
- } else {
15087
- reject();
15088
- }
15089
- });
15090
- });
15091
15856
  _defineProperty$3(_assertThisInitialized$2(_this), "_keepPauseStatus", function() {
15092
15857
  var paused = _this.player.paused;
15093
15858
  if (!paused)
@@ -15112,8 +15877,8 @@
15112
15877
  }, {
15113
15878
  key: "softDecode",
15114
15879
  get: function get() {
15115
- var _this$player, _this$player$config2;
15116
- 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;
15880
+ var _this$player, _this$player$config;
15881
+ 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;
15117
15882
  return !!mediaType && mediaType !== "video" && mediaType !== "audio";
15118
15883
  }
15119
15884
  }, {
@@ -15121,13 +15886,35 @@
15121
15886
  value: function beforePlayerInit() {
15122
15887
  var _this2 = this;
15123
15888
  var config = this.player.config;
15889
+ var mediaElem = this.player.media || this.player.video;
15124
15890
  var hlsOpts = config.hls || {};
15125
15891
  if (!config.url && !config.__allowHlsEmptyUrl__ || !hlsOpts.preferMMS && MSE.isMMSOnly()) {
15126
15892
  return;
15127
15893
  }
15128
15894
  if (this.hls)
15129
15895
  this.hls.destroy();
15130
- this.player.switchURL = this._onSwitchURL;
15896
+ var descriptor = Object.getOwnPropertyDescriptor(this.player, "switchURL");
15897
+ if (!descriptor || descriptor.writable) {
15898
+ this.player.switchURL = function(url, args) {
15899
+ return new Promise(function(resolve, reject) {
15900
+ var player = _this2.player, hls = _this2.hls;
15901
+ if (hls) {
15902
+ var _this2$player$config, _this2$player$config$;
15903
+ var options = parseSwitchUrlArgs(args, _this2);
15904
+ player.config.url = url;
15905
+ hls.switchURL(url, options).then(function() {
15906
+ return resolve(true);
15907
+ }).catch(reject);
15908
+ 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) {
15909
+ _this2._keepPauseStatus();
15910
+ }
15911
+ } else {
15912
+ reject();
15913
+ }
15914
+ });
15915
+ };
15916
+ }
15917
+ var onSwitchUrl = this.player.switchURL;
15131
15918
  this.player.handleSource = false;
15132
15919
  hlsOpts.innerDegrade = hlsOpts.innerDegrade || config.innerDegrade;
15133
15920
  if (hlsOpts.disconnectTime === null || hlsOpts.disconnectTime === void 0)
@@ -15135,7 +15922,7 @@
15135
15922
  this.hls = new Hls(_objectSpread2$2({
15136
15923
  softDecode: this.softDecode,
15137
15924
  isLive: config.isLive,
15138
- media: this.player.media || this.player.video,
15925
+ media: mediaElem,
15139
15926
  startTime: config.startTime,
15140
15927
  url: config.url
15141
15928
  }, hlsOpts));
@@ -15153,7 +15940,7 @@
15153
15940
  if (this.softDecode) {
15154
15941
  this.pluginExtension = new PluginExtension(_objectSpread2$2({
15155
15942
  isLive: config.isLive,
15156
- media: this.player.video
15943
+ media: mediaElem
15157
15944
  }, hlsOpts), this);
15158
15945
  this.player.forceDegradeToVideo = function() {
15159
15946
  var _this2$pluginExtensio;
@@ -15170,8 +15957,8 @@
15170
15957
  return (_this2$hls2 = _this2.hls) === null || _this2$hls2 === void 0 ? void 0 : _this2$hls2.replay();
15171
15958
  });
15172
15959
  }
15960
+ this.on(URL_CHANGE, onSwitchUrl);
15173
15961
  this.on(SWITCH_SUBTITLE, this._onSwitchSubtitle);
15174
- this.on(URL_CHANGE, this._onSwitchURL);
15175
15962
  this.on(DESTROY, this.destroy.bind(this));
15176
15963
  this._transError();
15177
15964
  this._transCoreEvent(EVENT.TTFB);
@@ -15181,6 +15968,7 @@
15181
15968
  this._transCoreEvent(EVENT.LOAD_RETRY);
15182
15969
  this._transCoreEvent(EVENT.SOURCEBUFFER_CREATED);
15183
15970
  this._transCoreEvent(EVENT.MEDIASOURCE_OPENED);
15971
+ this._transCoreEvent(EVENT.APPEND_BUFFER);
15184
15972
  this._transCoreEvent(EVENT.REMOVE_BUFFER);
15185
15973
  this._transCoreEvent(EVENT.BUFFEREOS);
15186
15974
  this._transCoreEvent(EVENT.KEYFRAME);
@@ -15200,7 +15988,9 @@
15200
15988
  this._transCoreEvent(Event$1.SUBTITLE_PLAYLIST);
15201
15989
  this._transCoreEvent(Event$1.APPEND_COST);
15202
15990
  if (config.url) {
15203
- this.hls.load(config.url, true).catch(function(e) {
15991
+ this.hls.load(config.url, {
15992
+ reuseMse: true
15993
+ }).catch(function(e) {
15204
15994
  });
15205
15995
  }
15206
15996
  }