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.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();
|
@@ -8674,30 +8674,14 @@ function findFirstFragWithCC(fragments, cc) {
|
|
8674
8674
|
}
|
8675
8675
|
return null;
|
8676
8676
|
}
|
8677
|
-
function shouldAlignOnDiscontinuities(
|
8678
|
-
if (
|
8679
|
-
if (details.
|
8677
|
+
function shouldAlignOnDiscontinuities(refDetails, details) {
|
8678
|
+
if (refDetails) {
|
8679
|
+
if (details.startCC < refDetails.endCC && details.endCC > refDetails.startCC) {
|
8680
8680
|
return true;
|
8681
8681
|
}
|
8682
8682
|
}
|
8683
8683
|
return false;
|
8684
8684
|
}
|
8685
|
-
|
8686
|
-
// Find the first frag in the previous level which matches the CC of the first frag of the new level
|
8687
|
-
function findDiscontinuousReferenceFrag(prevDetails, curDetails) {
|
8688
|
-
const prevFrags = prevDetails.fragments;
|
8689
|
-
const curFrags = curDetails.fragments;
|
8690
|
-
if (!curFrags.length || !prevFrags.length) {
|
8691
|
-
logger.log('No fragments to align');
|
8692
|
-
return;
|
8693
|
-
}
|
8694
|
-
const prevStartFrag = findFirstFragWithCC(prevFrags, curFrags[0].cc);
|
8695
|
-
if (!prevStartFrag || prevStartFrag && !prevStartFrag.startPTS) {
|
8696
|
-
logger.log('No frag in previous level to align on');
|
8697
|
-
return;
|
8698
|
-
}
|
8699
|
-
return prevStartFrag;
|
8700
|
-
}
|
8701
8685
|
function adjustFragmentStart(frag, sliding) {
|
8702
8686
|
if (frag) {
|
8703
8687
|
const start = frag.start + sliding;
|
@@ -8732,7 +8716,7 @@ function alignStream(lastFrag, switchDetails, details) {
|
|
8732
8716
|
if (!switchDetails) {
|
8733
8717
|
return;
|
8734
8718
|
}
|
8735
|
-
alignDiscontinuities(
|
8719
|
+
alignDiscontinuities(details, switchDetails);
|
8736
8720
|
if (!details.alignedSliding && switchDetails) {
|
8737
8721
|
// If the PTS wasn't figured out via discontinuity sequence that means there was no CC increase within the level.
|
8738
8722
|
// Aligning via Program Date Time should therefore be reliable, since PDT should be the same within the same
|
@@ -8748,20 +8732,24 @@ function alignStream(lastFrag, switchDetails, details) {
|
|
8748
8732
|
}
|
8749
8733
|
|
8750
8734
|
/**
|
8751
|
-
*
|
8752
|
-
* discontinuity sequence.
|
8753
|
-
* @param lastFrag - The last Fragment which shares the same discontinuity sequence
|
8735
|
+
* Ajust the start of fragments in `details` by the difference in time between fragments of the latest
|
8736
|
+
* shared discontinuity sequence change.
|
8754
8737
|
* @param lastLevel - The details of the last loaded level
|
8755
8738
|
* @param details - The details of the new level
|
8756
8739
|
*/
|
8757
|
-
function alignDiscontinuities(
|
8758
|
-
if (shouldAlignOnDiscontinuities(
|
8759
|
-
|
8760
|
-
if (referenceFrag && isFiniteNumber(referenceFrag.start)) {
|
8761
|
-
logger.log(`Adjusting PTS using last level due to CC increase within current level ${details.url}`);
|
8762
|
-
adjustSlidingStart(referenceFrag.start, details);
|
8763
|
-
}
|
8740
|
+
function alignDiscontinuities(details, refDetails) {
|
8741
|
+
if (!shouldAlignOnDiscontinuities(refDetails, details)) {
|
8742
|
+
return;
|
8764
8743
|
}
|
8744
|
+
const targetCC = Math.min(refDetails.endCC, details.endCC);
|
8745
|
+
const refFrag = findFirstFragWithCC(refDetails.fragments, targetCC);
|
8746
|
+
const frag = findFirstFragWithCC(details.fragments, targetCC);
|
8747
|
+
if (!refFrag || !frag) {
|
8748
|
+
return;
|
8749
|
+
}
|
8750
|
+
logger.log(`Aligning playlist at start of dicontinuity sequence ${targetCC}`);
|
8751
|
+
const delta = refFrag.start - frag.start;
|
8752
|
+
adjustSlidingStart(delta, details);
|
8765
8753
|
}
|
8766
8754
|
|
8767
8755
|
/**
|
@@ -9896,7 +9884,7 @@ class BaseStreamController extends TaskLoop {
|
|
9896
9884
|
return;
|
9897
9885
|
}
|
9898
9886
|
if ('payload' in data) {
|
9899
|
-
this.log(`Loaded
|
9887
|
+
this.log(`Loaded ${frag.type} sn: ${frag.sn} of ${this.playlistLabel()} ${frag.level}`);
|
9900
9888
|
this.hls.trigger(Events.FRAG_LOADED, data);
|
9901
9889
|
}
|
9902
9890
|
|
@@ -10046,9 +10034,9 @@ class BaseStreamController extends TaskLoop {
|
|
10046
10034
|
return !frag || !fragCurrent || frag.sn !== fragCurrent.sn || frag.level !== fragCurrent.level;
|
10047
10035
|
}
|
10048
10036
|
fragBufferedComplete(frag, part) {
|
10049
|
-
var
|
10037
|
+
var _this$fragCurrent, _this$fragPrevious;
|
10050
10038
|
const media = this.mediaBuffer ? this.mediaBuffer : this.media;
|
10051
|
-
this.log(`Buffered ${frag.type} sn: ${frag.sn}${part ? ' part: ' + part.index : ''} of ${this.
|
10039
|
+
this.log(`Buffered ${frag.type} sn: ${frag.sn}${part ? ' part: ' + part.index : ''} of ${this.fragInfo(frag)} > buffer:${media ? TimeRanges.toString(BufferHelper.getBuffered(media)) : '(detached)'})`);
|
10052
10040
|
if (frag.sn !== 'initSegment') {
|
10053
10041
|
var _this$levels;
|
10054
10042
|
if (frag.type !== PlaylistLevelType.SUBTITLE) {
|
@@ -10105,7 +10093,7 @@ class BaseStreamController extends TaskLoop {
|
|
10105
10093
|
}
|
10106
10094
|
let keyLoadingPromise = null;
|
10107
10095
|
if (frag.encrypted && !((_frag$decryptdata = frag.decryptdata) != null && _frag$decryptdata.key)) {
|
10108
|
-
this.log(`Loading key for ${frag.sn} of [${details.startSN}-${details.endSN}], ${this.
|
10096
|
+
this.log(`Loading key for ${frag.sn} of [${details.startSN}-${details.endSN}], ${this.playlistLabel()} ${frag.level}`);
|
10109
10097
|
this.state = State.KEY_LOADING;
|
10110
10098
|
this.fragCurrent = frag;
|
10111
10099
|
keyLoadingPromise = this.keyLoader.load(frag).then(keyLoadedData => {
|
@@ -10144,7 +10132,7 @@ class BaseStreamController extends TaskLoop {
|
|
10144
10132
|
const partIndex = this.getNextPart(partList, frag, targetBufferTime);
|
10145
10133
|
if (partIndex > -1) {
|
10146
10134
|
const part = partList[partIndex];
|
10147
|
-
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.
|
10135
|
+
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))}`);
|
10148
10136
|
this.nextLoadPosition = part.start + part.duration;
|
10149
10137
|
this.state = State.FRAG_LOADING;
|
10150
10138
|
let _result;
|
@@ -10180,7 +10168,7 @@ class BaseStreamController extends TaskLoop {
|
|
10180
10168
|
// Selected fragment hint for part but not loading parts
|
10181
10169
|
return Promise.resolve(null);
|
10182
10170
|
}
|
10183
|
-
this.log(`Loading
|
10171
|
+
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))}`);
|
10184
10172
|
// Don't update nextLoadPosition for fragments which are not buffered
|
10185
10173
|
if (isFiniteNumber(frag.sn) && !this.bitrateTest) {
|
10186
10174
|
this.nextLoadPosition = frag.start + frag.duration;
|
@@ -10959,11 +10947,19 @@ class BaseStreamController extends TaskLoop {
|
|
10959
10947
|
// For this error fallthrough. Marking parsed will allow advancing to next fragment.
|
10960
10948
|
}
|
10961
10949
|
this.state = State.PARSED;
|
10950
|
+
this.log(`Parsed ${frag.type} sn: ${frag.sn}${part ? ' part: ' + part.index : ''} of ${this.fragInfo(frag)})`);
|
10962
10951
|
this.hls.trigger(Events.FRAG_PARSED, {
|
10963
10952
|
frag,
|
10964
10953
|
part
|
10965
10954
|
});
|
10966
10955
|
}
|
10956
|
+
playlistLabel() {
|
10957
|
+
return this.playlistType === PlaylistLevelType.MAIN ? 'level' : 'track';
|
10958
|
+
}
|
10959
|
+
fragInfo(frag, pts = true) {
|
10960
|
+
var _ref, _ref2;
|
10961
|
+
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)}]`;
|
10962
|
+
}
|
10967
10963
|
resetTransmuxer() {
|
10968
10964
|
if (this.transmuxer) {
|
10969
10965
|
this.transmuxer.destroy();
|
@@ -29268,7 +29264,7 @@ class Hls {
|
|
29268
29264
|
* Get the video-dev/hls.js package version.
|
29269
29265
|
*/
|
29270
29266
|
static get version() {
|
29271
|
-
return "1.5.14-0.canary.
|
29267
|
+
return "1.5.14-0.canary.10431";
|
29272
29268
|
}
|
29273
29269
|
|
29274
29270
|
/**
|