@banou/media-player 0.8.12 → 0.8.13

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.
@@ -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-Cownv8gD.js";
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-BUcS6UrE.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 };
@@ -30,6 +30,13 @@ export type PlaybackOptions = {
30
30
  };
31
31
  export type PlaybackController = {
32
32
  destroy: () => void;
33
+ /**
34
+ * Get the data for a position in place BEFORE the playhead moves there.
35
+ *
36
+ * Resolves at once when that position already has data. The caller decides how long to wait,
37
+ * because this can take as long as a read, which over a torrent has no ceiling.
38
+ */
39
+ prepareSeek: (time: number) => Promise<void>;
33
40
  selectSubtitleStream: (streamIndex: number | undefined) => void;
34
41
  /** Keyframe index of the input, which is what maps a downloaded byte range onto the timeline. */
35
42
  indexes: MediaIndex[];
@@ -167,32 +167,32 @@ 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, S = 5, C = 15e3, w = 1, T = 200, E = 250, D = 25e5, O = (e) => {
170
+ }, g = (e) => !!e && typeof e == "object" && e.mediaElement === !0, _ = -20, v = 60, y = 30, b = -5, x = 20, ee = 5, te = 15e3, S = 1, C = 200, w = 250, T = 25e5, E = (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
- }, 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: A, onError: j, onRecovered: ee, onSeek: M, onSubtitleStreams: te, onAudioStreams: ne } = t, N = await e({
175
+ }, D = 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 = T, audioStreamIndex: D, onReady: O, onError: ne, onRecovered: re, onSeek: k, onSubtitleStreams: ie, onAudioStreams: ae } = 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: k,
182
+ audioStreamIndex: D,
183
183
  read: i
