hls.js 1.6.0-beta.1.0.canary.10743 → 1.6.0-beta.1.0.canary.10746
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 +36 -10
- package/dist/hls.d.ts +36 -10
- package/dist/hls.js +172 -87
- package/dist/hls.js.d.ts +36 -10
- package/dist/hls.js.map +1 -1
- package/dist/hls.light.js +171 -86
- 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 +160 -89
- 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 +161 -90
- 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 +2 -2
- package/src/controller/latency-controller.ts +1 -1
- package/src/controller/stream-controller.ts +1 -1
- package/src/loader/date-range.ts +2 -2
- package/src/loader/fragment.ts +116 -23
- package/src/loader/interstitial-event.ts +8 -5
- package/src/loader/m3u8-parser.ts +49 -56
- package/src/utils/level-helper.ts +22 -15
package/dist/hls.light.js
CHANGED
@@ -1025,7 +1025,7 @@
|
|
1025
1025
|
// Some browsers don't allow to use bind on console object anyway
|
1026
1026
|
// fallback to default if needed
|
1027
1027
|
try {
|
1028
|
-
newLogger.log("Debug logs enabled for \"" + context + "\" in hls.js version " + "1.6.0-beta.1.0.canary.
|
1028
|
+
newLogger.log("Debug logs enabled for \"" + context + "\" in hls.js version " + "1.6.0-beta.1.0.canary.10746");
|
1029
1029
|
} catch (e) {
|
1030
1030
|
/* log fn threw an exception. All logger methods are no-ops. */
|
1031
1031
|
return createLogger();
|
@@ -3167,17 +3167,21 @@
|
|
3167
3167
|
AUDIOVIDEO: "audiovideo"
|
3168
3168
|
};
|
3169
3169
|
var BaseSegment = /*#__PURE__*/function () {
|
3170
|
-
function BaseSegment(
|
3171
|
-
var _this$elementaryStrea;
|
3170
|
+
function BaseSegment(base) {
|
3172
3171
|
this._byteRange = null;
|
3173
3172
|
this._url = null;
|
3173
|
+
this._stats = null;
|
3174
|
+
this._streams = null;
|
3174
3175
|
// baseurl is the URL to the playlist
|
3175
|
-
this.
|
3176
|
+
this.base = void 0;
|
3176
3177
|
// relurl is the portion of the URL that comes from inside the playlist.
|
3177
3178
|
this.relurl = void 0;
|
3178
|
-
|
3179
|
-
|
3180
|
-
|
3179
|
+
if (typeof base === 'string') {
|
3180
|
+
base = {
|
3181
|
+
url: base
|
3182
|
+
};
|
3183
|
+
}
|
3184
|
+
this.base = base;
|
3181
3185
|
}
|
3182
3186
|
|
3183
3187
|
// setByteRange converts a EXT-X-BYTERANGE attribute into a two element array
|
@@ -3199,9 +3203,14 @@
|
|
3199
3203
|
elementaryStreams[ElementaryStreamTypes.AUDIOVIDEO] = null;
|
3200
3204
|
};
|
3201
3205
|
return _createClass(BaseSegment, [{
|
3206
|
+
key: "baseurl",
|
3207
|
+
get: function get() {
|
3208
|
+
return this.base.url;
|
3209
|
+
}
|
3210
|
+
}, {
|
3202
3211
|
key: "byteRange",
|
3203
3212
|
get: function get() {
|
3204
|
-
if (
|
3213
|
+
if (this._byteRange === null) {
|
3205
3214
|
return [];
|
3206
3215
|
}
|
3207
3216
|
return this._byteRange;
|
@@ -3216,6 +3225,39 @@
|
|
3216
3225
|
get: function get() {
|
3217
3226
|
return this.byteRange[1];
|
3218
3227
|
}
|
3228
|
+
}, {
|
3229
|
+
key: "elementaryStreams",
|
3230
|
+
get: function get() {
|
3231
|
+
if (this._streams === null) {
|
3232
|
+
var _this$_streams;
|
3233
|
+
this._streams = (_this$_streams = {}, _this$_streams[ElementaryStreamTypes.AUDIO] = null, _this$_streams[ElementaryStreamTypes.VIDEO] = null, _this$_streams[ElementaryStreamTypes.AUDIOVIDEO] = null, _this$_streams);
|
3234
|
+
}
|
3235
|
+
return this._streams;
|
3236
|
+
},
|
3237
|
+
set: function set(value) {
|
3238
|
+
this._streams = value;
|
3239
|
+
}
|
3240
|
+
}, {
|
3241
|
+
key: "hasStats",
|
3242
|
+
get: function get() {
|
3243
|
+
return this._stats !== null;
|
3244
|
+
}
|
3245
|
+
}, {
|
3246
|
+
key: "hasStreams",
|
3247
|
+
get: function get() {
|
3248
|
+
return this._streams !== null;
|
3249
|
+
}
|
3250
|
+
}, {
|
3251
|
+
key: "stats",
|
3252
|
+
get: function get() {
|
3253
|
+
if (this._stats === null) {
|
3254
|
+
this._stats = new LoadStats();
|
3255
|
+
}
|
3256
|
+
return this._stats;
|
3257
|
+
},
|
3258
|
+
set: function set(value) {
|
3259
|
+
this._stats = value;
|
3260
|
+
}
|
3219
3261
|
}, {
|
3220
3262
|
key: "url",
|
3221
3263
|
get: function get() {
|
@@ -3235,12 +3277,13 @@
|
|
3235
3277
|
* Object representing parsed data from an HLS Segment. Found in {@link hls.js#LevelDetails.fragments}.
|
3236
3278
|
*/
|
3237
3279
|
var Fragment = /*#__PURE__*/function (_BaseSegment2) {
|
3238
|
-
function Fragment(type,
|
3280
|
+
function Fragment(type, base) {
|
3239
3281
|
var _this;
|
3240
|
-
_this = _BaseSegment2.call(this,
|
3282
|
+
_this = _BaseSegment2.call(this, base) || this;
|
3241
3283
|
_this._decryptdata = null;
|
3284
|
+
_this._programDateTime = null;
|
3285
|
+
_this._ref = null;
|
3242
3286
|
_this.rawProgramDateTime = null;
|
3243
|
-
_this.programDateTime = null;
|
3244
3287
|
_this.tagList = [];
|
3245
3288
|
// EXTINF has to be present for a m3u8 to be considered valid
|
3246
3289
|
_this.duration = 0;
|
@@ -3278,8 +3321,6 @@
|
|
3278
3321
|
_this.maxStartPTS = void 0;
|
3279
3322
|
// The minimum ending Presentation Time Stamp (audio/video PTS) of the fragment. Set after transmux complete.
|
3280
3323
|
_this.minEndPTS = void 0;
|
3281
|
-
// Load/parse timing information
|
3282
|
-
_this.stats = new LoadStats();
|
3283
3324
|
// Init Segment bytes (unset for media segments)
|
3284
3325
|
_this.data = void 0;
|
3285
3326
|
// A flag indicating whether the segment was downloaded in order to test bitrate, and was not buffered
|
@@ -3299,6 +3340,21 @@
|
|
3299
3340
|
}
|
3300
3341
|
_inheritsLoose(Fragment, _BaseSegment2);
|
3301
3342
|
var _proto2 = Fragment.prototype;
|
3343
|
+
_proto2.addStart = function addStart(value) {
|
3344
|
+
this.setStart(this.start + value);
|
3345
|
+
};
|
3346
|
+
_proto2.setStart = function setStart(value) {
|
3347
|
+
this.start = value;
|
3348
|
+
if (this._ref) {
|
3349
|
+
this._ref.start = value;
|
3350
|
+
}
|
3351
|
+
};
|
3352
|
+
_proto2.setDuration = function setDuration(value) {
|
3353
|
+
this.duration = value;
|
3354
|
+
if (this._ref) {
|
3355
|
+
this._ref.duration = value;
|
3356
|
+
}
|
3357
|
+
};
|
3302
3358
|
_proto2.setKeyFormat = function setKeyFormat(keyFormat) {
|
3303
3359
|
if (this.levelkeys) {
|
3304
3360
|
var key = this.levelkeys[keyFormat];
|
@@ -3364,9 +3420,6 @@
|
|
3364
3420
|
if (this.programDateTime === null) {
|
3365
3421
|
return null;
|
3366
3422
|
}
|
3367
|
-
if (!isFiniteNumber(this.programDateTime)) {
|
3368
|
-
return null;
|
3369
|
-
}
|
3370
3423
|
var duration = !isFiniteNumber(this.duration) ? 0 : this.duration;
|
3371
3424
|
return this.programDateTime + duration * 1000;
|
3372
3425
|
}
|
@@ -3388,6 +3441,38 @@
|
|
3388
3441
|
}
|
3389
3442
|
return false;
|
3390
3443
|
}
|
3444
|
+
}, {
|
3445
|
+
key: "programDateTime",
|
3446
|
+
get: function get() {
|
3447
|
+
if (this._programDateTime === null && this.rawProgramDateTime) {
|
3448
|
+
this.programDateTime = Date.parse(this.rawProgramDateTime);
|
3449
|
+
}
|
3450
|
+
return this._programDateTime;
|
3451
|
+
},
|
3452
|
+
set: function set(value) {
|
3453
|
+
if (!isFiniteNumber(value)) {
|
3454
|
+
this._programDateTime = this.rawProgramDateTime = null;
|
3455
|
+
return;
|
3456
|
+
}
|
3457
|
+
this._programDateTime = value;
|
3458
|
+
}
|
3459
|
+
}, {
|
3460
|
+
key: "ref",
|
3461
|
+
get: function get() {
|
3462
|
+
if (this.sn === 'initSegment') {
|
3463
|
+
return null;
|
3464
|
+
}
|
3465
|
+
if (!this._ref) {
|
3466
|
+
this._ref = {
|
3467
|
+
base: this.base,
|
3468
|
+
start: this.start,
|
3469
|
+
duration: this.duration,
|
3470
|
+
sn: this.sn,
|
3471
|
+
programDateTime: this.programDateTime
|
3472
|
+
};
|
3473
|
+
}
|
3474
|
+
return this._ref;
|
3475
|
+
}
|
3391
3476
|
}]);
|
3392
3477
|
}(BaseSegment);
|
3393
3478
|
|
@@ -3395,9 +3480,9 @@
|
|
3395
3480
|
* Object representing parsed data from an HLS Partial Segment. Found in {@link hls.js#LevelDetails.partList}.
|
3396
3481
|
*/
|
3397
3482
|
var Part = /*#__PURE__*/function (_BaseSegment3) {
|
3398
|
-
function Part(partAttrs, frag,
|
3483
|
+
function Part(partAttrs, frag, base, index, previous) {
|
3399
3484
|
var _this2;
|
3400
|
-
_this2 = _BaseSegment3.call(this,
|
3485
|
+
_this2 = _BaseSegment3.call(this, base) || this;
|
3401
3486
|
_this2.fragOffset = 0;
|
3402
3487
|
_this2.duration = 0;
|
3403
3488
|
_this2.gap = false;
|
@@ -3405,7 +3490,6 @@
|
|
3405
3490
|
_this2.relurl = void 0;
|
3406
3491
|
_this2.fragment = void 0;
|
3407
3492
|
_this2.index = void 0;
|
3408
|
-
_this2.stats = new LoadStats();
|
3409
3493
|
_this2.duration = partAttrs.decimalFloatingPoint('DURATION');
|
3410
3494
|
_this2.gap = partAttrs.bool('GAP');
|
3411
3495
|
_this2.independent = partAttrs.bool('INDEPENDENT');
|
@@ -7055,13 +7139,9 @@
|
|
7055
7139
|
// duration (#EXTINF:<duration>,<title>), group 1 => duration, group 2 => title
|
7056
7140
|
/(?!#) *(\S[^\r\n]*)/.source,
|
7057
7141
|
// segment URI, group 3 => the URI (note newline is not eaten)
|
7058
|
-
/#EXT-X-BYTERANGE:*(.+)/.source,
|
7059
|
-
// next segment's byterange, group 4 => range spec (x@y)
|
7060
|
-
/#EXT-X-PROGRAM-DATE-TIME:(.+)/.source,
|
7061
|
-
// next segment's program date/time group 5 => the datetime spec
|
7062
7142
|
/#.*/.source // All other non-segment oriented tags will match with all groups empty
|
7063
7143
|
].join('|'), 'g');
|
7064
|
-
var LEVEL_PLAYLIST_REGEX_SLOW = new RegExp([/#(EXTM3U)/.source, /#EXT-X-(DATERANGE|DEFINE|KEY|MAP|PART|PART-INF|PLAYLIST-TYPE|PRELOAD-HINT|RENDITION-REPORT|SERVER-CONTROL|SKIP|START):(.+)/.source, /#EXT-X-(BITRATE|DISCONTINUITY-SEQUENCE|MEDIA-SEQUENCE|TARGETDURATION|VERSION): *(\d+)/.source, /#EXT-X-(DISCONTINUITY|ENDLIST|GAP|INDEPENDENT-SEGMENTS)/.source, /(#)([^:]*):(.*)/.source, /(#)(.*)(?:.*)\r?\n?/.source].join('|'));
|
7144
|
+
var LEVEL_PLAYLIST_REGEX_SLOW = new RegExp([/#(EXTM3U)/.source, /#EXT-X-(PROGRAM-DATE-TIME|BYTERANGE|DATERANGE|DEFINE|KEY|MAP|PART|PART-INF|PLAYLIST-TYPE|PRELOAD-HINT|RENDITION-REPORT|SERVER-CONTROL|SKIP|START):(.+)/.source, /#EXT-X-(BITRATE|DISCONTINUITY-SEQUENCE|MEDIA-SEQUENCE|TARGETDURATION|VERSION): *(\d+)/.source, /#EXT-X-(DISCONTINUITY|ENDLIST|GAP|INDEPENDENT-SEGMENTS)/.source, /(#)([^:]*):(.*)/.source, /(#)(.*)(?:.*)\r?\n?/.source].join('|'));
|
7065
7145
|
var M3U8Parser = /*#__PURE__*/function () {
|
7066
7146
|
function M3U8Parser() {}
|
7067
7147
|
M3U8Parser.findGroup = function findGroup(groups, mediaGroupId) {
|
@@ -7251,6 +7331,9 @@
|
|
7251
7331
|
return results;
|
7252
7332
|
};
|
7253
7333
|
M3U8Parser.parseLevelPlaylist = function parseLevelPlaylist(string, baseurl, id, type, levelUrlId, multivariantVariableList) {
|
7334
|
+
var base = {
|
7335
|
+
url: baseurl
|
7336
|
+
};
|
7254
7337
|
var level = new LevelDetails(baseurl);
|
7255
7338
|
var fragments = level.fragments;
|
7256
7339
|
var programDateTimes = [];
|
@@ -7261,7 +7344,7 @@
|
|
7261
7344
|
var totalduration = 0;
|
7262
7345
|
var discontinuityCounter = 0;
|
7263
7346
|
var prevFrag = null;
|
7264
|
-
var frag = new Fragment(type,
|
7347
|
+
var frag = new Fragment(type, base);
|
7265
7348
|
var result;
|
7266
7349
|
var i;
|
7267
7350
|
var levelkeys;
|
@@ -7274,7 +7357,7 @@
|
|
7274
7357
|
while ((result = LEVEL_PLAYLIST_REGEX_FAST.exec(string)) !== null) {
|
7275
7358
|
if (createNextFrag) {
|
7276
7359
|
createNextFrag = false;
|
7277
|
-
frag = new Fragment(type,
|
7360
|
+
frag = new Fragment(type, base);
|
7278
7361
|
// setup the next fragment for part loading
|
7279
7362
|
frag.playlistOffset = totalduration;
|
7280
7363
|
frag.start = totalduration;
|
@@ -7283,8 +7366,10 @@
|
|
7283
7366
|
frag.level = id;
|
7284
7367
|
if (currentInitSegment) {
|
7285
7368
|
frag.initSegment = currentInitSegment;
|
7286
|
-
|
7287
|
-
|
7369
|
+
if (currentInitSegment.rawProgramDateTime) {
|
7370
|
+
frag.rawProgramDateTime = currentInitSegment.rawProgramDateTime;
|
7371
|
+
currentInitSegment.rawProgramDateTime = null;
|
7372
|
+
}
|
7288
7373
|
if (nextByteRange) {
|
7289
7374
|
frag.setByteRange(nextByteRange);
|
7290
7375
|
nextByteRange = null;
|
@@ -7321,22 +7406,6 @@
|
|
7321
7406
|
currentPart = 0;
|
7322
7407
|
createNextFrag = true;
|
7323
7408
|
}
|
7324
|
-
} else if (result[4]) {
|
7325
|
-
// X-BYTERANGE
|
7326
|
-
var data = (' ' + result[4]).slice(1);
|
7327
|
-
if (prevFrag) {
|
7328
|
-
frag.setByteRange(data, prevFrag);
|
7329
|
-
} else {
|
7330
|
-
frag.setByteRange(data);
|
7331
|
-
}
|
7332
|
-
} else if (result[5]) {
|
7333
|
-
// PROGRAM-DATE-TIME
|
7334
|
-
// avoid sliced strings https://github.com/video-dev/hls.js/issues/939
|
7335
|
-
frag.rawProgramDateTime = (' ' + result[5]).slice(1);
|
7336
|
-
frag.tagList.push(['PROGRAM-DATE-TIME', frag.rawProgramDateTime]);
|
7337
|
-
if (firstPdtIndex === -1) {
|
7338
|
-
firstPdtIndex = fragments.length;
|
7339
|
-
}
|
7340
7409
|
} else {
|
7341
7410
|
result = result[0].match(LEVEL_PLAYLIST_REGEX_SLOW);
|
7342
7411
|
if (!result) {
|
@@ -7344,7 +7413,7 @@
|
|
7344
7413
|
continue;
|
7345
7414
|
}
|
7346
7415
|
for (i = 1; i < result.length; i++) {
|
7347
|
-
if (
|
7416
|
+
if (result[i] !== undefined) {
|
7348
7417
|
break;
|
7349
7418
|
}
|
7350
7419
|
}
|
@@ -7352,8 +7421,23 @@
|
|
7352
7421
|
// avoid sliced strings https://github.com/video-dev/hls.js/issues/939
|
7353
7422
|
var tag = (' ' + result[i]).slice(1);
|
7354
7423
|
var value1 = (' ' + result[i + 1]).slice(1);
|
7355
|
-
var value2 = result[i + 2] ? (' ' + result[i + 2]).slice(1) :
|
7424
|
+
var value2 = result[i + 2] ? (' ' + result[i + 2]).slice(1) : null;
|
7356
7425
|
switch (tag) {
|
7426
|
+
case 'BYTERANGE':
|
7427
|
+
if (prevFrag) {
|
7428
|
+
frag.setByteRange(value1, prevFrag);
|
7429
|
+
} else {
|
7430
|
+
frag.setByteRange(value1);
|
7431
|
+
}
|
7432
|
+
break;
|
7433
|
+
case 'PROGRAM-DATE-TIME':
|
7434
|
+
// avoid sliced strings https://github.com/video-dev/hls.js/issues/939
|
7435
|
+
frag.rawProgramDateTime = value1;
|
7436
|
+
frag.tagList.push(['PROGRAM-DATE-TIME', value1]);
|
7437
|
+
if (firstPdtIndex === -1) {
|
7438
|
+
firstPdtIndex = fragments.length;
|
7439
|
+
}
|
7440
|
+
break;
|
7357
7441
|
case 'PLAYLIST-TYPE':
|
7358
7442
|
level.type = value1.toUpperCase();
|
7359
7443
|
break;
|
@@ -7460,7 +7544,7 @@
|
|
7460
7544
|
// Initial segment tag is after segment duration tag.
|
7461
7545
|
// #EXTINF: 6.0
|
7462
7546
|
// #EXT-X-MAP:URI="init.mp4
|
7463
|
-
var init = new Fragment(type,
|
7547
|
+
var init = new Fragment(type, base);
|
7464
7548
|
setInitSegment(init, mapAttrs, id, levelkeys);
|
7465
7549
|
currentInitSegment = init;
|
7466
7550
|
frag.initSegment = currentInitSegment;
|
@@ -7509,7 +7593,7 @@
|
|
7509
7593
|
var previousFragmentPart = currentPart > 0 ? partList[partList.length - 1] : undefined;
|
7510
7594
|
var index = currentPart++;
|
7511
7595
|
var partAttrs = new AttrList(value1, level);
|
7512
|
-
var part = new Part(partAttrs, frag,
|
7596
|
+
var part = new Part(partAttrs, frag, base, index, previousFragmentPart);
|
7513
7597
|
partList.push(part);
|
7514
7598
|
frag.duration += part.duration;
|
7515
7599
|
break;
|
@@ -7601,11 +7685,11 @@
|
|
7601
7685
|
for (var i = dateRangeIds.length; i--;) {
|
7602
7686
|
var dateRange = details.dateRanges[dateRangeIds[i]];
|
7603
7687
|
var startDateTime = dateRange.startDate.getTime();
|
7604
|
-
dateRange.tagAnchor = lastProgramDateTime;
|
7688
|
+
dateRange.tagAnchor = lastProgramDateTime.ref;
|
7605
7689
|
for (var j = programDateTimeCount; j--;) {
|
7606
7690
|
var fragIndex = findFragmentWithStartDate(details, startDateTime, programDateTimes, j, playlistEnd);
|
7607
7691
|
if (fragIndex !== -1) {
|
7608
|
-
dateRange.tagAnchor = details.fragments[fragIndex];
|
7692
|
+
dateRange.tagAnchor = details.fragments[fragIndex].ref;
|
7609
7693
|
break;
|
7610
7694
|
}
|
7611
7695
|
}
|
@@ -7614,25 +7698,27 @@
|
|
7614
7698
|
function findFragmentWithStartDate(details, startDateTime, programDateTimes, index, endTime) {
|
7615
7699
|
var pdtFragment = programDateTimes[index];
|
7616
7700
|
if (pdtFragment) {
|
7617
|
-
var _programDateTimes;
|
7618
7701
|
// find matching range between PDT tags
|
7619
|
-
var durationBetweenPdt = (((_programDateTimes = programDateTimes[index + 1]) == null ? void 0 : _programDateTimes.start) || endTime) - pdtFragment.start;
|
7620
7702
|
var pdtStart = pdtFragment.programDateTime;
|
7621
|
-
if (
|
7622
|
-
|
7623
|
-
var
|
7624
|
-
|
7625
|
-
|
7626
|
-
var
|
7627
|
-
var
|
7628
|
-
|
7629
|
-
var
|
7630
|
-
|
7631
|
-
|
7703
|
+
if (startDateTime >= pdtStart || index === 0) {
|
7704
|
+
var _programDateTimes;
|
7705
|
+
var durationBetweenPdt = (((_programDateTimes = programDateTimes[index + 1]) == null ? void 0 : _programDateTimes.start) || endTime) - pdtFragment.start;
|
7706
|
+
if (startDateTime <= pdtStart + durationBetweenPdt * 1000) {
|
7707
|
+
// map to fragment with date-time range
|
7708
|
+
var startIndex = programDateTimes[index].sn - details.startSN;
|
7709
|
+
var fragments = details.fragments;
|
7710
|
+
if (fragments.length > programDateTimes.length) {
|
7711
|
+
var endSegment = programDateTimes[index + 1] || fragments[fragments.length - 1];
|
7712
|
+
var endIndex = endSegment.sn - details.startSN;
|
7713
|
+
for (var i = endIndex; i > startIndex; i--) {
|
7714
|
+
var fragStartDateTime = fragments[i].programDateTime;
|
7715
|
+
if (startDateTime >= fragStartDateTime && startDateTime < fragStartDateTime + fragments[i].duration * 1000) {
|
7716
|
+
return i;
|
7717
|
+
}
|
7632
7718
|
}
|
7633
7719
|
}
|
7720
|
+
return startIndex;
|
7634
7721
|
}
|
7635
|
-
return startIndex;
|
7636
7722
|
}
|
7637
7723
|
}
|
7638
7724
|
return -1;
|
@@ -7703,12 +7789,6 @@
|
|
7703
7789
|
}
|
7704
7790
|
function assignProgramDateTime(frag, prevFrag, programDateTimes) {
|
7705
7791
|
if (frag.rawProgramDateTime) {
|
7706
|
-
frag.programDateTime = Date.parse(frag.rawProgramDateTime);
|
7707
|
-
if (!isFiniteNumber(frag.programDateTime)) {
|
7708
|
-
frag.programDateTime = null;
|
7709
|
-
frag.rawProgramDateTime = null;
|
7710
|
-
return;
|
7711
|
-
}
|
7712
7792
|
programDateTimes.push(frag);
|
7713
7793
|
} else if (prevFrag != null && prevFrag.programDateTime) {
|
7714
7794
|
frag.programDateTime = prevFrag.endProgramDateTime;
|
@@ -7752,19 +7832,19 @@
|
|
7752
7832
|
frag = fragTo;
|
7753
7833
|
}
|
7754
7834
|
if (frag.duration !== duration) {
|
7755
|
-
frag.duration
|
7835
|
+
frag.setDuration(duration);
|
7756
7836
|
}
|
7757
7837
|
// we dont know startPTS[toIdx]
|
7758
7838
|
} else if (fragTo.sn > fragFrom.sn) {
|
7759
7839
|
var contiguous = fragFrom.cc === fragTo.cc;
|
7760
7840
|
// TODO: With part-loading end/durations we need to confirm the whole fragment is loaded before using (or setting) minEndPTS
|
7761
7841
|
if (contiguous && fragFrom.minEndPTS) {
|
7762
|
-
fragTo.
|
7842
|
+
fragTo.setStart(fragFrom.start + (fragFrom.minEndPTS - fragFrom.start));
|
7763
7843
|
} else {
|
7764
|
-
fragTo.
|
7844
|
+
fragTo.setStart(fragFrom.start + fragFrom.duration);
|
7765
7845
|
}
|
7766
7846
|
} else {
|
7767
|
-
fragTo.
|
7847
|
+
fragTo.setStart(Math.max(fragFrom.start - fragTo.duration, 0));
|
7768
7848
|
}
|
7769
7849
|
}
|
7770
7850
|
function updateFragPTSDTS(details, frag, startPTS, endPTS, startDTS, endDTS) {
|
@@ -7795,9 +7875,9 @@
|
|
7795
7875
|
}
|
7796
7876
|
var drift = startPTS - frag.start;
|
7797
7877
|
if (frag.start !== 0) {
|
7798
|
-
frag.
|
7878
|
+
frag.setStart(startPTS);
|
7799
7879
|
}
|
7800
|
-
frag.
|
7880
|
+
frag.setDuration(endPTS - frag.start);
|
7801
7881
|
frag.startPTS = startPTS;
|
7802
7882
|
frag.maxStartPTS = maxStartPTS;
|
7803
7883
|
frag.startDTS = startDTS;
|
@@ -7860,13 +7940,13 @@
|
|
7860
7940
|
ccOffset = oldFrag.cc - newFrag.cc;
|
7861
7941
|
}
|
7862
7942
|
if (isFiniteNumber(oldFrag.startPTS) && isFiniteNumber(oldFrag.endPTS)) {
|
7863
|
-
newFrag.
|
7943
|
+
newFrag.setStart(newFrag.startPTS = oldFrag.startPTS);
|
7864
7944
|
newFrag.startDTS = oldFrag.startDTS;
|
7865
7945
|
newFrag.maxStartPTS = oldFrag.maxStartPTS;
|
7866
7946
|
newFrag.endPTS = oldFrag.endPTS;
|
7867
7947
|
newFrag.endDTS = oldFrag.endDTS;
|
7868
7948
|
newFrag.minEndPTS = oldFrag.minEndPTS;
|
7869
|
-
newFrag.
|
7949
|
+
newFrag.setDuration(oldFrag.endPTS - oldFrag.startPTS);
|
7870
7950
|
if (newFrag.duration) {
|
7871
7951
|
PTSFrag = newFrag;
|
7872
7952
|
}
|
@@ -7874,9 +7954,13 @@
|
|
7874
7954
|
// PTS is known when any segment has startPTS and endPTS
|
7875
7955
|
newDetails.PTSKnown = newDetails.alignedSliding = true;
|
7876
7956
|
}
|
7877
|
-
|
7957
|
+
if (oldFrag.hasStreams) {
|
7958
|
+
newFrag.elementaryStreams = oldFrag.elementaryStreams;
|
7959
|
+
}
|
7878
7960
|
newFrag.loader = oldFrag.loader;
|
7879
|
-
|
7961
|
+
if (oldFrag.hasStats) {
|
7962
|
+
newFrag.stats = oldFrag.stats;
|
7963
|
+
}
|
7880
7964
|
if (oldFrag.initSegment) {
|
7881
7965
|
newFrag.initSegment = oldFrag.initSegment;
|
7882
7966
|
currentInitSegment = oldFrag.initSegment;
|
@@ -8047,14 +8131,14 @@
|
|
8047
8131
|
}
|
8048
8132
|
addSliding(newDetails, sliding);
|
8049
8133
|
}
|
8050
|
-
function addSliding(details,
|
8051
|
-
if (
|
8134
|
+
function addSliding(details, sliding) {
|
8135
|
+
if (sliding) {
|
8052
8136
|
var fragments = details.fragments;
|
8053
8137
|
for (var i = details.skippedSegments; i < fragments.length; i++) {
|
8054
|
-
fragments[i].
|
8138
|
+
fragments[i].addStart(sliding);
|
8055
8139
|
}
|
8056
8140
|
if (details.fragmentHint) {
|
8057
|
-
details.fragmentHint.
|
8141
|
+
details.fragmentHint.addStart(sliding);
|
8058
8142
|
}
|
8059
8143
|
}
|
8060
8144
|
}
|
@@ -16080,11 +16164,12 @@
|
|
16080
16164
|
}, {
|
16081
16165
|
key: "maxLatency",
|
16082
16166
|
get: function get() {
|
16167
|
+
var _this$hls;
|
16083
16168
|
var config = this.config;
|
16084
16169
|
if (config.liveMaxLatencyDuration !== undefined) {
|
16085
16170
|
return config.liveMaxLatencyDuration;
|
16086
16171
|
}
|
16087
|
-
var levelDetails = this.hls.latestLevelDetails;
|
16172
|
+
var levelDetails = (_this$hls = this.hls) == null ? void 0 : _this$hls.latestLevelDetails;
|
16088
16173
|
return levelDetails ? config.liveMaxLatencyDurationCount * levelDetails.targetduration : 0;
|
16089
16174
|
}
|
16090
16175
|
}, {
|
@@ -19554,7 +19639,7 @@
|
|
19554
19639
|
return !remuxResult.audio && !remuxResult.video && !remuxResult.text && !remuxResult.id3 && !remuxResult.initSegment;
|
19555
19640
|
}
|
19556
19641
|
|
19557
|
-
var version = "1.6.0-beta.1.0.canary.
|
19642
|
+
var version = "1.6.0-beta.1.0.canary.10746";
|
19558
19643
|
|
19559
19644
|
// ensure the worker ends up in the bundle
|
19560
19645
|
// If the worker should not be included this gets aliased to empty.js
|