hls.js 1.5.14-0.canary.10429 → 1.5.14-0.canary.10431

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.
@@ -420,7 +420,7 @@ function enableLogs(debugConfig, context, id) {
420
420
  // Some browsers don't allow to use bind on console object anyway
421
421
  // fallback to default if needed
422
422
  try {
423
- newLogger.log(`Debug logs enabled for "${context}" in hls.js version ${"1.5.14-0.canary.10429"}`);
423
+ newLogger.log(`Debug logs enabled for "${context}" in hls.js version ${"1.5.14-0.canary.10431"}`);
424
424
  } catch (e) {
425
425
  /* log fn threw an exception. All logger methods are no-ops. */
426
426
  return createLogger();
@@ -11836,30 +11836,14 @@ function findFirstFragWithCC(fragments, cc) {
11836
11836
  }
11837
11837
  return null;
11838
11838
  }
11839
- function shouldAlignOnDiscontinuities(lastFrag, switchDetails, details) {
11840
- if (switchDetails) {
11841
- if (details.endCC > details.startCC || lastFrag && lastFrag.cc < details.startCC) {
11839
+ function shouldAlignOnDiscontinuities(refDetails, details) {
11840
+ if (refDetails) {
11841
+ if (details.startCC < refDetails.endCC && details.endCC > refDetails.startCC) {
11842
11842
  return true;
11843
11843
  }
11844
11844
  }
11845
11845
  return false;
11846
11846
  }
11847
-
11848
- // Find the first frag in the previous level which matches the CC of the first frag of the new level
11849
- function findDiscontinuousReferenceFrag(prevDetails, curDetails) {
11850
- const prevFrags = prevDetails.fragments;
11851
- const curFrags = curDetails.fragments;
11852
- if (!curFrags.length || !prevFrags.length) {
11853
- logger.log('No fragments to align');
11854
- return;
11855
- }
11856
- const prevStartFrag = findFirstFragWithCC(prevFrags, curFrags[0].cc);
11857
- if (!prevStartFrag || prevStartFrag && !prevStartFrag.startPTS) {
11858
- logger.log('No frag in previous level to align on');
11859
- return;
11860
- }
11861
- return prevStartFrag;
11862
- }
11863
11847
  function adjustFragmentStart(frag, sliding) {
11864
11848
  if (frag) {
11865
11849
  const start = frag.start + sliding;
@@ -11894,7 +11878,7 @@ function alignStream(lastFrag, switchDetails, details) {
11894
11878
  if (!switchDetails) {
11895
11879
  return;
11896
11880
  }
11897
- alignDiscontinuities(lastFrag, details, switchDetails);
11881
+ alignDiscontinuities(details, switchDetails);
11898
11882
  if (!details.alignedSliding && switchDetails) {
11899
11883
  // If the PTS wasn't figured out via discontinuity sequence that means there was no CC increase within the level.
11900
11884
  // Aligning via Program Date Time should therefore be reliable, since PDT should be the same within the same
@@ -11910,20 +11894,24 @@ function alignStream(lastFrag, switchDetails, details) {
11910
11894
  }
11911
11895
 
11912
11896
  /**
11913
- * Computes the PTS if a new level's fragments using the PTS of a fragment in the last level which shares the same
11914
- * discontinuity sequence.
11915
- * @param lastFrag - The last Fragment which shares the same discontinuity sequence
11897
+ * Ajust the start of fragments in `details` by the difference in time between fragments of the latest
11898
+ * shared discontinuity sequence change.
11916
11899
  * @param lastLevel - The details of the last loaded level
11917
11900
  * @param details - The details of the new level
11918
11901
  */
11919
- function alignDiscontinuities(lastFrag, details, switchDetails) {
11920
- if (shouldAlignOnDiscontinuities(lastFrag, switchDetails, details)) {
11921
- const referenceFrag = findDiscontinuousReferenceFrag(switchDetails, details);
11922
- if (referenceFrag && isFiniteNumber(referenceFrag.start)) {
11923
- logger.log(`Adjusting PTS using last level due to CC increase within current level ${details.url}`);
11924
- adjustSlidingStart(referenceFrag.start, details);
11925
- }
11902
+ function alignDiscontinuities(details, refDetails) {
11903
+ if (!shouldAlignOnDiscontinuities(refDetails, details)) {
11904
+ return;
11926
11905
  }
11906
+ const targetCC = Math.min(refDetails.endCC, details.endCC);
11907
+ const refFrag = findFirstFragWithCC(refDetails.fragments, targetCC);
11908
+ const frag = findFirstFragWithCC(details.fragments, targetCC);
11909
+ if (!refFrag || !frag) {
11910
+ return;
11911
+ }
11912
+ logger.log(`Aligning playlist at start of dicontinuity sequence ${targetCC}`);
11913
+ const delta = refFrag.start - frag.start;
11914
+ adjustSlidingStart(delta, details);
11927
11915
  }
11928
11916
 
11929
11917
  /**
@@ -12742,7 +12730,7 @@ class BaseStreamController extends TaskLoop {
12742
12730
  return;
12743
12731
  }
12744
12732
  if ('payload' in data) {
12745
- this.log(`Loaded fragment ${frag.sn} of level ${frag.level}`);
12733
+ this.log(`Loaded ${frag.type} sn: ${frag.sn} of ${this.playlistLabel()} ${frag.level}`);
12746
12734
  this.hls.trigger(Events.FRAG_LOADED, data);
12747
12735
  }
12748
12736
 
@@ -12892,9 +12880,9 @@ class BaseStreamController extends TaskLoop {
12892
12880
  return !frag || !fragCurrent || frag.sn !== fragCurrent.sn || frag.level !== fragCurrent.level;
12893
12881
  }
12894
12882
  fragBufferedComplete(frag, part) {
12895
- var _frag$startPTS, _frag$endPTS, _this$fragCurrent, _this$fragPrevious;
12883
+ var _this$fragCurrent, _this$fragPrevious;
12896
12884
  const media = this.mediaBuffer ? this.mediaBuffer : this.media;
12897
- this.log(`Buffered ${frag.type} sn: ${frag.sn}${part ? ' part: ' + part.index : ''} of ${this.playlistType === PlaylistLevelType.MAIN ? 'level' : 'track'} ${frag.level} (frag:[${((_frag$startPTS = frag.startPTS) != null ? _frag$startPTS : NaN).toFixed(3)}-${((_frag$endPTS = frag.endPTS) != null ? _frag$endPTS : NaN).toFixed(3)}] > buffer:${media ? TimeRanges.toString(BufferHelper.getBuffered(media)) : '(detached)'})`);
12885
+ this.log(`Buffered ${frag.type} sn: ${frag.sn}${part ? ' part: ' + part.index : ''} of ${this.fragInfo(frag)} > buffer:${media ? TimeRanges.toString(BufferHelper.getBuffered(media)) : '(detached)'})`);
12898
12886
  if (frag.sn !== 'initSegment') {
12899
12887
  var _this$levels;
12900
12888
  if (frag.type !== PlaylistLevelType.SUBTITLE) {
@@ -12951,7 +12939,7 @@ class BaseStreamController extends TaskLoop {
12951
12939
  }
12952
12940
  let keyLoadingPromise = null;
12953
12941
  if (frag.encrypted && !((_frag$decryptdata = frag.decryptdata) != null && _frag$decryptdata.key)) {
12954
- this.log(`Loading key for ${frag.sn} of [${details.startSN}-${details.endSN}], ${this.playlistType === PlaylistLevelType.MAIN ? 'level' : 'track'} ${frag.level}`);
12942
+ this.log(`Loading key for ${frag.sn} of [${details.startSN}-${details.endSN}], ${this.playlistLabel()} ${frag.level}`);
12955
12943
  this.state = State.KEY_LOADING;
12956
12944
  this.fragCurrent = frag;
12957
12945
  keyLoadingPromise = this.keyLoader.load(frag).then(keyLoadedData => {
@@ -12990,7 +12978,7 @@ class BaseStreamController extends TaskLoop {
12990
12978
  const partIndex = this.getNextPart(partList, frag, targetBufferTime);
12991
12979
  if (partIndex > -1) {
12992
12980
  const part = partList[partIndex];
12993
- 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.playlistType === PlaylistLevelType.MAIN ? 'level' : 'track'}: ${frag.level}, target: ${parseFloat(targetBufferTime.toFixed(3))}`);
12981
+ 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))}`);
12994
12982
  this.nextLoadPosition = part.start + part.duration;
12995
12983
  this.state = State.FRAG_LOADING;
12996
12984
  let _result;
@@ -13026,7 +13014,7 @@ class BaseStreamController extends TaskLoop {
13026
13014
  // Selected fragment hint for part but not loading parts
13027
13015
  return Promise.resolve(null);
13028
13016
  }
13029
- 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))}`);
13017
+ this.log(`Loading ${frag.type} sn: ${frag.sn} of ${this.fragInfo(frag, false)}) cc: ${frag.cc} ${details ? '[' + details.startSN + '-' + details.endSN + ']' : ''}, target: ${parseFloat(targetBufferTime.toFixed(3))}`);
13030
13018
  // Don't update nextLoadPosition for fragments which are not buffered
13031
13019
  if (isFiniteNumber(frag.sn) && !this.bitrateTest) {
13032
13020
  this.nextLoadPosition = frag.start + frag.duration;
@@ -13805,11 +13793,19 @@ class BaseStreamController extends TaskLoop {
13805
13793
  // For this error fallthrough. Marking parsed will allow advancing to next fragment.
13806
13794
  }
13807
13795
  this.state = State.PARSED;
13796
+ this.log(`Parsed ${frag.type} sn: ${frag.sn}${part ? ' part: ' + part.index : ''} of ${this.fragInfo(frag)})`);
13808
13797
  this.hls.trigger(Events.FRAG_PARSED, {
13809
13798
  frag,
13810
13799
  part
13811
13800
  });
13812
13801
  }
13802
+ playlistLabel() {
13803
+ return this.playlistType === PlaylistLevelType.MAIN ? 'level' : 'track';
13804
+ }
13805
+ fragInfo(frag, pts = true) {
13806
+ var _ref, _ref2;
13807
+ return `${this.playlistLabel()} ${frag.level} (frag:[${((_ref = pts ? frag.startPTS : frag.start) != null ? _ref : NaN).toFixed(3)}-${((_ref2 = pts ? frag.endPTS : frag.end) != null ? _ref2 : NaN).toFixed(3)}]`;
13808
+ }
13813
13809
  resetTransmuxer() {
13814
13810
  if (this.transmuxer) {
13815
13811
  this.transmuxer.destroy();
@@ -20640,7 +20636,7 @@ class Hls {
20640
20636
  * Get the video-dev/hls.js package version.
20641
20637
  */
20642
20638
  static get version() {
20643
- return "1.5.14-0.canary.10429";
20639
+ return "1.5.14-0.canary.10431";
20644
20640
  }
20645
20641
 
20646
20642
  /**