hls.js 1.5.2 → 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.
- package/dist/hls.js +32 -16
- package/dist/hls.js.map +1 -1
- package/dist/hls.light.js +30 -14
- package/dist/hls.light.js.map +1 -1
- package/dist/hls.light.min.js +1 -1
- package/dist/hls.light.min.js.map +1 -1
- package/dist/hls.light.mjs +33 -16
- package/dist/hls.light.mjs.map +1 -1
- package/dist/hls.min.js +1 -1
- package/dist/hls.min.js.map +1 -1
- package/dist/hls.mjs +35 -18
- package/dist/hls.mjs.map +1 -1
- package/dist/hls.worker.js +1 -1
- package/dist/hls.worker.js.map +1 -1
- package/package.json +1 -1
- package/src/controller/abr-controller.ts +5 -3
- package/src/controller/audio-stream-controller.ts +1 -1
- package/src/controller/stream-controller.ts +2 -1
- package/src/controller/subtitle-stream-controller.ts +1 -1
- package/src/utils/mp4-tools.ts +28 -9
package/dist/hls.mjs
CHANGED
@@ -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.
|
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
|
}
|
@@ -1550,6 +1550,12 @@ function readUint32(buffer, offset) {
|
|
1550
1550
|
const val = readSint32(buffer, offset);
|
1551
1551
|
return val < 0 ? 4294967296 + val : val;
|
1552
1552
|
}
|
1553
|
+
function readUint64(buffer, offset) {
|
1554
|
+
let result = readUint32(buffer, offset);
|
1555
|
+
result *= Math.pow(2, 32);
|
1556
|
+
result += readUint32(buffer, offset + 4);
|
1557
|
+
return result;
|
1558
|
+
}
|
1553
1559
|
function readSint32(buffer, offset) {
|
1554
1560
|
return buffer[offset] << 24 | buffer[offset + 1] << 16 | buffer[offset + 2] << 8 | buffer[offset + 3];
|
1555
1561
|
}
|
@@ -1612,15 +1618,14 @@ function parseSegmentIndex(sidx) {
|
|
1612
1618
|
let index = 8;
|
1613
1619
|
const timescale = readUint32(sidx, index);
|
1614
1620
|
index += 4;
|
1615
|
-
|
1616
|
-
|
1617
|
-
// usually zero in our case
|
1618
|
-
const earliestPresentationTime = 0;
|
1619
|
-
const firstOffset = 0;
|
1621
|
+
let earliestPresentationTime = 0;
|
1622
|
+
let firstOffset = 0;
|
1620
1623
|
if (version === 0) {
|
1621
|
-
index +=
|
1624
|
+
earliestPresentationTime = readUint32(sidx, index += 4);
|
1625
|
+
firstOffset = readUint32(sidx, index += 4);
|
1622
1626
|
} else {
|
1623
|
-
index +=
|
1627
|
+
earliestPresentationTime = readUint64(sidx, index += 8);
|
1628
|
+
firstOffset = readUint64(sidx, index += 8);
|
1624
1629
|
}
|
1625
1630
|
|
1626
1631
|
// skip reserved
|
@@ -2068,15 +2073,22 @@ function getDuration(data, initData) {
|
|
2068
2073
|
}
|
2069
2074
|
if (videoDuration === 0 && audioDuration === 0) {
|
2070
2075
|
// If duration samples are not available in the traf use sidx subsegment_duration
|
2076
|
+
let sidxMinStart = Infinity;
|
2077
|
+
let sidxMaxEnd = 0;
|
2071
2078
|
let sidxDuration = 0;
|
2072
2079
|
const sidxs = findBox(data, ['sidx']);
|
2073
2080
|
for (let i = 0; i < sidxs.length; i++) {
|
2074
2081
|
const sidx = parseSegmentIndex(sidxs[i]);
|
2075
2082
|
if (sidx != null && sidx.references) {
|
2076
|
-
|
2083
|
+
sidxMinStart = Math.min(sidxMinStart, sidx.earliestPresentationTime / sidx.timescale);
|
2084
|
+
const subSegmentDuration = sidx.references.reduce((dur, ref) => dur + ref.info.duration || 0, 0);
|
2085
|
+
sidxMaxEnd = Math.max(sidxMaxEnd, subSegmentDuration + sidx.earliestPresentationTime / sidx.timescale);
|
2086
|
+
sidxDuration = sidxMaxEnd - sidxMinStart;
|
2077
2087
|
}
|
2078
2088
|
}
|
2079
|
-
|
2089
|
+
if (sidxDuration && isFiniteNumber(sidxDuration)) {
|
2090
|
+
return sidxDuration;
|
2091
|
+
}
|
2080
2092
|
}
|
2081
2093
|
if (videoDuration) {
|
2082
2094
|
return videoDuration;
|
@@ -7339,7 +7351,7 @@ class AbrController {
|
|
7339
7351
|
const ttfbEstimateSec = this.bwEstimator.getEstimateTTFB() / 1000;
|
7340
7352
|
const levelsSkipped = [];
|
7341
7353
|
for (let i = maxAutoLevel; i >= minAutoLevel; i--) {
|
7342
|
-
var _levelInfo$supportedR
|
7354
|
+
var _levelInfo$supportedR;
|
7343
7355
|
const levelInfo = levels[i];
|
7344
7356
|
const upSwitch = i > selectionBaseLevel;
|
7345
7357
|
if (!levelInfo) {
|
@@ -7370,7 +7382,7 @@ class AbrController {
|
|
7370
7382
|
|
7371
7383
|
// skip candidates which change codec-family or video-range,
|
7372
7384
|
// and which decrease or increase frame-rate for up and down-switch respectfully
|
7373
|
-
if (currentCodecSet && levelInfo.codecSet !== currentCodecSet || currentVideoRange && levelInfo.videoRange !== currentVideoRange || upSwitch && currentFrameRate > levelInfo.frameRate || !upSwitch && currentFrameRate > 0 && currentFrameRate < levelInfo.frameRate ||
|
7385
|
+
if (currentCodecSet && levelInfo.codecSet !== currentCodecSet || currentVideoRange && levelInfo.videoRange !== currentVideoRange || upSwitch && currentFrameRate > levelInfo.frameRate || !upSwitch && currentFrameRate > 0 && currentFrameRate < levelInfo.frameRate || levelInfo.supportedResult && !((_levelInfo$supportedR = levelInfo.supportedResult.decodingInfoResults) != null && _levelInfo$supportedR[0].smooth)) {
|
7374
7386
|
levelsSkipped.push(i);
|
7375
7387
|
continue;
|
7376
7388
|
}
|
@@ -7420,8 +7432,12 @@ class AbrController {
|
|
7420
7432
|
return -1;
|
7421
7433
|
}
|
7422
7434
|
set nextAutoLevel(nextLevel) {
|
7423
|
-
const
|
7424
|
-
|
7435
|
+
const {
|
7436
|
+
maxAutoLevel,
|
7437
|
+
minAutoLevel
|
7438
|
+
} = this.hls;
|
7439
|
+
const value = Math.min(Math.max(nextLevel, minAutoLevel), maxAutoLevel);
|
7440
|
+
if (this._nextAutoLevel !== value) {
|
7425
7441
|
this.nextAutoLevelKey = '';
|
7426
7442
|
this._nextAutoLevel = value;
|
7427
7443
|
}
|
@@ -16037,7 +16053,7 @@ class AudioStreamController extends BaseStreamController {
|
|
16037
16053
|
|
16038
16054
|
// compute start position if we are aligned with the main playlist
|
16039
16055
|
if (!this.startFragRequested && (this.mainDetails || !newDetails.live)) {
|
16040
|
-
this.setStartPosition(
|
16056
|
+
this.setStartPosition(this.mainDetails || newDetails, sliding);
|
16041
16057
|
}
|
16042
16058
|
// only switch back to IDLE state if we were waiting for track to start downloading a new fragment
|
16043
16059
|
if (this.state === State.WAITING_TRACK && !this.waitForCdnTuneIn(newDetails)) {
|
@@ -16957,7 +16973,7 @@ class SubtitleStreamController extends BaseStreamController {
|
|
16957
16973
|
track.details = newDetails;
|
16958
16974
|
this.levelLastLoaded = track;
|
16959
16975
|
if (!this.startFragRequested && (this.mainDetails || !newDetails.live)) {
|
16960
|
-
this.setStartPosition(
|
16976
|
+
this.setStartPosition(this.mainDetails || newDetails, sliding);
|
16961
16977
|
}
|
16962
16978
|
|
16963
16979
|
// trigger handler right now
|
@@ -26607,7 +26623,8 @@ class StreamController extends BaseStreamController {
|
|
26607
26623
|
}
|
26608
26624
|
// set new level to playlist loader : this will trigger start level load
|
26609
26625
|
// hls.nextLoadLevel remains until it is set to a new value or until a new frag is successfully loaded
|
26610
|
-
|
26626
|
+
hls.nextLoadLevel = startLevel;
|
26627
|
+
this.level = hls.loadLevel;
|
26611
26628
|
this.loadedmetadata = false;
|
26612
26629
|
}
|
26613
26630
|
// if startPosition undefined but lastCurrentTime set, set startPosition to last currentTime
|
@@ -27682,7 +27699,7 @@ class Hls {
|
|
27682
27699
|
* Get the video-dev/hls.js package version.
|
27683
27700
|
*/
|
27684
27701
|
static get version() {
|
27685
|
-
return "1.5.
|
27702
|
+
return "1.5.4";
|
27686
27703
|
}
|
27687
27704
|
|
27688
27705
|
/**
|