@banou/media-player 0.10.17 → 0.10.19
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/source-buffer.d.ts +1 -1
- package/dist/{engine-C9vSEJYW.js → engine-C4Gj_4zs.js} +136 -136
- package/dist/index.js +157 -133
- package/dist/react/components/track-menu.d.ts +1 -1
- package/dist/react/player.d.ts +1 -0
- package/dist/react/source-feature.d.ts +5 -0
- package/dist/react/video-player.d.ts +6 -0
- package/package.json +1 -1
- package/src/lib/engine/playback.ts +4 -2
- package/src/lib/engine/source-buffer.ts +6 -3
- package/src/lib/react/components/settings.tsx +37 -1
- package/src/lib/react/components/track-menu.tsx +1 -1
- package/src/lib/react/source-feature.ts +5 -0
- package/src/lib/react/video-player.tsx +11 -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-C4Gj_4zs.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 };
|
|
@@ -8,5 +8,5 @@ export declare const updateSourceBuffer: (sourceBuffer: SourceBuffer, mediaSourc
|
|
|
8
8
|
appendBuffer: (buffer: ArrayBuffer | Uint8Array) => Promise<void>;
|
|
9
9
|
unbufferRange: (start: number, end: number) => Promise<void>;
|
|
10
10
|
updateTimestampOffset: (timestampOffset: number) => Promise<void>;
|
|
11
|
-
endOfStream: () => Promise<void>;
|
|
11
|
+
endOfStream: (allowed?: () => boolean) => Promise<void>;
|
|
12
12
|
};
|
|
@@ -26,8 +26,8 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
26
26
|
updateTimestampOffset: (t) => r(async () => {
|
|
27
27
|
e.timestampOffset = t;
|
|
28
28
|
}),
|
|
29
|
-
endOfStream: () => r(async () => {
|
|
30
|
-
if (
|
|
29
|
+
endOfStream: (n = () => !0) => r(async () => {
|
|
30
|
+
if (t.readyState === "open" && !e.updating && n()) try {
|
|
31
31
|
t.endOfStream();
|
|
32
32
|
} catch {}
|
|
33
33
|
})
|
|
@@ -174,13 +174,13 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
174
174
|
constructor(e, t) {
|
|
175
175
|
super(e, t), this.name = "MediaElementError";
|
|
176
176
|
}
|
|
177
|
-
}, _ = (e) => !!e && typeof e == "object" && e.mediaElement === !0, v = -20, y = 60, b = 30, x = -5, S = 20, C = 5, w = 15e3, T = 1, E = 3,
|
|
177
|
+
}, _ = (e) => !!e && typeof e == "object" && e.mediaElement === !0, v = -20, y = 60, b = 30, x = -5, S = 20, C = 5, w = 15e3, T = 1, E = 3, D = 12, O = 200, k = 250, A = 25e5, j = (e) => {
|
|
178
178
|
let { worker: t } = e, n = setTimeout(() => t.terminate(), 2e3);
|
|
179
179
|
e.destroy().catch(() => {}).finally(() => {
|
|
180
180
|
clearTimeout(n), t.terminate();
|
|
181
181
|
});
|
|
182
|
-
},
|
|
183
|
-
let { videoElement: n, subtitleContainer: r, read: a, length: s, publicPath: c, libavWorkerUrl: l, jassubWorkerUrl: u, jassubWasmUrl: d, jassubLegacyWasmUrl: f, defaultFontUrl: p, bufferSize: m =
|
|
182
|
+
}, ee = 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 = A, audioStreamIndex: _, onReady: ee, onError: te, onRecovered: ne, onSeek: re, onSubtitleStreams: ie, onAudioStreams: ae } = t, M = 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
|
+
}), N = [], P = !1, F = () => {
|
|
192
|
+
if (!P) {
|
|
193
|
+
P = !0;
|
|
194
|
+
for (let e of [...N].reverse()) try {
|
|
195
195
|
e();
|
|
196
196
|
} catch {}
|
|
197
197
|
}
|
|
198
198
|
};
|
|
199
|
-
|
|
199
|
+
N.push(() => j(M));
|
|
200
200
|
try {
|
|
201
|
-
let e = await
|
|
202
|
-
|
|
201
|
+
let e = await M.init(), t = e.audioStreams ?? [], a = t.some((e) => e.streamIndex === _) ? _ : t[0]?.streamIndex ?? -1;
|
|
202
|
+
ae?.(t, a);
|
|
203
203
|
let s = h({
|
|
204
204
|
video: n,
|
|
205
205
|
container: r,
|
|
@@ -207,19 +207,19 @@ 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: ie
|
|
211
211
|
});
|
|
212
|
-
if (
|
|
212
|
+
if (N.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
|
-
let m = new MediaSource(),
|
|
216
|
-
|
|
215
|
+
let m = new MediaSource(), A = URL.createObjectURL(m);
|
|
216
|
+
N.push(() => URL.revokeObjectURL(A)), n.src = A, N.push(() => {
|
|
217
217
|
try {
|
|
218
218
|
n.pause();
|
|
219
219
|
} catch {}
|
|
220
220
|
n.removeAttribute("src"), n.load();
|
|
221
221
|
});
|
|
222
|
-
let
|
|
222
|
+
let j = await new Promise((t, n) => {
|
|
223
223
|
let r = setTimeout(() => {
|
|
224
224
|
i(), n(/* @__PURE__ */ Error("The MediaSource never opened"));
|
|
225
225
|
}, w), i = () => {
|
|
@@ -237,138 +237,138 @@ 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: I, unbufferRange: oe, updateTimestampOffset: se, endOfStream: ce } = o(j, m);
|
|
241
|
+
await I(e.data), e.subtitles?.length && s.pushFragments(e.subtitles), ee?.();
|
|
242
|
+
let L = !1, R = !1, z = 0, B, le = () => B ?? n.currentTime, V = !1, ue = !1, de = 0, H = 0, U = null, W = 0, G = 0, K = !1, fe = 0, q = !0, J = (e, t, n = !1) => {
|
|
243
243
|
let r = e?.message === "Cancelled";
|
|
244
|
-
t && r || (console.error(e), (!
|
|
245
|
-
},
|
|
246
|
-
if (
|
|
247
|
-
let t = n.currentTime, r = e ? x : v, a = e ? S : y, o = i(
|
|
244
|
+
t && r || (console.error(e), (!K || n) && (K = !0, te?.(r ? Error("Reading the video file failed", { cause: e }) : e)));
|
|
245
|
+
}, pe = async (e = !1) => {
|
|
246
|
+
if (z > 0 && !e) return;
|
|
247
|
+
let t = n.currentTime, r = e ? x : v, a = e ? S : y, o = i(j), s = (e, t) => (q = !1, oe(e, t));
|
|
248
248
|
o.length && o[0].start < t + r && await s(0, t + r);
|
|
249
249
|
for (let { end: e } of o) e > t + a && await s(t + a, e);
|
|
250
|
-
},
|
|
251
|
-
let e = i(
|
|
250
|
+
}, me = () => {
|
|
251
|
+
let e = i(j);
|
|
252
252
|
if (!e.length) return !0;
|
|
253
|
-
let t =
|
|
254
|
-
return
|
|
255
|
-
},
|
|
256
|
-
let t =
|
|
257
|
-
return e >=
|
|
258
|
-
},
|
|
259
|
-
let e = i(
|
|
260
|
-
e.length && (
|
|
261
|
-
},
|
|
262
|
-
|
|
263
|
-
let t = ++
|
|
253
|
+
let t = le(), n = e.find((e) => e.start <= t + T && t < e.end);
|
|
254
|
+
return ye() && _e(t) && (!n || n.start <= t) || n && n.end >= t + y ? !1 : !n || n.end < t + b;
|
|
255
|
+
}, he = (e) => i(j).find((t) => t.start <= e + T && e < t.end), ge = () => he(n.currentTime), _e = (e = n.currentTime) => {
|
|
256
|
+
let t = he(e);
|
|
257
|
+
return e >= G - .1 || !!t && t.end >= G - .1;
|
|
258
|
+
}, ve = () => {
|
|
259
|
+
let e = i(j).map((e) => e.end);
|
|
260
|
+
e.length && (G = Math.max(G, ...e)), V && (ue = !0);
|
|
261
|
+
}, ye = () => V || ue && (i(j).at(-1)?.end ?? 0) >= G - .1, Y = async (e) => {
|
|
262
|
+
R = !0, U = null, W = 0, fe = e, q = !0;
|
|
263
|
+
let t = ++H;
|
|
264
264
|
try {
|
|
265
|
-
let { data: n, pts: r, subtitles: i, finished: a } = await
|
|
266
|
-
if (
|
|
267
|
-
n.byteLength && (await
|
|
265
|
+
let { data: n, pts: r, subtitles: i, finished: a } = await M.seek(e);
|
|
266
|
+
if (P || t !== H || (a && (V = !0), i?.length && s.pushFragments(i), await se(r), P || t !== H)) return;
|
|
267
|
+
n.byteLength && (await I(n), ve());
|
|
268
268
|
} catch (e) {
|
|
269
|
-
t ===
|
|
269
|
+
t === H && (q = !1), J(e, P || t !== H);
|
|
270
270
|
} finally {
|
|
271
|
-
t ===
|
|
271
|
+
t === H && (R = !1);
|
|
272
272
|
}
|
|
273
|
-
},
|
|
274
|
-
let e =
|
|
273
|
+
}, be = async () => {
|
|
274
|
+
let e = U;
|
|
275
275
|
if (e) try {
|
|
276
|
-
await
|
|
276
|
+
await I(e), ve(), U === e && (U = null, W = 0);
|
|
277
277
|
} catch (t) {
|
|
278
|
-
if (
|
|
278
|
+
if (U !== e) return;
|
|
279
279
|
if (t?.name === "QuotaExceededError") {
|
|
280
|
-
let t = await
|
|
281
|
-
if (
|
|
280
|
+
let t = await pe(!0).then(() => !0, () => !1);
|
|
281
|
+
if (U !== e) return;
|
|
282
282
|
if (t) {
|
|
283
|
-
|
|
283
|
+
V = !1, await Y(ge()?.end ?? n.currentTime);
|
|
284
284
|
return;
|
|
285
285
|
}
|
|
286
286
|
}
|
|
287
|
-
if (
|
|
288
|
-
throw
|
|
287
|
+
if (W += 1, W < C) return;
|
|
288
|
+
throw U = null, t;
|
|
289
289
|
}
|
|
290
|
-
},
|
|
291
|
-
if (
|
|
292
|
-
let e = ++
|
|
293
|
-
|
|
290
|
+
}, xe = async () => {
|
|
291
|
+
if (L || R || $ !== void 0 || P || !U && (V || !me())) return;
|
|
292
|
+
let e = ++de, t = H, n = () => P || e !== de || t !== H;
|
|
293
|
+
L = !0;
|
|
294
294
|
try {
|
|
295
|
-
if (!
|
|
296
|
-
let { data: e, subtitles: t, finished: r } = await
|
|
297
|
-
if (n() || (r && (
|
|
298
|
-
|
|
295
|
+
if (!U) {
|
|
296
|
+
let { data: e, subtitles: t, finished: r } = await M.read();
|
|
297
|
+
if (n() || (r && (V = !0), t?.length && s.pushFragments(t), !e.byteLength)) return;
|
|
298
|
+
U = e, W = 0;
|
|
299
299
|
}
|
|
300
|
-
await
|
|
300
|
+
await be(), !n() && K && (K = !1, ne?.());
|
|
301
301
|
} catch (e) {
|
|
302
|
-
|
|
302
|
+
J(e, n());
|
|
303
303
|
} finally {
|
|
304
|
-
e ===
|
|
304
|
+
e === de && (L = !1);
|
|
305
305
|
}
|
|
306
|
-
},
|
|
307
|
-
let t =
|
|
306
|
+
}, Se = (e) => e >= fe && Ce(e) && we(e), Ce = (e) => i(j).some((t) => t.start <= e && e < t.end), X = (e) => {
|
|
307
|
+
let t = he(e);
|
|
308
308
|
return t ? t.end - e : 0;
|
|
309
|
-
},
|
|
310
|
-
if (!
|
|
311
|
-
|
|
309
|
+
}, we = (e) => X(e) >= E || ye() && _e(e), Te = async (e) => {
|
|
310
|
+
if (!P && !(Ce(e) && we(e))) {
|
|
311
|
+
V = !1, z++, B = e;
|
|
312
312
|
try {
|
|
313
|
-
await
|
|
314
|
-
let t =
|
|
315
|
-
for (let n = 0; n <
|
|
316
|
-
let t =
|
|
317
|
-
if (await
|
|
313
|
+
await Y(e);
|
|
314
|
+
let t = H;
|
|
315
|
+
for (let n = 0; n < D && !(P || t !== H || V || X(e) >= E); n++) {
|
|
316
|
+
let t = X(e);
|
|
317
|
+
if (await xe(), X(e) <= t) break;
|
|
318
318
|
}
|
|
319
319
|
} finally {
|
|
320
|
-
|
|
320
|
+
z--, B === e && (B = void 0);
|
|
321
321
|
}
|
|
322
322
|
}
|
|
323
|
-
},
|
|
324
|
-
let t = performance.now(), n = t -
|
|
325
|
-
if (n >=
|
|
326
|
-
|
|
323
|
+
}, Ee = 0, Z = null, Q, De = (e) => {
|
|
324
|
+
let t = performance.now(), n = t - Ee;
|
|
325
|
+
if (n >= O) {
|
|
326
|
+
Ee = t, Z = null, re?.(e);
|
|
327
327
|
return;
|
|
328
328
|
}
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
let e =
|
|
332
|
-
|
|
333
|
-
},
|
|
329
|
+
Z = e, !Q && (Q = setTimeout(() => {
|
|
330
|
+
Q = void 0;
|
|
331
|
+
let e = Z;
|
|
332
|
+
Z = null, !(e === null || P) && (Ee = performance.now(), re?.(e));
|
|
333
|
+
}, O - n));
|
|
334
334
|
};
|
|
335
|
-
|
|
336
|
-
Z && clearTimeout(Z);
|
|
337
|
-
});
|
|
338
|
-
let ke = 0, Q;
|
|
339
|
-
M.push(() => {
|
|
335
|
+
N.push(() => {
|
|
340
336
|
Q && clearTimeout(Q);
|
|
341
337
|
});
|
|
342
|
-
let
|
|
338
|
+
let Oe = 0, $;
|
|
339
|
+
N.push(() => {
|
|
340
|
+
$ && clearTimeout($);
|
|
341
|
+
});
|
|
342
|
+
let ke = () => {
|
|
343
343
|
let t = n.currentTime, r = e.info.input.duration || n.duration;
|
|
344
|
-
r > 0 &&
|
|
345
|
-
let i = performance.now(), a = i -
|
|
346
|
-
if (
|
|
347
|
-
if (
|
|
348
|
-
|
|
344
|
+
r > 0 && De(Math.min(Math.max(t / r, 0), 1));
|
|
345
|
+
let i = performance.now(), a = i - Oe < k;
|
|
346
|
+
if (Oe = i, !Se(t) && !(q && (R || X(t) > 0) && Math.abs(t - fe) < .001)) {
|
|
347
|
+
if (V = !1, $ && clearTimeout($), !a) {
|
|
348
|
+
$ = void 0, Y(t);
|
|
349
349
|
return;
|
|
350
350
|
}
|
|
351
|
-
|
|
352
|
-
if (
|
|
351
|
+
$ = setTimeout(() => {
|
|
352
|
+
if ($ = void 0, P) return;
|
|
353
353
|
let e = n.currentTime;
|
|
354
|
-
|
|
355
|
-
},
|
|
354
|
+
Se(e) || (V = !1, Y(e));
|
|
355
|
+
}, k);
|
|
356
356
|
}
|
|
357
357
|
};
|
|
358
|
-
n.addEventListener("seeking",
|
|
359
|
-
let
|
|
360
|
-
if (
|
|
361
|
-
|
|
358
|
+
n.addEventListener("seeking", ke), N.push(() => n.removeEventListener("seeking", ke));
|
|
359
|
+
let Ae = !1, je = () => {
|
|
360
|
+
if (Ae) return;
|
|
361
|
+
Ae = !0;
|
|
362
362
|
let e = n.error;
|
|
363
|
-
|
|
363
|
+
J(new g(`the media element failed: ${e?.message ?? "unknown"}`, { cause: e }), !1, !0);
|
|
364
364
|
};
|
|
365
|
-
n.addEventListener("error", je),
|
|
365
|
+
n.addEventListener("error", je), N.push(() => n.removeEventListener("error", je));
|
|
366
366
|
let Me = setInterval(() => {
|
|
367
|
-
|
|
367
|
+
Ae || n.error || (pe().catch(() => {}), xe().catch((e) => J(e, !1)), ye() && !U && _e() && m.readyState === "open" && ce(() => !R).catch(() => {}));
|
|
368
368
|
}, 100);
|
|
369
|
-
return
|
|
370
|
-
destroy:
|
|
371
|
-
prepareSeek:
|
|
369
|
+
return N.push(() => clearInterval(Me)), {
|
|
370
|
+
destroy: F,
|
|
371
|
+
prepareSeek: Te,
|
|
372
372
|
videoElement: n,
|
|
373
373
|
selectSubtitleStream: (e) => s.selectStream(e),
|
|
374
374
|
indexes: e.indexes ?? [],
|
|
@@ -378,10 +378,10 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
378
378
|
audioMimeType: e.info.output.audioMimeType
|
|
379
379
|
};
|
|
380
380
|
} catch (e) {
|
|
381
|
-
throw
|
|
381
|
+
throw F(), e;
|
|
382
382
|
}
|
|
383
|
-
},
|
|
384
|
-
let { publicPath: n, workerUrl: r, length: i, read: a, onThumbnails: o, width: s =
|
|
383
|
+
}, te = 5, ne = 500, re = 320, ie = 1e6, ae = 3, M = 1e4, N = 1.5, P = 4e6, F = 3e4, I = async (e) => {
|
|
384
|
+
let { publicPath: n, workerUrl: r, length: i, read: a, onThumbnails: o, width: s = re } = e, c = await t({
|
|
385
385
|
publicPath: n,
|
|
386
386
|
workerUrl: r,
|
|
387
387
|
workerOptions: { type: "module" },
|
|
@@ -389,7 +389,7 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
389
389
|
read: a
|
|
390
390
|
});
|
|
391
391
|
try {
|
|
392
|
-
let t = await c.init(), n = t.duration, r = Math.max(e.interval ??
|
|
392
|
+
let t = await c.init(), n = t.duration, r = Math.max(e.interval ?? te, n / ne), a = [], l = (e) => {
|
|
393
393
|
let t = [];
|
|
394
394
|
for (let [a, o] of e.entries()) {
|
|
395
395
|
let s = t.at(-1);
|
|
@@ -397,7 +397,7 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
397
397
|
timestamp: o.timestamp,
|
|
398
398
|
endTime: n,
|
|
399
399
|
startByte: o.pos,
|
|
400
|
-
endByte: Math.min((e[a + 1]?.pos ?? i) +
|
|
400
|
+
endByte: Math.min((e[a + 1]?.pos ?? i) + ie, i),
|
|
401
401
|
done: !1,
|
|
402
402
|
attempts: 0
|
|
403
403
|
});
|
|
@@ -436,7 +436,7 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
436
436
|
}), o(e);
|
|
437
437
|
}, x = async (e) => {
|
|
438
438
|
if (d) return;
|
|
439
|
-
let t = await Promise.race([c.readKeyframe(e.timestamp), new Promise((e, t) => setTimeout(() => t(/* @__PURE__ */ Error("timed out")),
|
|
439
|
+
let t = await Promise.race([c.readKeyframe(e.timestamp), new Promise((e, t) => setTimeout(() => t(/* @__PURE__ */ Error("timed out")), M))]), n = await createImageBitmap(new Blob([t], { type: "image/png" })), r = new OffscreenCanvas(s, Math.max(1, Math.round(n.height * (s / n.width))));
|
|
440
440
|
r.getContext("2d").drawImage(n, 0, 0, r.width, r.height), n.close();
|
|
441
441
|
let i = await r.convertToBlob({
|
|
442
442
|
type: "image/webp",
|
|
@@ -460,7 +460,7 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
460
460
|
if (!f.length) return;
|
|
461
461
|
let e = f.splice(y(), 1)[0];
|
|
462
462
|
p = !0, x(e).catch(() => {
|
|
463
|
-
e.attempts += 1, e.done = e.attempts >=
|
|
463
|
+
e.attempts += 1, e.done = e.attempts >= ae;
|
|
464
464
|
}).finally(() => {
|
|
465
465
|
p = !1, S();
|
|
466
466
|
});
|
|
@@ -469,7 +469,7 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
469
469
|
}, w = async (e) => {
|
|
470
470
|
_ = !0;
|
|
471
471
|
try {
|
|
472
|
-
let t = await Promise.race([c.init(), new Promise((e, t) => setTimeout(() => t(/* @__PURE__ */ Error("timed out")),
|
|
472
|
+
let t = await Promise.race([c.init(), new Promise((e, t) => setTimeout(() => t(/* @__PURE__ */ Error("timed out")), F))]);
|
|
473
473
|
if (d) return;
|
|
474
474
|
h = e;
|
|
475
475
|
let n = l(t.indexes);
|
|
@@ -495,7 +495,7 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
495
495
|
if (d) return;
|
|
496
496
|
v = e;
|
|
497
497
|
let t = T(e);
|
|
498
|
-
h < 0 ? h = t : (t >= Math.max(h *
|
|
498
|
+
h < 0 ? h = t : (t >= Math.max(h * N, h + P) || t >= i && h < i) && (g = !0), E(e), S();
|
|
499
499
|
},
|
|
500
500
|
prioritize: (e) => {
|
|
501
501
|
d || (m = e);
|
|
@@ -503,14 +503,14 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
503
503
|
destroy: () => {
|
|
504
504
|
d = !0, f.length = 0;
|
|
505
505
|
for (let e of u) URL.revokeObjectURL(e.url);
|
|
506
|
-
u = [],
|
|
506
|
+
u = [], j(c);
|
|
507
507
|
}
|
|
508
508
|
};
|
|
509
509
|
} catch (e) {
|
|
510
|
-
throw
|
|
510
|
+
throw j(c), e;
|
|
511
511
|
}
|
|
512
|
-
},
|
|
513
|
-
let { video: t, subtitles: n } = e, r = e.mode ??
|
|
512
|
+
}, oe = 1280, se = 1920, ce = 250, L = 100, R = () => typeof HTMLCanvasElement < "u" && "captureStream" in HTMLCanvasElement.prototype, z = () => typeof document < "u" && typeof HTMLVideoElement < "u" && typeof HTMLVideoElement.prototype.requestPictureInPicture == "function" && !!document.pictureInPictureEnabled, B = () => typeof HTMLVideoElement < "u" && "mozCaptureStream" in HTMLVideoElement.prototype, le = () => R() ? z() ? "window" : B() ? "burn-in" : null : null, V = (e) => {
|
|
513
|
+
let { video: t, subtitles: n } = e, r = e.mode ?? le() ?? "window", i = e.maxWidth ?? (r === "burn-in" ? se : oe), 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) => {
|
|
514
514
|
r.drawImage(t, 0, 0, e.width, e.height);
|
|
515
515
|
let i = n.querySelector("canvas");
|
|
516
516
|
i && i.width > 0 && i.height > 0 && r.drawImage(i, 0, 0, e.width, e.height);
|
|
@@ -539,39 +539,39 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
539
539
|
l = !0;
|
|
540
540
|
let { mirror: e } = a;
|
|
541
541
|
h(), e.play().then(() => new Promise((e) => {
|
|
542
|
-
setTimeout(e,
|
|
542
|
+
setTimeout(e, L);
|
|
543
543
|
})).catch(() => {}).finally(() => {
|
|
544
544
|
e.pause(), setTimeout(() => {
|
|
545
545
|
l = !1;
|
|
546
|
-
},
|
|
546
|
+
}, L);
|
|
547
547
|
});
|
|
548
548
|
}, E = [["play", () => {
|
|
549
549
|
t.play().catch(() => {});
|
|
550
|
-
}], ["pause", () => t.pause()]],
|
|
550
|
+
}], ["pause", () => t.pause()]], D = (e) => {
|
|
551
551
|
if ("mediaSession" in navigator) for (let [t, n] of E) try {
|
|
552
552
|
navigator.mediaSession.setActionHandler(t, e ? n : null);
|
|
553
553
|
} catch {}
|
|
554
|
-
},
|
|
555
|
-
if (y(),
|
|
554
|
+
}, O = () => {
|
|
555
|
+
if (y(), D(!1), t.removeEventListener("play", C), t.removeEventListener("pause", w), t.removeEventListener("seeked", T), !a) {
|
|
556
556
|
f?.();
|
|
557
557
|
return;
|
|
558
558
|
}
|
|
559
559
|
let { stream: e, mirror: n } = a;
|
|
560
|
-
n.removeEventListener("play", x), n.removeEventListener("pause", S), n.removeEventListener("leavepictureinpicture",
|
|
560
|
+
n.removeEventListener("play", x), n.removeEventListener("pause", S), n.removeEventListener("leavepictureinpicture", k);
|
|
561
561
|
for (let t of e.getTracks()) t.stop();
|
|
562
562
|
n.remove(), a = void 0, f?.();
|
|
563
|
-
},
|
|
563
|
+
}, k = () => O(), A = (e) => {
|
|
564
564
|
let r = t.style.opacity, i = n.style.display;
|
|
565
565
|
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 = () => {
|
|
566
566
|
f = void 0, t.style.opacity = r, n.style.display = i;
|
|
567
567
|
};
|
|
568
|
-
},
|
|
568
|
+
}, j = async () => {
|
|
569
569
|
let n = Math.min(t.videoWidth || i, i), o = Math.round(n * ((t.videoHeight || 9) / (t.videoWidth || 16))), c = document.createElement("canvas");
|
|
570
570
|
c.width = n, c.height = o;
|
|
571
571
|
let l = c.getContext("2d");
|
|
572
572
|
if (!l) throw Error("the picture in picture composite has no 2d context");
|
|
573
573
|
let u = document.createElement("video");
|
|
574
|
-
u.muted = !0, u.playsInline = !0, r === "burn-in" ?
|
|
574
|
+
u.muted = !0, u.playsInline = !0, r === "burn-in" ? A(u) : u.style.cssText = "position:fixed;width:1px;height:1px;opacity:0;pointer-events:none;left:-1px;top:-1px", m(c, l);
|
|
575
575
|
let f = {
|
|
576
576
|
composite: c,
|
|
577
577
|
context: l,
|
|
@@ -580,7 +580,7 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
580
580
|
};
|
|
581
581
|
if (a = f, u.srcObject = f.stream, (e.container ?? t.parentElement ?? document.body).appendChild(u), v(), s = setInterval(() => {
|
|
582
582
|
t.paused && h();
|
|
583
|
-
},
|
|
583
|
+
}, ce), u.play().catch(() => {}), u.readyState === 0 && await new Promise((e) => {
|
|
584
584
|
let t = () => {
|
|
585
585
|
clearTimeout(n), e();
|
|
586
586
|
}, n = setTimeout(t, 1e3);
|
|
@@ -589,7 +589,7 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
589
589
|
u.remove();
|
|
590
590
|
return;
|
|
591
591
|
}
|
|
592
|
-
if (u.addEventListener("play", x), u.addEventListener("pause", S), u.addEventListener("leavepictureinpicture",
|
|
592
|
+
if (u.addEventListener("play", x), u.addEventListener("pause", S), u.addEventListener("leavepictureinpicture", k), t.addEventListener("play", C), t.addEventListener("pause", w), t.addEventListener("seeked", T), D(!0), b(), r === "burn-in") {
|
|
593
593
|
t.paused && u.pause(), e.onBurnedInChange?.(!0);
|
|
594
594
|
return;
|
|
595
595
|
}
|
|
@@ -602,7 +602,7 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
602
602
|
try {
|
|
603
603
|
if (p()) {
|
|
604
604
|
if (r === "burn-in") {
|
|
605
|
-
|
|
605
|
+
O(), e.onBurnedInChange?.(!1);
|
|
606
606
|
return;
|
|
607
607
|
}
|
|
608
608
|
await document.exitPictureInPicture().catch(() => {});
|
|
@@ -610,9 +610,9 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
610
610
|
}
|
|
611
611
|
r !== "burn-in" && document.pictureInPictureElement && await document.exitPictureInPicture().catch(() => {});
|
|
612
612
|
try {
|
|
613
|
-
await
|
|
613
|
+
await j();
|
|
614
614
|
} catch (t) {
|
|
615
|
-
console.warn("subtitle compositing for picture in picture failed", t),
|
|
615
|
+
console.warn("subtitle compositing for picture in picture failed", t), O(), r === "burn-in" && e.onBurnedInChange?.(!1);
|
|
616
616
|
}
|
|
617
617
|
} finally {
|
|
618
618
|
u = !1;
|
|
@@ -621,9 +621,9 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
|
|
|
621
621
|
},
|
|
622
622
|
mode: r,
|
|
623
623
|
destroy: () => {
|
|
624
|
-
d = !0, r !== "burn-in" && p() && document.exitPictureInPicture().catch(() => {}),
|
|
624
|
+
d = !0, r !== "burn-in" && p() && document.exitPictureInPicture().catch(() => {}), O(), r === "burn-in" && e.onBurnedInChange?.(!1);
|
|
625
625
|
}
|
|
626
626
|
};
|
|
627
627
|
};
|
|
628
628
|
//#endregion
|
|
629
|
-
export { g as a,
|
|
629
|
+
export { g as a, j as c, i as d, o as f, A as i, s as l, le as n, _ as o, I as r, ee as s, V as t, h as u };
|