hls.js 1.6.0-beta.1.0.canary.10751 → 1.6.0-beta.1.0.canary.10754

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.light.js CHANGED
@@ -1028,7 +1028,7 @@
1028
1028
  // Some browsers don't allow to use bind on console object anyway
1029
1029
  // fallback to default if needed
1030
1030
  try {
1031
- newLogger.log("Debug logs enabled for \"" + context + "\" in hls.js version " + "1.6.0-beta.1.0.canary.10751");
1031
+ newLogger.log("Debug logs enabled for \"" + context + "\" in hls.js version " + "1.6.0-beta.1.0.canary.10754");
1032
1032
  } catch (e) {
1033
1033
  /* log fn threw an exception. All logger methods are no-ops. */
1034
1034
  return createLogger();
@@ -1817,7 +1817,7 @@
1817
1817
  var bwEstimate = _this.getBwEstimate();
1818
1818
  var levels = hls.levels;
1819
1819
  var level = levels[frag.level];
1820
- var expectedLen = stats.total || Math.max(stats.loaded, Math.round(duration * level.averageBitrate / 8));
1820
+ var expectedLen = Math.max(stats.loaded, Math.round(duration * (frag.bitrate || level.averageBitrate) / 8));
1821
1821
  var timeStreaming = loadedFirstByte ? timeLoading - ttfb : timeLoading;
1822
1822
  if (timeStreaming < 1 && loadedFirstByte) {
1823
1823
  timeStreaming = Math.min(timeLoading, stats.loaded * 8 / bwEstimate);
@@ -2272,7 +2272,7 @@
2272
2272
  }
2273
2273
 
2274
2274
  // Use average bitrate when starvation delay (buffer length) is gt or eq two segment durations and rebuffering is not expected (maxStarvationDelay > 0)
2275
- var bitrate = currentFragDuration && bufferStarvationDelay >= currentFragDuration * 2 && maxStarvationDelay === 0 ? levels[i].averageBitrate : levels[i].maxBitrate;
2275
+ var bitrate = currentFragDuration && bufferStarvationDelay >= currentFragDuration * 2 && maxStarvationDelay === 0 ? levelInfo.averageBitrate : levelInfo.maxBitrate;
2276
2276
  var fetchDuration = _this3.getTimeToLoadFrag(ttfbEstimateSec, adjustedbw, bitrate * avgDuration, levelDetails === undefined);
2277
2277
  var canSwitchWithinTolerance =
2278
2278
  // if adjusted bw is greater than level bitrate AND
@@ -3286,6 +3286,8 @@
3286
3286
  _this._decryptdata = null;
3287
3287
  _this._programDateTime = null;
3288
3288
  _this._ref = null;
3289
+ // Approximate bit rate of the fragment expressed in bits per second (bps) as indicated by the last EXT-X-BITRATE (kbps) tag
3290
+ _this._bitrate = void 0;
3289
3291
  _this.rawProgramDateTime = null;
3290
3292
  _this.tagList = [];
3291
3293
  // EXTINF has to be present for a m3u8 to be considered valid
@@ -3393,6 +3395,38 @@
3393
3395
  info.endDTS = Math.max(info.endDTS, endDTS);
3394
3396
  };
