hls.js 1.6.0-beta.1.0.canary.10751 → 1.6.0-beta.1.0.canary.10752
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/README.md +6 -11
- package/dist/hls.d.mts +4 -0
- package/dist/hls.d.ts +4 -0
- package/dist/hls.js +48 -4
- package/dist/hls.js.d.ts +4 -0
- package/dist/hls.js.map +1 -1
- package/dist/hls.light.js +48 -4
- 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 +44 -4
- 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 +44 -4
- package/dist/hls.mjs.map +1 -1
- package/dist/hls.worker.js +1 -1
- package/dist/hls.worker.js.map +1 -1
- package/package.json +1 -1
- package/src/controller/abr-controller.ts +6 -5
- package/src/loader/fragment-loader.ts +1 -1
- package/src/loader/fragment.ts +33 -0
- package/src/loader/m3u8-parser.ts +10 -0
package/dist/hls.mjs
CHANGED
@@ -400,7 +400,7 @@ function enableLogs(debugConfig, context, id) {
|
|
400
400
|
// Some browsers don't allow to use bind on console object anyway
|
401
401
|
// fallback to default if needed
|
402
402
|
try {
|
403
|
-
newLogger.log(`Debug logs enabled for "${context}" in hls.js version ${"1.6.0-beta.1.0.canary.
|
403
|
+
newLogger.log(`Debug logs enabled for "${context}" in hls.js version ${"1.6.0-beta.1.0.canary.10752"}`);
|
404
404
|
} catch (e) {
|
405
405
|
/* log fn threw an exception. All logger methods are no-ops. */
|
406
406
|
return createLogger();
|
@@ -1375,7 +1375,7 @@ class AbrController extends Logger {
|
|
1375
1375
|
const bwEstimate = this.getBwEstimate();
|
1376
1376
|
const levels = hls.levels;
|
1377
1377
|
const level = levels[frag.level];
|
1378
|
-
const expectedLen =
|
1378
|
+
const expectedLen = Math.max(stats.loaded, Math.round(duration * (frag.bitrate || level.averageBitrate) / 8));
|
1379
1379
|
let timeStreaming = loadedFirstByte ? timeLoading - ttfb : timeLoading;
|
1380
1380
|
if (timeStreaming < 1 && loadedFirstByte) {
|
1381
1381
|
timeStreaming = Math.min(timeLoading, stats.loaded * 8 / bwEstimate);
|
@@ -1933,7 +1933,7 @@ class AbrController extends Logger {
|
|
1933
1933
|
}
|
1934
1934
|
|
1935
1935
|
// Use average bitrate when starvation delay (buffer length) is gt or eq two segment durations and rebuffering is not expected (maxStarvationDelay > 0)
|
1936
|
-
const bitrate = currentFragDuration && bufferStarvationDelay >= currentFragDuration * 2 && maxStarvationDelay === 0 ?
|
1936
|
+
const bitrate = currentFragDuration && bufferStarvationDelay >= currentFragDuration * 2 && maxStarvationDelay === 0 ? levelInfo.averageBitrate : levelInfo.maxBitrate;
|
1937
1937
|
const fetchDuration = this.getTimeToLoadFrag(ttfbEstimateSec, adjustedbw, bitrate * avgDuration, levelDetails === undefined);
|
1938
1938
|
const canSwitchWithinTolerance =
|
1939
1939
|
// if adjusted bw is greater than level bitrate AND
|
@@ -3737,6 +3737,8 @@ class Fragment extends BaseSegment {
|
|
3737
3737
|
this._decryptdata = null;
|
3738
3738
|
this._programDateTime = null;
|
3739
3739
|
this._ref = null;
|
3740
|
+
// Approximate bit rate of the fragment expressed in bits per second (bps) as indicated by the last EXT-X-BITRATE (kbps) tag
|
3741
|
+
this._bitrate = void 0;
|
3740
3742
|
this.rawProgramDateTime = null;
|
3741
3743
|
this.tagList = [];
|
3742
3744
|
// EXTINF has to be present for a m3u8 to be considered valid
|
@@ -3791,6 +3793,34 @@ class Fragment extends BaseSegment {
|
|
3791
3793
|
this.urlId = 0;
|
3792
3794
|
this.type = type;
|
3793
3795
|
}
|
3796
|
+
get byteLength() {
|
3797
|
+
if (this.hasStats) {
|
3798
|
+
const total = this.stats.total;
|
3799
|
+
if (total) {
|
3800
|
+
return total;
|
3801
|
+
}
|
3802
|
+
}
|
3803
|
+
if (this.byteRange) {
|
3804
|
+
const start = this.byteRange[0];
|
3805
|
+
const end = this.byteRange[1];
|
3806
|
+
if (isFiniteNumber(start) && isFiniteNumber(end)) {
|
3807
|
+
return end - start;
|
3808
|
+
}
|
3809
|
+
}
|
3810
|
+
return null;
|
3811
|
+
}
|
3812
|
+
get bitrate() {
|
3813
|
+
if (this.byteLength) {
|
3814
|
+
return this.byteLength * 8 / this.duration;
|
3815
|
+
}
|
3816
|
+
if (this._bitrate) {
|
3817
|
+
return this._bitrate;
|
3818
|
+
}
|
3819
|
+
return null;
|
3820
|
+
}
|
3821
|
+
set bitrate(value) {
|
3822
|
+
this._bitrate = value;
|
3823
|
+
}
|
3794
3824
|
get decryptdata() {
|
3795
3825
|
const {
|
3796
3826
|
levelkeys
|
@@ -6918,6 +6948,7 @@ class M3U8Parser {
|
|
6918
6948
|
let currentPart = 0;
|
6919
6949
|
let totalduration = 0;
|
6920
6950
|
let discontinuityCounter = 0;
|
6951
|
+
let currentBitrate = 0;
|
6921
6952
|
let prevFrag = null;
|
6922
6953
|
let frag = new Fragment(type, base);
|
6923
6954
|
let result;
|
@@ -6938,6 +6969,9 @@ class M3U8Parser {
|
|
6938
6969
|
frag.start = totalduration;
|
6939
6970
|
frag.sn = currentSN;
|
6940
6971
|
frag.cc = discontinuityCounter;
|
6972
|
+
if (currentBitrate) {
|
6973
|
+
frag.bitrate = currentBitrate;
|
6974
|
+
}
|
6941
6975
|
frag.level = id;
|
6942
6976
|
if (currentInitSegment) {
|
6943
6977
|
frag.initSegment = currentInitSegment;
|
@@ -7067,6 +7101,12 @@ class M3U8Parser {
|
|
7067
7101
|
break;
|
7068
7102
|
case 'BITRATE':
|
7069
7103
|
frag.tagList.push([tag, value1]);
|
7104
|
+
currentBitrate = parseInt(value1) * 1000;
|
7105
|
+
if (isFiniteNumber(currentBitrate)) {
|
7106
|
+
frag.bitrate = currentBitrate;
|
7107
|
+
} else {
|
7108
|
+
currentBitrate = 0;
|
7109
|
+
}
|
7070
7110
|
break;
|
7071
7111
|
case 'DATERANGE':
|
7072
7112
|
{
|
@@ -9734,7 +9774,7 @@ var eventemitter3 = {exports: {}};
|
|
9734
9774
|
var eventemitter3Exports = eventemitter3.exports;
|
9735
9775
|
var EventEmitter = /*@__PURE__*/getDefaultExportFromCjs(eventemitter3Exports);
|
9736
9776
|
|
9737
|
-
const version = "1.6.0-beta.1.0.canary.
|
9777
|
+
const version = "1.6.0-beta.1.0.canary.10752";
|
9738
9778
|
|
9739
9779
|
// ensure the worker ends up in the bundle
|
9740
9780
|
// If the worker should not be included this gets aliased to empty.js
|