hls.js 1.6.0-beta.2.0.canary.10882 → 1.6.0-beta.2.0.canary.10884
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 +21 -1
- package/dist/hls.d.ts +21 -1
- package/dist/hls.js +130 -98
- package/dist/hls.js.d.ts +21 -1
- package/dist/hls.js.map +1 -1
- package/dist/hls.light.js +130 -98
- 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 +123 -93
- 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 +123 -93
- 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 +1 -1
- package/src/config.ts +2 -0
- package/src/controller/gap-controller.ts +92 -58
- package/src/controller/stream-controller.ts +13 -3
- package/src/events.ts +3 -0
- package/src/hls.ts +2 -1
- package/src/loader/level-details.ts +0 -2
- package/src/loader/m3u8-parser.ts +1 -1
- package/src/types/events.ts +3 -0
- package/src/utils/buffer-helper.ts +5 -8
- package/src/utils/level-helper.ts +29 -35
@@ -9,7 +9,12 @@ import type { Fragment, MediaFragment, Part } from '../loader/fragment';
|
|
9
9
|
import type { LevelDetails } from '../loader/level-details';
|
10
10
|
import type { Level } from '../types/level';
|
11
11
|
|
12
|
-
type FragmentIntersection = (
|
12
|
+
type FragmentIntersection = (
|
13
|
+
oldFrag: MediaFragment,
|
14
|
+
newFrag: MediaFragment,
|
15
|
+
newFragIndex: number,
|
16
|
+
newFragments: MediaFragment[],
|
17
|
+
) => void;
|
13
18
|
type PartIntersection = (oldPart: Part, newPart: Part) => void;
|
14
19
|
|
15
20
|
export function updatePTS(
|
@@ -107,7 +112,7 @@ export function updateFragPTSDTS(
|
|
107
112
|
if (!details || sn < details.startSN || sn > details.endSN) {
|
108
113
|
return 0;
|
109
114
|
}
|
110
|
-
let i;
|
115
|
+
let i: number;
|
111
116
|
const fragIdx = sn - details.startSN;
|
112
117
|
const fragments = details.fragments;
|
113
118
|
// update frag reference in fragments array
|
@@ -156,18 +161,19 @@ export function mergeDetails(
|
|
156
161
|
delete oldDetails.fragmentHint.endPTS;
|
157
162
|
}
|
158
163
|
// check if old/new playlists have fragments in common
|
159
|
-
// loop through overlapping SN and update startPTS
|
160
|
-
let
|
161
|
-
let PTSFrag;
|
164
|
+
// loop through overlapping SN and update startPTS, cc, and duration if any found
|
165
|
+
let PTSFrag: MediaFragment | undefined;
|
162
166
|
mapFragmentIntersection(
|
163
167
|
oldDetails,
|
164
168
|
newDetails,
|
165
|
-
(oldFrag
|
166
|
-
if (
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
169
|
+
(oldFrag, newFrag, newFragIndex, newFragments) => {
|
170
|
+
if (newDetails.skippedSegments) {
|
171
|
+
if (newFrag.cc !== oldFrag.cc) {
|
172
|
+
const ccOffset = oldFrag.cc - newFrag.cc;
|
173
|
+
for (let i = newFragIndex; i < newFragments.length; i++) {
|
174
|
+
newFragments[i].cc += ccOffset;
|
175
|
+
}
|
176
|
+
}
|
171
177
|
}
|
172
178
|
if (
|
173
179
|
Number.isFinite(oldFrag.startPTS) &&
|
@@ -207,9 +213,10 @@ export function mergeDetails(
|
|
207
213
|
},
|
208
214
|
);
|
209
215
|
|
216
|
+
const newFragments = newDetails.fragments;
|
210
217
|
const fragmentsToCheck = newDetails.fragmentHint
|
211
|
-
?
|
212
|
-
:
|
218
|
+
? newFragments.concat(newDetails.fragmentHint)
|
219
|
+
: newFragments;
|
213
220
|
if (currentInitSegment) {
|
214
221
|
fragmentsToCheck.forEach((frag) => {
|
215
222
|
if (
|
@@ -223,19 +230,17 @@ export function mergeDetails(
|
|
223
230
|
}
|
224
231
|
|
225
232
|
if (newDetails.skippedSegments) {
|
226
|
-
newDetails.deltaUpdateFailed =
|
233
|
+
newDetails.deltaUpdateFailed = newFragments.some((frag) => !frag);
|
227
234
|
if (newDetails.deltaUpdateFailed) {
|
228
235
|
logger.warn(
|
229
236
|
'[level-helper] Previous playlist missing segments skipped in delta playlist',
|
230
237
|
);
|
231
238
|
for (let i = newDetails.skippedSegments; i--; ) {
|
232
|
-
|
233
|
-
}
|
234
|
-
newDetails.startSN = newDetails.fragments[0].sn;
|
235
|
-
if (!newDetails.startCC) {
|
236
|
-
newDetails.startCC = newDetails.fragments[0].cc;
|
239
|
+
newFragments.shift();
|
237
240
|
}
|
241
|
+
newDetails.startSN = newFragments[0].sn;
|
238
242
|
} else {
|
243
|
+
newDetails.endCC = newFragments[newFragments.length - 1].cc;
|
239
244
|
if (newDetails.canSkipDateRanges) {
|
240
245
|
newDetails.dateRanges = mergeDateRanges(
|
241
246
|
oldDetails.dateRanges,
|
@@ -260,17 +265,6 @@ export function mergeDetails(
|
|
260
265
|
}
|
261
266
|
}
|
262
267
|
|
263
|
-
const newFragments = newDetails.fragments;
|
264
|
-
if (ccOffset) {
|
265
|
-
logger.warn('discontinuity sliding from playlist, take drift into account');
|
266
|
-
for (let i = 0; i < newFragments.length; i++) {
|
267
|
-
newFragments[i].cc += ccOffset;
|
268
|
-
}
|
269
|
-
}
|
270
|
-
if (newDetails.skippedSegments) {
|
271
|
-
newDetails.startCC = newDetails.fragments[0].cc;
|
272
|
-
}
|
273
|
-
|
274
268
|
// Merge parts
|
275
269
|
mapPartIntersection(
|
276
270
|
oldDetails.partList,
|
@@ -286,10 +280,10 @@ export function mergeDetails(
|
|
286
280
|
updateFragPTSDTS(
|
287
281
|
newDetails,
|
288
282
|
PTSFrag,
|
289
|
-
PTSFrag.startPTS,
|
290
|
-
PTSFrag.endPTS,
|
291
|
-
PTSFrag.startDTS,
|
292
|
-
PTSFrag.endDTS,
|
283
|
+
PTSFrag.startPTS as number,
|
284
|
+
PTSFrag.endPTS as number,
|
285
|
+
PTSFrag.startDTS as number,
|
286
|
+
PTSFrag.endDTS as number,
|
293
287
|
);
|
294
288
|
} else {
|
295
289
|
// ensure that delta is within oldFragments range
|
@@ -414,7 +408,7 @@ export function mapFragmentIntersection(
|
|
414
408
|
newFrag = newDetails.fragments[i] = oldFrag;
|
415
409
|
}
|
416
410
|
if (oldFrag && newFrag) {
|
417
|
-
intersectionFn(oldFrag, newFrag);
|
411
|
+
intersectionFn(oldFrag, newFrag, i, newFrags);
|
418
412
|
}
|
419
413
|
}
|
420
414
|
}
|