hls.js 1.6.0-rc.1.0.canary.11078 → 1.6.0-rc.1.0.canary.11080
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.d.mts +12 -3
- package/dist/hls.d.ts +12 -3
- package/dist/hls.js +270 -146
- package/dist/hls.js.d.ts +12 -3
- package/dist/hls.js.map +1 -1
- package/dist/hls.light.js +102 -66
- 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 +59 -28
- 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 +191 -75
- package/dist/hls.mjs.map +1 -1
- package/dist/hls.worker.js +1 -1
- package/package.json +1 -1
- package/src/controller/audio-stream-controller.ts +7 -7
- package/src/controller/base-stream-controller.ts +44 -11
- package/src/controller/buffer-controller.ts +21 -13
- package/src/controller/interstitial-player.ts +30 -0
- package/src/controller/interstitials-controller.ts +69 -21
- package/src/controller/interstitials-schedule.ts +14 -10
- package/src/controller/latency-controller.ts +16 -2
- package/src/controller/stream-controller.ts +9 -8
- package/src/controller/subtitle-stream-controller.ts +4 -5
- package/src/loader/interstitial-asset-list.ts +3 -13
- package/src/loader/interstitial-event.ts +20 -2
package/dist/hls.light.mjs
CHANGED
@@ -402,7 +402,7 @@ function enableLogs(debugConfig, context, id) {
|
|
402
402
|
// Some browsers don't allow to use bind on console object anyway
|
403
403
|
// fallback to default if needed
|
404
404
|
try {
|
405
|
-
newLogger.log(`Debug logs enabled for "${context}" in hls.js version ${"1.6.0-rc.1.0.canary.
|
405
|
+
newLogger.log(`Debug logs enabled for "${context}" in hls.js version ${"1.6.0-rc.1.0.canary.11080"}`);
|
406
406
|
} catch (e) {
|
407
407
|
/* log fn threw an exception. All logger methods are no-ops. */
|
408
408
|
return createLogger();
|
@@ -7964,6 +7964,14 @@ class BaseStreamController extends TaskLoop {
|
|
7964
7964
|
return (_this$levelLastLoaded = this.levelLastLoaded) == null ? void 0 : _this$levelLastLoaded.details;
|
7965
7965
|
}
|
7966
7966
|
}
|
7967
|
+
get timelineOffset() {
|
7968
|
+
const configuredTimelineOffset = this.config.timelineOffset;
|
7969
|
+
if (configuredTimelineOffset) {
|
7970
|
+
var _this$getLevelDetails;
|
7971
|
+
return ((_this$getLevelDetails = this.getLevelDetails()) == null ? void 0 : _this$getLevelDetails.appliedTimelineOffset) || configuredTimelineOffset;
|
7972
|
+
}
|
7973
|
+
return 0;
|
7974
|
+
}
|
7967
7975
|
onMediaAttached(event, data) {
|
7968
7976
|
const media = this.media = this.mediaBuffer = data.media;
|
7969
7977
|
media.removeEventListener('seeking', this.onMediaSeeking);
|
@@ -8661,8 +8669,8 @@ class BaseStreamController extends TaskLoop {
|
|
8661
8669
|
const end = this.loadingParts ? levelDetails.partEnd : levelDetails.fragmentEnd;
|
8662
8670
|
frag = this.getFragmentAtPosition(pos, end, levelDetails);
|
8663
8671
|
}
|
8664
|
-
|
8665
|
-
return this.mapToInitFragWhenRequired(
|
8672
|
+
const programFrag = this.filterReplacedPrimary(frag, levelDetails);
|
8673
|
+
return this.mapToInitFragWhenRequired(programFrag);
|
8666
8674
|
}
|
8667
8675
|
isLoopLoading(frag, targetBufferTime) {
|
8668
8676
|
const trackerState = this.fragmentTracker.getState(frag);
|
@@ -8689,11 +8697,15 @@ class BaseStreamController extends TaskLoop {
|
|
8689
8697
|
this.loopSn = undefined;
|
8690
8698
|
return nextFragment;
|
8691
8699
|
}
|
8700
|
+
get primaryPrefetch() {
|
8701
|
+
if (interstitialsEnabled(this.hls.config)) ;
|
8702
|
+
return false;
|
8703
|
+
}
|
8692
8704
|
filterReplacedPrimary(frag, details) {
|
8693
8705
|
if (!frag) {
|
8694
8706
|
return frag;
|
8695
8707
|
}
|
8696
|
-
this.hls.config;
|
8708
|
+
if (interstitialsEnabled(this.hls.config)) ;
|
8697
8709
|
return frag;
|
8698
8710
|
}
|
8699
8711
|
mapToInitFragWhenRequired(frag) {
|
@@ -8865,6 +8877,7 @@ class BaseStreamController extends TaskLoop {
|
|
8865
8877
|
if (startPosition < sliding) {
|
8866
8878
|
startPosition = -1;
|
8867
8879
|
}
|
8880
|
+
const timelineOffset = this.timelineOffset;
|
8868
8881
|
if (startPosition === -1) {
|
8869
8882
|
// Use Playlist EXT-X-START:TIME-OFFSET when set
|
8870
8883
|
// Prioritize Multivariant Playlist offset so that main, audio, and subtitle stream-controller start times match
|
@@ -8888,9 +8901,9 @@ class BaseStreamController extends TaskLoop {
|
|
8888
8901
|
this.log(`setting startPosition to 0 by default`);
|
8889
8902
|
this.startPosition = startPosition = 0;
|
8890
8903
|
}
|
8891
|
-
this.lastCurrentTime = startPosition;
|
8904
|
+
this.lastCurrentTime = startPosition + timelineOffset;
|
8892
8905
|
}
|
8893
|
-
this.nextLoadPosition = startPosition;
|
8906
|
+
this.nextLoadPosition = startPosition + timelineOffset;
|
8894
8907
|
}
|
8895
8908
|
getLoadPosition() {
|
8896
8909
|
var _this$hls;
|
@@ -9170,6 +9183,9 @@ class BaseStreamController extends TaskLoop {
|
|
9170
9183
|
return this._state;
|
9171
9184
|
}
|
9172
9185
|
}
|
9186
|
+
function interstitialsEnabled(config) {
|
9187
|
+
return false;
|
9188
|
+
}
|
9173
9189
|
|
9174
9190
|
class BufferOperationQueue {
|
9175
9191
|
constructor(sourceBufferReference) {
|
@@ -10210,17 +10226,10 @@ transfer tracks: ${stringify(transferredTracks, (key, value) => key === 'initSeg
|
|
10210
10226
|
return type && !((_this$tracks$type4 = this.tracks[type]) != null && _this$tracks$type4.ended);
|
10211
10227
|
});
|
10212
10228
|
if (allTracksEnding) {
|
10213
|
-
|
10214
|
-
|
10215
|
-
this.
|
10216
|
-
|
10217
|
-
const track = this.tracks[type];
|
10218
|
-
if (track) {
|
10219
|
-
track.ending = false;
|
10220
|
-
}
|
10221
|
-
}
|
10222
|
-
});
|
10223
|
-
if (allowEndOfStream) {
|
10229
|
+
if (allowEndOfStream) {
|
10230
|
+
this.log(`Queueing EOS`);
|
10231
|
+
this.blockUntilOpen(() => {
|
10232
|
+
this.tracksEnded();
|
10224
10233
|
const {
|
10225
10234
|
mediaSource
|
10226
10235
|
} = this;
|
@@ -10233,11 +10242,24 @@ transfer tracks: ${stringify(transferredTracks, (key, value) => key === 'initSeg
|
|
10233
10242
|
this.log(`Calling mediaSource.endOfStream()`);
|
10234
10243
|
// Allow this to throw and be caught by the enqueueing function
|
10235
10244
|
mediaSource.endOfStream();
|
10236
|
-
|
10245
|
+
this.hls.trigger(Events.BUFFERED_TO_END, undefined);
|
10246
|
+
});
|
10247
|
+
} else {
|
10248
|
+
this.tracksEnded();
|
10237
10249
|
this.hls.trigger(Events.BUFFERED_TO_END, undefined);
|
10238
|
-
}
|
10250
|
+
}
|
10239
10251
|
}
|
10240
10252
|
}
|
10253
|
+
tracksEnded() {
|
10254
|
+
this.sourceBuffers.forEach(([type]) => {
|
10255
|
+
if (type !== null) {
|
10256
|
+
const track = this.tracks[type];
|
10257
|
+
if (track) {
|
10258
|
+
track.ending = false;
|
10259
|
+
}
|
10260
|
+
}
|
10261
|
+
});
|
10262
|
+
}
|
10241
10263
|
onLevelUpdated(event, {
|
10242
10264
|
details
|
10243
10265
|
}) {
|
@@ -18861,9 +18883,10 @@ class LatencyController {
|
|
18861
18883
|
if (inLiveRange && distanceFromTarget > 0.05 && this.forwardBufferLength > 1) {
|
18862
18884
|
const max = Math.min(2, Math.max(1.0, maxLiveSyncPlaybackRate));
|
18863
18885
|
const rate = Math.round(2 / (1 + Math.exp(-0.75 * distanceFromTarget - this.edgeStalled)) * 20) / 20;
|
18864
|
-
|
18886
|
+
const playbackRate = Math.min(max, Math.max(1, rate));
|
18887
|
+
this.changeMediaPlaybackRate(media, playbackRate);
|
18865
18888
|
} else if (media.playbackRate !== 1 && media.playbackRate !== 0) {
|
18866
|
-
media
|
18889
|
+
this.changeMediaPlaybackRate(media, 1);
|
18867
18890
|
}
|
18868
18891
|
};
|
18869
18892
|
this.hls = hls;
|
@@ -19022,6 +19045,14 @@ class LatencyController {
|
|
19022
19045
|
this.hls.logger.warn('[latency-controller]: Stall detected, adjusting target latency');
|
19023
19046
|
}
|
19024
19047
|
}
|
19048
|
+
changeMediaPlaybackRate(media, playbackRate) {
|
19049
|
+
var _this$hls2, _this$targetLatency;
|
19050
|
+
if (media.playbackRate === playbackRate) {
|
19051
|
+
return;
|
19052
|
+
}
|
19053
|
+
(_this$hls2 = this.hls) == null ? void 0 : _this$hls2.logger.debug(`[latency-controller]: latency=${this.latency.toFixed(3)}, targetLatency=${(_this$targetLatency = this.targetLatency) == null ? void 0 : _this$targetLatency.toFixed(3)}, forwardBufferLength=${this.forwardBufferLength.toFixed(3)}: adjusting playback rate from ${media.playbackRate} to ${playbackRate}`);
|
19054
|
+
media.playbackRate = playbackRate;
|
19055
|
+
}
|
19025
19056
|
estimateLiveEdge() {
|
19026
19057
|
const levelDetails = this.levelDetails;
|
19027
19058
|
if (levelDetails === null) {
|
@@ -19637,7 +19668,7 @@ function assignTrackIdsByGroup(tracks) {
|
|
19637
19668
|
});
|
19638
19669
|
}
|
19639
19670
|
|
19640
|
-
const version = "1.6.0-rc.1.0.canary.
|
19671
|
+
const version = "1.6.0-rc.1.0.canary.11080";
|
19641
19672
|
|
19642
19673
|
// ensure the worker ends up in the bundle
|
19643
19674
|
// If the worker should not be included this gets aliased to empty.js
|
@@ -20160,7 +20191,7 @@ class StreamController extends BaseStreamController {
|
|
20160
20191
|
startPosition = lastCurrentTime;
|
20161
20192
|
}
|
20162
20193
|
this.state = State.IDLE;
|
20163
|
-
this.nextLoadPosition = this.lastCurrentTime = startPosition;
|
20194
|
+
this.nextLoadPosition = this.lastCurrentTime = startPosition + this.timelineOffset;
|
20164
20195
|
this.startPosition = skipSeekToStartPosition ? -1 : startPosition;
|
20165
20196
|
this.tick();
|
20166
20197
|
} else {
|
@@ -20236,7 +20267,7 @@ class StreamController extends BaseStreamController {
|
|
20236
20267
|
// if start level not parsed yet OR
|
20237
20268
|
// if video not attached AND start fragment already requested OR start frag prefetch not enabled
|
20238
20269
|
// exit loop, as we either need more info (level not parsed) or we need media to be attached to load new fragment
|
20239
|
-
if (levelLastLoaded === null || !media && (this.startFragRequested || !hls.config.startFragPrefetch)) {
|
20270
|
+
if (levelLastLoaded === null || !media && !this.primaryPrefetch && (this.startFragRequested || !hls.config.startFragPrefetch)) {
|
20240
20271
|
return;
|
20241
20272
|
}
|
20242
20273
|
|
@@ -20866,11 +20897,11 @@ class StreamController extends BaseStreamController {
|
|
20866
20897
|
}
|
20867
20898
|
|
20868
20899
|
// Offset start position by timeline offset
|
20869
|
-
const
|
20870
|
-
|
20871
|
-
|
20872
|
-
startPosition += (details == null ? void 0 : details.appliedTimelineOffset) || configuredTimelineOffset;
|
20900
|
+
const timelineOffset = this.timelineOffset;
|
20901
|
+
if (timelineOffset && startPosition) {
|
20902
|
+
startPosition += timelineOffset;
|
20873
20903
|
}
|
20904
|
+
const details = this.getLevelDetails();
|
20874
20905
|
const buffered = BufferHelper.getBuffered(media);
|
20875
20906
|
const bufferStart = buffered.length ? buffered.start(0) : 0;
|
20876
20907
|
const delta = bufferStart - startPosition;
|