hls.js 1.6.0-beta.2.0.canary.10925 → 1.6.0-beta.2.0.canary.10926
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 +8 -1
- package/dist/hls.d.ts +8 -1
- package/dist/hls.js +43 -13
- package/dist/hls.js.d.ts +8 -1
- package/dist/hls.js.map +1 -1
- package/dist/hls.light.js +42 -12
- 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 +38 -12
- 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 +39 -13
- package/dist/hls.mjs.map +1 -1
- package/dist/hls.worker.js +1 -1
- package/package.json +1 -1
- package/src/controller/abr-controller.ts +2 -2
- package/src/controller/base-stream-controller.ts +4 -4
- package/src/controller/error-controller.ts +2 -2
- package/src/controller/fragment-tracker.ts +1 -1
- package/src/controller/gap-controller.ts +17 -4
- package/src/controller/interstitials-controller.ts +1 -1
- package/src/controller/level-controller.ts +4 -0
- package/src/controller/stream-controller.ts +1 -1
- package/src/hls.ts +10 -0
- package/src/utils/rendition-helper.ts +1 -1
package/dist/hls.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-beta.2.0.canary.
|
405
|
+
newLogger.log(`Debug logs enabled for "${context}" in hls.js version ${"1.6.0-beta.2.0.canary.10926"}`);
|
406
406
|
} catch (e) {
|
407
407
|
/* log fn threw an exception. All logger methods are no-ops. */
|
408
408
|
return createLogger();
|
@@ -1307,8 +1307,8 @@ function searchDownAndUpList(arr, searchIndex, predicate) {
|
|
1307
1307
|
return -1;
|
1308
1308
|
}
|
1309
1309
|
function useAlternateAudio(audioTrackUrl, hls) {
|
1310
|
-
var _hls$
|
1311
|
-
return !!audioTrackUrl && audioTrackUrl !== ((_hls$
|
1310
|
+
var _hls$loadLevelObj;
|
1311
|
+
return !!audioTrackUrl && audioTrackUrl !== ((_hls$loadLevelObj = hls.loadLevelObj) == null ? undefined : _hls$loadLevelObj.uri);
|
1312
1312
|
}
|
1313
1313
|
|
1314
1314
|
class AbrController extends Logger {
|
@@ -1802,8 +1802,8 @@ class AbrController extends Logger {
|
|
1802
1802
|
}
|
1803
1803
|
// If no matching level found, see if min auto level would be a better option
|
1804
1804
|
const minLevel = hls.levels[minAutoLevel];
|
1805
|
-
const autoLevel = hls.
|
1806
|
-
if ((minLevel == null ? undefined : minLevel.bitrate) <
|
1805
|
+
const autoLevel = hls.loadLevelObj;
|
1806
|
+
if (autoLevel && (minLevel == null ? undefined : minLevel.bitrate) < autoLevel.bitrate) {
|
1807
1807
|
return minAutoLevel;
|
1808
1808
|
}
|
1809
1809
|
// or if bitrate is not lower, continue to use loadLevel
|
@@ -2344,7 +2344,7 @@ class ErrorController extends Logger {
|
|
2344
2344
|
case ErrorDetails.SUBTITLE_LOAD_ERROR:
|
2345
2345
|
case ErrorDetails.SUBTITLE_TRACK_LOAD_TIMEOUT:
|
2346
2346
|
if (context) {
|
2347
|
-
const level = hls.
|
2347
|
+
const level = hls.loadLevelObj;
|
2348
2348
|
if (level && (context.type === PlaylistContextType.AUDIO_TRACK && level.hasAudioGroup(context.groupId) || context.type === PlaylistContextType.SUBTITLE_TRACK && level.hasSubtitleGroup(context.groupId))) {
|
2349
2349
|
// Perform Pathway switch or Redundant failover if possible for fastest recovery
|
2350
2350
|
// otherwise allow playlist retry count to reach max error retries
|
@@ -2357,7 +2357,7 @@ class ErrorController extends Logger {
|
|
2357
2357
|
return;
|
2358
2358
|
case ErrorDetails.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED:
|
2359
2359
|
{
|
2360
|
-
const level = hls.
|
2360
|
+
const level = hls.loadLevelObj;
|
2361
2361
|
const restrictedHdcpLevel = level == null ? undefined : level.attrs['HDCP-LEVEL'];
|
2362
2362
|
if (restrictedHdcpLevel) {
|
2363
2363
|
data.errorAction = {
|
@@ -8892,7 +8892,8 @@ class BaseStreamController extends TaskLoop {
|
|
8892
8892
|
if (bufferInfo.len === 0 && bufferInfo.nextStart !== undefined) {
|
8893
8893
|
const bufferedFragAtPos = this.fragmentTracker.getBufferedFrag(pos, type);
|
8894
8894
|
if (bufferedFragAtPos && (bufferInfo.nextStart <= bufferedFragAtPos.end || bufferedFragAtPos.gap)) {
|
8895
|
-
|
8895
|
+
const gapDuration = Math.max(Math.min(bufferInfo.nextStart, bufferedFragAtPos.end) - pos, maxBufferHole);
|
8896
|
+
return BufferHelper.bufferInfo(bufferable, pos, gapDuration);
|
8896
8897
|
}
|
8897
8898
|
}
|
8898
8899
|
return bufferInfo;
|
@@ -9859,7 +9860,7 @@ var eventemitter3 = {exports: {}};
|
|
9859
9860
|
var eventemitter3Exports = eventemitter3.exports;
|
9860
9861
|
var EventEmitter = /*@__PURE__*/getDefaultExportFromCjs(eventemitter3Exports);
|
9861
9862
|
|
9862
|
-
const version = "1.6.0-beta.2.0.canary.
|
9863
|
+
const version = "1.6.0-beta.2.0.canary.10926";
|
9863
9864
|
|
9864
9865
|
// ensure the worker ends up in the bundle
|
9865
9866
|
// If the worker should not be included this gets aliased to empty.js
|
@@ -25047,7 +25048,7 @@ MediaSource ${JSON.stringify(attachMediaSourceData)} from ${logFromSource}`);
|
|
25047
25048
|
const primary = this.hls;
|
25048
25049
|
const userConfig = primary.userConfig;
|
25049
25050
|
let videoPreference = userConfig.videoPreference;
|
25050
|
-
const currentLevel = primary.
|
25051
|
+
const currentLevel = primary.loadLevelObj || primary.levels[primary.currentLevel];
|
25051
25052
|
if (videoPreference || currentLevel) {
|
25052
25053
|
videoPreference = _extends({}, videoPreference);
|
25053
25054
|
if (currentLevel.videoCodec) {
|
@@ -30139,7 +30140,7 @@ class GapController extends TaskLoop {
|
|
30139
30140
|
const currentTime = media.currentTime;
|
30140
30141
|
const bufferInfo = BufferHelper.bufferInfo(media, currentTime, 0);
|
30141
30142
|
const startTime = currentTime < bufferInfo.start ? bufferInfo.start : bufferInfo.nextStart;
|
30142
|
-
if (startTime) {
|
30143
|
+
if (startTime && this.hls) {
|
30143
30144
|
const bufferStarved = bufferInfo.len <= config.maxBufferHole;
|
30144
30145
|
const waiting = bufferInfo.len > 0 && bufferInfo.len < 1 && media.readyState < 3;
|
30145
30146
|
const gapLength = startTime - currentTime;
|
@@ -30156,6 +30157,17 @@ class GapController extends TaskLoop {
|
|
30156
30157
|
if (!startGap) {
|
30157
30158
|
const startProvisioned = partial || fragmentTracker.getAppendedFrag(currentTime, PlaylistLevelType.MAIN);
|
30158
30159
|
if (startProvisioned) {
|
30160
|
+
var _this$hls$loadLevelOb;
|
30161
|
+
// Do not seek when selected variant playlist is unloaded
|
30162
|
+
if (!((_this$hls$loadLevelOb = this.hls.loadLevelObj) != null && _this$hls$loadLevelOb.details)) {
|
30163
|
+
return 0;
|
30164
|
+
}
|
30165
|
+
// Do not seek when required fragments are inflight or appending
|
30166
|
+
const inFlightDependency = getInFlightDependency(this.hls.inFlightFragments, startTime);
|
30167
|
+
if (inFlightDependency) {
|
30168
|
+
return 0;
|
30169
|
+
}
|
30170
|
+
// Do not seek if we can't walk tracked fragments to end of gap
|
30159
30171
|
let moreToLoad = false;
|
30160
30172
|
let pos = startProvisioned.end;
|
30161
30173
|
while (pos < startTime) {
|
@@ -30177,7 +30189,7 @@ class GapController extends TaskLoop {
|
|
30177
30189
|
this.warn(`skipping hole, adjusting currentTime from ${currentTime} to ${targetTime}`);
|
30178
30190
|
this.moved = true;
|
30179
30191
|
media.currentTime = targetTime;
|
30180
|
-
if (!(partial != null && partial.gap)
|
30192
|
+
if (!(partial != null && partial.gap)) {
|
30181
30193
|
const error = new Error(`fragment loaded with buffer holes, seeking from ${currentTime} to ${targetTime}`);
|
30182
30194
|
this.hls.trigger(Events.ERROR, {
|
30183
30195
|
type: ErrorTypes.MEDIA_ERROR,
|
@@ -31131,6 +31143,9 @@ class LevelController extends BasePlaylistController {
|
|
31131
31143
|
}
|
31132
31144
|
return this._levels;
|
31133
31145
|
}
|
31146
|
+
get loadLevelObj() {
|
31147
|
+
return this.currentLevel;
|
31148
|
+
}
|
31134
31149
|
get level() {
|
31135
31150
|
return this.currentLevelIndex;
|
31136
31151
|
}
|
@@ -31616,7 +31631,7 @@ class StreamController extends BaseStreamController {
|
|
31616
31631
|
onTickEnd() {
|
31617
31632
|
var _this$media2;
|
31618
31633
|
super.onTickEnd();
|
31619
|
-
if ((_this$media2 = this.media) != null && _this$media2.readyState) {
|
31634
|
+
if ((_this$media2 = this.media) != null && _this$media2.readyState && this.media.seeking === false) {
|
31620
31635
|
this.lastCurrentTime = this.media.currentTime;
|
31621
31636
|
}
|
31622
31637
|
this.checkFragmentChanged();
|
@@ -34000,10 +34015,21 @@ class Hls {
|
|
34000
34015
|
const levels = this.levelController.levels;
|
34001
34016
|
return levels ? levels : [];
|
34002
34017
|
}
|
34018
|
+
|
34019
|
+
/**
|
34020
|
+
* @returns LevelDetails of last loaded level (variant) or `null` prior to loading a media playlist.
|
34021
|
+
*/
|
34003
34022
|
get latestLevelDetails() {
|
34004
34023
|
return this.streamController.getLevelDetails() || null;
|
34005
34024
|
}
|
34006
34025
|
|
34026
|
+
/**
|
34027
|
+
* @returns Level object of selected level (variant) or `null` prior to selecting a level or once the level is removed.
|
34028
|
+
*/
|
34029
|
+
get loadLevelObj() {
|
34030
|
+
return this.levelController.loadLevelObj;
|
34031
|
+
}
|
34032
|
+
|
34007
34033
|
/**
|
34008
34034
|
* Index of quality level (variant) currently played
|
34009
34035
|
*/
|