hls.js 1.6.0-beta.2.0.canary.10925 → 1.6.0-beta.2.0.canary.10926

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.
package/dist/hls.light.js CHANGED
@@ -1030,7 +1030,7 @@
1030
1030
  // Some browsers don't allow to use bind on console object anyway
1031
1031
  // fallback to default if needed
1032
1032
  try {
1033
- newLogger.log("Debug logs enabled for \"" + context + "\" in hls.js version " + "1.6.0-beta.2.0.canary.10925");
1033
+ newLogger.log("Debug logs enabled for \"" + context + "\" in hls.js version " + "1.6.0-beta.2.0.canary.10926");
1034
1034
  } catch (e) {
1035
1035
  /* log fn threw an exception. All logger methods are no-ops. */
1036
1036
  return createLogger();
@@ -1752,8 +1752,8 @@
1752
1752
  }, {});
1753
1753
  }
1754
1754
  function useAlternateAudio(audioTrackUrl, hls) {
1755
- var _hls$levels$hls$loadL;
1756
- return !!audioTrackUrl && audioTrackUrl !== ((_hls$levels$hls$loadL = hls.levels[hls.loadLevel]) == null ? undefined : _hls$levels$hls$loadL.uri);
1755
+ var _hls$loadLevelObj;
1756
+ return !!audioTrackUrl && audioTrackUrl !== ((_hls$loadLevelObj = hls.loadLevelObj) == null ? undefined : _hls$loadLevelObj.uri);
1757
1757
  }
1758
1758
 
1759
1759
  var AbrController = /*#__PURE__*/function (_Logger) {
@@ -2173,8 +2173,8 @@
2173
2173
  }
2174
2174
  // If no matching level found, see if min auto level would be a better option
2175
2175
  var minLevel = hls.levels[minAutoLevel];
