hls.js 1.6.0-rc.1.0.canary.11079 → 1.6.0-rc.1.0.canary.11080
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.d.mts +12 -3
- package/dist/hls.d.ts +12 -3
- package/dist/hls.js +257 -142
- package/dist/hls.js.d.ts +12 -3
- package/dist/hls.js.map +1 -1
- package/dist/hls.light.js +89 -62
- 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 +48 -26
- 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 +180 -73
- package/dist/hls.mjs.map +1 -1
- package/dist/hls.worker.js +1 -1
- package/package.json +1 -1
- package/src/controller/audio-stream-controller.ts +7 -7
- package/src/controller/base-stream-controller.ts +44 -11
- package/src/controller/buffer-controller.ts +21 -13
- package/src/controller/interstitial-player.ts +30 -0
- package/src/controller/interstitials-controller.ts +69 -21
- package/src/controller/interstitials-schedule.ts +14 -10
- package/src/controller/stream-controller.ts +9 -8
- package/src/controller/subtitle-stream-controller.ts +4 -5
- package/src/loader/interstitial-asset-list.ts +3 -13
- package/src/loader/interstitial-event.ts +20 -2
package/dist/hls.light.js
CHANGED
@@ -1044,7 +1044,7 @@
|
|
1044
1044
|
// Some browsers don't allow to use bind on console object anyway
|
1045
1045
|
// fallback to default if needed
|
1046
1046
|
try {
|
1047
|
-
newLogger.log("Debug logs enabled for \"" + context + "\" in hls.js version " + "1.6.0-rc.1.0.canary.
|
1047
|
+
newLogger.log("Debug logs enabled for \"" + context + "\" in hls.js version " + "1.6.0-rc.1.0.canary.11080");
|
1048
1048
|
} catch (e) {
|
1049
1049
|
/* log fn threw an exception. All logger methods are no-ops. */
|
1050
1050
|
return createLogger();
|
@@ -5909,18 +5909,10 @@
|
|
5909
5909
|
return type && !((_this16$tracks$type = _this16.tracks[type]) != null && _this16$tracks$type.ended);
|
5910
5910
|
});
|
5911
5911
|
if (allTracksEnding) {
|
5912
|
-
|
5913
|
-
|
5914
|
-
|
5915
|
-
|
5916
|
-
if (type !== null) {
|
5917
|
-
var track = _this16.tracks[type];
|
5918
|
-
if (track) {
|
5919
|
-
track.ending = false;
|
5920
|
-
}
|
5921
|
-
}
|
5922
|
-
});
|
5923
|
-
if (allowEndOfStream) {
|
5912
|
+
if (allowEndOfStream) {
|
5913
|
+
this.log("Queueing EOS");
|
5914
|
+
this.blockUntilOpen(function () {
|
5915
|
+
_this16.tracksEnded();
|
5924
5916
|
var mediaSource = _this16.mediaSource;
|
5925
5917
|
if (!mediaSource || mediaSource.readyState !== 'open') {
|
5926
5918
|
if (mediaSource) {
|
@@ -5931,11 +5923,26 @@
|
|
5931
5923
|
_this16.log("Calling mediaSource.endOfStream()");
|
5932
5924
|
// Allow this to throw and be caught by the enqueueing function
|
5933
5925
|
mediaSource.endOfStream();
|
5934
|
-
|
5935
|
-
|
5936
|
-
}
|
5926
|
+
_this16.hls.trigger(Events.BUFFERED_TO_END, undefined);
|
5927
|
+
});
|
5928
|
+
} else {
|
5929
|
+
this.tracksEnded();
|
5930
|
+
this.hls.trigger(Events.BUFFERED_TO_END, undefined);
|
5931
|
+
}
|
5937
5932
|
}
|
5938
5933
|
};
|
5934
|
+
_proto.tracksEnded = function tracksEnded() {
|
5935
|
+
var _this17 = this;
|
5936
|
+
this.sourceBuffers.forEach(function (_ref7) {
|
5937
|
+
var type = _ref7[0];
|
5938
|
+
if (type !== null) {
|
5939
|
+
var track = _this17.tracks[type];
|
5940
|
+
if (track) {
|
5941
|
+
track.ending = false;
|
5942
|
+
}
|
5943
|
+
}
|
5944
|
+
});
|
5945
|
+
};
|
5939
5946
|
_proto.onLevelUpdated = function onLevelUpdated(event, _ref8) {
|
5940
5947
|
var details = _ref8.details;
|
5941
5948
|
if (!details.fragments.length) {
|
@@ -5945,13 +5952,13 @@
|
|
5945
5952
|
this.updateDuration();
|
5946
5953
|
};
|
5947
5954
|
_proto.updateDuration = function updateDuration() {
|
5948
|
-
var
|
5955
|
+
var _this18 = this;
|
5949
5956
|
var durationAndRange = this.getDurationAndRange();
|
5950
5957
|
if (!durationAndRange) {
|
5951
5958
|
return;
|
5952
5959
|
}
|
5953
5960
|
this.blockUntilOpen(function () {
|
5954
|
-
return
|
5961
|
+
return _this18.updateMediaSource(durationAndRange);
|
5955
5962
|
});
|
5956
5963
|
};
|
5957
5964
|
_proto.onError = function onError(event, data) {
|
@@ -5999,7 +6006,7 @@
|
|
5999
6006
|
}
|
6000
6007
|
};
|
6001
6008
|
_proto.flushBackBuffer = function flushBackBuffer(currentTime, targetDuration, targetBackBufferPosition) {
|
6002
|
-
var
|
6009
|
+
var _this19 = this;
|
6003
6010
|
this.sourceBuffers.forEach(function (_ref9) {
|
6004
6011
|
var type = _ref9[0],
|
6005
6012
|
sb = _ref9[1];
|
@@ -6007,22 +6014,22 @@
|
|
6007
6014
|
var buffered = BufferHelper.getBuffered(sb);
|
6008
6015
|
// when target buffer start exceeds actual buffer start
|
6009
6016
|
if (buffered.length > 0 && targetBackBufferPosition > buffered.start(0)) {
|
6010
|
-
var
|
6011
|
-
|
6017
|
+
var _this19$details;
|
6018
|
+
_this19.hls.trigger(Events.BACK_BUFFER_REACHED, {
|
6012
6019
|
bufferEnd: targetBackBufferPosition
|
6013
6020
|
});
|
6014
6021
|
|
6015
6022
|
// Support for deprecated event:
|
6016
|
-
var track =
|
6017
|
-
if ((
|
6018
|
-
|
6023
|
+
var track = _this19.tracks[type];
|
6024
|
+
if ((_this19$details = _this19.details) != null && _this19$details.live) {
|
6025
|
+
_this19.hls.trigger(Events.LIVE_BACK_BUFFER_REACHED, {
|
6019
6026
|
bufferEnd: targetBackBufferPosition
|
6020
6027
|
});
|
6021
6028
|
} else if (track != null && track.ended) {
|
6022
|
-
|
6029
|
+
_this19.log("Cannot flush " + type + " back buffer while SourceBuffer is in ended state");
|
6023
6030
|
return;
|
6024
6031
|
}
|
6025
|
-
|
6032
|
+
_this19.hls.trigger(Events.BUFFER_FLUSHING, {
|
6026
6033
|
startOffset: 0,
|
6027
6034
|
endOffset: targetBackBufferPosition,
|
6028
6035
|
type: type
|
@@ -6032,7 +6039,7 @@
|
|
6032
6039
|
});
|
6033
6040
|
};
|
6034
6041
|
_proto.flushFrontBuffer = function flushFrontBuffer(currentTime, targetDuration, targetFrontBufferPosition) {
|
6035
|
-
var
|
6042
|
+
var _this20 = this;
|
6036
6043
|
this.sourceBuffers.forEach(function (_ref10) {
|
6037
6044
|
var type = _ref10[0],
|
6038
6045
|
sb = _ref10[1];
|
@@ -6049,7 +6056,7 @@
|
|
6049
6056
|
if (targetFrontBufferPosition > bufferStart || currentTime >= bufferStart && currentTime <= bufferEnd) {
|
6050
6057
|
return;
|
6051
6058
|
}
|
6052
|
-
|
6059
|
+
_this20.hls.trigger(Events.BUFFER_FLUSHING, {
|
6053
6060
|
startOffset: bufferStart,
|
6054
6061
|
endOffset: Infinity,
|
6055
6062
|
type: type
|
@@ -6144,14 +6151,14 @@
|
|
6144
6151
|
}
|
6145
6152
|
};
|
6146
6153
|
_proto.bufferCreated = function bufferCreated() {
|
6147
|
-
var
|
6154
|
+
var _this21 = this;
|
6148
6155
|
if (this.sourceBufferCount) {
|
6149
6156
|
var tracks = {};
|
6150
6157
|
this.sourceBuffers.forEach(function (_ref12) {
|
6151
6158
|
var type = _ref12[0],
|
6152
6159
|
buffer = _ref12[1];
|
6153
6160
|
if (type) {
|
6154
|
-
var track =
|
6161
|
+
var track = _this21.tracks[type];
|
6155
6162
|
tracks[type] = {
|
6156
6163
|
buffer: buffer,
|
6157
6164
|
container: track.container,
|
@@ -6169,7 +6176,7 @@
|
|
6169
6176
|
this.log("SourceBuffers created. Running queue: " + this.operationQueue);
|
6170
6177
|
this.sourceBuffers.forEach(function (_ref13) {
|
6171
6178
|
var type = _ref13[0];
|
6172
|
-
|
6179
|
+
_this21.executeNext(type);
|
6173
6180
|
});
|
6174
6181
|
} else {
|
6175
6182
|
var error = new Error('could not create source buffer for media codec(s)');
|
@@ -6243,7 +6250,7 @@
|
|
6243
6250
|
return '';
|
6244
6251
|
};
|
6245
6252
|
_proto.trackSourceBuffer = function trackSourceBuffer(type, track) {
|
6246
|
-
var
|
6253
|
+
var _this22 = this;
|
6247
6254
|
var buffer = track.buffer;
|
6248
6255
|
if (!buffer) {
|
6249
6256
|
return;
|
@@ -6269,7 +6276,7 @@
|
|
6269
6276
|
// If media was ejected check for a change. Added ranges are redundant with changes on 'updateend' event.
|
6270
6277
|
var removedRanges = event.removedRanges;
|
6271
6278
|
if (removedRanges != null && removedRanges.length) {
|
6272
|
-
|
6279
|
+
_this22.hls.trigger(Events.BUFFER_FLUSHED, {
|
6273
6280
|
type: type
|
6274
6281
|
});
|
6275
6282
|
}
|
@@ -6369,10 +6376,10 @@
|
|
6369
6376
|
});
|
6370
6377
|
};
|
6371
6378
|
_proto.isQueued = function isQueued() {
|
6372
|
-
var
|
6379
|
+
var _this23 = this;
|
6373
6380
|
return this.sourceBuffers.some(function (_ref15) {
|
6374
6381
|
var type = _ref15[0];
|
6375
|
-
return type && !!
|
6382
|
+
return type && !!_this23.currentOp(type);
|
6376
6383
|
});
|
6377
6384
|
};
|
6378
6385
|
_proto.isPending = function isPending(track) {
|
@@ -6384,7 +6391,7 @@
|
|
6384
6391
|
// upon completion, since we already do it here
|
6385
6392
|
;
|
6386
6393
|
_proto.blockBuffers = function blockBuffers(onUnblocked, bufferNames) {
|
6387
|
-
var
|
6394
|
+
var _this24 = this;
|
6388
6395
|
if (bufferNames === void 0) {
|
6389
6396
|
bufferNames = this.sourceBufferTypes;
|
6390
6397
|
}
|
@@ -6397,33 +6404,33 @@
|
|
6397
6404
|
|
6398
6405
|
// logger.debug(`[buffer-controller]: Blocking ${buffers} SourceBuffer`);
|
6399
6406
|
var blockingOperations = bufferNames.map(function (type) {
|
6400
|
-
return
|
6407
|
+
return _this24.appendBlocker(type);
|
6401
6408
|
});
|
6402
6409
|
var audioBlocked = bufferNames.length > 1 && !!this.blockedAudioAppend;
|
6403
6410
|
if (audioBlocked) {
|
6404
6411
|
this.unblockAudio();
|
6405
6412
|
}
|
6406
6413
|
Promise.all(blockingOperations).then(function (result) {
|
6407
|
-
if (operationQueue !==
|
6414
|
+
if (operationQueue !== _this24.operationQueue) {
|
6408
6415
|
return;
|
6409
6416
|
}
|
6410
6417
|
// logger.debug(`[buffer-controller]: Blocking operation resolved; unblocking ${buffers} SourceBuffer`);
|
6411
6418
|
onUnblocked();
|
6412
|
-
|
6419
|
+
_this24.stepOperationQueue(bufferNames);
|
6413
6420
|
});
|
6414
6421
|
};
|
6415
6422
|
_proto.stepOperationQueue = function stepOperationQueue(bufferNames) {
|
6416
|
-
var
|
6423
|
+
var _this25 = this;
|
6417
6424
|
bufferNames.forEach(function (type) {
|
6418
|
-
var
|
6419
|
-
var sb = (
|
6425
|
+
var _this25$tracks$type;
|
6426
|
+
var sb = (_this25$tracks$type = _this25.tracks[type]) == null ? void 0 : _this25$tracks$type.buffer;
|
6420
6427
|
// Only cycle the queue if the SB is not updating. There's a bug in Chrome which sets the SB updating flag to
|
6421
6428
|
// true when changing the MediaSource duration (https://bugs.chromium.org/p/chromium/issues/detail?id=959359&can=2&q=mediasource%20duration)
|
6422
6429
|
// While this is a workaround, it's probably useful to have around
|
6423
6430
|
if (!sb || sb.updating) {
|
6424
6431
|
return;
|
6425
6432
|
}
|
6426
|
-
|
6433
|
+
_this25.shiftAndExecuteNext(type);
|
6427
6434
|
});
|
6428
6435
|
};
|
6429
6436
|
_proto.append = function append(operation, type, pending) {
|
@@ -6492,9 +6499,9 @@
|
|
6492
6499
|
}, {
|
6493
6500
|
key: "sourceBufferTracks",
|
6494
6501
|
get: function get() {
|
6495
|
-
var
|
6502
|
+
var _this26 = this;
|
6496
6503
|
return Object.keys(this.tracks).reduce(function (baseTracks, type) {
|
6497
|
-
var track =
|
6504
|
+
var track = _this26.tracks[type];
|
6498
6505
|
baseTracks[type] = {
|
6499
6506
|
id: track.id,
|
6500
6507
|
container: track.container,
|
@@ -6507,11 +6514,11 @@
|
|
6507
6514
|
}, {
|
6508
6515
|
key: "bufferedToEnd",
|
6509
6516
|
get: function get() {
|
6510
|
-
var
|
6517
|
+
var _this27 = this;
|
6511
6518
|
return this.sourceBufferCount > 0 && !this.sourceBuffers.some(function (_ref16) {
|
6512
|
-
var
|
6519
|
+
var _this27$tracks$type, _this27$tracks$type2;
|
6513
6520
|
var type = _ref16[0];
|
6514
|
-
return type && (!((
|
6521
|
+
return type && (!((_this27$tracks$type = _this27.tracks[type]) != null && _this27$tracks$type.ended) || ((_this27$tracks$type2 = _this27.tracks[type]) == null ? void 0 : _this27$tracks$type2.ending));
|
6515
6522
|
});
|
6516
6523
|
}
|
6517
6524
|
}, {
|
@@ -6530,9 +6537,9 @@
|
|
6530
6537
|
}, {
|
6531
6538
|
key: "pendingTrackCount",
|
6532
6539
|
get: function get() {
|
6533
|
-
var
|
6540
|
+
var _this28 = this;
|
6534
6541
|
return Object.keys(this.tracks).reduce(function (acc, type) {
|
6535
|
-
return acc + (
|
6542
|
+
return acc + (_this28.isPending(_this28.tracks[type]) ? 1 : 0);
|
6536
6543
|
}, 0);
|
6537
6544
|
}
|
6538
6545
|
}, {
|
@@ -17416,8 +17423,8 @@
|
|
17416
17423
|
var end = this.loadingParts ? levelDetails.partEnd : levelDetails.fragmentEnd;
|
17417
17424
|
frag = this.getFragmentAtPosition(pos, end, levelDetails);
|
17418
17425
|
}
|
17419
|
-
|
17420
|
-
return this.mapToInitFragWhenRequired(
|
17426
|
+
var programFrag = this.filterReplacedPrimary(frag, levelDetails);
|
17427
|
+
return this.mapToInitFragWhenRequired(programFrag);
|
17421
17428
|
};
|
17422
17429
|
_proto.isLoopLoading = function isLoopLoading(frag, targetBufferTime) {
|
17423
17430
|
var trackerState = this.fragmentTracker.getState(frag);
|
@@ -17448,7 +17455,7 @@
|
|
17448
17455
|
if (!frag) {
|
17449
17456
|
return frag;
|
17450
17457
|
}
|
17451
|
-
this.hls.config;
|
17458
|
+
if (interstitialsEnabled(this.hls.config)) ;
|
17452
17459
|
return frag;
|
17453
17460
|
};
|
17454
17461
|
_proto.mapToInitFragWhenRequired = function mapToInitFragWhenRequired(frag) {
|
@@ -17610,6 +17617,7 @@
|
|
17610
17617
|
if (startPosition < sliding) {
|
17611
17618
|
startPosition = -1;
|
17612
17619
|
}
|
17620
|
+
var timelineOffset = this.timelineOffset;
|
17613
17621
|
if (startPosition === -1) {
|
17614
17622
|
// Use Playlist EXT-X-START:TIME-OFFSET when set
|
17615
17623
|
// Prioritize Multivariant Playlist offset so that main, audio, and subtitle stream-controller start times match
|
@@ -17633,9 +17641,9 @@
|
|
17633
17641
|
this.log("setting startPosition to 0 by default");
|
17634
17642
|
this.startPosition = startPosition = 0;
|
17635
17643
|
}
|
17636
|
-
this.lastCurrentTime = startPosition;
|
17644
|
+
this.lastCurrentTime = startPosition + timelineOffset;
|
17637
17645
|
}
|
17638
|
-
this.nextLoadPosition = startPosition;
|
17646
|
+
this.nextLoadPosition = startPosition + timelineOffset;
|
17639
17647
|
};
|
17640
17648
|
_proto.getLoadPosition = function getLoadPosition() {
|
17641
17649
|
var _this$hls;
|
@@ -17932,6 +17940,22 @@
|
|
17932
17940
|
state: this.state
|
17933
17941
|
};
|
17934
17942
|
}
|
17943
|
+
}, {
|
17944
|
+
key: "timelineOffset",
|
17945
|
+
get: function get() {
|
17946
|
+
var configuredTimelineOffset = this.config.timelineOffset;
|
17947
|
+
if (configuredTimelineOffset) {
|
17948
|
+
var _this$getLevelDetails;
|
17949
|
+
return ((_this$getLevelDetails = this.getLevelDetails()) == null ? void 0 : _this$getLevelDetails.appliedTimelineOffset) || configuredTimelineOffset;
|
17950
|
+
}
|
17951
|
+
return 0;
|
17952
|
+
}
|
17953
|
+
}, {
|
17954
|
+
key: "primaryPrefetch",
|
17955
|
+
get: function get() {
|
17956
|
+
if (interstitialsEnabled(this.hls.config)) ;
|
17957
|
+
return false;
|
17958
|
+
}
|
17935
17959
|
}, {
|
17936
17960
|
key: "state",
|
17937
17961
|
get: function get() {
|
@@ -17946,6 +17970,9 @@
|
|
17946
17970
|
}
|
17947
17971
|
}]);
|
17948
17972
|
}(TaskLoop);
|
17973
|
+
function interstitialsEnabled(config) {
|
17974
|
+
return false;
|
17975
|
+
}
|
17949
17976
|
|
17950
17977
|
function addEventListener(el, type, listener) {
|
17951
17978
|
removeEventListener(el, type, listener);
|
@@ -20262,7 +20289,7 @@
|
|
20262
20289
|
return !remuxResult.audio && !remuxResult.video && !remuxResult.text && !remuxResult.id3 && !remuxResult.initSegment;
|
20263
20290
|
}
|
20264
20291
|
|
20265
|
-
var version = "1.6.0-rc.1.0.canary.
|
20292
|
+
var version = "1.6.0-rc.1.0.canary.11080";
|
20266
20293
|
|
20267
20294
|
// ensure the worker ends up in the bundle
|
20268
20295
|
// If the worker should not be included this gets aliased to empty.js
|
@@ -20775,7 +20802,7 @@
|
|
20775
20802
|
startPosition = lastCurrentTime;
|
20776
20803
|
}
|
20777
20804
|
this.state = State.IDLE;
|
20778
|
-
this.nextLoadPosition = this.lastCurrentTime = startPosition;
|
20805
|
+
this.nextLoadPosition = this.lastCurrentTime = startPosition + this.timelineOffset;
|
20779
20806
|
this.startPosition = skipSeekToStartPosition ? -1 : startPosition;
|
20780
20807
|
this.tick();
|
20781
20808
|
} else {
|
@@ -20845,7 +20872,7 @@
|
|
20845
20872
|
// if start level not parsed yet OR
|
20846
20873
|
// if video not attached AND start fragment already requested OR start frag prefetch not enabled
|
20847
20874
|
// exit loop, as we either need more info (level not parsed) or we need media to be attached to load new fragment
|
20848
|
-
if (levelLastLoaded === null || !media && (this.startFragRequested || !hls.config.startFragPrefetch)) {
|
20875
|
+
if (levelLastLoaded === null || !media && !this.primaryPrefetch && (this.startFragRequested || !hls.config.startFragPrefetch)) {
|
20849
20876
|
return;
|
20850
20877
|
}
|
20851
20878
|
|
@@ -21454,11 +21481,11 @@
|
|
21454
21481
|
}
|
21455
21482
|
|
21456
21483
|
// Offset start position by timeline offset
|
21457
|
-
var
|
21458
|
-
|
21459
|
-
|
21460
|
-
startPosition += (details == null ? void 0 : details.appliedTimelineOffset) || configuredTimelineOffset;
|
21484
|
+
var timelineOffset = this.timelineOffset;
|
21485
|
+
if (timelineOffset && startPosition) {
|
21486
|
+
startPosition += timelineOffset;
|
21461
21487
|
}
|
21488
|
+
var details = this.getLevelDetails();
|
21462
21489
|
var buffered = BufferHelper.getBuffered(media);
|
21463
21490
|
var bufferStart = buffered.length ? buffered.start(0) : 0;
|
21464
21491
|
var delta = bufferStart - startPosition;
|