hls.js 1.5.2-0.canary.9965 → 1.5.2-0.canary.9969

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.mjs CHANGED
@@ -431,7 +431,7 @@ function enableLogs(debugConfig, context, id) {
431
431
  // Some browsers don't allow to use bind on console object anyway
432
432
  // fallback to default if needed
433
433
  try {
434
- newLogger.log(`Debug logs enabled for "${context}" in hls.js version ${"1.5.2-0.canary.9965"}`);
434
+ newLogger.log(`Debug logs enabled for "${context}" in hls.js version ${"1.5.2-0.canary.9969"}`);
435
435
  } catch (e) {
436
436
  /* log fn threw an exception. All logger methods are no-ops. */
437
437
  return createLogger();
@@ -1591,6 +1591,12 @@ function readUint32(buffer, offset) {
1591
1591
  const val = readSint32(buffer, offset);
1592
1592
  return val < 0 ? 4294967296 + val : val;
1593
1593
  }
1594
+ function readUint64(buffer, offset) {
1595
+ let result = readUint32(buffer, offset);
1596
+ result *= Math.pow(2, 32);
1597
+ result += readUint32(buffer, offset + 4);
1598
+ return result;
1599
+ }
1594
1600
  function readSint32(buffer, offset) {
1595
1601
  return buffer[offset] << 24 | buffer[offset + 1] << 16 | buffer[offset + 2] << 8 | buffer[offset + 3];
1596
1602
  }
@@ -1653,15 +1659,14 @@ function parseSegmentIndex(sidx) {
1653
1659
  let index = 8;
1654
1660
  const timescale = readUint32(sidx, index);
1655
1661
  index += 4;
1656
-
1657
- // TODO: parse earliestPresentationTime and firstOffset
1658
- // usually zero in our case
1659
- const earliestPresentationTime = 0;
1660
- const firstOffset = 0;
1662
+ let earliestPresentationTime = 0;
1663
+ let firstOffset = 0;
1661
1664
  if (version === 0) {
1662
- index += 8;
1665
+ earliestPresentationTime = readUint32(sidx, index += 4);
1666
+ firstOffset = readUint32(sidx, index += 4);
1663
1667
  } else {
1664
- index += 16;
1668
+ earliestPresentationTime = readUint64(sidx, index += 8);
1669
+ firstOffset = readUint64(sidx, index += 8);
1665
1670
  }
1666
1671
 
1667
1672
  // skip reserved
@@ -2109,15 +2114,22 @@ function getDuration(data, initData) {
2109
2114
  }
2110
2115
  if (videoDuration === 0 && audioDuration === 0) {
2111
2116
  // If duration samples are not available in the traf use sidx subsegment_duration
2117
+ let sidxMinStart = Infinity;
2118
+ let sidxMaxEnd = 0;
2112
2119
  let sidxDuration = 0;
2113
2120
  const sidxs = findBox(data, ['sidx']);
2114
2121
  for (let i = 0; i < sidxs.length; i++) {
2115
2122
  const sidx = parseSegmentIndex(sidxs[i]);
2116
2123
  if (sidx != null && sidx.references) {
2117
- sidxDuration += sidx.references.reduce((dur, ref) => dur + ref.info.duration || 0, 0);
2124
+ sidxMinStart = Math.min(sidxMinStart, sidx.earliestPresentationTime / sidx.timescale);
2125
+ const subSegmentDuration = sidx.references.reduce((dur, ref) => dur + ref.info.duration || 0, 0);
2126
+ sidxMaxEnd = Math.max(sidxMaxEnd, subSegmentDuration + sidx.earliestPresentationTime / sidx.timescale);
2127
+ sidxDuration = sidxMaxEnd - sidxMinStart;
2118
2128
  }
2119
2129
  }
2120
- return sidxDuration;
2130
+ if (sidxDuration && isFiniteNumber(sidxDuration)) {
2131
+ return sidxDuration;
2132
+ }
2121
2133
  }
2122
2134
  if (videoDuration) {
2123
2135
  return videoDuration;
@@ -7467,8 +7479,12 @@ class AbrController extends Logger {
7467
7479
  return -1;
7468
7480
  }
7469
7481
  set nextAutoLevel(nextLevel) {
7470
- const value = Math.max(this.hls.minAutoLevel, nextLevel);
7471
- if (this._nextAutoLevel != value) {
7482
+ const {
7483
+ maxAutoLevel,
7484
+ minAutoLevel
7485
+ } = this.hls;
7486
+ const value = Math.min(Math.max(nextLevel, minAutoLevel), maxAutoLevel);
7487
+ if (this._nextAutoLevel !== value) {
7472
7488
  this.nextAutoLevelKey = '';
7473
7489
  this._nextAutoLevel = value;
7474
7490
  }
@@ -16144,7 +16160,7 @@ class AudioStreamController extends BaseStreamController {
16144
16160
 
16145
16161
  // compute start position if we are aligned with the main playlist
16146
16162
  if (!this.startFragRequested && (this.mainDetails || !newDetails.live)) {
16147
- this.setStartPosition(track.details, sliding);
16163
+ this.setStartPosition(this.mainDetails || newDetails, sliding);
16148
16164
  }
16149
16165
  // only switch back to IDLE state if we were waiting for track to start downloading a new fragment
16150
16166
  if (this.state === State.WAITING_TRACK && !this.waitForCdnTuneIn(newDetails)) {
@@ -17058,7 +17074,7 @@ class SubtitleStreamController extends BaseStreamController {
17058
17074
  track.details = newDetails;
17059
17075
  this.levelLastLoaded = track;
17060
17076
  if (!this.startFragRequested && (this.mainDetails || !newDetails.live)) {
17061
- this.setStartPosition(track.details, sliding);
17077
+ this.setStartPosition(this.mainDetails || newDetails, sliding);
17062
17078
  }
17063
17079
 
17064
17080
  // trigger handler right now
@@ -26734,7 +26750,8 @@ class StreamController extends BaseStreamController {
26734
26750
  }
26735
26751
  // set new level to playlist loader : this will trigger start level load
26736
26752
  // hls.nextLoadLevel remains until it is set to a new value or until a new frag is successfully loaded
26737
- this.level = hls.nextLoadLevel = startLevel;
26753
+ hls.nextLoadLevel = startLevel;
26754
+ this.level = hls.loadLevel;
26738
26755
  this.loadedmetadata = false;
26739
26756
  }
26740
26757
  // if startPosition undefined but lastCurrentTime set, set startPosition to last currentTime
@@ -27787,7 +27804,7 @@ class Hls {
27787
27804
  * Get the video-dev/hls.js package version.
27788
27805
  */
27789
27806
  static get version() {
27790
- return "1.5.2-0.canary.9965";
27807
+ return "1.5.2-0.canary.9969";
27791
27808
  }
27792
27809
 
27793
27810
  /**