@banou/media-player 0.10.1 → 0.10.3
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/engine/index.js +1 -1
- package/dist/{engine-b5_5HscR.js → engine-CB5J5kah.js} +180 -142
- package/dist/index.js +282 -265
- package/dist/react/player.d.ts +1 -0
- package/dist/react/source-feature.d.ts +24 -0
- package/package.json +1 -1
- package/src/lib/engine/thumbnails.ts +147 -19
- package/src/lib/react/components/control-bar.tsx +3 -1
- package/src/lib/react/components/overlay.tsx +5 -2
- package/src/lib/react/components/progress-bar.tsx +16 -4
- package/src/lib/react/hooks/use-playback.ts +27 -0
- package/src/lib/react/source-feature.ts +13 -0
package/dist/engine/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as e, c as t, d as n, f as r, i, l as a, n as o, o as s, r as c, s as l, t as u, u as d } from "../engine-
|
|
1
|
+
import { a as e, c as t, d as n, f as r, i, l as a, n as o, o as s, r as c, s as l, t as u, u as d } from "../engine-CB5J5kah.js";
|
|
2
2
|
export { i as DEFAULT_BUFFER_SIZE, e as MediaElementError, a as SUBTITLES_OFF, u as createPictureInPicture, d as createSubtitleRenderer, c as createThumbnailGenerator, n as getTimeRanges, s as isMediaElementError, o as pictureInPictureMode, l as startPlayback, t as terminateRemuxer, r as updateSourceBuffer };
|
|
@@ -180,7 +180,7 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
180
180
|
clearTimeout(n), t.terminate();
|
|
181
181
|
});
|
|
182
182
|
}, te = async (t) => {
|
|
183
|
-
let { videoElement: n, subtitleContainer: r, read: a, length: s, publicPath: c, libavWorkerUrl: l, jassubWorkerUrl: u, jassubWasmUrl: d, jassubLegacyWasmUrl: f, defaultFontUrl: p, bufferSize: m = k, audioStreamIndex: _, onReady: te, onError: ne, onRecovered: re, onSeek:
|
|
183
|
+
let { videoElement: n, subtitleContainer: r, read: a, length: s, publicPath: c, libavWorkerUrl: l, jassubWorkerUrl: u, jassubWasmUrl: d, jassubLegacyWasmUrl: f, defaultFontUrl: p, bufferSize: m = k, audioStreamIndex: _, onReady: te, onError: ne, onRecovered: re, onSeek: ie, onSubtitleStreams: ae, onAudioStreams: oe } = t, j = await e({
|
|
184
184
|
publicPath: c,
|
|
185
185
|
workerUrl: l,
|
|
186
186
|
workerOptions: { type: "module" },
|
|
@@ -188,18 +188,18 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
188
188
|
length: s,
|
|
189
189
|
audioStreamIndex: _,
|
|
190
190
|
read: a
|
|
191
|
-
}),
|
|
192
|
-
if (!
|
|
193
|
-
|
|
194
|
-
for (let e of [...
|
|
191
|
+
}), M = [], N = !1, P = () => {
|
|
192
|
+
if (!N) {
|
|
193
|
+
N = !0;
|
|
194
|
+
for (let e of [...M].reverse()) try {
|
|
195
195
|
e();
|
|
196
196
|
} catch {}
|
|
197
197
|
}
|
|
198
198
|
};
|
|
199
|
-
|
|
199
|
+
M.push(() => A(j));
|
|
200
200
|
try {
|
|
201
|
-
let e = await
|
|
202
|
-
|
|
201
|
+
let e = await j.init(), t = e.audioStreams ?? [], a = t.some((e) => e.streamIndex === _) ? _ : t[0]?.streamIndex ?? -1;
|
|
202
|
+
oe?.(t, a);
|
|
203
203
|
let s = h({
|
|
204
204
|
video: n,
|
|
205
205
|
container: r,
|
|
@@ -207,13 +207,13 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
207
207
|
wasmUrl: d,
|
|
208
208
|
legacyWasmUrl: f,
|
|
209
209
|
defaultFontUrl: p,
|
|
210
|
-
onStreams:
|
|
210
|
+
onStreams: ae
|
|
211
211
|
});
|
|
212
|
-
if (
|
|
212
|
+
if (M.push(() => s.destroy()), e.attachments?.length && s.pushAttachments(e.attachments), !e.info.output.videoMimeType) throw Error("The video codec in this file could not be identified");
|
|
213
213
|
let c = [e.info.output.videoMimeType, e.info.output.audioMimeType].filter(Boolean).join(","), l = `video/mp4; codecs="${c}"`;
|
|
214
214
|
if (!MediaSource.isTypeSupported(l)) throw Error(`This browser cannot play the codecs in this file: ${c}`);
|
|
215
215
|
let m = new MediaSource(), k = URL.createObjectURL(m);
|
|
216
|
-
|
|
216
|
+
M.push(() => URL.revokeObjectURL(k)), n.src = k, M.push(() => {
|
|
217
217
|
try {
|
|
218
218
|
n.pause();
|
|
219
219
|
} catch {}
|
|
@@ -237,140 +237,140 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
237
237
|
i(), n(/* @__PURE__ */ Error("The MediaSource closed before a SourceBuffer could be created"));
|
|
238
238
|
};
|
|
239
239
|
m.addEventListener("sourceopen", a, { once: !0 }), m.addEventListener("sourceclose", o, { once: !0 }), m.addEventListener("error", o, { once: !0 });
|
|
240
|
-
}), { appendBuffer:
|
|
241
|
-
await
|
|
242
|
-
let
|
|
240
|
+
}), { appendBuffer: F, unbufferRange: se, updateTimestampOffset: ce, endOfStream: le } = o(A, m);
|
|
241
|
+
await F(e.data), e.subtitles?.length && s.pushFragments(e.subtitles), te?.();
|
|
242
|
+
let I = !1, L = !1, R = 0, z, B = () => z ?? n.currentTime, V = !1, H = 0, U = 0, W = null, G = 0, ue = 0, K = !1, de = 0, q = (e, t, n = !1) => {
|
|
243
243
|
let r = e?.message === "Cancelled";
|
|
244
|
-
t && r || (console.error(e), !(
|
|
245
|
-
},
|
|
246
|
-
if (
|
|
244
|
+
t && r || (console.error(e), !(K && !n) && (K = !0, ne?.(r ? Error("Reading the video file failed", { cause: e }) : e)));
|
|
245
|
+
}, fe = async (e = !1) => {
|
|
246
|
+
if (R > 0 && !e) return;
|
|
247
247
|
let t = n.currentTime, r = e ? x : v, a = e ? S : y;
|
|
248
|
-
for (let { start: e, end: n } of i(A)) e < t + r && await
|
|
249
|
-
},
|
|
248
|
+
for (let { start: e, end: n } of i(A)) e < t + r && await se(e, t + r), n > t + a && await se(t + a, n);
|
|
249
|
+
}, pe = () => {
|
|
250
250
|
let e = i(A);
|
|
251
251
|
if (!e.length) return !0;
|
|
252
|
-
let t =
|
|
252
|
+
let t = B(), n = e.find((e) => e.start <= t + T && t < e.end);
|
|
253
253
|
return n && n.end >= t + y ? !1 : !n || n.end < t + b;
|
|
254
|
-
},
|
|
254
|
+
}, me = () => {
|
|
255
255
|
let e = n.currentTime;
|
|
256
256
|
return i(A).find((t) => t.start <= e + T && e < t.end);
|
|
257
|
-
}, me = () => {
|
|
258
|
-
let e = pe();
|
|
259
|
-
return !!e && e.end >= le - .1;
|
|
260
257
|
}, he = () => {
|
|
258
|
+
let e = me();
|
|
259
|
+
return !!e && e.end >= ue - .1;
|
|
260
|
+
}, ge = () => {
|
|
261
261
|
let e = i(A).map((e) => e.end);
|
|
262
|
-
e.length && (
|
|
263
|
-
},
|
|
264
|
-
|
|
265
|
-
let t = ++
|
|
262
|
+
e.length && (ue = Math.max(ue, ...e));
|
|
263
|
+
}, J = async (e) => {
|
|
264
|
+
L = !0, W = null, G = 0, de = e;
|
|
265
|
+
let t = ++U;
|
|
266
266
|
try {
|
|
267
|
-
let { data: n, pts: r, subtitles: i, finished: a } = await
|
|
268
|
-
if (
|
|
269
|
-
n.byteLength && (await
|
|
267
|
+
let { data: n, pts: r, subtitles: i, finished: a } = await j.seek(e);
|
|
268
|
+
if (N || t !== U || (a && (V = !0), i?.length && s.pushFragments(i), await ce(r), N || t !== U)) return;
|
|
269
|
+
n.byteLength && (await F(n), ge());
|
|
270
270
|
} catch (e) {
|
|
271
|
-
|
|
271
|
+
q(e, N || t !== U);
|
|
272
272
|
} finally {
|
|
273
|
-
t ===
|
|
273
|
+
t === U && (L = !1);
|
|
274
274
|
}
|
|
275
|
-
},
|
|
276
|
-
let e =
|
|
275
|
+
}, _e = async () => {
|
|
276
|
+
let e = W;
|
|
277
277
|
if (e) try {
|
|
278
|
-
await
|
|
278
|
+
await F(e), ge(), W === e && (W = null, G = 0);
|
|
279
279
|
} catch (t) {
|
|
280
|
-
if (
|
|
280
|
+
if (W !== e) return;
|
|
281
281
|
if (t?.name === "QuotaExceededError") {
|
|
282
|
-
let t = await
|
|
283
|
-
if (
|
|
282
|
+
let t = await fe(!0).then(() => !0, () => !1);
|
|
283
|
+
if (W !== e) return;
|
|
284
284
|
if (t) {
|
|
285
|
-
|
|
285
|
+
V = !1, await J(me()?.end ?? n.currentTime);
|
|
286
286
|
return;
|
|
287
287
|
}
|
|
288
288
|
}
|
|
289
|
-
if (
|
|
290
|
-
throw
|
|
289
|
+
if (G += 1, G < C) return;
|
|
290
|
+
throw W = null, t;
|
|
291
291
|
}
|
|
292
|
-
},
|
|
293
|
-
if (
|
|
294
|
-
let e = ++
|
|
295
|
-
|
|
292
|
+
}, ve = async () => {
|
|
293
|
+
if (I || L || Q !== void 0 || N || !W && (V || !pe())) return;
|
|
294
|
+
let e = ++H, t = U, n = () => N || e !== H || t !== U;
|
|
295
|
+
I = !0;
|
|
296
296
|
try {
|
|
297
|
-
if (!
|
|
298
|
-
let { data: e, subtitles: t, finished: r } = await
|
|
299
|
-
if (n() || (r && (
|
|
300
|
-
|
|
297
|
+
if (!W) {
|
|
298
|
+
let { data: e, subtitles: t, finished: r } = await j.read();
|
|
299
|
+
if (n() || (r && (V = !0), t?.length && s.pushFragments(t), !e.byteLength)) return;
|
|
300
|
+
W = e, G = 0;
|
|
301
301
|
}
|
|
302
|
-
await
|
|
302
|
+
await _e(), !n() && K && (K = !1, re?.());
|
|
303
303
|
} catch (e) {
|
|
304
|
-
|
|
304
|
+
q(e, n());
|
|
305
305
|
} finally {
|
|
306
|
-
e ===
|
|
306
|
+
e === H && (I = !1);
|
|
307
307
|
}
|
|
308
|
-
},
|
|
308
|
+
}, ye = (e) => e >= de && !!me(), be = (e) => i(A).some((t) => t.start <= e + T && e < t.end), Y = (e) => {
|
|
309
309
|
let t = i(A).find((t) => t.start <= e + T && e < t.end);
|
|
310
310
|
return t ? t.end - e : 0;
|
|
311
|
-
},
|
|
312
|
-
if (!
|
|
313
|
-
|
|
311
|
+
}, xe = async (e) => {
|
|
312
|
+
if (!N && !(Y(e) >= E)) {
|
|
313
|
+
V = !1, R++, z = e;
|
|
314
314
|
try {
|
|
315
|
-
|
|
316
|
-
let t =
|
|
317
|
-
for (let n = 0; n < ee && !(
|
|
318
|
-
let t =
|
|
319
|
-
if (await
|
|
315
|
+
be(e) || await J(e);
|
|
316
|
+
let t = U;
|
|
317
|
+
for (let n = 0; n < ee && !(N || t !== U || V || Y(e) >= E); n++) {
|
|
318
|
+
let t = Y(e);
|
|
319
|
+
if (await ve(), Y(e) <= t) break;
|
|
320
320
|
}
|
|
321
321
|
} finally {
|
|
322
|
-
|
|
322
|
+
R--, z === e && (z = void 0);
|
|
323
323
|
}
|
|
324
324
|
}
|
|
325
|
-
},
|
|
326
|
-
let t = performance.now(), n = t -
|
|
325
|
+
}, Se = 0, X = null, Z, Ce = (e) => {
|
|
326
|
+
let t = performance.now(), n = t - Se;
|
|
327
327
|
if (n >= D) {
|
|
328
|
-
|
|
328
|
+
Se = t, X = null, ie?.(e);
|
|
329
329
|
return;
|
|
330
330
|
}
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
let e =
|
|
334
|
-
|
|
331
|
+
X = e, !Z && (Z = setTimeout(() => {
|
|
332
|
+
Z = void 0;
|
|
333
|
+
let e = X;
|
|
334
|
+
X = null, !(e === null || N) && (Se = performance.now(), ie?.(e));
|
|
335
335
|
}, D - n));
|
|
336
336
|
};
|
|
337
|
-
|
|
338
|
-
|
|
337
|
+
M.push(() => {
|
|
338
|
+
Z && clearTimeout(Z);
|
|
339
339
|
});
|
|
340
|
-
let
|
|
341
|
-
|
|
342
|
-
|
|
340
|
+
let we = 0, Q;
|
|
341
|
+
M.push(() => {
|
|
342
|
+
Q && clearTimeout(Q);
|
|
343
343
|
});
|
|
344
|
-
let
|
|
344
|
+
let Te = () => {
|
|
345
345
|
let t = n.currentTime, r = e.info.input.duration || n.duration;
|
|
346
|
-
r > 0 &&
|
|
347
|
-
let i = performance.now(), a = i -
|
|
348
|
-
if (
|
|
349
|
-
if (
|
|
350
|
-
|
|
346
|
+
r > 0 && Ce(Math.min(Math.max(t / r, 0), 1));
|
|
347
|
+
let i = performance.now(), a = i - we < O;
|
|
348
|
+
if (we = i, !ye(t) && !(L && Math.abs(t - de) < .001)) {
|
|
349
|
+
if (V = !1, Q && clearTimeout(Q), !a) {
|
|
350
|
+
Q = void 0, J(t);
|
|
351
351
|
return;
|
|
352
352
|
}
|
|
353
|
-
|
|
354
|
-
if (
|
|
353
|
+
Q = setTimeout(() => {
|
|
354
|
+
if (Q = void 0, N) return;
|
|
355
355
|
let e = n.currentTime;
|
|
356
|
-
|
|
356
|
+
ye(e) || (V = !1, J(e));
|
|
357
357
|
}, O);
|
|
358
358
|
}
|
|
359
359
|
};
|
|
360
|
-
n.addEventListener("seeking",
|
|
361
|
-
let
|
|
362
|
-
if (
|
|
363
|
-
|
|
360
|
+
n.addEventListener("seeking", Te), M.push(() => n.removeEventListener("seeking", Te));
|
|
361
|
+
let $ = !1, Ee = () => {
|
|
362
|
+
if ($) return;
|
|
363
|
+
$ = !0;
|
|
364
364
|
let e = n.error;
|
|
365
|
-
|
|
365
|
+
q(new g(`the media element failed: ${e?.message ?? "unknown"}`, { cause: e }), !1, !0);
|
|
366
366
|
};
|
|
367
|
-
n.addEventListener("error", Ee),
|
|
367
|
+
n.addEventListener("error", Ee), M.push(() => n.removeEventListener("error", Ee));
|
|
368
368
|
let De = setInterval(() => {
|
|
369
|
-
|
|
369
|
+
$ || n.error || (fe().catch(() => {}), ve().catch((e) => q(e, !1)), V && !W && he() && m.readyState === "open" && le().catch(() => {}));
|
|
370
370
|
}, 100);
|
|
371
|
-
return
|
|
372
|
-
destroy:
|
|
373
|
-
prepareSeek:
|
|
371
|
+
return M.push(() => clearInterval(De)), {
|
|
372
|
+
destroy: P,
|
|
373
|
+
prepareSeek: xe,
|
|
374
374
|
videoElement: n,
|
|
375
375
|
selectSubtitleStream: (e) => s.selectStream(e),
|
|
376
376
|
indexes: e.indexes ?? [],
|
|
@@ -380,10 +380,10 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
380
380
|
audioMimeType: e.info.output.audioMimeType
|
|
381
381
|
};
|
|
382
382
|
} catch (e) {
|
|
383
|
-
throw
|
|
383
|
+
throw P(), e;
|
|
384
384
|
}
|
|
385
|
-
}, ne = 5, re = 500,
|
|
386
|
-
let { publicPath: n, workerUrl: r, length: i, read: a, onThumbnails: o, width: s =
|
|
385
|
+
}, ne = 5, re = 500, ie = 320, ae = 1e6, oe = 3, j = 1e4, M = 1.5, N = 4e6, P = 3e4, F = async (e) => {
|
|
386
|
+
let { publicPath: n, workerUrl: r, length: i, read: a, onThumbnails: o, width: s = ie } = e, c = await t({
|
|
387
387
|
publicPath: n,
|
|
388
388
|
workerUrl: r,
|
|
389
389
|
workerOptions: { type: "module" },
|
|
@@ -391,36 +391,39 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
391
391
|
read: a
|
|
392
392
|
});
|
|
393
393
|
try {
|
|
394
|
-
let t = await c.init(), n = t.duration, r = Math.max(e.interval ?? ne, n / re), a = []
|
|
395
|
-
|
|
396
|
-
let
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
394
|
+
let t = await c.init(), n = t.duration, r = Math.max(e.interval ?? ne, n / re), a = [], l = (e) => {
|
|
395
|
+
let t = [];
|
|
396
|
+
for (let [a, o] of e.entries()) {
|
|
397
|
+
let s = t.at(-1);
|
|
398
|
+
s && o.timestamp - s.timestamp < r || t.push({
|
|
399
|
+
timestamp: o.timestamp,
|
|
400
|
+
endTime: n,
|
|
401
|
+
startByte: o.pos,
|
|
402
|
+
endByte: Math.min((e[a + 1]?.pos ?? i) + ae, i),
|
|
403
|
+
done: !1,
|
|
404
|
+
attempts: 0
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
for (let [e, r] of t.entries()) r.endTime = t[e + 1]?.timestamp ?? n;
|
|
408
|
+
return t.length > 1 && t.at(-1).timestamp > n - r * 2 && t.pop(), t;
|
|
409
|
+
};
|
|
410
|
+
a = l(t.indexes);
|
|
411
|
+
let u = [], d = !1, f = [], p = !1, m, h = -1, g = !1, _ = !1, v, y = () => {
|
|
412
|
+
let e = m;
|
|
410
413
|
if (e !== void 0) {
|
|
411
|
-
let t =
|
|
414
|
+
let t = f.findIndex(({ timestamp: t, endTime: n }) => t <= e && e < n);
|
|
412
415
|
if (t >= 0) return t;
|
|
413
416
|
}
|
|
414
417
|
return 0;
|
|
415
|
-
},
|
|
418
|
+
}, b = () => {
|
|
416
419
|
let e = [];
|
|
417
|
-
for (let [t, n] of
|
|
420
|
+
for (let [t, n] of u.entries()) {
|
|
418
421
|
n.startTime - (e.at(-1)?.endTime ?? 0) > .01 && e.push({
|
|
419
422
|
url: "",
|
|
420
423
|
startTime: e.at(-1)?.endTime ?? 0,
|
|
421
424
|
endTime: n.startTime
|
|
422
425
|
}), e.push(n);
|
|
423
|
-
let r =
|
|
426
|
+
let r = u[t + 1];
|
|
424
427
|
r && r.startTime - n.endTime > .01 && e.push({
|
|
425
428
|
url: "",
|
|
426
429
|
startTime: n.endTime,
|
|
@@ -433,48 +436,83 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
433
436
|
startTime: t,
|
|
434
437
|
endTime: n
|
|
435
438
|
}), o(e);
|
|
436
|
-
},
|
|
437
|
-
if (
|
|
438
|
-
let t = await Promise.race([c.readKeyframe(e.timestamp), new Promise((e, t) => setTimeout(() => t(/* @__PURE__ */ Error("timed out")),
|
|
439
|
+
}, x = async (e) => {
|
|
440
|
+
if (d) return;
|
|
441
|
+
let t = await Promise.race([c.readKeyframe(e.timestamp), new Promise((e, t) => setTimeout(() => t(/* @__PURE__ */ Error("timed out")), j))]), n = await createImageBitmap(new Blob([t], { type: "image/png" })), r = new OffscreenCanvas(s, Math.max(1, Math.round(n.height * (s / n.width))));
|
|
439
442
|
r.getContext("2d").drawImage(n, 0, 0, r.width, r.height), n.close();
|
|
440
443
|
let i = await r.convertToBlob({
|
|
441
444
|
type: "image/webp",
|
|
442
445
|
quality: .7
|
|
443
446
|
});
|
|
444
|
-
|
|
447
|
+
d || (u = [...u, {
|
|
445
448
|
url: URL.createObjectURL(i),
|
|
446
449
|
startTime: e.timestamp,
|
|
447
450
|
endTime: e.endTime
|
|
448
|
-
}].sort((e, t) => e.startTime - t.startTime),
|
|
449
|
-
},
|
|
450
|
-
if (
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
451
|
+
}].sort((e, t) => e.startTime - t.startTime), b());
|
|
452
|
+
}, S = () => {
|
|
453
|
+
if (p || d || _) return;
|
|
454
|
+
if (g) {
|
|
455
|
+
g = !1;
|
|
456
|
+
let e = v;
|
|
457
|
+
w(T(e)).then(() => {
|
|
458
|
+
E(e), S();
|
|
459
|
+
});
|
|
460
|
+
return;
|
|
461
|
+
}
|
|
462
|
+
if (!f.length) return;
|
|
463
|
+
let e = f.splice(y(), 1)[0];
|
|
464
|
+
p = !0, x(e).catch(() => {
|
|
465
|
+
e.attempts += 1, e.done = e.attempts >= oe;
|
|
454
466
|
}).finally(() => {
|
|
455
|
-
|
|
467
|
+
p = !1, S();
|
|
456
468
|
});
|
|
457
|
-
},
|
|
458
|
-
e.done = !0,
|
|
469
|
+
}, C = (e) => {
|
|
470
|
+
e.done = !0, f.push(e), S();
|
|
471
|
+
}, w = async (e) => {
|
|
472
|
+
_ = !0;
|
|
473
|
+
try {
|
|
474
|
+
let t = await Promise.race([c.init(), new Promise((e, t) => setTimeout(() => t(/* @__PURE__ */ Error("timed out")), P))]);
|
|
475
|
+
if (d) return;
|
|
476
|
+
h = e;
|
|
477
|
+
let n = l(t.indexes);
|
|
478
|
+
if (!n.length) return;
|
|
479
|
+
let r = new Map(u.map((e) => [e.startTime, e]));
|
|
480
|
+
for (let e of n) r.has(e.timestamp) && (e.done = !0);
|
|
481
|
+
a = n;
|
|
482
|
+
let i = new Set(n.map((e) => e.timestamp));
|
|
483
|
+
for (let e of u) i.has(e.startTime) || URL.revokeObjectURL(e.url);
|
|
484
|
+
u = n.filter((e) => r.has(e.timestamp)).map((e) => ({
|
|
485
|
+
url: r.get(e.timestamp).url,
|
|
486
|
+
startTime: e.timestamp,
|
|
487
|
+
endTime: e.endTime
|
|
488
|
+
})), f.length = 0, b();
|
|
489
|
+
} catch {} finally {
|
|
490
|
+
_ = !1;
|
|
491
|
+
}
|
|
492
|
+
}, T = (e) => e ? e.reduce((e, [, t]) => Math.max(e, t), 0) : i, E = (e) => {
|
|
493
|
+
for (let t of a) t.done || (!e || e.some(([e, n]) => e <= t.startByte && t.endByte <= n)) && C(t);
|
|
459
494
|
};
|
|
460
|
-
return
|
|
495
|
+
return b(), {
|
|
461
496
|
update: (e) => {
|
|
462
|
-
if (
|
|
497
|
+
if (d) return;
|
|
498
|
+
v = e;
|
|
499
|
+
let t = T(e);
|
|
500
|
+
h < 0 ? h = t : (t >= Math.max(h * M, h + N) || t >= i && h < i) && (g = !0), E(e), S();
|
|
463
501
|
},
|
|
464
502
|
prioritize: (e) => {
|
|
465
|
-
|
|
503
|
+
d || (m = e);
|
|
466
504
|
},
|
|
467
505
|
destroy: () => {
|
|
468
|
-
|
|
469
|
-
for (let e of
|
|
470
|
-
|
|
506
|
+
d = !0, f.length = 0;
|
|
507
|
+
for (let e of u) URL.revokeObjectURL(e.url);
|
|
508
|
+
u = [], A(c);
|
|
471
509
|
}
|
|
472
510
|
};
|
|
473
511
|
} catch (e) {
|
|
474
512
|
throw A(c), e;
|
|
475
513
|
}
|
|
476
|
-
},
|
|
477
|
-
let { video: t, subtitles: n } = e, r = e.mode ??
|
|
514
|
+
}, se = 1280, ce = 1920, le = 250, I = 100, L = () => typeof HTMLCanvasElement < "u" && "captureStream" in HTMLCanvasElement.prototype, R = () => typeof document < "u" && typeof HTMLVideoElement < "u" && typeof HTMLVideoElement.prototype.requestPictureInPicture == "function" && !!document.pictureInPictureEnabled, z = () => typeof HTMLVideoElement < "u" && "mozCaptureStream" in HTMLVideoElement.prototype, B = () => L() ? R() ? "window" : z() ? "burn-in" : null : null, V = (e) => {
|
|
515
|
+
let { video: t, subtitles: n } = e, r = e.mode ?? B() ?? "window", i = e.maxWidth ?? (r === "burn-in" ? ce : se), a, o, s, c = !1, l = !1, u = !1, d = !1, f, p = () => r === "burn-in" ? !!a : !!a && document.pictureInPictureElement === a.mirror, m = (e, r) => {
|
|
478
516
|
r.drawImage(t, 0, 0, e.width, e.height);
|
|
479
517
|
let i = n.querySelector("canvas");
|
|
480
518
|
i && i.width > 0 && i.height > 0 && r.drawImage(i, 0, 0, e.width, e.height);
|
|
@@ -503,11 +541,11 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
503
541
|
l = !0;
|
|
504
542
|
let { mirror: e } = a;
|
|
505
543
|
h(), e.play().then(() => new Promise((e) => {
|
|
506
|
-
setTimeout(e,
|
|
544
|
+
setTimeout(e, I);
|
|
507
545
|
})).catch(() => {}).finally(() => {
|
|
508
546
|
e.pause(), setTimeout(() => {
|
|
509
547
|
l = !1;
|
|
510
|
-
},
|
|
548
|
+
}, I);
|
|
511
549
|
});
|
|
512
550
|
}, E = [["play", () => {
|
|
513
551
|
t.play().catch(() => {});
|
|
@@ -544,7 +582,7 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
544
582
|
};
|
|
545
583
|
if (a = f, u.srcObject = f.stream, (e.container ?? t.parentElement ?? document.body).appendChild(u), v(), s = setInterval(() => {
|
|
546
584
|
t.paused && h();
|
|
547
|
-
},
|
|
585
|
+
}, le), u.play().catch(() => {}), u.readyState === 0 && await new Promise((e) => {
|
|
548
586
|
let t = () => {
|
|
549
587
|
clearTimeout(n), e();
|
|
550
588
|
}, n = setTimeout(t, 1e3);
|
|
@@ -590,4 +628,4 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
590
628
|
};
|
|
591
629
|
};
|
|
592
630
|
//#endregion
|
|
593
|
-
export { g as a, A as c, i as d, o as f, k as i, s as l,
|
|
631
|
+
export { g as a, A as c, i as d, o as f, k as i, s as l, B as n, _ as o, F as r, te as s, V as t, h as u };
|