@banou/media-player 0.8.13 → 0.8.15
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/playback.d.ts +2 -0
- package/dist/{engine-BUcS6UrE.js → engine-CDdjRm_U.js} +99 -92
- package/dist/index.js +152 -130
- package/package.json +1 -1
- package/src/lib/engine/playback.ts +75 -5
- package/src/lib/react/components/progress-bar.tsx +64 -7
- package/src/lib/react/hooks/use-drag-value.ts +5 -2
- package/src/lib/react/hooks/use-playback.ts +35 -21
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-CDdjRm_U.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 };
|
|
@@ -37,6 +37,8 @@ export type PlaybackController = {
|
|
|
37
37
|
* because this can take as long as a read, which over a torrent has no ceiling.
|
|
38
38
|
*/
|
|
39
39
|
prepareSeek: (time: number) => Promise<void>;
|
|
40
|
+
/** The element this pipeline drives, so a caller can read what actually got buffered. */
|
|
41
|
+
videoElement: HTMLVideoElement;
|
|
40
42
|
selectSubtitleStream: (streamIndex: number | undefined) => void;
|
|
41
43
|
/** Keyframe index of the input, which is what maps a downloaded byte range onto the timeline. */
|
|
42
44
|
indexes: MediaIndex[];
|
|
@@ -167,19 +167,19 @@ var a = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
167
167
|
constructor(e, t) {
|
|
168
168
|
super(e, t), this.name = "MediaElementError";
|
|
169
169
|
}
|
|
170
|
-
}, g = (e) => !!e && typeof e == "object" && e.mediaElement === !0, _ = -20, v = 60, y = 30, b = -5, x = 20, ee = 5,
|
|
170
|
+
}, g = (e) => !!e && typeof e == "object" && e.mediaElement === !0, _ = -20, v = 60, y = 30, b = -5, x = 20, ee = 5, S = 15e3, C = 1, w = 3, te = 12, T = 200, E = 250, D = 25e5, O = (e) => {
|
|
171
171
|
let { worker: t } = e, n = setTimeout(() => t.terminate(), 2e3);
|
|
172
172
|
e.destroy().catch(() => {}).finally(() => {
|
|
173
173
|
clearTimeout(n), t.terminate();
|
|
174
174
|
});
|
|
175
|
-
},
|
|
176
|
-
let { videoElement: n, canvasElement: r, read: i, length: o, publicPath: c, libavWorkerUrl: l, jassubWorkerUrl: u, jassubWasmUrl: d, jassubLegacyWasmUrl: f, defaultFontUrl: p, bufferSize: g =
|
|
175
|
+
}, k = async (t) => {
|
|
176
|
+
let { videoElement: n, canvasElement: r, read: i, length: o, publicPath: c, libavWorkerUrl: l, jassubWorkerUrl: u, jassubWasmUrl: d, jassubLegacyWasmUrl: f, defaultFontUrl: p, bufferSize: g = D, audioStreamIndex: k, onReady: ne, onError: re, onRecovered: ie, onSeek: ae, onSubtitleStreams: oe, onAudioStreams: se } = t, A = await e({
|
|
177
177
|
publicPath: c,
|
|
178
178
|
workerUrl: l,
|
|
179
179
|
workerOptions: { type: "module" },
|
|
180
180
|
bufferSize: g,
|
|
181
181
|
length: o,
|
|
182
|
-
audioStreamIndex:
|
|
182
|
+
audioStreamIndex: k,
|
|
183
183
|
read: i
|
|
184
184
|
}), j = [], M = !1, N = () => {
|
|
185
185
|
if (!M) {
|
|
@@ -189,10 +189,10 @@ var a = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
189
189
|
} catch {}
|
|
190
190
|
}
|
|
191
191
|
};
|
|
192
|
-
j.push(() =>
|
|
192
|
+
j.push(() => O(A));
|
|
193
193
|
try {
|
|
194
|
-
let e = await A.init(), t = e.audioStreams ?? [], i = t.some((e) => e.streamIndex ===
|
|
195
|
-
|
|
194
|
+
let e = await A.init(), t = e.audioStreams ?? [], i = t.some((e) => e.streamIndex === k) ? k : t[0]?.streamIndex ?? -1;
|
|
195
|
+
se?.(t, i);
|
|
196
196
|
let o = m({
|
|
197
197
|
video: n,
|
|
198
198
|
canvas: r,
|
|
@@ -200,22 +200,22 @@ var a = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
200
200
|
wasmUrl: d,
|
|
201
201
|
legacyWasmUrl: f,
|
|
202
202
|
defaultFontUrl: p,
|
|
203
|
-
onStreams:
|
|
203
|
+
onStreams: oe
|
|
204
204
|
});
|
|
205
205
|
if (j.push(() => o.destroy()), e.attachments?.length && o.pushAttachments(e.attachments), !e.info.output.videoMimeType) throw Error("The video codec in this file could not be identified");
|
|
206
206
|
let c = [e.info.output.videoMimeType, e.info.output.audioMimeType].filter(Boolean).join(","), l = `video/mp4; codecs="${c}"`;
|
|
207
207
|
if (!MediaSource.isTypeSupported(l)) throw Error(`This browser cannot play the codecs in this file: ${c}`);
|
|
208
|
-
let g = new MediaSource(),
|
|
209
|
-
j.push(() => URL.revokeObjectURL(
|
|
208
|
+
let g = new MediaSource(), D = URL.createObjectURL(g);
|
|
209
|
+
j.push(() => URL.revokeObjectURL(D)), n.src = D, j.push(() => {
|
|
210
210
|
try {
|
|
211
211
|
n.pause();
|
|
212
212
|
} catch {}
|
|
213
213
|
n.removeAttribute("src"), n.load();
|
|
214
214
|
});
|
|
215
|
-
let
|
|
215
|
+
let O = await new Promise((t, n) => {
|
|
216
216
|
let r = setTimeout(() => {
|
|
217
217
|
i(), n(/* @__PURE__ */ Error("The MediaSource never opened"));
|
|
218
|
-
},
|
|
218
|
+
}, S), i = () => {
|
|
219
219
|
clearTimeout(r), g.removeEventListener("sourceopen", a), g.removeEventListener("sourceclose", o), g.removeEventListener("error", o);
|
|
220
220
|
}, a = () => {
|
|
221
221
|
try {
|
|
@@ -230,134 +230,141 @@ var a = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
230
230
|
i(), n(/* @__PURE__ */ Error("The MediaSource closed before a SourceBuffer could be created"));
|
|
231
231
|
};
|
|
232
232
|
g.addEventListener("sourceopen", a, { once: !0 }), g.addEventListener("sourceclose", o, { once: !0 }), g.addEventListener("error", o, { once: !0 });
|
|
233
|
-
}), { appendBuffer: P, unbufferRange:
|
|
234
|
-
await P(e.data), e.subtitles?.length && o.pushFragments(e.subtitles),
|
|
235
|
-
let
|
|
233
|
+
}), { appendBuffer: P, unbufferRange: ce, updateTimestampOffset: le, endOfStream: ue } = s(O, g);
|
|
234
|
+
await P(e.data), e.subtitles?.length && o.pushFragments(e.subtitles), ne?.();
|
|
235
|
+
let F = !1, I = !1, L = 0, R, de = () => R ?? n.currentTime, z = !1, B = 0, V = 0, H = null, U = 0, W = 0, G = !1, K = 0, q = (e, t, n = !1) => {
|
|
236
236
|
let r = e?.message === "Cancelled";
|
|
237
|
-
t && r || (console.error(e), !(G && !n) && (G = !0,
|
|
238
|
-
},
|
|
239
|
-
if (
|
|
237
|
+
t && r || (console.error(e), !(G && !n) && (G = !0, re?.(r ? Error("Reading the video file failed", { cause: e }) : e)));
|
|
238
|
+
}, fe = async (e = !1) => {
|
|
239
|
+
if (L > 0 && !e) return;
|
|
240
240
|
let t = n.currentTime, r = e ? b : _, i = e ? x : v;
|
|
241
|
-
for (let { start: e, end: n } of a(
|
|
242
|
-
},
|
|
243
|
-
let e = a(
|
|
241
|
+
for (let { start: e, end: n } of a(O)) e < t + r && await ce(e, t + r), n > t + i && await ce(t + i, n);
|
|
242
|
+
}, pe = () => {
|
|
243
|
+
let e = a(O);
|
|
244
244
|
if (!e.length) return !0;
|
|
245
|
-
let t = n.
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
return !r || r.end < t + y;
|
|
249
|
-
}, J = () => {
|
|
245
|
+
let t = de(), n = e.find((e) => e.start <= t + C && t < e.end);
|
|
246
|
+
return n && n.end >= t + v ? !1 : !n || n.end < t + y;
|
|
247
|
+
}, me = () => {
|
|
250
248
|
let e = n.currentTime;
|
|
251
|
-
return a(
|
|
252
|
-
},
|
|
253
|
-
let e =
|
|
249
|
+
return a(O).find((t) => t.start <= e + C && e < t.end);
|
|
250
|
+
}, he = () => {
|
|
251
|
+
let e = me();
|
|
254
252
|
return !!e && e.end >= W - .1;
|
|
255
|
-
},
|
|
256
|
-
let e = a(
|
|
253
|
+
}, ge = () => {
|
|
254
|
+
let e = a(O).map((e) => e.end);
|
|
257
255
|
e.length && (W = Math.max(W, ...e));
|
|
258
|
-
},
|
|
259
|
-
|
|
256
|
+
}, J = async (e) => {
|
|
257
|
+
I = !0, H = null, U = 0, K = e;
|
|
260
258
|
let t = ++V;
|
|
261
259
|
try {
|
|
262
260
|
let { data: n, pts: r, subtitles: i, finished: a } = await A.seek(e);
|
|
263
|
-
if (M || t !== V || (a && (z = !0), i?.length && o.pushFragments(i), await
|
|
264
|
-
n.byteLength && (await P(n),
|
|
261
|
+
if (M || t !== V || (a && (z = !0), i?.length && o.pushFragments(i), await le(r), M || t !== V)) return;
|
|
262
|
+
n.byteLength && (await P(n), ge());
|
|
265
263
|
} catch (e) {
|
|
266
264
|
q(e, M || t !== V);
|
|
267
265
|
} finally {
|
|
268
|
-
t === V && (
|
|
266
|
+
t === V && (I = !1);
|
|
269
267
|
}
|
|
270
|
-
},
|
|
268
|
+
}, _e = async () => {
|
|
271
269
|
let e = H;
|
|
272
270
|
if (e) try {
|
|
273
|
-
await P(e),
|
|
271
|
+
await P(e), ge(), H === e && (H = null, U = 0);
|
|
274
272
|
} catch (t) {
|
|
275
273
|
if (H !== e) return;
|
|
276
274
|
if (t?.name === "QuotaExceededError") {
|
|
277
|
-
let t = await
|
|
275
|
+
let t = await fe(!0).then(() => !0, () => !1);
|
|
278
276
|
if (H !== e) return;
|
|
279
277
|
if (t) {
|
|
280
|
-
z = !1, await
|
|
278
|
+
z = !1, await J(me()?.end ?? n.currentTime);
|
|
281
279
|
return;
|
|
282
280
|
}
|
|
283
281
|
}
|
|
284
282
|
if (U += 1, U < ee) return;
|
|
285
283
|
throw H = null, t;
|
|
286
284
|
}
|
|
287
|
-
},
|
|
288
|
-
if (
|
|
285
|
+
}, ve = async () => {
|
|
286
|
+
if (F || I || $ !== void 0 || M || !H && (z || !pe())) return;
|
|
289
287
|
let e = ++B, t = V, n = () => M || e !== B || t !== V;
|
|
290
|
-
|
|
288
|
+
F = !0;
|
|
291
289
|
try {
|
|
292
290
|
if (!H) {
|
|
293
291
|
let { data: e, subtitles: t, finished: r } = await A.read();
|
|
294
292
|
if (n() || (r && (z = !0), t?.length && o.pushFragments(t), !e.byteLength)) return;
|
|
295
293
|
H = e, U = 0;
|
|
296
294
|
}
|
|
297
|
-
await
|
|
295
|
+
await _e(), !n() && G && (G = !1, ie?.());
|
|
298
296
|
} catch (e) {
|
|
299
297
|
q(e, n());
|
|
300
298
|
} finally {
|
|
301
|
-
e === B && (
|
|
299
|
+
e === B && (F = !1);
|
|
302
300
|
}
|
|
303
|
-
},
|
|
304
|
-
|
|
305
|
-
|
|
301
|
+
}, ye = (e) => e >= K && !!me(), be = (e) => a(O).some((t) => t.start <= e + C && e < t.end), Y = (e) => {
|
|
302
|
+
let t = a(O).find((t) => t.start <= e + C && e < t.end);
|
|
303
|
+
return t ? t.end - e : 0;
|
|
304
|
+
}, xe = async (e) => {
|
|
305
|
+
if (!M && !(Y(e) >= w)) {
|
|
306
|
+
z = !1, L++, R = e;
|
|
306
307
|
try {
|
|
307
|
-
await
|
|
308
|
+
be(e) || await J(e);
|
|
309
|
+
let t = V;
|
|
310
|
+
for (let n = 0; n < te && !(M || t !== V || z || Y(e) >= w); n++) {
|
|
311
|
+
let t = Y(e);
|
|
312
|
+
if (await ve(), Y(e) <= t) break;
|
|
313
|
+
}
|
|
308
314
|
} finally {
|
|
309
|
-
R
|
|
315
|
+
L--, R === e && (R = void 0);
|
|
310
316
|
}
|
|
311
317
|
}
|
|
312
|
-
}, X = 0, Z = null, Q,
|
|
318
|
+
}, X = 0, Z = null, Q, Se = (e) => {
|
|
313
319
|
let t = performance.now(), n = t - X;
|
|
314
|
-
if (n >=
|
|
315
|
-
X = t, Z = null,
|
|
320
|
+
if (n >= T) {
|
|
321
|
+
X = t, Z = null, ae?.(e);
|
|
316
322
|
return;
|
|
317
323
|
}
|
|
318
324
|
Z = e, !Q && (Q = setTimeout(() => {
|
|
319
325
|
Q = void 0;
|
|
320
326
|
let e = Z;
|
|
321
|
-
Z = null, !(e === null || M) && (X = performance.now(),
|
|
322
|
-
},
|
|
327
|
+
Z = null, !(e === null || M) && (X = performance.now(), ae?.(e));
|
|
328
|
+
}, T - n));
|
|
323
329
|
};
|
|
324
330
|
j.push(() => {
|
|
325
331
|
Q && clearTimeout(Q);
|
|
326
332
|
});
|
|
327
|
-
let
|
|
333
|
+
let Ce = 0, $;
|
|
328
334
|
j.push(() => {
|
|
329
335
|
$ && clearTimeout($);
|
|
330
336
|
});
|
|
331
|
-
let
|
|
337
|
+
let we = () => {
|
|
332
338
|
let t = n.currentTime, r = e.info.input.duration || n.duration;
|
|
333
|
-
r > 0 &&
|
|
334
|
-
let i = performance.now(), a = i -
|
|
335
|
-
if (
|
|
339
|
+
r > 0 && Se(Math.min(Math.max(t / r, 0), 1));
|
|
340
|
+
let i = performance.now(), a = i - Ce < E;
|
|
341
|
+
if (Ce = i, !ye(t) && !(I && Math.abs(t - K) < .001)) {
|
|
336
342
|
if (z = !1, $ && clearTimeout($), !a) {
|
|
337
|
-
$ = void 0,
|
|
343
|
+
$ = void 0, J(t);
|
|
338
344
|
return;
|
|
339
345
|
}
|
|
340
346
|
$ = setTimeout(() => {
|
|
341
347
|
if ($ = void 0, M) return;
|
|
342
348
|
let e = n.currentTime;
|
|
343
|
-
|
|
344
|
-
},
|
|
349
|
+
ye(e) || (z = !1, J(e));
|
|
350
|
+
}, E);
|
|
345
351
|
}
|
|
346
352
|
};
|
|
347
|
-
n.addEventListener("seeking",
|
|
348
|
-
let
|
|
349
|
-
if (
|
|
350
|
-
|
|
353
|
+
n.addEventListener("seeking", we), j.push(() => n.removeEventListener("seeking", we));
|
|
354
|
+
let Te = !1, Ee = () => {
|
|
355
|
+
if (Te) return;
|
|
356
|
+
Te = !0;
|
|
351
357
|
let e = n.error;
|
|
352
358
|
q(new h(`the media element failed: ${e?.message ?? "unknown"}`, { cause: e }), !1, !0);
|
|
353
359
|
};
|
|
354
|
-
n.addEventListener("error",
|
|
355
|
-
let
|
|
356
|
-
|
|
360
|
+
n.addEventListener("error", Ee), j.push(() => n.removeEventListener("error", Ee));
|
|
361
|
+
let De = setInterval(() => {
|
|
362
|
+
Te || n.error || (fe().catch(() => {}), ve().catch((e) => q(e, !1)), z && !H && he() && g.readyState === "open" && ue().catch(() => {}));
|
|
357
363
|
}, 100);
|
|
358
|
-
return j.push(() => clearInterval(
|
|
364
|
+
return j.push(() => clearInterval(De)), {
|
|
359
365
|
destroy: N,
|
|
360
|
-
prepareSeek:
|
|
366
|
+
prepareSeek: xe,
|
|
367
|
+
videoElement: n,
|
|
361
368
|
selectSubtitleStream: (e) => o.selectStream(e),
|
|
362
369
|
indexes: e.indexes ?? [],
|
|
363
370
|
duration: e.info.input.duration,
|
|
@@ -367,8 +374,8 @@ var a = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
367
374
|
} catch (e) {
|
|
368
375
|
throw N(), e;
|
|
369
376
|
}
|
|
370
|
-
},
|
|
371
|
-
let { publicPath: n, workerUrl: r, length: i, read: a, onThumbnails: o, width: s =
|
|
377
|
+
}, ne = 5, re = 500, ie = 320, ae = 1e6, oe = 3, se = 1e4, A = async (e) => {
|
|
378
|
+
let { publicPath: n, workerUrl: r, length: i, read: a, onThumbnails: o, width: s = ie } = e, c = await t({
|
|
372
379
|
publicPath: n,
|
|
373
380
|
workerUrl: r,
|
|
374
381
|
workerOptions: { type: "module" },
|
|
@@ -376,14 +383,14 @@ var a = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
376
383
|
read: a
|
|
377
384
|
});
|
|
378
385
|
try {
|
|
379
|
-
let t = await c.init(), n = t.duration, r = Math.max(e.interval ??
|
|
386
|
+
let t = await c.init(), n = t.duration, r = Math.max(e.interval ?? ne, n / re), a = [];
|
|
380
387
|
for (let [e, o] of t.indexes.entries()) {
|
|
381
388
|
let s = a.at(-1);
|
|
382
389
|
s && o.timestamp - s.timestamp < r || a.push({
|
|
383
390
|
timestamp: o.timestamp,
|
|
384
391
|
endTime: n,
|
|
385
392
|
startByte: o.pos,
|
|
386
|
-
endByte: Math.min((t.indexes[e + 1]?.pos ?? i) +
|
|
393
|
+
endByte: Math.min((t.indexes[e + 1]?.pos ?? i) + ae, i),
|
|
387
394
|
done: !1,
|
|
388
395
|
attempts: 0
|
|
389
396
|
});
|
|
@@ -414,7 +421,7 @@ var a = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
414
421
|
}, p = (e) => {
|
|
415
422
|
e.done = !0, d = d.then(async () => {
|
|
416
423
|
if (u) return;
|
|
417
|
-
let t = await Promise.race([c.readKeyframe(e.timestamp), new Promise((e, t) => setTimeout(() => t(/* @__PURE__ */ Error("timed out")),
|
|
424
|
+
let t = await Promise.race([c.readKeyframe(e.timestamp), new Promise((e, t) => setTimeout(() => t(/* @__PURE__ */ Error("timed out")), se))]), n = await createImageBitmap(new Blob([t], { type: "image/png" })), r = new OffscreenCanvas(s, Math.max(1, Math.round(n.height * (s / n.width))));
|
|
418
425
|
r.getContext("2d").drawImage(n, 0, 0, r.width, r.height), n.close();
|
|
419
426
|
let i = await r.convertToBlob({
|
|
420
427
|
type: "image/webp",
|
|
@@ -426,7 +433,7 @@ var a = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
426
433
|
endTime: e.endTime
|
|
427
434
|
}].sort((e, t) => e.startTime - t.startTime), f());
|
|
428
435
|
}).catch(() => {
|
|
429
|
-
e.attempts += 1, e.done = e.attempts >=
|
|
436
|
+
e.attempts += 1, e.done = e.attempts >= oe;
|
|
430
437
|
});
|
|
431
438
|
};
|
|
432
439
|
return f(), {
|
|
@@ -436,14 +443,14 @@ var a = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
436
443
|
destroy: () => {
|
|
437
444
|
u = !0;
|
|
438
445
|
for (let e of l) URL.revokeObjectURL(e.url);
|
|
439
|
-
l = [],
|
|
446
|
+
l = [], O(c);
|
|
440
447
|
}
|
|
441
448
|
};
|
|
442
449
|
} catch (e) {
|
|
443
|
-
throw
|
|
450
|
+
throw O(c), e;
|
|
444
451
|
}
|
|
445
|
-
}, j = 1280, M = 1920, N = 250, P = 100,
|
|
446
|
-
let { video: t, canvas: n } = e, r = e.mode ??
|
|
452
|
+
}, j = 1280, M = 1920, N = 250, P = 100, ce = () => typeof HTMLCanvasElement < "u" && "captureStream" in HTMLCanvasElement.prototype, le = () => typeof document < "u" && typeof HTMLVideoElement < "u" && typeof HTMLVideoElement.prototype.requestPictureInPicture == "function" && !!document.pictureInPictureEnabled, ue = () => typeof HTMLVideoElement < "u" && "mozCaptureStream" in HTMLVideoElement.prototype, F = () => ce() ? le() ? "window" : ue() ? "burn-in" : null : null, I = (e) => {
|
|
453
|
+
let { video: t, canvas: n } = e, r = e.mode ?? F() ?? "window", i = e.maxWidth ?? (r === "burn-in" ? M : j), 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) => {
|
|
447
454
|
r.drawImage(t, 0, 0, e.width, e.height), n.width > 0 && n.height > 0 && r.drawImage(n, 0, 0, e.width, e.height);
|
|
448
455
|
}, h = () => {
|
|
449
456
|
a && m(a.composite, a.context);
|
|
@@ -461,11 +468,11 @@ var a = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
461
468
|
c || l || (t.paused || t.pause(), r !== "burn-in" && (c = !0, a?.mirror.play().catch(() => {}).finally(() => {
|
|
462
469
|
c = !1;
|
|
463
470
|
})));
|
|
464
|
-
}, te = () => {
|
|
465
|
-
b(), a?.mirror.play().catch(() => {});
|
|
466
471
|
}, S = () => {
|
|
467
|
-
b(),
|
|
472
|
+
b(), a?.mirror.play().catch(() => {});
|
|
468
473
|
}, C = () => {
|
|
474
|
+
b(), r === "burn-in" && a?.mirror.pause();
|
|
475
|
+
}, w = () => {
|
|
469
476
|
if (r !== "burn-in" || !a || !t.paused || l) return;
|
|
470
477
|
l = !0;
|
|
471
478
|
let { mirror: e } = a;
|
|
@@ -476,14 +483,14 @@ var a = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
476
483
|
l = !1;
|
|
477
484
|
}, P);
|
|
478
485
|
});
|
|
479
|
-
},
|
|
486
|
+
}, te = [["play", () => {
|
|
480
487
|
t.play().catch(() => {});
|
|
481
488
|
}], ["pause", () => t.pause()]], T = (e) => {
|
|
482
|
-
if ("mediaSession" in navigator) for (let [t, n] of
|
|
489
|
+
if ("mediaSession" in navigator) for (let [t, n] of te) try {
|
|
483
490
|
navigator.mediaSession.setActionHandler(t, e ? n : null);
|
|
484
491
|
} catch {}
|
|
485
492
|
}, E = () => {
|
|
486
|
-
if (y(), T(!1), t.removeEventListener("play",
|
|
493
|
+
if (y(), T(!1), t.removeEventListener("play", S), t.removeEventListener("pause", C), t.removeEventListener("seeked", w), !a) {
|
|
487
494
|
f?.();
|
|
488
495
|
return;
|
|
489
496
|
}
|
|
@@ -496,7 +503,7 @@ var a = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
496
503
|
e.style.cssText = "position:absolute;inset:0;width:100%;height:100%;object-fit:contain;background:#000;z-index:1", t.style.opacity = "0", n.style.display = "none", f = () => {
|
|
497
504
|
f = void 0, t.style.opacity = r, n.style.display = i;
|
|
498
505
|
};
|
|
499
|
-
},
|
|
506
|
+
}, k = async () => {
|
|
500
507
|
let n = Math.min(t.videoWidth || i, i), o = Math.round(n * ((t.videoHeight || 9) / (t.videoWidth || 16))), c = document.createElement("canvas");
|
|
501
508
|
c.width = n, c.height = o;
|
|
502
509
|
let l = c.getContext("2d");
|
|
@@ -520,7 +527,7 @@ var a = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
520
527
|
u.remove();
|
|
521
528
|
return;
|
|
522
529
|
}
|
|
523
|
-
if (u.addEventListener("play", x), u.addEventListener("pause", ee), u.addEventListener("leavepictureinpicture", D), t.addEventListener("play",
|
|
530
|
+
if (u.addEventListener("play", x), u.addEventListener("pause", ee), u.addEventListener("leavepictureinpicture", D), t.addEventListener("play", S), t.addEventListener("pause", C), t.addEventListener("seeked", w), T(!0), b(), r === "burn-in") {
|
|
524
531
|
t.paused && u.pause(), e.onBurnedInChange?.(!0);
|
|
525
532
|
return;
|
|
526
533
|
}
|
|
@@ -541,7 +548,7 @@ var a = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
541
548
|
}
|
|
542
549
|
r !== "burn-in" && document.pictureInPictureElement && await document.exitPictureInPicture().catch(() => {});
|
|
543
550
|
try {
|
|
544
|
-
await
|
|
551
|
+
await k();
|
|
545
552
|
} catch (t) {
|
|
546
553
|
console.warn("subtitle compositing for picture in picture failed", t), E(), r === "burn-in" && e.onBurnedInChange?.(!1);
|
|
547
554
|
}
|
|
@@ -557,4 +564,4 @@ var a = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
557
564
|
};
|
|
558
565
|
};
|
|
559
566
|
//#endregion
|
|
560
|
-
export { h as a,
|
|
567
|
+
export { h as a, O as c, a as d, s as f, D as i, c as l, F as n, g as o, A as r, k as s, I as t, m as u };
|