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 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-VERSION=<n>`
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
- The following tags are added to their respective fragment's attribute list but are not implemented in streaming and playback.
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(frag: Fragment, level: Level): void;
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(frag: Fragment, level: Level): void;
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.10750");
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 = stats.total || Math.max(stats.loaded, Math.round(duration * level.averageBitrate / 8));
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 ? levels[i].averageBitrate : levels[i].maxBitrate;
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(frag, level, targetBufferTime) {
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("Fragment " + frag.sn + (data.part ? ' p: ' + data.part.index : '') + " of level " + frag.level + " was dropped during download.");
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(frag, level, targetBufferTime, progressCallback).then(function (data) {
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(frag);
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(frag, level) {
9127
+ _proto._loadInitSegment = function _loadInitSegment(fragment, level) {
9082
9128
  var _this4 = this;
9083
- this._doFragLoad(frag, level).then(function (data) {
9084
- if (!data || _this4.fragContextChanged(frag) || !_this4.levels) {
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 payload = data.payload;
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(frag);
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
- this.log("Loading part sn: " + frag.sn + " p: " + part.index + " cc: " + frag.cc + " of playlist [" + details.startSN + "-" + details.endSN + "] parts [0-" + partIndex + "-" + (partList.length - 1) + "] " + this.playlistLabel() + ": " + frag.level + ", target: " + parseFloat(targetBufferTime.toFixed(3)));
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 ? ' p: ' + chunkMeta.part : '') + " of " + (this.id === PlaylistLevelType.MAIN ? 'level' : 'track') + " " + chunkMeta.level);
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.10750";
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, " + frag.type + "]: Starting new transmux session for sn: " + chunkMeta.sn + " p: " + chunkMeta.part + " level: " + chunkMeta.level + " id: " + chunkMeta.id + "\n discontinuity: " + discontinuity + "\n trackSwitch: " + trackSwitch + "\n contiguous: " + contiguous + "\n accurateTimeOffset: " + accurateTimeOffset + "\n timeOffset: " + timeOffset + "\n initSegmentChange: " + initSegmentChange);
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(frag, level) {
32776
+ _proto._loadBitrateTestFrag = function _loadBitrateTestFrag(fragment, level) {
32728
32777
  var _this2 = this;
32729
- frag.bitrateTest = true;
32730
- this._doFragLoad(frag, level).then(function (data) {
32778
+ fragment.bitrateTest = true;
32779
+ this._doFragLoad(fragment, level).then(function (data) {
32731
32780
  var hls = _this2.hls;
32732
- if (!data || _this2.fragContextChanged(frag)) {
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(frag: Fragment, level: Level): void;
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;