3395
3397
  return _createClass(Fragment, [{
3398
+ key: "byteLength",
3399
+ get: function get() {
3400
+ if (this.hasStats) {
3401
+ var total = this.stats.total;
3402
+ if (total) {
3403
+ return total;
3404
+ }
3405
+ }
3406
+ if (this.byteRange) {
3407
+ var start = this.byteRange[0];
3408
+ var end = this.byteRange[1];
3409
+ if (isFiniteNumber(start) && isFiniteNumber(end)) {
3410
+ return end - start;
3411
+ }
3412
+ }
3413
+ return null;
3414
+ }
3415
+ }, {
3416
+ key: "bitrate",
3417
+ get: function get() {
3418
+ if (this.byteLength) {
3419
+ return this.byteLength * 8 / this.duration;
3420
+ }
3421
+ if (this._bitrate) {
3422
+ return this._bitrate;
3423
+ }
3424
+ return null;
3425
+ },
3426
+ set: function set(value) {
3427
+ this._bitrate = value;
3428
+ }
3429
+ }, {
3396
3430
  key: "decryptdata",
3397
3431
  get: function get() {
3398
3432
  var levelkeys = this.levelkeys;
@@ -7346,6 +7380,7 @@
7346
7380
  var currentPart = 0;
7347
7381
  var totalduration = 0;
7348
7382
  var discontinuityCounter = 0;
7383
+ var currentBitrate = 0;
7349
7384
  var prevFrag = null;
7350
7385
  var frag = new Fragment(type, base);
7351
7386
  var result;
@@ -7366,6 +7401,9 @@
7366
7401
  frag.start = totalduration;
7367
7402
  frag.sn = currentSN;
7368
7403
  frag.cc = discontinuityCounter;
7404
+ if (currentBitrate) {
7405
+ frag.bitrate = currentBitrate;
7406
+ }
7369
7407
  frag.level = id;
7370
7408
  if (currentInitSegment) {
7371
7409
  frag.initSegment = currentInitSegment;
@@ -7495,6 +7533,12 @@
7495
7533
  break;
7496
7534
  case 'BITRATE':
7497
7535
  frag.tagList.push([tag, value1]);
7536
+ currentBitrate = parseInt(value1) * 1000;
7537
+ if (isFiniteNumber(currentBitrate)) {
7538
+ frag.bitrate = currentBitrate;
7539
+ } else {
7540
+ currentBitrate = 0;
7541
+ }
7498
7542
  break;
7499
7543
  case 'DATERANGE':
7500
7544
  {
@@ -14676,47 +14720,51 @@
14676
14720
  xhr.onprogress = null;
14677
14721
  var _status = xhr.status;
14678
14722
  // http status between 200 to 299 are all successful
14679
- var useResponse = xhr.responseType !== 'text';
14680
- if (_status >= 200 && _status < 300 && (useResponse && xhr.response || xhr.responseText !== null)) {
14681
- stats.loading.end = Math.max(self.performance.now(), stats.loading.first);
14682
- var data = useResponse ? xhr.response : xhr.responseText;
14683
- var len = xhr.responseType === 'arraybuffer' ? data.byteLength : data.length;
14684
- stats.loaded = stats.total = len;
14685
- stats.bwEstimate = stats.total * 8000 / (stats.loading.end - stats.loading.first);
14686
- if (!this.callbacks) {
14687
- return;
14688
- }
14689
- var onProgress = this.callbacks.onProgress;
14690
- if (onProgress) {
14691
- onProgress(stats, context, data, xhr);
14692
- }
14693
- if (!this.callbacks) {
14723
+ var useResponseText = xhr.responseType === 'text' ? xhr.responseText : null;
14724
+ if (_status >= 200 && _status < 300) {
14725
+ var data = useResponseText != null ? useResponseText : xhr.response;
14726
+ if (data != null) {
14727
+ stats.loading.end = Math.max(self.performance.now(), stats.loading.first);
14728
+ var len = xhr.responseType === 'arraybuffer' ? data.byteLength : data.length;
14729
+ stats.loaded = stats.total = len;
14730
+ stats.bwEstimate = stats.total * 8000 / (stats.loading.end - stats.loading.first);
14731
+ if (!this.callbacks) {
14732
+ return;
14733
+ }
14734
+ var onProgress = this.callbacks.onProgress;
14735
+ if (onProgress) {
14736
+ onProgress(stats, context, data, xhr);
14737
+ }
14738
+ if (!this.callbacks) {
14739
+ return;
14740
+ }
14741
+ var _response = {
14742
+ url: xhr.responseURL,
14743
+ data: data,
14744
+ code: _status
14745
+ };
14746
+ this.callbacks.onSuccess(_response, stats, context, xhr);
14694
14747
  return;
14695
14748
  }
14696
- var response = {
14697
- url: xhr.responseURL,
14698
- data: data,
14699
- code: _status
14700
- };
14701
- this.callbacks.onSuccess(response, stats, context, xhr);
14749
+ }
14750
+
14751
+ // Handle bad status or nullish response
14752
+ var retryConfig = config.loadPolicy.errorRetry;
14753
+ var retryCount = stats.retry;
14754
+ // if max nb of retries reached or if http status between 400 and 499 (such error cannot be recovered, retrying is useless), return error
14755
+ var response = {
14756
+ url: context.url,
14757
+ data: undefined,
14758
+ code: _status
14759
+ };
14760
+ if (shouldRetry(retryConfig, retryCount, false, response)) {
14761
+ this.retry(retryConfig);
14702
14762
  } else {
14703
- var retryConfig = config.loadPolicy.errorRetry;
14704
- var retryCount = stats.retry;
14705
- // if max nb of retries reached or if http status between 400 and 499 (such error cannot be recovered, retrying is useless), return error
14706
- var _response = {
14707
- url: context.url,
14708
- data: undefined,
14709
- code: _status
14710
- };
14711
- if (shouldRetry(retryConfig, retryCount, false, _response)) {
14712
- this.retry(retryConfig);
14713
- } else {
14714
- logger.error(_status + " while loading " + context.url);
14715
- this.callbacks.onError({
14716
- code: _status,
14717
- text: xhr.statusText
14718
- }, context, xhr, stats);
14719
- }
14763
+ logger.error(_status + " while loading " + context.url);
14764
+ this.callbacks.onError({
14765
+ code: _status,
14766
+ text: xhr.statusText
14767
+ }, context, xhr, stats);
14720
14768
  }
14721
14769
  }
14722
14770
  }
@@ -19649,7 +19697,7 @@
19649
19697
  return !remuxResult.audio && !remuxResult.video && !remuxResult.text && !remuxResult.id3 && !remuxResult.initSegment;
19650
19698
  }
19651
19699
 
19652
- var version = "1.6.0-beta.1.0.canary.10751";
19700
+ var version = "1.6.0-beta.1.0.canary.10754";
19653
19701
 
19654
19702
  // ensure the worker ends up in the bundle
19655
19703
  // If the worker should not be included this gets aliased to empty.js