hls.js 1.6.0-beta.1.0.canary.10750 → 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 +5 -1
- package/dist/hls.d.ts +5 -1
- package/dist/hls.js +74 -24
- package/dist/hls.js.d.ts +5 -1
- package/dist/hls.js.map +1 -1
- package/dist/hls.light.js +74 -24
- 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 +69 -23
- 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 +69 -23
- 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/controller/base-stream-controller.ts +29 -21
- package/src/controller/stream-controller.ts +5 -4
- package/src/demux/transmuxer-interface.ts +4 -2
- package/src/demux/transmuxer.ts +1 -1
- package/src/loader/fragment-loader.ts +1 -1
- package/src/loader/fragment.ts +33 -0
- package/src/loader/m3u8-parser.ts +10 -0
package/README.md
CHANGED
@@ -86,20 +86,18 @@ For details on the HLS format and these tags' meanings, see https://datatracker.
|
|
86
86
|
- `#EXT-X-CONTENT-STEERING:<attribute-list>` Content Steering
|
87
87
|
- `#EXT-X-DEFINE:<attribute-list>` Variable Substitution (`NAME,VALUE,QUERYPARAM` attributes)
|
88
88
|
|
89
|
-
The following properties are added to their respective variants' attribute list but are not implemented in their selection and playback.
|
90
|
-
|
91
|
-
- `VIDEO-RANGE` (See [#2489](https://github.com/video-dev/hls.js/issues/2489))
|
92
|
-
|
93
89
|
#### Media Playlist tags
|
94
90
|
|
95
|
-
- `#EXTM3U`
|
96
|
-
- `#EXT-X-
|
91
|
+
- `#EXTM3U` (ignored)
|
92
|
+
- `#EXT-X-INDEPENDENT-SEGMENTS` (ignored)
|
93
|
+
- `#EXT-X-VERSION=<n>` (value is ignored)
|
97
94
|
- `#EXTINF:<duration>,[<title>]`
|
98
95
|
- `#EXT-X-ENDLIST`
|
99
96
|
- `#EXT-X-MEDIA-SEQUENCE=<n>`
|
100
97
|
- `#EXT-X-TARGETDURATION=<n>`
|
101
98
|
- `#EXT-X-DISCONTINUITY`
|
102
99
|
- `#EXT-X-DISCONTINUITY-SEQUENCE=<n>`
|
100
|
+
- `#EXT-X-BITRATE`
|
103
101
|
- `#EXT-X-BYTERANGE=<n>[@<o>]`
|
104
102
|
- `#EXT-X-MAP:<attribute-list>`
|
105
103
|
- `#EXT-X-KEY:<attribute-list>` (`KEYFORMAT="identity",METHOD=SAMPLE-AES` is only supports with MPEG-2 TS segments)
|
@@ -115,11 +113,7 @@ The following properties are added to their respective variants' attribute list
|
|
115
113
|
- `#EXT-X-DEFINE:<attribute-list>` Variable Import and Substitution (`NAME,VALUE,IMPORT,QUERYPARAM` attributes)
|
116
114
|
- `#EXT-X-GAP` (Skips loading GAP segments and parts. Skips playback of unbuffered program containing only GAP content and no suitable alternates. See [#2940](https://github.com/video-dev/hls.js/issues/2940))
|
117
115
|
|
118
|
-
|
119
|
-
|
120
|
-
- `#EXT-X-BITRATE` (Not used in ABR controller)
|
121
|
-
|
122
|
-
Parsed but missing feature support
|
116
|
+
Parsed but missing feature support:
|
123
117
|
|
124
118
|
- `#EXT-X-PRELOAD-HINT:<attribute-list>` (See [#5074](https://github.com/video-dev/hls.js/issues/3988))
|
125
119
|
- #5074
|
@@ -129,6 +123,7 @@ Parsed but missing feature support
|
|
129
123
|
For a complete list of issues, see ["Top priorities" in the Release Planning and Backlog project tab](https://github.com/video-dev/hls.js/projects/6). Codec support is dependent on the runtime environment (for example, not all browsers on the same OS support HEVC).
|
130
124
|
|
131
125
|
- `#EXT-X-I-FRAME-STREAM-INF` I-frame Media Playlist files
|
126
|
+
- `REQ-VIDEO-LAYOUT` is not used in variant filtering or selection
|
132
127
|
- "identity" format `SAMPLE-AES` method keys with fmp4, aac, mp3, vtt... segments (MPEG-2 TS only)
|
133
128
|
- MPEG-2 TS segments with FairPlay Streaming, PlayReady, or Widevine encryption
|
134
129
|
- FairPlay Streaming legacy keys (For com.apple.fps.1_0 use native Safari playback)
|
package/dist/hls.d.mts
CHANGED
@@ -328,7 +328,7 @@ export declare class BaseStreamController extends TaskLoop implements NetworkCom
|
|
328
328
|
protected clearTrackerIfNeeded(frag: Fragment): void;
|
329
329
|
protected checkLiveUpdate(details: LevelDetails): void;
|
330
330
|
protected flushMainBuffer(startOffset: number, endOffset: number, type?: SourceBufferName | null): void;
|
331
|
-
protected _loadInitSegment(
|
331
|
+
protected _loadInitSegment(fragment: Fragment, level: Level): void;
|
332
332
|
private completeInitSegmentLoad;
|
333
333
|
protected fragContextChanged(frag: Fragment | null): boolean;
|
334
334
|
protected fragBufferedComplete(frag: Fragment, part: Part | null): void;
|
@@ -1290,6 +1290,7 @@ export declare class Fragment extends BaseSegment {
|
|
1290
1290
|
private _decryptdata;
|
1291
1291
|
private _programDateTime;
|
1292
1292
|
private _ref;
|
1293
|
+
private _bitrate?;
|
1293
1294
|
rawProgramDateTime: string | null;
|
1294
1295
|
tagList: Array<string[]>;
|
1295
1296
|
duration: number;
|
@@ -1319,6 +1320,9 @@ export declare class Fragment extends BaseSegment {
|
|
1319
1320
|
gap?: boolean;
|
1320
1321
|
urlId: number;
|
1321
1322
|
constructor(type: PlaylistLevelType, base: Base | string);
|
1323
|
+
get byteLength(): number | null;
|
1324
|
+
get bitrate(): number | null;
|
1325
|
+
set bitrate(value: number);
|
1322
1326
|
get decryptdata(): LevelKey | null;
|
1323
1327
|
get end(): number;
|
1324
1328
|
get endProgramDateTime(): number | null;
|
package/dist/hls.d.ts
CHANGED
@@ -328,7 +328,7 @@ export declare class BaseStreamController extends TaskLoop implements NetworkCom
|
|
328
328
|
protected clearTrackerIfNeeded(frag: Fragment): void;
|
329
329
|
protected checkLiveUpdate(details: LevelDetails): void;
|
330
330
|
protected flushMainBuffer(startOffset: number, endOffset: number, type?: SourceBufferName | null): void;
|
331
|
-
protected _loadInitSegment(
|
331
|
+
protected _loadInitSegment(fragment: Fragment, level: Level): void;
|
332
332
|
private completeInitSegmentLoad;
|
333
333
|
protected fragContextChanged(frag: Fragment | null): boolean;
|
334
334
|
protected fragBufferedComplete(frag: Fragment, part: Part | null): void;
|
@@ -1290,6 +1290,7 @@ export declare class Fragment extends BaseSegment {
|
|
1290
1290
|
private _decryptdata;
|
1291
1291
|
private _programDateTime;
|
1292
1292
|
private _ref;
|
1293
|
+
private _bitrate?;
|
1293
1294
|
rawProgramDateTime: string | null;
|
1294
1295
|
tagList: Array<string[]>;
|
1295
1296
|
duration: number;
|
@@ -1319,6 +1320,9 @@ export declare class Fragment extends BaseSegment {
|
|
1319
1320
|
gap?: boolean;
|
1320
1321
|
urlId: number;
|
1321
1322
|
constructor(type: PlaylistLevelType, base: Base | string);
|
1323
|
+
get byteLength(): number | null;
|
1324
|
+
get bitrate(): number | null;
|
1325
|
+
set bitrate(value: number);
|
1322
1326
|
get decryptdata(): LevelKey | null;
|
1323
1327
|
get end(): number;
|
1324
1328
|
get endProgramDateTime(): number | null;
|
package/dist/hls.js
CHANGED
@@ -1057,7 +1057,7 @@
|
|
1057
1057
|
// Some browsers don't allow to use bind on console object anyway
|
1058
1058
|
// fallback to default if needed
|
1059
1059
|
try {
|
1060
|
-
newLogger.log("Debug logs enabled for \"" + context + "\" in hls.js version " + "1.6.0-beta.1.0.canary.
|
1060
|
+
newLogger.log("Debug logs enabled for \"" + context + "\" in hls.js version " + "1.6.0-beta.1.0.canary.10752");
|
1061
1061
|
} catch (e) {
|
1062
1062
|
/* log fn threw an exception. All logger methods are no-ops. */
|
1063
1063
|
return createLogger();
|
@@ -2115,7 +2115,7 @@
|
|
2115
2115
|
var bwEstimate = _this.getBwEstimate();
|
2116
2116
|
var levels = hls.levels;
|
2117
2117
|
var level = levels[frag.level];
|
2118
|
-
var expectedLen =
|
2118
|
+
var expectedLen = Math.max(stats.loaded, Math.round(duration * (frag.bitrate || level.averageBitrate) / 8));
|
2119
2119
|
var timeStreaming = loadedFirstByte ? timeLoading - ttfb : timeLoading;
|
2120
2120
|
if (timeStreaming < 1 && loadedFirstByte) {
|
2121
2121
|
timeStreaming = Math.min(timeLoading, stats.loaded * 8 / bwEstimate);
|
@@ -2595,7 +2595,7 @@
|
|
2595
2595
|
}
|
2596
2596
|
|
2597
2597
|
// Use average bitrate when starvation delay (buffer length) is gt or eq two segment durations and rebuffering is not expected (maxStarvationDelay > 0)
|
2598
|
-
var bitrate = currentFragDuration && bufferStarvationDelay >= currentFragDuration * 2 && maxStarvationDelay === 0 ?
|
2598
|
+
var bitrate = currentFragDuration && bufferStarvationDelay >= currentFragDuration * 2 && maxStarvationDelay === 0 ? levelInfo.averageBitrate : levelInfo.maxBitrate;
|
2599
2599
|
var fetchDuration = _this3.getTimeToLoadFrag(ttfbEstimateSec, adjustedbw, bitrate * avgDuration, levelDetails === undefined);
|
2600
2600
|
var canSwitchWithinTolerance =
|
2601
2601
|
// if adjusted bw is greater than level bitrate AND
|
@@ -4330,6 +4330,8 @@
|
|
4330
4330
|
_this._decryptdata = null;
|
4331
4331
|
_this._programDateTime = null;
|
4332
4332
|
_this._ref = null;
|
4333
|
+
// Approximate bit rate of the fragment expressed in bits per second (bps) as indicated by the last EXT-X-BITRATE (kbps) tag
|
4334
|
+
_this._bitrate = void 0;
|
4333
4335
|
_this.rawProgramDateTime = null;
|
4334
4336
|
_this.tagList = [];
|
4335
4337
|
// EXTINF has to be present for a m3u8 to be considered valid
|
@@ -4437,6 +4439,38 @@
|
|
4437
4439
|
info.endDTS = Math.max(info.endDTS, endDTS);
|
4438
4440
|
};
|
4439
4441
|
return _createClass(Fragment, [{
|
4442
|
+
key: "byteLength",
|
4443
|
+
get: function get() {
|
4444
|
+
if (this.hasStats) {
|
4445
|
+
var total = this.stats.total;
|
4446
|
+
if (total) {
|
4447
|
+
return total;
|
4448
|
+
}
|
4449
|
+
}
|
4450
|
+
if (this.byteRange) {
|
4451
|
+
var start = this.byteRange[0];
|
4452
|
+
var end = this.byteRange[1];
|
4453
|
+
if (isFiniteNumber(start) && isFiniteNumber(end)) {
|
4454
|
+
return end - start;
|
4455
|
+
}
|
4456
|
+
}
|
4457
|
+
return null;
|
4458
|
+
}
|
4459
|
+
}, {
|
4460
|
+
key: "bitrate",
|
4461
|
+
get: function get() {
|
4462
|
+
if (this.byteLength) {
|
4463
|
+
return this.byteLength * 8 / this.duration;
|
4464
|
+
}
|
4465
|
+
if (this._bitrate) {
|
4466
|
+
return this._bitrate;
|
4467
|
+
}
|
4468
|
+
return null;
|
4469
|
+
},
|
4470
|
+
set: function set(value) {
|
4471
|
+
this._bitrate = value;
|
4472
|
+
}
|
4473
|
+
}, {
|
4440
4474
|
key: "decryptdata",
|
4441
4475
|
get: function get() {
|
4442
4476
|
var levelkeys = this.levelkeys;
|
@@ -7649,6 +7683,7 @@
|
|
7649
7683
|
var currentPart = 0;
|
7650
7684
|
var totalduration = 0;
|
7651
7685
|
var discontinuityCounter = 0;
|
7686
|
+
var currentBitrate = 0;
|
7652
7687
|
var prevFrag = null;
|
7653
7688
|
var frag = new Fragment(type, base);
|
7654
7689
|
var result;
|
@@ -7669,6 +7704,9 @@
|
|
7669
7704
|
frag.start = totalduration;
|
7670
7705
|
frag.sn = currentSN;
|
7671
7706
|
frag.cc = discontinuityCounter;
|
7707
|
+
if (currentBitrate) {
|
7708
|
+
frag.bitrate = currentBitrate;
|
7709
|
+
}
|
7672
7710
|
frag.level = id;
|
7673
7711
|
if (currentInitSegment) {
|
7674
7712
|
frag.initSegment = currentInitSegment;
|
@@ -7798,6 +7836,12 @@
|
|
7798
7836
|
break;
|
7799
7837
|
case 'BITRATE':
|
7800
7838
|
frag.tagList.push([tag, value1]);
|
7839
|
+
currentBitrate = parseInt(value1) * 1000;
|
7840
|
+
if (isFiniteNumber(currentBitrate)) {
|
7841
|
+
frag.bitrate = currentBitrate;
|
7842
|
+
} else {
|
7843
|
+
currentBitrate = 0;
|
7844
|
+
}
|
7801
7845
|
break;
|
7802
7846
|
case 'DATERANGE':
|
7803
7847
|
{
|
@@ -8977,23 +9021,25 @@
|
|
8977
9021
|
this.startFragRequested = true;
|
8978
9022
|
this._loadFragForPlayback(frag, level, targetBufferTime);
|
8979
9023
|
};
|
8980
|
-
_proto._loadFragForPlayback = function _loadFragForPlayback(
|
9024
|
+
_proto._loadFragForPlayback = function _loadFragForPlayback(fragment, level, targetBufferTime) {
|
8981
9025
|
var _this3 = this;
|
8982
9026
|
var progressCallback = function progressCallback(data) {
|
9027
|
+
var frag = data.frag;
|
8983
9028
|
if (_this3.fragContextChanged(frag)) {
|
8984
|
-
_this3.warn("
|
9029
|
+
_this3.warn(frag.type + " sn: " + frag.sn + (data.part ? ' part: ' + data.part.index : '') + " of " + _this3.fragInfo(frag, false, data.part) + ") was dropped during download.");
|
8985
9030
|
_this3.fragmentTracker.removeFragment(frag);
|
8986
9031
|
return;
|
8987
9032
|
}
|
8988
9033
|
frag.stats.chunkCount++;
|
8989
9034
|
_this3._handleFragmentLoadProgress(data);
|
8990
9035
|
};
|
8991
|
-
this._doFragLoad(
|
9036
|
+
this._doFragLoad(fragment, level, targetBufferTime, progressCallback).then(function (data) {
|
8992
9037
|
if (!data) {
|
8993
9038
|
// if we're here we probably needed to backtrack or are waiting for more parts
|
8994
9039
|
return;
|
8995
9040
|
}
|
8996
9041
|
var state = _this3.state;
|
9042
|
+
var frag = data.frag;
|
8997
9043
|
if (_this3.fragContextChanged(frag)) {
|
8998
9044
|
if (state === State.FRAG_LOADING || !_this3.fragCurrent && state === State.PARSING) {
|
8999
9045
|
_this3.fragmentTracker.removeFragment(frag);
|
@@ -9013,7 +9059,7 @@
|
|
9013
9059
|
return;
|
9014
9060
|
}
|
9015
9061
|
_this3.warn("Frag error: " + ((reason == null ? void 0 : reason.message) || reason));
|
9016
|
-
_this3.resetFragmentLoading(
|
9062
|
+
_this3.resetFragmentLoading(fragment);
|
9017
9063
|
});
|
9018
9064
|
};
|
9019
9065
|
_proto.clearTrackerIfNeeded = function clearTrackerIfNeeded(frag) {
|
@@ -9078,16 +9124,18 @@
|
|
9078
9124
|
};
|
9079
9125
|
this.hls.trigger(Events.BUFFER_FLUSHING, flushScope);
|
9080
9126
|
};
|
9081
|
-
_proto._loadInitSegment = function _loadInitSegment(
|
9127
|
+
_proto._loadInitSegment = function _loadInitSegment(fragment, level) {
|
9082
9128
|
var _this4 = this;
|
9083
|
-
this._doFragLoad(
|
9084
|
-
|
9129
|
+
this._doFragLoad(fragment, level).then(function (data) {
|
9130
|
+
var frag = data == null ? void 0 : data.frag;
|
9131
|
+
if (!frag || _this4.fragContextChanged(frag) || !_this4.levels) {
|
9085
9132
|
throw new Error('init load aborted');
|
9086
9133
|
}
|
9087
9134
|
return data;
|
9088
9135
|
}).then(function (data) {
|
9089
9136
|
var hls = _this4.hls;
|
9090
|
-
var
|
9137
|
+
var frag = data.frag,
|
9138
|
+
payload = data.payload;
|
9091
9139
|
var decryptData = frag.decryptdata;
|
9092
9140
|
|
9093
9141
|
// check to see if the payload needs to be decrypted
|
@@ -9124,7 +9172,7 @@
|
|
9124
9172
|
return;
|
9125
9173
|
}
|
9126
9174
|
_this4.warn(reason);
|
9127
|
-
_this4.resetFragmentLoading(
|
9175
|
+
_this4.resetFragmentLoading(fragment);
|
9128
9176
|
});
|
9129
9177
|
};
|
9130
9178
|
_proto.completeInitSegmentLoad = function completeInitSegmentLoad(data) {
|
@@ -9147,7 +9195,7 @@
|
|
9147
9195
|
};
|
9148
9196
|
_proto.fragBufferedComplete = function fragBufferedComplete(frag, part) {
|
9149
9197
|
var media = this.mediaBuffer ? this.mediaBuffer : this.media;
|
9150
|
-
this.log("Buffered " + frag.type + " sn: " + frag.sn + (part ? ' part: ' + part.index : '') + " of " + this.fragInfo(frag) + " > buffer:" + (media ? TimeRanges.toString(BufferHelper.getBuffered(media)) : '(detached)') + ")");
|
9198
|
+
this.log("Buffered " + frag.type + " sn: " + frag.sn + (part ? ' part: ' + part.index : '') + " of " + this.fragInfo(frag, false, part) + " > buffer:" + (media ? TimeRanges.toString(BufferHelper.getBuffered(media)) : '(detached)') + ")");
|
9151
9199
|
if (frag.sn !== 'initSegment') {
|
9152
9200
|
var _this$levels;
|
9153
9201
|
if (frag.type !== PlaylistLevelType.SUBTITLE) {
|
@@ -9239,7 +9287,8 @@
|
|
9239
9287
|
var partIndex = this.getNextPart(partList, frag, targetBufferTime);
|
9240
9288
|
if (partIndex > -1) {
|
9241
9289
|
var part = partList[partIndex];
|
9242
|
-
|
9290
|
+
frag = this.fragCurrent = part.fragment;
|
9291
|
+
this.log("Loading " + frag.type + " sn: " + frag.sn + " part: " + part.index + " (" + partIndex + "/" + (partList.length - 1) + ") of " + this.fragInfo(frag, false, part) + ") cc: " + frag.cc + " [" + details.startSN + "-" + details.endSN + "], target: " + parseFloat(targetBufferTime.toFixed(3)));
|
9243
9292
|
this.nextLoadPosition = part.start + part.duration;
|
9244
9293
|
this.state = State.FRAG_LOADING;
|
9245
9294
|
var _result;
|
@@ -10027,7 +10076,7 @@
|
|
10027
10076
|
// For this error fallthrough. Marking parsed will allow advancing to next fragment.
|
10028
10077
|
}
|
10029
10078
|
this.state = State.PARSED;
|
10030
|
-
this.log("Parsed " + frag.type + " sn: " + frag.sn + (part ? ' part: ' + part.index : '') + " of " + this.fragInfo(frag) + ")");
|
10079
|
+
this.log("Parsed " + frag.type + " sn: " + frag.sn + (part ? ' part: ' + part.index : '') + " of " + this.fragInfo(frag, false, part) + ")");
|
10031
10080
|
this.hls.trigger(Events.FRAG_PARSED, {
|
10032
10081
|
frag: frag,
|
10033
10082
|
part: part
|
@@ -10036,12 +10085,12 @@
|
|
10036
10085
|
_proto.playlistLabel = function playlistLabel() {
|
10037
10086
|
return this.playlistType === PlaylistLevelType.MAIN ? 'level' : 'track';
|
10038
10087
|
};
|
10039
|
-
_proto.fragInfo = function fragInfo(frag, pts) {
|
10088
|
+
_proto.fragInfo = function fragInfo(frag, pts, part) {
|
10040
10089
|
var _ref3, _ref4;
|
10041
10090
|
if (pts === void 0) {
|
10042
10091
|
pts = true;
|
10043
10092
|
}
|
10044
|
-
return this.playlistLabel() + " " + frag.level + " (frag:[" + ((_ref3 = pts ? frag.startPTS : frag.start) != null ? _ref3 : NaN).toFixed(3) + "-" + ((_ref4 = pts ? frag.endPTS : frag.end) != null ? _ref4 : NaN).toFixed(3) + "]";
|
10093
|
+
return this.playlistLabel() + " " + frag.level + " (" + (part ? 'part' : 'frag') + ":[" + ((_ref3 = pts && !part ? frag.startPTS : (part || frag).start) != null ? _ref3 : NaN).toFixed(3) + "-" + ((_ref4 = pts && !part ? frag.endPTS : (part || frag).end) != null ? _ref4 : NaN).toFixed(3) + "]" + (part && frag.type === 'main' ? 'INDEPENDENT=' + (part.independent ? 'YES' : 'NO') : '');
|
10045
10094
|
};
|
10046
10095
|
_proto.resetTransmuxer = function resetTransmuxer() {
|
10047
10096
|
var _this$transmuxer2;
|
@@ -15848,7 +15897,7 @@
|
|
15848
15897
|
var _this$currentTransmux = this.currentTransmuxState,
|
15849
15898
|
accurateTimeOffset = _this$currentTransmux.accurateTimeOffset,
|
15850
15899
|
timeOffset = _this$currentTransmux.timeOffset;
|
15851
|
-
this.logger.log("[transmuxer.ts]: Flushed " + this.id + " sn: " + chunkMeta.sn + (chunkMeta.part > -1 ? '
|
15900
|
+
this.logger.log("[transmuxer.ts]: Flushed " + this.id + " sn: " + chunkMeta.sn + (chunkMeta.part > -1 ? ' part: ' + chunkMeta.part : '') + " of " + (this.id === PlaylistLevelType.MAIN ? 'level' : 'track') + " " + chunkMeta.level);
|
15852
15901
|
var remuxResult = this.remuxer.remux(audioTrack, videoTrack, id3Track, textTrack, timeOffset, accurateTimeOffset, true, this.id);
|
15853
15902
|
transmuxResults.push({
|
15854
15903
|
remuxResult: remuxResult,
|
@@ -16173,7 +16222,7 @@
|
|
16173
16222
|
return !remuxResult.audio && !remuxResult.video && !remuxResult.text && !remuxResult.id3 && !remuxResult.initSegment;
|
16174
16223
|
}
|
16175
16224
|
|
16176
|
-
var version = "1.6.0-beta.1.0.canary.
|
16225
|
+
var version = "1.6.0-beta.1.0.canary.10752";
|
16177
16226
|
|
16178
16227
|
// ensure the worker ends up in the bundle
|
16179
16228
|
// If the worker should not be included this gets aliased to empty.js
|
@@ -16445,7 +16494,7 @@
|
|
16445
16494
|
var initSegmentChange = !(lastFrag && ((_frag$initSegment = frag.initSegment) == null ? void 0 : _frag$initSegment.url) === ((_lastFrag$initSegment = lastFrag.initSegment) == null ? void 0 : _lastFrag$initSegment.url));
|
16446
16495
|
var state = new TransmuxState(discontinuity, contiguous, accurateTimeOffset, trackSwitch, timeOffset, initSegmentChange);
|
16447
16496
|
if (!contiguous || discontinuity || initSegmentChange) {
|
16448
|
-
this.hls.logger.log("[transmuxer-interface
|
16497
|
+
this.hls.logger.log("[transmuxer-interface]: Starting new transmux session for " + frag.type + " sn: " + chunkMeta.sn + (chunkMeta.part > -1 ? ' part: ' + chunkMeta.part : '') + " " + (this.id === PlaylistLevelType.MAIN ? 'level' : 'track') + ": " + chunkMeta.level + " id: " + chunkMeta.id + "\n discontinuity: " + discontinuity + "\n trackSwitch: " + trackSwitch + "\n contiguous: " + contiguous + "\n accurateTimeOffset: " + accurateTimeOffset + "\n timeOffset: " + timeOffset + "\n initSegmentChange: " + initSegmentChange);
|
16449
16498
|
var config = new TransmuxConfig(audioCodec, videoCodec, initSegmentData, duration, defaultInitPTS);
|
16450
16499
|
this.configureTransmuxer(config);
|
16451
16500
|
}
|
@@ -32724,12 +32773,13 @@
|
|
32724
32773
|
}
|
32725
32774
|
return audioCodec;
|
32726
32775
|
};
|
32727
|
-
_proto._loadBitrateTestFrag = function _loadBitrateTestFrag(
|
32776
|
+
_proto._loadBitrateTestFrag = function _loadBitrateTestFrag(fragment, level) {
|
32728
32777
|
var _this2 = this;
|
32729
|
-
|
32730
|
-
this._doFragLoad(
|
32778
|
+
fragment.bitrateTest = true;
|
32779
|
+
this._doFragLoad(fragment, level).then(function (data) {
|
32731
32780
|
var hls = _this2.hls;
|
32732
|
-
|
32781
|
+
var frag = data == null ? void 0 : data.frag;
|
32782
|
+
if (!frag || _this2.fragContextChanged(frag)) {
|
32733
32783
|
return;
|
32734
32784
|
}
|
32735
32785
|
level.fragmentError = 0;
|
package/dist/hls.js.d.ts
CHANGED
@@ -328,7 +328,7 @@ export declare class BaseStreamController extends TaskLoop implements NetworkCom
|
|
328
328
|
protected clearTrackerIfNeeded(frag: Fragment): void;
|
329
329
|
protected checkLiveUpdate(details: LevelDetails): void;
|
330
330
|
protected flushMainBuffer(startOffset: number, endOffset: number, type?: SourceBufferName | null): void;
|
331
|
-
protected _loadInitSegment(
|
331
|
+
protected _loadInitSegment(fragment: Fragment, level: Level): void;
|
332
332
|
private completeInitSegmentLoad;
|
333
333
|
protected fragContextChanged(frag: Fragment | null): boolean;
|
334
334
|
protected fragBufferedComplete(frag: Fragment, part: Part | null): void;
|
@@ -1290,6 +1290,7 @@ export declare class Fragment extends BaseSegment {
|
|
1290
1290
|
private _decryptdata;
|
1291
1291
|
private _programDateTime;
|
1292
1292
|
private _ref;
|
1293
|
+
private _bitrate?;
|
1293
1294
|
rawProgramDateTime: string | null;
|
1294
1295
|
tagList: Array<string[]>;
|
1295
1296
|
duration: number;
|
@@ -1319,6 +1320,9 @@ export declare class Fragment extends BaseSegment {
|
|
1319
1320
|
gap?: boolean;
|
1320
1321
|
urlId: number;
|
1321
1322
|
constructor(type: PlaylistLevelType, base: Base | string);
|
1323
|
+
get byteLength(): number | null;
|
1324
|
+
get bitrate(): number | null;
|
1325
|
+
set bitrate(value: number);
|
1322
1326
|
get decryptdata(): LevelKey | null;
|
1323
1327
|
get end(): number;
|
1324
1328
|
get endProgramDateTime(): number | null;
|