hls.js 1.5.3 → 1.5.4

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.
@@ -411,7 +411,7 @@ function enableLogs(debugConfig, id) {
411
411
  // Some browsers don't allow to use bind on console object anyway
412
412
  // fallback to default if needed
413
413
  try {
414
- exportedLogger.log(`Debug logs enabled for "${id}" in hls.js version ${"1.5.3"}`);
414
+ exportedLogger.log(`Debug logs enabled for "${id}" in hls.js version ${"1.5.4"}`);
415
415
  } catch (e) {
416
416
  exportedLogger = fakeLogger;
417
417
  }
@@ -1392,6 +1392,12 @@ function readUint32(buffer, offset) {
1392
1392
  const val = readSint32(buffer, offset);
1393
1393
  return val < 0 ? 4294967296 + val : val;
1394
1394
  }
1395
+ function readUint64(buffer, offset) {
1396
+ let result = readUint32(buffer, offset);
1397
+ result *= Math.pow(2, 32);
1398
+ result += readUint32(buffer, offset + 4);
1399
+ return result;
1400
+ }
1395
1401
  function readSint32(buffer, offset) {
1396
1402
  return buffer[offset] << 24 | buffer[offset + 1] << 16 | buffer[offset + 2] << 8 | buffer[offset + 3];
1397
1403
  }
@@ -1454,15 +1460,14 @@ function parseSegmentIndex(sidx) {
1454
1460
  let index = 8;
1455
1461
  const timescale = readUint32(sidx, index);
1456
1462
  index += 4;
1457
-
1458
- // TODO: parse earliestPresentationTime and firstOffset
1459
- // usually zero in our case
1460
- const earliestPresentationTime = 0;
1461
- const firstOffset = 0;
1463
+ let earliestPresentationTime = 0;
1464
+ let firstOffset = 0;
1462
1465
  if (version === 0) {
1463
- index += 8;
1466
+ earliestPresentationTime = readUint32(sidx, index += 4);
1467
+ firstOffset = readUint32(sidx, index += 4);
1464
1468
  } else {
1465
- index += 16;
1469
+ earliestPresentationTime = readUint64(sidx, index += 8);
1470
+ firstOffset = readUint64(sidx, index += 8);
1466
1471
  }
1467
1472
 
1468
1473
  // skip reserved
@@ -1910,15 +1915,22 @@ function getDuration(data, initData) {
1910
1915
  }
1911
1916
  if (videoDuration === 0 && audioDuration === 0) {
1912
1917
  // If duration samples are not available in the traf use sidx subsegment_duration
1918
+ let sidxMinStart = Infinity;
1919
+ let sidxMaxEnd = 0;
1913
1920
  let sidxDuration = 0;
1914
1921
  const sidxs = findBox(data, ['sidx']);
1915
1922
  for (let i = 0; i < sidxs.length; i++) {
1916
1923
  const sidx = parseSegmentIndex(sidxs[i]);
1917
1924
  if (sidx != null && sidx.references) {
1918
- sidxDuration += sidx.references.reduce((dur, ref) => dur + ref.info.duration || 0, 0);
1925
+ sidxMinStart = Math.min(sidxMinStart, sidx.earliestPresentationTime / sidx.timescale);
1926
+ const subSegmentDuration = sidx.references.reduce((dur, ref) => dur + ref.info.duration || 0, 0);
1927
+ sidxMaxEnd = Math.max(sidxMaxEnd, subSegmentDuration + sidx.earliestPresentationTime / sidx.timescale);
1928
+ sidxDuration = sidxMaxEnd - sidxMinStart;
1919
1929
  }
1920
1930
  }
1921
- return sidxDuration;
1931
+ if (sidxDuration && isFiniteNumber(sidxDuration)) {
1932
+ return sidxDuration;
1933
+ }
1922
1934
  }
1923
1935
  if (videoDuration) {
1924
1936
  return videoDuration;
@@ -6701,8 +6713,12 @@ class AbrController {
6701
6713
  return -1;
6702
6714
  }
6703
6715
  set nextAutoLevel(nextLevel) {
6704
- const value = Math.max(this.hls.minAutoLevel, nextLevel);
6705
- if (this._nextAutoLevel != value) {
6716
+ const {
6717
+ maxAutoLevel,
6718
+ minAutoLevel
6719
+ } = this.hls;
6720
+ const value = Math.min(Math.max(nextLevel, minAutoLevel), maxAutoLevel);
6721
+ if (this._nextAutoLevel !== value) {
6706
6722
  this.nextAutoLevelKey = '';
6707
6723
  this._nextAutoLevel = value;
6708
6724
  }
@@ -18610,7 +18626,8 @@ class StreamController extends BaseStreamController {
18610
18626
  }
18611
18627
  // set new level to playlist loader : this will trigger start level load
18612
18628
  // hls.nextLoadLevel remains until it is set to a new value or until a new frag is successfully loaded
18613
- this.level = hls.nextLoadLevel = startLevel;
18629
+ hls.nextLoadLevel = startLevel;
18630
+ this.level = hls.loadLevel;
18614
18631
  this.loadedmetadata = false;
18615
18632
  }
18616
18633
  // if startPosition undefined but lastCurrentTime set, set startPosition to last currentTime
@@ -19685,7 +19702,7 @@ class Hls {
19685
19702
  * Get the video-dev/hls.js package version.
19686
19703
  */
19687
19704
  static get version() {
19688
- return "1.5.3";
19705
+ return "1.5.4";
19689
19706
  }
19690
19707
 
19691
19708
  /**