2176
- var autoLevel = hls.levels[hls.loadLevel];
2177
- if ((minLevel == null ? undefined : minLevel.bitrate) < (autoLevel == null ? undefined : autoLevel.bitrate)) {
2176
+ var autoLevel = hls.loadLevelObj;
2177
+ if (autoLevel && (minLevel == null ? undefined : minLevel.bitrate) < autoLevel.bitrate) {
2178
2178
  return minAutoLevel;
2179
2179
  }
2180
2180
  // or if bitrate is not lower, continue to use loadLevel
@@ -2875,7 +2875,7 @@
2875
2875
  case ErrorDetails.SUBTITLE_LOAD_ERROR:
2876
2876
  case ErrorDetails.SUBTITLE_TRACK_LOAD_TIMEOUT:
2877
2877
  if (context) {
2878
- var level = hls.levels[hls.loadLevel];
2878
+ var level = hls.loadLevelObj;
2879
2879
  if (level && (context.type === PlaylistContextType.AUDIO_TRACK && level.hasAudioGroup(context.groupId) || context.type === PlaylistContextType.SUBTITLE_TRACK && level.hasSubtitleGroup(context.groupId))) {
2880
2880
  // Perform Pathway switch or Redundant failover if possible for fastest recovery
2881
2881
  // otherwise allow playlist retry count to reach max error retries
@@ -2888,7 +2888,7 @@
2888
2888
  return;
2889
2889
  case ErrorDetails.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED:
2890
2890
  {
2891
- var _level = hls.levels[hls.loadLevel];
2891
+ var _level = hls.loadLevelObj;
2892
2892
  var restrictedHdcpLevel = _level == null ? undefined : _level.attrs['HDCP-LEVEL'];
2893
2893
  if (restrictedHdcpLevel) {
2894
2894
  data.errorAction = {
@@ -17124,7 +17124,8 @@
17124
17124
  if (bufferInfo.len === 0 && bufferInfo.nextStart !== undefined) {
17125
17125
  var bufferedFragAtPos = this.fragmentTracker.getBufferedFrag(pos, type);
17126
17126
  if (bufferedFragAtPos && (bufferInfo.nextStart <= bufferedFragAtPos.end || bufferedFragAtPos.gap)) {
17127
- return BufferHelper.bufferInfo(bufferable, pos, Math.max(bufferInfo.nextStart, maxBufferHole));
17127
+ var gapDuration = Math.max(Math.min(bufferInfo.nextStart, bufferedFragAtPos.end) - pos, maxBufferHole);
17128
+ return BufferHelper.bufferInfo(bufferable, pos, gapDuration);
17128
17129
  }
17129
17130
  }
17130
17131
  return bufferInfo;
@@ -18133,7 +18134,7 @@
18133
18134
  var currentTime = media.currentTime;
18134
18135
  var bufferInfo = BufferHelper.bufferInfo(media, currentTime, 0);
18135
18136
  var startTime = currentTime < bufferInfo.start ? bufferInfo.start : bufferInfo.nextStart;
18136
- if (startTime) {
18137
+ if (startTime && this.hls) {
18137
18138
  var bufferStarved = bufferInfo.len <= config.maxBufferHole;
18138
18139
  var waiting = bufferInfo.len > 0 && bufferInfo.len < 1 && media.readyState < 3;
18139
18140
  var gapLength = startTime - currentTime;
@@ -18150,6 +18151,17 @@
18150
18151
  if (!startGap) {
18151
18152
  var startProvisioned = partial || fragmentTracker.getAppendedFrag(currentTime, PlaylistLevelType.MAIN);
18152
18153
  if (startProvisioned) {
18154
+ var _this$hls$loadLevelOb;
18155
+ // Do not seek when selected variant playlist is unloaded
18156
+ if (!((_this$hls$loadLevelOb = this.hls.loadLevelObj) != null && _this$hls$loadLevelOb.details)) {
18157
+ return 0;
18158
+ }
18159
+ // Do not seek when required fragments are inflight or appending
18160
+ var inFlightDependency = getInFlightDependency(this.hls.inFlightFragments, startTime);
18161
+ if (inFlightDependency) {
18162
+ return 0;
18163
+ }
18164
+ // Do not seek if we can't walk tracked fragments to end of gap
18153
18165
  var moreToLoad = false;
18154
18166
  var pos = startProvisioned.end;
18155
18167
  while (pos < startTime) {
@@ -18171,7 +18183,7 @@
18171
18183
  this.warn("skipping hole, adjusting currentTime from " + currentTime + " to " + targetTime);
18172
18184
  this.moved = true;
18173
18185
  media.currentTime = targetTime;
18174
- if (!(partial != null && partial.gap) && this.hls) {
18186
+ if (!(partial != null && partial.gap)) {
18175
18187
  var error = new Error("fragment loaded with buffer holes, seeking from " + currentTime + " to " + targetTime);
18176
18188
  this.hls.trigger(Events.ERROR, {
18177
18189
  type: ErrorTypes.MEDIA_ERROR,
@@ -19631,6 +19643,11 @@
19631
19643
  }
19632
19644
  return this._levels;
19633
19645
  }
19646
+ }, {
19647
+ key: "loadLevelObj",
19648
+ get: function get() {
19649
+ return this.currentLevel;
19650
+ }
19634
19651
  }, {
19635
19652
  key: "level",
19636
19653
  get: function get() {
@@ -19953,7 +19970,7 @@
19953
19970
  return !remuxResult.audio && !remuxResult.video && !remuxResult.text && !remuxResult.id3 && !remuxResult.initSegment;
19954
19971
  }
19955
19972
 
19956
- var version = "1.6.0-beta.2.0.canary.10925";
19973
+ var version = "1.6.0-beta.2.0.canary.10926";
19957
19974
 
19958
19975
  // ensure the worker ends up in the bundle
19959
19976
  // If the worker should not be included this gets aliased to empty.js
@@ -20518,7 +20535,7 @@
20518
20535
  _proto.onTickEnd = function onTickEnd() {
20519
20536
  var _this$media2;
20520
20537
  _BaseStreamController.prototype.onTickEnd.call(this);
20521
- if ((_this$media2 = this.media) != null && _this$media2.readyState) {
20538
+ if ((_this$media2 = this.media) != null && _this$media2.readyState && this.media.seeking === false) {
20522
20539
  this.lastCurrentTime = this.media.currentTime;
20523
20540
  }
20524
20541
  this.checkFragmentChanged();
@@ -23000,12 +23017,25 @@
23000
23017
  var levels = this.levelController.levels;
23001
23018
  return levels ? levels : [];
23002
23019
  }
23020
+
23021
+ /**
23022
+ * @returns LevelDetails of last loaded level (variant) or `null` prior to loading a media playlist.
23023
+ */
23003
23024
  }, {
23004
23025
  key: "latestLevelDetails",
23005
23026
  get: function get() {
23006
23027
  return this.streamController.getLevelDetails() || null;
23007
23028
  }
23008
23029
 
23030
+ /**
23031
+ * @returns Level object of selected level (variant) or `null` prior to selecting a level or once the level is removed.
23032
+ */
23033
+ }, {
23034
+ key: "loadLevelObj",
23035
+ get: function get() {
23036
+ return this.levelController.loadLevelObj;
23037
+ }
23038
+
23009
23039
  /**
23010
23040
  * Index of quality level (variant) currently played
23011
23041
  */