hls.js 1.5.5-0.canary.9985 → 1.5.5-0.canary.9987
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 +64 -7
- package/dist/hls.js.d.ts +2 -0
- package/dist/hls.js.map +1 -1
- package/dist/hls.light.js +63 -6
- 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 +63 -6
- 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 +64 -7
- package/dist/hls.mjs.map +1 -1
- package/dist/hls.worker.js +1 -1
- package/package.json +1 -1
- package/src/controller/base-stream-controller.ts +93 -4
- package/src/controller/subtitle-stream-controller.ts +1 -1
package/dist/hls.light.js
CHANGED
@@ -613,7 +613,7 @@
|
|
613
613
|
// Some browsers don't allow to use bind on console object anyway
|
614
614
|
// fallback to default if needed
|
615
615
|
try {
|
616
|
-
newLogger.log("Debug logs enabled for \"" + context + "\" in hls.js version " + "1.5.5-0.canary.
|
616
|
+
newLogger.log("Debug logs enabled for \"" + context + "\" in hls.js version " + "1.5.5-0.canary.9987");
|
617
617
|
} catch (e) {
|
618
618
|
/* log fn threw an exception. All logger methods are no-ops. */
|
619
619
|
return createLogger();
|
@@ -12307,6 +12307,7 @@
|
|
12307
12307
|
_this.decrypter = void 0;
|
12308
12308
|
_this.initPTS = [];
|
12309
12309
|
_this.buffering = true;
|
12310
|
+
_this.loadingParts = false;
|
12310
12311
|
_this.onMediaSeeking = function () {
|
12311
12312
|
var _assertThisInitialize = _assertThisInitialized(_this),
|
12312
12313
|
config = _assertThisInitialize.config,
|
@@ -12342,6 +12343,14 @@
|
|
12342
12343
|
// Remove gap fragments
|
12343
12344
|
_this.fragmentTracker.removeFragmentsInRange(currentTime, Infinity, _this.playlistType, true);
|
12344
12345
|
_this.lastCurrentTime = currentTime;
|
12346
|
+
if (!_this.loadingParts) {
|
12347
|
+
var bufferEnd = Math.max(bufferInfo.end, currentTime);
|
12348
|
+
var shouldLoadParts = _this.shouldLoadParts(_this.getLevelDetails(), bufferEnd);
|
12349
|
+
if (shouldLoadParts) {
|
12350
|
+
_this.log("LL-Part loading ON after seeking to " + currentTime.toFixed(2) + " with buffer @" + bufferEnd.toFixed(2));
|
12351
|
+
_this.loadingParts = shouldLoadParts;
|
12352
|
+
}
|
12353
|
+
}
|
12345
12354
|
}
|
12346
12355
|
|
12347
12356
|
// in case seeking occurs although no media buffered, adjust startPosition and nextLoadPosition to seek target
|
@@ -12751,8 +12760,16 @@
|
|
12751
12760
|
} else if (!frag.encrypted && details.encryptedFragments.length) {
|
12752
12761
|
this.keyLoader.loadClear(frag, details.encryptedFragments);
|
12753
12762
|
}
|
12763
|
+
var fragPrevious = this.fragPrevious;
|
12764
|
+
if (frag.sn !== 'initSegment' && (!fragPrevious || frag.sn !== fragPrevious.sn)) {
|
12765
|
+
var shouldLoadParts = this.shouldLoadParts(level.details, frag.end);
|
12766
|
+
if (shouldLoadParts !== this.loadingParts) {
|
12767
|
+
this.log("LL-Part loading " + (shouldLoadParts ? 'ON' : 'OFF') + " loading sn " + (fragPrevious == null ? void 0 : fragPrevious.sn) + "->" + frag.sn);
|
12768
|
+
this.loadingParts = shouldLoadParts;
|
12769
|
+
}
|
12770
|
+
}
|
12754
12771
|
targetBufferTime = Math.max(frag.start, targetBufferTime || 0);
|
12755
|
-
if (this.
|
12772
|
+
if (this.loadingParts && frag.sn !== 'initSegment') {
|
12756
12773
|
var partList = details.partList;
|
12757
12774
|
if (partList && progressCallback) {
|
12758
12775
|
if (targetBufferTime > frag.end && details.fragmentHint) {
|
@@ -12794,6 +12811,13 @@
|
|
12794
12811
|
}
|
12795
12812
|
}
|
12796
12813
|
}
|
12814
|
+
if (frag.sn !== 'initSegment' && this.loadingParts) {
|
12815
|
+
this.log("LL-Part loading OFF after next part miss @" + targetBufferTime.toFixed(2));
|
12816
|
+
this.loadingParts = false;
|
12817
|
+
} else if (!frag.url) {
|
12818
|
+
// Selected fragment hint for part but not loading parts
|
12819
|
+
return Promise.resolve(null);
|
12820
|
+
}
|
12797
12821
|
this.log("Loading fragment " + frag.sn + " cc: " + frag.cc + " " + (details ? 'of [' + details.startSN + '-' + details.endSN + '] ' : '') + (this.playlistType === PlaylistLevelType.MAIN ? 'level' : 'track') + ": " + frag.level + ", target: " + parseFloat(targetBufferTime.toFixed(3)));
|
12798
12822
|
// Don't update nextLoadPosition for fragments which are not buffered
|
12799
12823
|
if (isFiniteNumber(frag.sn) && !this.bitrateTest) {
|
@@ -12896,8 +12920,36 @@
|
|
12896
12920
|
if (part) {
|
12897
12921
|
part.stats.parsing.end = now;
|
12898
12922
|
}
|
12923
|
+
// See if part loading should be disabled/enabled based on buffer and playback position.
|
12924
|
+
if (frag.sn !== 'initSegment') {
|
12925
|
+
var levelDetails = this.getLevelDetails();
|
12926
|
+
var loadingPartsAtEdge = levelDetails && frag.sn > levelDetails.endSN;
|
12927
|
+
var shouldLoadParts = loadingPartsAtEdge || this.shouldLoadParts(levelDetails, frag.end);
|
12928
|
+
if (shouldLoadParts !== this.loadingParts) {
|
12929
|
+
this.log("LL-Part loading " + (shouldLoadParts ? 'ON' : 'OFF') + " after parsing segment ending @" + frag.end.toFixed(2));
|
12930
|
+
this.loadingParts = shouldLoadParts;
|
12931
|
+
}
|
12932
|
+
}
|
12899
12933
|
this.updateLevelTiming(frag, part, level, chunkMeta.partial);
|
12900
12934
|
};
|
12935
|
+
_proto.shouldLoadParts = function shouldLoadParts(details, bufferEnd) {
|
12936
|
+
if (this.config.lowLatencyMode) {
|
12937
|
+
if (!details) {
|
12938
|
+
return this.loadingParts;
|
12939
|
+
}
|
12940
|
+
if (details != null && details.partList) {
|
12941
|
+
var _details$fragmentHint;
|
12942
|
+
// Buffer must be ahead of first part + duration of parts after last segment
|
12943
|
+
// and playback must be at or past segment adjacent to part list
|
12944
|
+
var firstPart = details.partList[0];
|
12945
|
+
var safePartStart = firstPart.end + (((_details$fragmentHint = details.fragmentHint) == null ? void 0 : _details$fragmentHint.duration) || 0);
|
12946
|
+
if (bufferEnd >= safePartStart && this.lastCurrentTime > firstPart.start - firstPart.fragment.duration) {
|
12947
|
+
return true;
|
12948
|
+
}
|
12949
|
+
}
|
12950
|
+
}
|
12951
|
+
return false;
|
12952
|
+
};
|
12901
12953
|
_proto.getCurrentContext = function getCurrentContext(chunkMeta) {
|
12902
12954
|
var levels = this.levels,
|
12903
12955
|
fragCurrent = this.fragCurrent;
|
@@ -13032,7 +13084,8 @@
|
|
13032
13084
|
// find fragment index, contiguous with end of buffer position
|
13033
13085
|
var config = this.config;
|
13034
13086
|
var start = fragments[0].start;
|
13035
|
-
var
|
13087
|
+
var canLoadParts = config.lowLatencyMode && !!levelDetails.partList;
|
13088
|
+
var frag = null;
|
13036
13089
|
if (levelDetails.live) {
|
13037
13090
|
var initialLiveManifestSize = config.initialLiveManifestSize;
|
13038
13091
|
if (fragLen < initialLiveManifestSize) {
|
@@ -13044,6 +13097,10 @@
|
|
13044
13097
|
// Do not load using live logic if the starting frag is requested - we want to use getFragmentAtPosition() so that
|
13045
13098
|
// we get the fragment matching that start time
|
13046
13099
|
if (!levelDetails.PTSKnown && !this.startFragRequested && this.startPosition === -1 || pos < start) {
|
13100
|
+
if (canLoadParts && !this.loadingParts) {
|
13101
|
+
this.log("LL-Part loading ON for initial live fragment");
|
13102
|
+
this.loadingParts = true;
|
13103
|
+
}
|
13047
13104
|
frag = this.getInitialLiveFragment(levelDetails, fragments);
|
13048
13105
|
this.startPosition = this.nextLoadPosition = frag ? this.hls.liveSyncPosition || frag.start : pos;
|
13049
13106
|
}
|
@@ -13054,7 +13111,7 @@
|
|
13054
13111
|
|
13055
13112
|
// If we haven't run into any special cases already, just load the fragment most closely matching the requested position
|
13056
13113
|
if (!frag) {
|
13057
|
-
var end =
|
13114
|
+
var end = this.loadingParts ? levelDetails.partEnd : levelDetails.fragmentEnd;
|
13058
13115
|
frag = this.getFragmentAtPosition(pos, end, levelDetails);
|
13059
13116
|
}
|
13060
13117
|
return this.mapToInitFragWhenRequired(frag);
|
@@ -13168,7 +13225,7 @@
|
|
13168
13225
|
var fragmentHint = levelDetails.fragmentHint;
|
13169
13226
|
var tolerance = config.maxFragLookUpTolerance;
|
13170
13227
|
var partList = levelDetails.partList;
|
13171
|
-
var loadingParts = !!(
|
13228
|
+
var loadingParts = !!(this.loadingParts && partList != null && partList.length && fragmentHint);
|
13172
13229
|
if (loadingParts && fragmentHint && !this.bitrateTest) {
|
13173
13230
|
// Include incomplete fragment with parts at end
|
13174
13231
|
fragments = fragments.concat(fragmentHint);
|
@@ -21268,7 +21325,7 @@
|
|
21268
21325
|
* Get the video-dev/hls.js package version.
|
21269
21326
|
*/
|
21270
21327
|
function get() {
|
21271
|
-
return "1.5.5-0.canary.
|
21328
|
+
return "1.5.5-0.canary.9987";
|
21272
21329
|
}
|
21273
21330
|
}, {
|
21274
21331
|
key: "Events",
|