hls.js 1.5.14-0.canary.10427 → 1.5.14-0.canary.10431
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 +37 -38
- package/dist/hls.js.d.ts +2 -0
- package/dist/hls.js.map +1 -1
- package/dist/hls.light.js +37 -38
- 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 +34 -38
- 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 +34 -38
- package/dist/hls.mjs.map +1 -1
- package/dist/hls.worker.js +1 -1
- package/package.json +2 -2
- package/src/controller/base-stream-controller.ts +23 -16
- package/src/utils/discontinuities.ts +21 -47
package/dist/hls.light.mjs
CHANGED
@@ -420,7 +420,7 @@ function enableLogs(debugConfig, context, id) {
|
|
420
420
|
// Some browsers don't allow to use bind on console object anyway
|
421
421
|
// fallback to default if needed
|
422
422
|
try {
|
423
|
-
newLogger.log(`Debug logs enabled for "${context}" in hls.js version ${"1.5.14-0.canary.
|
423
|
+
newLogger.log(`Debug logs enabled for "${context}" in hls.js version ${"1.5.14-0.canary.10431"}`);
|
424
424
|
} catch (e) {
|
425
425
|
/* log fn threw an exception. All logger methods are no-ops. */
|
426
426
|
return createLogger();
|
@@ -11836,30 +11836,14 @@ function findFirstFragWithCC(fragments, cc) {
|
|
11836
11836
|
}
|
11837
11837
|
return null;
|
11838
11838
|
}
|
11839
|
-
function shouldAlignOnDiscontinuities(
|
11840
|
-
if (
|
11841
|
-
if (details.
|
11839
|
+
function shouldAlignOnDiscontinuities(refDetails, details) {
|
11840
|
+
if (refDetails) {
|
11841
|
+
if (details.startCC < refDetails.endCC && details.endCC > refDetails.startCC) {
|
11842
11842
|
return true;
|
11843
11843
|
}
|
11844
11844
|
}
|
11845
11845
|
return false;
|
11846
11846
|
}
|
11847
|
-
|
11848
|
-
// Find the first frag in the previous level which matches the CC of the first frag of the new level
|
11849
|
-
function findDiscontinuousReferenceFrag(prevDetails, curDetails) {
|
11850
|
-
const prevFrags = prevDetails.fragments;
|
11851
|
-
const curFrags = curDetails.fragments;
|
11852
|
-
if (!curFrags.length || !prevFrags.length) {
|
11853
|
-
logger.log('No fragments to align');
|
11854
|
-
return;
|
11855
|
-
}
|
11856
|
-
const prevStartFrag = findFirstFragWithCC(prevFrags, curFrags[0].cc);
|
11857
|
-
if (!prevStartFrag || prevStartFrag && !prevStartFrag.startPTS) {
|
11858
|
-
logger.log('No frag in previous level to align on');
|
11859
|
-
return;
|
11860
|
-
}
|
11861
|
-
return prevStartFrag;
|
11862
|
-
}
|
11863
11847
|
function adjustFragmentStart(frag, sliding) {
|
11864
11848
|
if (frag) {
|
11865
11849
|
const start = frag.start + sliding;
|
@@ -11894,7 +11878,7 @@ function alignStream(lastFrag, switchDetails, details) {
|
|
11894
11878
|
if (!switchDetails) {
|
11895
11879
|
return;
|
11896
11880
|
}
|
11897
|
-
alignDiscontinuities(
|
11881
|
+
alignDiscontinuities(details, switchDetails);
|
11898
11882
|
if (!details.alignedSliding && switchDetails) {
|
11899
11883
|
// If the PTS wasn't figured out via discontinuity sequence that means there was no CC increase within the level.
|
11900
11884
|
// Aligning via Program Date Time should therefore be reliable, since PDT should be the same within the same
|
@@ -11910,20 +11894,24 @@ function alignStream(lastFrag, switchDetails, details) {
|
|
11910
11894
|
}
|
11911
11895
|
|
11912
11896
|
/**
|
11913
|
-
*
|
11914
|
-
* discontinuity sequence.
|
11915
|
-
* @param lastFrag - The last Fragment which shares the same discontinuity sequence
|
11897
|
+
* Ajust the start of fragments in `details` by the difference in time between fragments of the latest
|
11898
|
+
* shared discontinuity sequence change.
|
11916
11899
|
* @param lastLevel - The details of the last loaded level
|
11917
11900
|
* @param details - The details of the new level
|
11918
11901
|
*/
|
11919
|
-
function alignDiscontinuities(
|
11920
|
-
if (shouldAlignOnDiscontinuities(
|
11921
|
-
|
11922
|
-
if (referenceFrag && isFiniteNumber(referenceFrag.start)) {
|
11923
|
-
logger.log(`Adjusting PTS using last level due to CC increase within current level ${details.url}`);
|
11924
|
-
adjustSlidingStart(referenceFrag.start, details);
|
11925
|
-
}
|
11902
|
+
function alignDiscontinuities(details, refDetails) {
|
11903
|
+
if (!shouldAlignOnDiscontinuities(refDetails, details)) {
|
11904
|
+
return;
|
11926
11905
|
}
|
11906
|
+
const targetCC = Math.min(refDetails.endCC, details.endCC);
|
11907
|
+
const refFrag = findFirstFragWithCC(refDetails.fragments, targetCC);
|
11908
|
+
const frag = findFirstFragWithCC(details.fragments, targetCC);
|
11909
|
+
if (!refFrag || !frag) {
|
11910
|
+
return;
|
11911
|
+
}
|
11912
|
+
logger.log(`Aligning playlist at start of dicontinuity sequence ${targetCC}`);
|
11913
|
+
const delta = refFrag.start - frag.start;
|
11914
|
+
adjustSlidingStart(delta, details);
|
11927
11915
|
}
|
11928
11916
|
|
11929
11917
|
/**
|
@@ -12742,7 +12730,7 @@ class BaseStreamController extends TaskLoop {
|
|
12742
12730
|
return;
|
12743
12731
|
}
|
12744
12732
|
if ('payload' in data) {
|
12745
|
-
this.log(`Loaded
|
12733
|
+
this.log(`Loaded ${frag.type} sn: ${frag.sn} of ${this.playlistLabel()} ${frag.level}`);
|
12746
12734
|
this.hls.trigger(Events.FRAG_LOADED, data);
|
12747
12735
|
}
|
12748
12736
|
|
@@ -12892,9 +12880,9 @@ class BaseStreamController extends TaskLoop {
|
|
12892
12880
|
return !frag || !fragCurrent || frag.sn !== fragCurrent.sn || frag.level !== fragCurrent.level;
|
12893
12881
|
}
|
12894
12882
|
fragBufferedComplete(frag, part) {
|
12895
|
-
var
|
12883
|
+
var _this$fragCurrent, _this$fragPrevious;
|
12896
12884
|
const media = this.mediaBuffer ? this.mediaBuffer : this.media;
|
12897
|
-
this.log(`Buffered ${frag.type} sn: ${frag.sn}${part ? ' part: ' + part.index : ''} of ${this.
|
12885
|
+
this.log(`Buffered ${frag.type} sn: ${frag.sn}${part ? ' part: ' + part.index : ''} of ${this.fragInfo(frag)} > buffer:${media ? TimeRanges.toString(BufferHelper.getBuffered(media)) : '(detached)'})`);
|
12898
12886
|
if (frag.sn !== 'initSegment') {
|
12899
12887
|
var _this$levels;
|
12900
12888
|
if (frag.type !== PlaylistLevelType.SUBTITLE) {
|
@@ -12951,7 +12939,7 @@ class BaseStreamController extends TaskLoop {
|
|
12951
12939
|
}
|
12952
12940
|
let keyLoadingPromise = null;
|
12953
12941
|
if (frag.encrypted && !((_frag$decryptdata = frag.decryptdata) != null && _frag$decryptdata.key)) {
|
12954
|
-
this.log(`Loading key for ${frag.sn} of [${details.startSN}-${details.endSN}], ${this.
|
12942
|
+
this.log(`Loading key for ${frag.sn} of [${details.startSN}-${details.endSN}], ${this.playlistLabel()} ${frag.level}`);
|
12955
12943
|
this.state = State.KEY_LOADING;
|
12956
12944
|
this.fragCurrent = frag;
|
12957
12945
|
keyLoadingPromise = this.keyLoader.load(frag).then(keyLoadedData => {
|
@@ -12990,7 +12978,7 @@ class BaseStreamController extends TaskLoop {
|
|
12990
12978
|
const partIndex = this.getNextPart(partList, frag, targetBufferTime);
|
12991
12979
|
if (partIndex > -1) {
|
12992
12980
|
const part = partList[partIndex];
|
12993
|
-
this.log(`Loading part sn: ${frag.sn} p: ${part.index} cc: ${frag.cc} of playlist [${details.startSN}-${details.endSN}] parts [0-${partIndex}-${partList.length - 1}] ${this.
|
12981
|
+
this.log(`Loading part sn: ${frag.sn} p: ${part.index} cc: ${frag.cc} of playlist [${details.startSN}-${details.endSN}] parts [0-${partIndex}-${partList.length - 1}] ${this.playlistLabel()}: ${frag.level}, target: ${parseFloat(targetBufferTime.toFixed(3))}`);
|
12994
12982
|
this.nextLoadPosition = part.start + part.duration;
|
12995
12983
|
this.state = State.FRAG_LOADING;
|
12996
12984
|
let _result;
|
@@ -13026,7 +13014,7 @@ class BaseStreamController extends TaskLoop {
|
|
13026
13014
|
// Selected fragment hint for part but not loading parts
|
13027
13015
|
return Promise.resolve(null);
|
13028
13016
|
}
|
13029
|
-
this.log(`Loading
|
13017
|
+
this.log(`Loading ${frag.type} sn: ${frag.sn} of ${this.fragInfo(frag, false)}) cc: ${frag.cc} ${details ? '[' + details.startSN + '-' + details.endSN + ']' : ''}, target: ${parseFloat(targetBufferTime.toFixed(3))}`);
|
13030
13018
|
// Don't update nextLoadPosition for fragments which are not buffered
|
13031
13019
|
if (isFiniteNumber(frag.sn) && !this.bitrateTest) {
|
13032
13020
|
this.nextLoadPosition = frag.start + frag.duration;
|
@@ -13805,11 +13793,19 @@ class BaseStreamController extends TaskLoop {
|
|
13805
13793
|
// For this error fallthrough. Marking parsed will allow advancing to next fragment.
|
13806
13794
|
}
|
13807
13795
|
this.state = State.PARSED;
|
13796
|
+
this.log(`Parsed ${frag.type} sn: ${frag.sn}${part ? ' part: ' + part.index : ''} of ${this.fragInfo(frag)})`);
|
13808
13797
|
this.hls.trigger(Events.FRAG_PARSED, {
|
13809
13798
|
frag,
|
13810
13799
|
part
|
13811
13800
|
});
|
13812
13801
|
}
|
13802
|
+
playlistLabel() {
|
13803
|
+
return this.playlistType === PlaylistLevelType.MAIN ? 'level' : 'track';
|
13804
|
+
}
|
13805
|
+
fragInfo(frag, pts = true) {
|
13806
|
+
var _ref, _ref2;
|
13807
|
+
return `${this.playlistLabel()} ${frag.level} (frag:[${((_ref = pts ? frag.startPTS : frag.start) != null ? _ref : NaN).toFixed(3)}-${((_ref2 = pts ? frag.endPTS : frag.end) != null ? _ref2 : NaN).toFixed(3)}]`;
|
13808
|
+
}
|
13813
13809
|
resetTransmuxer() {
|
13814
13810
|
if (this.transmuxer) {
|
13815
13811
|
this.transmuxer.destroy();
|
@@ -20640,7 +20636,7 @@ class Hls {
|
|
20640
20636
|
* Get the video-dev/hls.js package version.
|
20641
20637
|
*/
|
20642
20638
|
static get version() {
|
20643
|
-
return "1.5.14-0.canary.
|
20639
|
+
return "1.5.14-0.canary.10431";
|
20644
20640
|
}
|
20645
20641
|
|
20646
20642
|
/**
|