184
- }), P = [], F = !1, I = () => {
185
- if (!F) {
186
- F = !0;
187
- for (let e of [...P].reverse()) try {
184
+ }), j = [], M = !1, N = () => {
185
+ if (!M) {
186
+ M = !0;
187
+ for (let e of [...j].reverse()) try {
188
188
  e();
189
189
  } catch {}
190
190
  }
191
191
  };
192
- P.push(() => O(N));
192
+ j.push(() => E(A));
193
193
  try {
194
- let e = await N.init(), t = e.audioStreams ?? [], i = t.some((e) => e.streamIndex === k) ? k : t[0]?.streamIndex ?? -1;
195
- ne?.(t, i);
194
+ let e = await A.init(), t = e.audioStreams ?? [], i = t.some((e) => e.streamIndex === D) ? D : t[0]?.streamIndex ?? -1;
195
+ ae?.(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: te
203
+ onStreams: ie
204
204
  });
205
- if (P.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");
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(), D = URL.createObjectURL(g);
209
- P.push(() => URL.revokeObjectURL(D)), n.src = D, P.push(() => {
208
+ let g = new MediaSource(), T = URL.createObjectURL(g);
209
+ j.push(() => URL.revokeObjectURL(T)), n.src = T, j.push(() => {
210
210
  try {
211
211
  n.pause();
212
212
  } catch {}
213
213
  n.removeAttribute("src"), n.load();
214
214
  });
215
- let O = await new Promise((t, n) => {
215
+ let E = await new Promise((t, n) => {
216
216
  let r = setTimeout(() => {
217
217
  i(), n(/* @__PURE__ */ Error("The MediaSource never opened"));
218
- }, C), i = () => {
218
+ }, te), i = () => {
219
219
  clearTimeout(r), g.removeEventListener("sourceopen", a), g.removeEventListener("sourceclose", o), g.removeEventListener("error", o);
220
220
  }, a = () => {
221
221
  try {
@@ -230,123 +230,134 @@ 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: L, unbufferRange: re, updateTimestampOffset: ie, endOfStream: ae } = s(O, g);
234
- await L(e.data), e.subtitles?.length && o.pushFragments(e.subtitles), A?.();
235
- let R = !1, z = !1, B = !1, V = 0, H = 0, U = null, W = 0, G = 0, K = !1, oe = 0, q = (e, t, n = !1) => {
233
+ }), { appendBuffer: P, unbufferRange: F, updateTimestampOffset: oe, endOfStream: se } = s(E, g);
234
+ await P(e.data), e.subtitles?.length && o.pushFragments(e.subtitles), O?.();
235
+ let I = !1, L = !1, R = 0, 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), !(K && !n) && (K = !0, j?.(r ? Error("Reading the video file failed", { cause: e }) : e)));
238
- }, se = async (e = !1) => {
237
+ t && r || (console.error(e), !(G && !n) && (G = !0, ne?.(r ? Error("Reading the video file failed", { cause: e }) : e)));
238
+ }, ce = async (e = !1) => {
239
+ if (R > 0 && !e) return;
239
240
  let t = n.currentTime, r = e ? b : _, i = e ? x : v;
240
- for (let { start: e, end: n } of a(O)) e < t + r && await re(e, t + r), n > t + i && await re(t + i, n);
241
- }, ce = () => {
242
- let e = a(O);
241
+ for (let { start: e, end: n } of a(E)) e < t + r && await F(e, t + r), n > t + i && await F(t + i, n);
242
+ }, le = () => {
243
+ let e = a(E);
243
244
  if (!e.length) return !0;
244
245
  let t = n.currentTime;
245
246
  if (Math.max(...e.map((e) => e.end)) >= t + v) return !1;
246
- let r = e.find((e) => e.start <= t + w && t < e.end);
247
+ let r = e.find((e) => e.start <= t + S && t < e.end);
247
248
  return !r || r.end < t + y;
248
249
  }, J = () => {
249
250
  let e = n.currentTime;
250
- return a(O).find((t) => t.start <= e + w && e < t.end);
251
- }, le = () => {
252
- let e = J();
253
- return !!e && e.end >= G - .1;
251
+ return a(E).find((t) => t.start <= e + S && e < t.end);
254
252
  }, ue = () => {
255
- let e = a(O).map((e) => e.end);
256
- e.length && (G = Math.max(G, ...e));
253
+ let e = J();
254
+ return !!e && e.end >= W - .1;
255
+ }, de = () => {
256
+ let e = a(E).map((e) => e.end);
257
+ e.length && (W = Math.max(W, ...e));
257
258
  }, Y = async (e) => {
258
- z = !0, U = null, W = 0, oe = e;
259
- let t = ++H;
259
+ L = !0, H = null, U = 0, K = e;
260
+ let t = ++V;
260
261
  try {
261
- let { data: n, pts: r, subtitles: i, finished: a } = await N.seek(e);
262
- if (F || t !== H || (a && (B = !0), i?.length && o.pushFragments(i), await ie(r), F || t !== H)) return;
263
- n.byteLength && (await L(n), ue());
262
+ 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 oe(r), M || t !== V)) return;
264
+ n.byteLength && (await P(n), de());
264
265
  } catch (e) {
265
- q(e, F || t !== H);
266
+ q(e, M || t !== V);
266
267
  } finally {
267
- t === H && (z = !1);
268
+ t === V && (L = !1);
268
269
  }
269
- }, de = async () => {
270
- let e = U;
270
+ }, fe = async () => {
271
+ let e = H;
271
272
  if (e) try {
272
- await L(e), ue(), U === e && (U = null, W = 0);
273
+ await P(e), de(), H === e && (H = null, U = 0);
273
274
  } catch (t) {
274
- if (U !== e) return;
275
+ if (H !== e) return;
275
276
  if (t?.name === "QuotaExceededError") {
276
- let t = await se(!0).then(() => !0, () => !1);
277
- if (U !== e) return;
277
+ let t = await ce(!0).then(() => !0, () => !1);
278
+ if (H !== e) return;
278
279
  if (t) {
279
- B = !1, await Y(J()?.end ?? n.currentTime);
280
+ z = !1, await Y(J()?.end ?? n.currentTime);
280
281
  return;
281
282
  }
282
283
  }
283
- if (W += 1, W < S) return;
284
- throw U = null, t;
284
+ if (U += 1, U < ee) return;
285
+ throw H = null, t;
285
286
  }
286
- }, fe = async () => {
287
- if (R || z || $ !== void 0 || F || !U && (B || !ce())) return;
288
- let e = ++V, t = H, n = () => F || e !== V || t !== H;
289
- R = !0;
287
+ }, pe = async () => {
288
+ if (I || L || $ !== void 0 || M || !H && (z || !le())) return;
289
+ let e = ++B, t = V, n = () => M || e !== B || t !== V;
290
+ I = !0;
290
291
  try {
291
- if (!U) {
292
- let { data: e, subtitles: t, finished: r } = await N.read();
293
- if (n() || (r && (B = !0), t?.length && o.pushFragments(t), !e.byteLength)) return;
294
- U = e, W = 0;
292
+ if (!H) {
293
+ let { data: e, subtitles: t, finished: r } = await A.read();
294
+ if (n() || (r && (z = !0), t?.length && o.pushFragments(t), !e.byteLength)) return;
295
+ H = e, U = 0;
295
296
  }
296
- await de(), !n() && K && (K = !1, ee?.());
297
+ await fe(), !n() && G && (G = !1, re?.());
297
298
  } catch (e) {
298
299
  q(e, n());
299
300
  } finally {
300
- e === V && (R = !1);
301
+ e === B && (I = !1);
302
+ }
303
+ }, me = (e) => e >= K && !!J(), he = (e) => a(E).some((t) => t.start <= e + S && e < t.end), ge = async (e) => {
304
+ if (!(M || he(e))) {
305
+ z = !1, R++;
306
+ try {
307
+ await Y(e);
308
+ } finally {
309
+ R--;
310
+ }
301
311
  }
302
- }, pe = (e) => e >= oe && !!J(), X = 0, Z = null, Q, me = (e) => {
312
+ }, X = 0, Z = null, Q, _e = (e) => {
303
313
  let t = performance.now(), n = t - X;
304
- if (n >= T) {
305
- X = t, Z = null, M?.(e);
314
+ if (n >= C) {
315
+ X = t, Z = null, k?.(e);
306
316
  return;
307
317
  }
308
318
  Z = e, !Q && (Q = setTimeout(() => {
309
319
  Q = void 0;
310
320
  let e = Z;
311
- Z = null, !(e === null || F) && (X = performance.now(), M?.(e));
312
- }, T - n));
321
+ Z = null, !(e === null || M) && (X = performance.now(), k?.(e));
322
+ }, C - n));
313
323
  };
314
- P.push(() => {
324
+ j.push(() => {
315
325
  Q && clearTimeout(Q);
316
326
  });
317
- let he = 0, $;
318
- P.push(() => {
327
+ let ve = 0, $;
328
+ j.push(() => {
319
329
  $ && clearTimeout($);
320
330
  });
321
- let ge = () => {
331
+ let ye = () => {
322
332
  let t = n.currentTime, r = e.info.input.duration || n.duration;
323
- r > 0 && me(Math.min(Math.max(t / r, 0), 1));
324
- let i = performance.now(), a = i - he < E;
325
- if (he = i, !pe(t)) {
326
- if (B = !1, $ && clearTimeout($), !a) {
333
+ r > 0 && _e(Math.min(Math.max(t / r, 0), 1));
334
+ let i = performance.now(), a = i - ve < w;
335
+ if (ve = i, !me(t) && !(L && Math.abs(t - K) < .001)) {
336
+ if (z = !1, $ && clearTimeout($), !a) {
327
337
  $ = void 0, Y(t);
328
338
  return;
329
339
  }
330
340
  $ = setTimeout(() => {
331
- if ($ = void 0, F) return;
341
+ if ($ = void 0, M) return;
332
342
  let e = n.currentTime;
333
- pe(e) || (B = !1, Y(e));
334
- }, E);
343
+ me(e) || (z = !1, Y(e));
344
+ }, w);
335
345
  }
336
346
  };
337
- n.addEventListener("seeking", ge), P.push(() => n.removeEventListener("seeking", ge));
338
- let _e = !1, ve = () => {
339
- if (_e) return;
340
- _e = !0;
347
+ n.addEventListener("seeking", ye), j.push(() => n.removeEventListener("seeking", ye));
348
+ let be = !1, xe = () => {
349
+ if (be) return;
350
+ be = !0;
341
351
  let e = n.error;
342
352
  q(new h(`the media element failed: ${e?.message ?? "unknown"}`, { cause: e }), !1, !0);
343
353
  };
344
- n.addEventListener("error", ve), P.push(() => n.removeEventListener("error", ve));
345
- let ye = setInterval(() => {
346
- _e || n.error || (se().catch(() => {}), fe().catch((e) => q(e, !1)), B && !U && le() && g.readyState === "open" && ae().catch(() => {}));
354
+ n.addEventListener("error", xe), j.push(() => n.removeEventListener("error", xe));
355
+ let Se = setInterval(() => {
356
+ be || n.error || (ce().catch(() => {}), pe().catch((e) => q(e, !1)), z && !H && ue() && g.readyState === "open" && se().catch(() => {}));
347
357
  }, 100);
348
- return P.push(() => clearInterval(ye)), {
349
- destroy: I,
358
+ return j.push(() => clearInterval(Se)), {
359
+ destroy: N,
360
+ prepareSeek: ge,
350
361
  selectSubtitleStream: (e) => o.selectStream(e),
351
362
  indexes: e.indexes ?? [],
352
363
  duration: e.info.input.duration,
@@ -354,10 +365,10 @@ var a = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
354
365
  audioMimeType: e.info.output.audioMimeType
355
366
  };
356
367
  } catch (e) {
357
- throw I(), e;
368
+ throw N(), e;
358
369
  }
359
- }, A = 5, j = 500, ee = 320, M = 1e6, te = 3, ne = 1e4, N = async (e) => {
360
- let { publicPath: n, workerUrl: r, length: i, read: a, onThumbnails: o, width: s = ee } = e, c = await t({
370
+ }, O = 5, ne = 500, re = 320, k = 1e6, ie = 3, ae = 1e4, A = async (e) => {
371
+ let { publicPath: n, workerUrl: r, length: i, read: a, onThumbnails: o, width: s = re } = e, c = await t({
361
372
  publicPath: n,
362
373
  workerUrl: r,
363
374
  workerOptions: { type: "module" },
@@ -365,14 +376,14 @@ var a = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
365
376
  read: a
366
377
  });
367
378
  try {
368
- let t = await c.init(), n = t.duration, r = Math.max(e.interval ?? A, n / j), a = [];
379
+ let t = await c.init(), n = t.duration, r = Math.max(e.interval ?? O, n / ne), a = [];
369
380
  for (let [e, o] of t.indexes.entries()) {
370
381
  let s = a.at(-1);
371
382
  s && o.timestamp - s.timestamp < r || a.push({
372
383
  timestamp: o.timestamp,
373
384
  endTime: n,
374
385
  startByte: o.pos,
375
- endByte: Math.min((t.indexes[e + 1]?.pos ?? i) + M, i),
386
+ endByte: Math.min((t.indexes[e + 1]?.pos ?? i) + k, i),
376
387
  done: !1,
377
388
  attempts: 0
378
389
  });
@@ -403,7 +414,7 @@ var a = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
403
414
  }, p = (e) => {
404
415
  e.done = !0, d = d.then(async () => {
405
416
  if (u) return;
406
- let t = await Promise.race([c.readKeyframe(e.timestamp), new Promise((e, t) => setTimeout(() => t(/* @__PURE__ */ Error("timed out")), ne))]), n = await createImageBitmap(new Blob([t], { type: "image/png" })), r = new OffscreenCanvas(s, Math.max(1, Math.round(n.height * (s / n.width))));
417
+ let t = await Promise.race([c.readKeyframe(e.timestamp), new Promise((e, t) => setTimeout(() => t(/* @__PURE__ */ Error("timed out")), ae))]), n = await createImageBitmap(new Blob([t], { type: "image/png" })), r = new OffscreenCanvas(s, Math.max(1, Math.round(n.height * (s / n.width))));
407
418
  r.getContext("2d").drawImage(n, 0, 0, r.width, r.height), n.close();
408
419
  let i = await r.convertToBlob({
409
420
  type: "image/webp",
@@ -415,7 +426,7 @@ var a = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
415
426
  endTime: e.endTime
416
427
  }].sort((e, t) => e.startTime - t.startTime), f());
417
428
  }).catch(() => {
418
- e.attempts += 1, e.done = e.attempts >= te;
429
+ e.attempts += 1, e.done = e.attempts >= ie;
419
430
  });
420
431
  };
421
432
  return f(), {
@@ -425,14 +436,14 @@ var a = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
425
436
  destroy: () => {
426
437
  u = !0;
427
438
  for (let e of l) URL.revokeObjectURL(e.url);
428
- l = [], O(c);
439
+ l = [], E(c);
429
440
  }
430
441
  };
431
442
  } catch (e) {
432
- throw O(c), e;
443
+ throw E(c), e;
433
444
  }
434
- }, P = 1280, F = 1920, I = 250, L = 100, re = () => typeof HTMLCanvasElement < "u" && "captureStream" in HTMLCanvasElement.prototype, ie = () => typeof document < "u" && typeof HTMLVideoElement < "u" && typeof HTMLVideoElement.prototype.requestPictureInPicture == "function" && !!document.pictureInPictureEnabled, ae = () => typeof HTMLVideoElement < "u" && "mozCaptureStream" in HTMLVideoElement.prototype, R = () => re() ? ie() ? "window" : ae() ? "burn-in" : null : null, z = (e) => {
435
- let { video: t, canvas: n } = e, r = e.mode ?? R() ?? "window", i = e.maxWidth ?? (r === "burn-in" ? F : P), 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) => {
445
+ }, j = 1280, M = 1920, N = 250, P = 100, F = () => typeof HTMLCanvasElement < "u" && "captureStream" in HTMLCanvasElement.prototype, oe = () => typeof document < "u" && typeof HTMLVideoElement < "u" && typeof HTMLVideoElement.prototype.requestPictureInPicture == "function" && !!document.pictureInPictureEnabled, se = () => typeof HTMLVideoElement < "u" && "mozCaptureStream" in HTMLVideoElement.prototype, I = () => F() ? oe() ? "window" : se() ? "burn-in" : null : null, L = (e) => {
446
+ let { video: t, canvas: n } = e, r = e.mode ?? I() ?? "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) => {
436
447
  r.drawImage(t, 0, 0, e.width, e.height), n.width > 0 && n.height > 0 && r.drawImage(n, 0, 0, e.width, e.height);
437
448
  }, h = () => {
438
449
  a && m(a.composite, a.context);
@@ -446,52 +457,52 @@ var a = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
446
457
  "mediaSession" in navigator && (navigator.mediaSession.playbackState = t.paused ? "paused" : "playing");
447
458
  }, x = () => {
448
459
  c || l || !t.paused || t.play().catch(() => {});
449
- }, S = () => {
460
+ }, ee = () => {
450
461
  c || l || (t.paused || t.pause(), r !== "burn-in" && (c = !0, a?.mirror.play().catch(() => {}).finally(() => {
451
462
  c = !1;
452
463
  })));
453
- }, C = () => {
464
+ }, te = () => {
454
465
  b(), a?.mirror.play().catch(() => {});
455
- }, w = () => {
466
+ }, S = () => {
456
467
  b(), r === "burn-in" && a?.mirror.pause();
457
- }, T = () => {
468
+ }, C = () => {
458
469
  if (r !== "burn-in" || !a || !t.paused || l) return;
459
470
  l = !0;
460
471
  let { mirror: e } = a;
461
472
  h(), e.play().then(() => new Promise((e) => {
462
- setTimeout(e, L);
473
+ setTimeout(e, P);
463
474
  })).catch(() => {}).finally(() => {
464
475
  e.pause(), setTimeout(() => {
465
476
  l = !1;
466
- }, L);
477
+ }, P);
467
478
  });
468
- }, E = [["play", () => {
479
+ }, w = [["play", () => {
469
480
  t.play().catch(() => {});
470
- }], ["pause", () => t.pause()]], D = (e) => {
471
- if ("mediaSession" in navigator) for (let [t, n] of E) try {
481
+ }], ["pause", () => t.pause()]], T = (e) => {
482
+ if ("mediaSession" in navigator) for (let [t, n] of w) try {
472
483
  navigator.mediaSession.setActionHandler(t, e ? n : null);
473
484
  } catch {}
474
- }, O = () => {
475
- if (y(), D(!1), t.removeEventListener("play", C), t.removeEventListener("pause", w), t.removeEventListener("seeked", T), !a) {
485
+ }, E = () => {
486
+ if (y(), T(!1), t.removeEventListener("play", te), t.removeEventListener("pause", S), t.removeEventListener("seeked", C), !a) {
476
487
  f?.();
477
488
  return;
478
489
  }
479
490
  let { stream: e, mirror: n } = a;
480
- n.removeEventListener("play", x), n.removeEventListener("pause", S), n.removeEventListener("leavepictureinpicture", k);
491
+ n.removeEventListener("play", x), n.removeEventListener("pause", ee), n.removeEventListener("leavepictureinpicture", D);
481
492
  for (let t of e.getTracks()) t.stop();
482
493
  n.remove(), a = void 0, f?.();
483
- }, k = () => O(), A = (e) => {
494
+ }, D = () => E(), O = (e) => {
484
495
  let r = t.style.opacity, i = n.style.display;
485
496
  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 = () => {
486
497
  f = void 0, t.style.opacity = r, n.style.display = i;
487
498
  };
488
- }, j = async () => {
499
+ }, ne = async () => {
489
500
  let n = Math.min(t.videoWidth || i, i), o = Math.round(n * ((t.videoHeight || 9) / (t.videoWidth || 16))), c = document.createElement("canvas");
490
501
  c.width = n, c.height = o;
491
502
  let l = c.getContext("2d");
492
503
  if (!l) throw Error("the picture in picture composite has no 2d context");
493
504
  let u = document.createElement("video");
494
- 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);
505
+ u.muted = !0, u.playsInline = !0, r === "burn-in" ? O(u) : u.style.cssText = "position:fixed;width:1px;height:1px;opacity:0;pointer-events:none;left:-1px;top:-1px", m(c, l);
495
506
  let f = {
496
507
  composite: c,
497
508
  context: l,
@@ -500,7 +511,7 @@ var a = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
500
511
  };
501
512
  if (a = f, u.srcObject = f.stream, (e.container ?? t.parentElement ?? document.body).appendChild(u), v(), s = setInterval(() => {
502
513
  t.paused && h();
503
- }, I), u.play().catch(() => {}), u.readyState === 0 && await new Promise((e) => {
514
+ }, N), u.play().catch(() => {}), u.readyState === 0 && await new Promise((e) => {
504
515
  let t = () => {
505
516
  clearTimeout(n), e();
506
517
  }, n = setTimeout(t, 1e3);
@@ -509,7 +520,7 @@ var a = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
509
520
  u.remove();
510
521
  return;
511
522
  }
512
- 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") {
523
+ if (u.addEventListener("play", x), u.addEventListener("pause", ee), u.addEventListener("leavepictureinpicture", D), t.addEventListener("play", te), t.addEventListener("pause", S), t.addEventListener("seeked", C), T(!0), b(), r === "burn-in") {
513
524
  t.paused && u.pause(), e.onBurnedInChange?.(!0);
514
525
  return;
515
526
  }
@@ -522,7 +533,7 @@ var a = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
522
533
  try {
523
534
  if (p()) {
524
535
  if (r === "burn-in") {
525
- O(), e.onBurnedInChange?.(!1);
536
+ E(), e.onBurnedInChange?.(!1);
526
537
  return;
527
538
  }
528
539
  await document.exitPictureInPicture().catch(() => {});
@@ -530,9 +541,9 @@ var a = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
530
541
  }
531
542
  r !== "burn-in" && document.pictureInPictureElement && await document.exitPictureInPicture().catch(() => {});
532
543
  try {
533
- await j();
544
+ await ne();
534
545
  } catch (t) {
535
- console.warn("subtitle compositing for picture in picture failed", t), O(), r === "burn-in" && e.onBurnedInChange?.(!1);
546
+ console.warn("subtitle compositing for picture in picture failed", t), E(), r === "burn-in" && e.onBurnedInChange?.(!1);
536
547
  }
537
548
  } finally {
538
549
  u = !1;
@@ -541,9 +552,9 @@ var a = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
541
552
  },
542
553
  mode: r,
543
554
  destroy: () => {
544
- d = !0, r !== "burn-in" && p() && document.exitPictureInPicture().catch(() => {}), O(), r === "burn-in" && e.onBurnedInChange?.(!1);
555
+ d = !0, r !== "burn-in" && p() && document.exitPictureInPicture().catch(() => {}), E(), r === "burn-in" && e.onBurnedInChange?.(!1);
545
556
  }
546
557
  };
547
558
  };
548
559
  //#endregion
549
- export { h as a, O as c, a as d, s as f, D as i, c as l, R as n, g as o, N as r, k as s, z as t, m as u };
560
+ export { h as a, E as c, a as d, s as f, T as i, c as l, I as n, g as o, A as r, D as s, L as t, m as u };