@banou/media-player 0.8.20 → 0.9.0

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.
@@ -32,151 +32,194 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
32
32
  } catch {}
33
33
  })
34
34
  };
35
- }, s = -1, c = (e, t) => e.createEvent(t), l = (e) => e === void 0 ? void 0 : new URL(e, document.baseURI).toString(), u = (e) => new Date(e).toISOString().slice(11, 22), d = 1, f = (e) => new Map(r(e).styles.style.map((e, t) => [e.Name, t + d])), p = (e, t) => {
35
+ }, s = -1, c = (e) => e === void 0 ? void 0 : new URL(e, document.baseURI).toString(), l = (e) => new Date(e).toISOString().slice(11, 22), u = 1, d = (e) => new Map(r(e).styles.style.map((e, t) => [e.Name, t + u])), f = (e, t) => {
36
36
  let n = t.replace(/^\*+/, ""), r = n.toLowerCase() === "default" ? "Default" : n;
37
37
  return e.styles.get(r) ?? e.styles.get("Default") ?? 0;
38
- }, m = (e) => {
38
+ }, p = (e) => {
39
39
  let t = e.content.match(/\r?\n\[Events\]\r?\nFormat: (.*)/)?.[0];
40
40
  return t ? {
41
41
  type: "header",
42
42
  streamIndex: e.streamIndex,
43
43
  content: e.content,
44
44
  eventsContent: t,
45
- styles: f(e.content)
45
+ styles: d(e.content)
46
46
  } : (console.warn(`subtitle stream ${e.streamIndex} has no Events format, ignoring the track`), null);
47
- }, h = (e, t) => {
48
- let [n, i] = t.content.split(","), a = Number(n), o = `Dialogue: ${i},${u(t.start)},${u(t.end)},${t.content.replace(`${a},${i},`, "")}`, s = r(`${e.eventsContent}\r\n${o}`).events.dialogue[0];
47
+ }, m = (e, t) => {
48
+ let [n, i] = t.content.split(","), a = Number(n), o = `Dialogue: ${i},${l(t.start)},${l(t.end)},${t.content.replace(`${a},${i},`, "")}`, s = r(`${e.eventsContent}\r\n${o}`).events.dialogue[0];
49
49
  if (!s) throw Error("dialogue event is undefined");
50
50
  return {
51
51
  type: "dialogue",
52
52
  streamIndex: t.streamIndex,
53
53
  index: a,
54
54
  assEvent: {
55
- ...s,
56
- Style: p(e, s.Style),
57
- Effect: s.Effect ?? "",
55
+ Name: s.Name ?? "",
56
+ Effect: s.Effect?.name ?? "",
57
+ Layer: s.Layer,
58
+ MarginL: s.MarginL,
59
+ MarginR: s.MarginR,
60
+ MarginV: s.MarginV,
61
+ Style: f(e, s.Style),
58
62
  Text: s.Text.raw,
59
- Duration: (s.End - s.Start) * 1e3,
60
63
  Start: s.Start * 1e3,
61
- End: s.End * 1e3,
62
- ReadOrder: a,
63
- _index: a
64
+ Duration: (s.End - s.Start) * 1e3,
65
+ ReadOrder: a
64
66
  }
65
67
  };
66
- }, g = (e) => {
67
- let { video: t, canvas: r, workerUrl: i } = e, a = l(e.wasmUrl), o = l(e.legacyWasmUrl), s = l(e.defaultFontUrl), u, d = [], f = /* @__PURE__ */ new Map(), p = [], g = /* @__PURE__ */ new Map(), _, v = e.onStreams, ee = setInterval(() => {
68
- u?.setCurrentTime(t.paused, t.currentTime, t.playbackRate);
69
- }, 100), y = () => u?.setRate(t.playbackRate), b = (e) => {
70
- u = new n({
71
- onDemandRender: !1,
72
- video: t,
73
- canvas: r,
74
- subContent: e.content,
75
- workerUrl: i,
76
- modernWasmUrl: a,
77
- ...o ? { wasmUrl: o } : {},
78
- fonts: d.map(([, e]) => e),
79
- availableFonts: {
80
- ...Object.fromEntries(d),
81
- ...s ? { "liberation sans": s } : {}
82
- }
83
- }), t.removeEventListener("ratechange", u._boundSetRate), t.addEventListener("ratechange", y);
68
+ }, h = (e) => {
69
+ let { video: t, container: r, workerUrl: i } = e, a = c(e.wasmUrl), o = c(e.legacyWasmUrl), s = c(e.defaultFontUrl), l, u = [], d = /* @__PURE__ */ new Map(), f = [], h = /* @__PURE__ */ new Map(), g, _ = e.onStreams, v = !1, y = (e) => {
70
+ console.warn("the subtitle renderer failed; the file plays without subtitles", e);
71
+ }, b = (e) => {
72
+ let t = l;
73
+ t && t.ready.then(() => l === t ? e(t.renderer) : void 0).catch(y);
74
+ }, x = !1, S = () => {
75
+ x || (x = !0, queueMicrotask(() => {
76
+ x = !1;
77
+ let e = l;
78
+ !e || !t.videoWidth || e.ready.then(() => {
79
+ if (l === e) return e.manualRender({
80
+ expectedDisplayTime: performance.now(),
81
+ width: t.videoWidth,
82
+ height: t.videoHeight,
83
+ mediaTime: t.currentTime
84
+ }, !0);
85
+ }).catch(y);
86
+ }));
87
+ }, C = [
88
+ "loadedmetadata",
89
+ "seeked",
90
+ "pause"
91
+ ], w = () => S(), T = (e) => {
92
+ let c = document.createElement("canvas");
93
+ r.append(c);
94
+ try {
95
+ l = new n({
96
+ video: t,
97
+ canvas: c,
98
+ subContent: e.content,
99
+ workerUrl: i,
100
+ modernWasmUrl: a,
101
+ ...o ? { wasmUrl: o } : {},
102
+ fonts: u.map(([, e]) => e),
103
+ availableFonts: {
104
+ ...Object.fromEntries(u),
105
+ ...s ? { "liberation sans": s } : {}
106
+ },
107
+ queryFonts: !1
108
+ });
109
+ } catch (e) {
110
+ c.remove(), y(e);
111
+ return;
112
+ }
113
+ l.ready.catch(y);
114
+ for (let e of C) t.addEventListener(e, w);
115
+ s && b((e) => {
116
+ Promise.resolve(e.addFonts([s])).then(S, y);
117
+ }), S();
84
118
  };
85
119
  return {
86
120
  pushAttachments: (e) => {
87
- d = [...d, ...e.map((e) => [e.filename, new Uint8Array(e.data)])];
121
+ u = [...u, ...e.map((e) => [e.filename, new Uint8Array(e.data)])];
88
122
  },
89
123
  pushFragments: (e) => {
90
- for (let t of e) if (t.type === "header") {
91
- if (f.has(t.streamIndex)) continue;
92
- let e = m(t);
124
+ let t = [];
125
+ for (let n of e) if (n.type === "header") {
126
+ if (d.has(n.streamIndex)) continue;
127
+ let e = p(n);
93
128
  if (!e) continue;
94
- f.set(t.streamIndex, e), p.push({
95
- streamIndex: t.streamIndex,
96
- title: t.title,
97
- language: t.language
98
- }), v?.([...p]), _ === void 0 && (_ = t.streamIndex), u || b(e);
129
+ d.set(n.streamIndex, e), f.push({
130
+ streamIndex: n.streamIndex,
131
+ title: n.title,
132
+ language: n.language
133
+ }), _?.([...f]), g === void 0 && (g = n.streamIndex), !l && !v && T(e);
99
134
  } else {
100
- let e = f.get(t.streamIndex);
135
+ let e = d.get(n.streamIndex);
101
136
  if (!e) continue;
102
- let n = g.get(t.streamIndex);
103
- n || (n = /* @__PURE__ */ new Map(), g.set(t.streamIndex, n));
104
- let r = h(e, t);
105
- if (n.has(r.index)) continue;
106
- n.set(r.index, r), _ === t.streamIndex && u && c(u, r.assEvent);
137
+ let r = h.get(n.streamIndex);
138
+ r || (r = /* @__PURE__ */ new Map(), h.set(n.streamIndex, r));
139
+ let i = m(e, n);
140
+ if (r.has(i.index)) continue;
141
+ r.set(i.index, i), g === n.streamIndex && t.push(i.assEvent);
107
142
  }
143
+ t.length && (b((e) => Promise.all(t.map((t) => e.createEvent(t)))), S());
108
144
  },
109
145
  selectStream: (e) => {
110
- let n = e ?? -1;
111
- if (n === _ || !u) return;
112
- _ = n, u.freeTrack();
113
- let r = f.get(n);
114
- if (r) {
115
- u.setTrack(r.content);
116
- for (let e of g.get(n)?.values() ?? []) c(u, e.assEvent);
117
- u.setCurrentTime(t.paused, t.currentTime, t.playbackRate);
118
- }
146
+ let t = e ?? -1;
147
+ if (t === g || !l) return;
148
+ g = t;
149
+ let n = d.get(t), r = [...h.get(t)?.values() ?? []].map((e) => e.assEvent);
150
+ b((e) => {
151
+ let t = [e.freeTrack()];
152
+ if (n) {
153
+ t.push(e.setTrack(n.content));
154
+ for (let n of r) t.push(e.createEvent(n));
155
+ }
156
+ return Promise.all(t);
157
+ }), S();
119
158
  },
120
- getStreams: () => [...p],
121
- getSelectedStream: () => _,
159
+ getStreams: () => [...f],
160
+ getSelectedStream: () => g,
122
161
  setOnStreams: (e) => {
123
- v = e;
162
+ _ = e;
124
163
  },
125
164
  destroy: () => {
126
- clearInterval(ee), t.removeEventListener("ratechange", y), u?.destroy(), u = void 0;
165
+ v = !0;
166
+ let e = l;
167
+ l = void 0;
168
+ for (let e of C) t.removeEventListener(e, w);
169
+ e?.destroy().catch(() => {});
127
170
  }
128
171
  };
129
- }, _ = class extends Error {
172
+ }, g = class extends Error {
130
173
  mediaElement = !0;
131
174
  constructor(e, t) {
132
175
  super(e, t), this.name = "MediaElementError";
133
176
  }
134
- }, v = (e) => !!e && typeof e == "object" && e.mediaElement === !0, ee = -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) => {
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, ee = 12, D = 200, O = 250, k = 25e5, A = (e) => {
135
178
  let { worker: t } = e, n = setTimeout(() => t.terminate(), 2e3);
136
179
  e.destroy().catch(() => {}).finally(() => {
137
180
  clearTimeout(n), t.terminate();
138
181
  });
139
182
  }, te = async (t) => {
140
- let { videoElement: n, canvasElement: r, read: a, length: s, publicPath: c, libavWorkerUrl: l, jassubWorkerUrl: u, jassubWasmUrl: d, jassubLegacyWasmUrl: f, defaultFontUrl: p, bufferSize: m = A, audioStreamIndex: h, onReady: v, onError: te, onRecovered: ne, onSeek: M, onSubtitleStreams: re, onAudioStreams: ie } = t, N = await e({
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: j, onSubtitleStreams: ie, onAudioStreams: ae } = t, M = await e({
141
184
  publicPath: c,
142
185
  workerUrl: l,
143
186
  workerOptions: { type: "module" },
144
187
  bufferSize: m,
145
188
  length: s,
146
- audioStreamIndex: h,
189
+ audioStreamIndex: _,
147
190
  read: a
148
- }), P = [], F = !1, ae = () => {
149
- if (!F) {
150
- F = !0;
151
- for (let e of [...P].reverse()) try {
191
+ }), N = [], P = !1, F = () => {
192
+ if (!P) {
193
+ P = !0;
194
+ for (let e of [...N].reverse()) try {
152
195
  e();
153
196
  } catch {}
154
197
  }
155
198
  };
156
- P.push(() => j(N));
199
+ N.push(() => A(M));
157
200
  try {
158
- let e = await N.init(), t = e.audioStreams ?? [], a = t.some((e) => e.streamIndex === h) ? h : t[0]?.streamIndex ?? -1;
159
- ie?.(t, a);
160
- let s = g({
201
+ let e = await M.init(), t = e.audioStreams ?? [], a = t.some((e) => e.streamIndex === _) ? _ : t[0]?.streamIndex ?? -1;
202
+ ae?.(t, a);
203
+ let s = h({
161
204
  video: n,
162
- canvas: r,
205
+ container: r,
163
206
  workerUrl: u,
164
207
  wasmUrl: d,
165
208
  legacyWasmUrl: f,
166
209
  defaultFontUrl: p,
167
- onStreams: re
210
+ onStreams: ie
168
211
  });
169
- if (P.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");
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");
170
213
  let c = [e.info.output.videoMimeType, e.info.output.audioMimeType].filter(Boolean).join(","), l = `video/mp4; codecs="${c}"`;
171
214
  if (!MediaSource.isTypeSupported(l)) throw Error(`This browser cannot play the codecs in this file: ${c}`);
172
- let m = new MediaSource(), A = URL.createObjectURL(m);
173
- P.push(() => URL.revokeObjectURL(A)), n.src = A, P.push(() => {
215
+ let m = new MediaSource(), k = URL.createObjectURL(m);
216
+ N.push(() => URL.revokeObjectURL(k)), n.src = k, N.push(() => {
174
217
  try {
175
218
  n.pause();
176
219
  } catch {}
177
220
  n.removeAttribute("src"), n.load();
178
221
  });
179
- let j = await new Promise((t, n) => {
222
+ let A = await new Promise((t, n) => {
180
223
  let r = setTimeout(() => {
181
224
  i(), n(/* @__PURE__ */ Error("The MediaSource never opened"));
182
225
  }, w), i = () => {
@@ -194,139 +237,139 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
194
237
  i(), n(/* @__PURE__ */ Error("The MediaSource closed before a SourceBuffer could be created"));
195
238
  };
196
239
  m.addEventListener("sourceopen", a, { once: !0 }), m.addEventListener("sourceclose", o, { once: !0 }), m.addEventListener("error", o, { once: !0 });
197
- }), { appendBuffer: I, unbufferRange: oe, updateTimestampOffset: se, endOfStream: ce } = o(j, m);
198
- await I(e.data), e.subtitles?.length && s.pushFragments(e.subtitles), v?.();
199
- let L = !1, R = !1, z = 0, B, le = () => B ?? n.currentTime, V = !1, H = 0, U = 0, W = null, G = 0, K = 0, q = !1, ue = 0, J = (e, t, n = !1) => {
240
+ }), { appendBuffer: I, unbufferRange: L, updateTimestampOffset: oe, endOfStream: se } = o(A, m);
241
+ await I(e.data), e.subtitles?.length && s.pushFragments(e.subtitles), te?.();
242
+ let R = !1, z = !1, B = 0, V, ce = () => V ?? n.currentTime, H = !1, U = 0, W = 0, G = null, K = 0, le = 0, q = !1, ue = 0, J = (e, t, n = !1) => {
200
243
  let r = e?.message === "Cancelled";
201
- t && r || (console.error(e), !(q && !n) && (q = !0, te?.(r ? Error("Reading the video file failed", { cause: e }) : e)));
244
+ t && r || (console.error(e), !(q && !n) && (q = !0, ne?.(r ? Error("Reading the video file failed", { cause: e }) : e)));
202
245
  }, de = async (e = !1) => {
203
- if (z > 0 && !e) return;
204
- let t = n.currentTime, r = e ? x : ee, a = e ? S : y;
205
- for (let { start: e, end: n } of i(j)) e < t + r && await oe(e, t + r), n > t + a && await oe(t + a, n);
246
+ if (B > 0 && !e) return;
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 L(e, t + r), n > t + a && await L(t + a, n);
206
249
  }, fe = () => {
207
- let e = i(j);
250
+ let e = i(A);
208
251
  if (!e.length) return !0;
209
- let t = le(), n = e.find((e) => e.start <= t + T && t < e.end);
252
+ let t = ce(), n = e.find((e) => e.start <= t + T && t < e.end);
210
253
  return n && n.end >= t + y ? !1 : !n || n.end < t + b;
211
254
  }, pe = () => {
212
255
  let e = n.currentTime;
213
- return i(j).find((t) => t.start <= e + T && e < t.end);
256
+ return i(A).find((t) => t.start <= e + T && e < t.end);
214
257
  }, me = () => {
215
258
  let e = pe();
216
- return !!e && e.end >= K - .1;
259
+ return !!e && e.end >= le - .1;
217
260
  }, he = () => {
218
- let e = i(j).map((e) => e.end);
219
- e.length && (K = Math.max(K, ...e));
261
+ let e = i(A).map((e) => e.end);
262
+ e.length && (le = Math.max(le, ...e));
220
263
  }, Y = async (e) => {
221
- R = !0, W = null, G = 0, ue = e;
222
- let t = ++U;
264
+ z = !0, G = null, K = 0, ue = e;
265
+ let t = ++W;
223
266
  try {
224
- let { data: n, pts: r, subtitles: i, finished: a } = await N.seek(e);
225
- if (F || t !== U || (a && (V = !0), i?.length && s.pushFragments(i), await se(r), F || t !== U)) return;
267
+ let { data: n, pts: r, subtitles: i, finished: a } = await M.seek(e);
268
+ if (P || t !== W || (a && (H = !0), i?.length && s.pushFragments(i), await oe(r), P || t !== W)) return;
226
269
  n.byteLength && (await I(n), he());
227
270
  } catch (e) {
228
- J(e, F || t !== U);
271
+ J(e, P || t !== W);
229
272
  } finally {
230
- t === U && (R = !1);
273
+ t === W && (z = !1);
231
274
  }
232
275
  }, ge = async () => {
233
- let e = W;
276
+ let e = G;
234
277
  if (e) try {
235
- await I(e), he(), W === e && (W = null, G = 0);
278
+ await I(e), he(), G === e && (G = null, K = 0);
236
279
  } catch (t) {
237
- if (W !== e) return;
280
+ if (G !== e) return;
238
281
  if (t?.name === "QuotaExceededError") {
239
282
  let t = await de(!0).then(() => !0, () => !1);
240
- if (W !== e) return;
283
+ if (G !== e) return;
241
284
  if (t) {
242
- V = !1, await Y(pe()?.end ?? n.currentTime);
285
+ H = !1, await Y(pe()?.end ?? n.currentTime);
243
286
  return;
244
287
  }
245
288
  }
246
- if (G += 1, G < C) return;
247
- throw W = null, t;
289
+ if (K += 1, K < C) return;
290
+ throw G = null, t;
248
291
  }
249
292
  }, _e = async () => {
250
- if (L || R || $ !== void 0 || F || !W && (V || !fe())) return;
251
- let e = ++H, t = U, n = () => F || e !== H || t !== U;
252
- L = !0;
293
+ if (R || z || $ !== void 0 || P || !G && (H || !fe())) return;
294
+ let e = ++U, t = W, n = () => P || e !== U || t !== W;
295
+ R = !0;
253
296
  try {
254
- if (!W) {
255
- let { data: e, subtitles: t, finished: r } = await N.read();
256
- if (n() || (r && (V = !0), t?.length && s.pushFragments(t), !e.byteLength)) return;
257
- W = e, G = 0;
297
+ if (!G) {
298
+ let { data: e, subtitles: t, finished: r } = await M.read();
299
+ if (n() || (r && (H = !0), t?.length && s.pushFragments(t), !e.byteLength)) return;
300
+ G = e, K = 0;
258
301
  }
259
- await ge(), !n() && q && (q = !1, ne?.());
302
+ await ge(), !n() && q && (q = !1, re?.());
260
303
  } catch (e) {
261
304
  J(e, n());
262
305
  } finally {
263
- e === H && (L = !1);
306
+ e === U && (R = !1);
264
307
  }
265
- }, ve = (e) => e >= ue && !!pe(), ye = (e) => i(j).some((t) => t.start <= e + T && e < t.end), X = (e) => {
266
- let t = i(j).find((t) => t.start <= e + T && e < t.end);
308
+ }, ve = (e) => e >= ue && !!pe(), ye = (e) => i(A).some((t) => t.start <= e + T && e < t.end), X = (e) => {
309
+ let t = i(A).find((t) => t.start <= e + T && e < t.end);
267
310
  return t ? t.end - e : 0;
268
311
  }, be = async (e) => {
269
- if (!F && !(X(e) >= E)) {
270
- V = !1, z++, B = e;
312
+ if (!P && !(X(e) >= E)) {
313
+ H = !1, B++, V = e;
271
314
  try {
272
315
  ye(e) || await Y(e);
273
- let t = U;
274
- for (let n = 0; n < D && !(F || t !== U || V || X(e) >= E); n++) {
316
+ let t = W;
317
+ for (let n = 0; n < ee && !(P || t !== W || H || X(e) >= E); n++) {
275
318
  let t = X(e);
276
319
  if (await _e(), X(e) <= t) break;
277
320
  }
278
321
  } finally {
279
- z--, B === e && (B = void 0);
322
+ B--, V === e && (V = void 0);
280
323
  }
281
324
  }
282
325
  }, xe = 0, Z = null, Q, Se = (e) => {
283
326
  let t = performance.now(), n = t - xe;
284
- if (n >= O) {
285
- xe = t, Z = null, M?.(e);
327
+ if (n >= D) {
328
+ xe = t, Z = null, j?.(e);
286
329
  return;
287
330
  }
288
331
  Z = e, !Q && (Q = setTimeout(() => {
289
332
  Q = void 0;
290
333
  let e = Z;
291
- Z = null, !(e === null || F) && (xe = performance.now(), M?.(e));
292
- }, O - n));
334
+ Z = null, !(e === null || P) && (xe = performance.now(), j?.(e));
335
+ }, D - n));
293
336
  };
294
- P.push(() => {
337
+ N.push(() => {
295
338
  Q && clearTimeout(Q);
296
339
  });
297
340
  let Ce = 0, $;
298
- P.push(() => {
341
+ N.push(() => {
299
342
  $ && clearTimeout($);
300
343
  });
301
344
  let we = () => {
302
345
  let t = n.currentTime, r = e.info.input.duration || n.duration;
303
346
  r > 0 && Se(Math.min(Math.max(t / r, 0), 1));
304
- let i = performance.now(), a = i - Ce < k;
305
- if (Ce = i, !ve(t) && !(R && Math.abs(t - ue) < .001)) {
306
- if (V = !1, $ && clearTimeout($), !a) {
347
+ let i = performance.now(), a = i - Ce < O;
348
+ if (Ce = i, !ve(t) && !(z && Math.abs(t - ue) < .001)) {
349
+ if (H = !1, $ && clearTimeout($), !a) {
307
350
  $ = void 0, Y(t);
308
351
  return;
309
352
  }
310
353
  $ = setTimeout(() => {
311
- if ($ = void 0, F) return;
354
+ if ($ = void 0, P) return;
312
355
  let e = n.currentTime;
313
- ve(e) || (V = !1, Y(e));
314
- }, k);
356
+ ve(e) || (H = !1, Y(e));
357
+ }, O);
315
358
  }
316
359
  };
317
- n.addEventListener("seeking", we), P.push(() => n.removeEventListener("seeking", we));
360
+ n.addEventListener("seeking", we), N.push(() => n.removeEventListener("seeking", we));
318
361
  let Te = !1, Ee = () => {
319
362
  if (Te) return;
320
363
  Te = !0;
321
364
  let e = n.error;
322
- J(new _(`the media element failed: ${e?.message ?? "unknown"}`, { cause: e }), !1, !0);
365
+ J(new g(`the media element failed: ${e?.message ?? "unknown"}`, { cause: e }), !1, !0);
323
366
  };
324
- n.addEventListener("error", Ee), P.push(() => n.removeEventListener("error", Ee));
367
+ n.addEventListener("error", Ee), N.push(() => n.removeEventListener("error", Ee));
325
368
  let De = setInterval(() => {
326
- Te || n.error || (de().catch(() => {}), _e().catch((e) => J(e, !1)), V && !W && me() && m.readyState === "open" && ce().catch(() => {}));
369
+ Te || n.error || (de().catch(() => {}), _e().catch((e) => J(e, !1)), H && !G && me() && m.readyState === "open" && se().catch(() => {}));
327
370
  }, 100);
328
- return P.push(() => clearInterval(De)), {
329
- destroy: ae,
371
+ return N.push(() => clearInterval(De)), {
372
+ destroy: F,
330
373
  prepareSeek: be,
331
374
  videoElement: n,
332
375
  selectSubtitleStream: (e) => s.selectStream(e),
@@ -336,10 +379,10 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
336
379
  audioMimeType: e.info.output.audioMimeType
337
380
  };
338
381
  } catch (e) {
339
- throw ae(), e;
382
+ throw F(), e;
340
383
  }
341
- }, ne = 5, M = 500, re = 320, ie = 1e6, N = 3, P = 1e4, F = async (e) => {
342
- let { publicPath: n, workerUrl: r, length: i, read: a, onThumbnails: o, width: s = re } = e, c = await t({
384
+ }, ne = 5, re = 500, j = 320, ie = 1e6, ae = 3, M = 1e4, N = async (e) => {
385
+ let { publicPath: n, workerUrl: r, length: i, read: a, onThumbnails: o, width: s = j } = e, c = await t({
343
386
  publicPath: n,
344
387
  workerUrl: r,
345
388
  workerOptions: { type: "module" },
@@ -347,7 +390,7 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
347
390
  read: a
348
391
  });
349
392
  try {
350
- let t = await c.init(), n = t.duration, r = Math.max(e.interval ?? ne, n / M), a = [];
393
+ let t = await c.init(), n = t.duration, r = Math.max(e.interval ?? ne, n / re), a = [];
351
394
  for (let [e, o] of t.indexes.entries()) {
352
395
  let s = a.at(-1);
353
396
  s && o.timestamp - s.timestamp < r || a.push({
@@ -385,7 +428,7 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
385
428
  }, p = (e) => {
386
429
  e.done = !0, d = d.then(async () => {
387
430
  if (u) return;
388
- let t = await Promise.race([c.readKeyframe(e.timestamp), new Promise((e, t) => setTimeout(() => t(/* @__PURE__ */ Error("timed out")), P))]), n = await createImageBitmap(new Blob([t], { type: "image/png" })), r = new OffscreenCanvas(s, Math.max(1, Math.round(n.height * (s / n.width))));
431
+ 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))));
389
432
  r.getContext("2d").drawImage(n, 0, 0, r.width, r.height), n.close();
390
433
  let i = await r.convertToBlob({
391
434
  type: "image/webp",
@@ -397,7 +440,7 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
397
440
  endTime: e.endTime
398
441
  }].sort((e, t) => e.startTime - t.startTime), f());
399
442
  }).catch(() => {
400
- e.attempts += 1, e.done = e.attempts >= N;
443
+ e.attempts += 1, e.done = e.attempts >= ae;
401
444
  });
402
445
  };
403
446
  return f(), {
@@ -407,59 +450,61 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
407
450
  destroy: () => {
408
451
  u = !0;
409
452
  for (let e of l) URL.revokeObjectURL(e.url);
410
- l = [], j(c);
453
+ l = [], A(c);
411
454
  }
412
455
  };
413
456
  } catch (e) {
414
- throw j(c), e;
457
+ throw A(c), e;
415
458
  }
416
- }, ae = 1280, I = 1920, oe = 250, se = 100, ce = () => typeof HTMLCanvasElement < "u" && "captureStream" in HTMLCanvasElement.prototype, L = () => typeof document < "u" && typeof HTMLVideoElement < "u" && typeof HTMLVideoElement.prototype.requestPictureInPicture == "function" && !!document.pictureInPictureEnabled, R = () => typeof HTMLVideoElement < "u" && "mozCaptureStream" in HTMLVideoElement.prototype, z = () => ce() ? L() ? "window" : R() ? "burn-in" : null : null, B = (e) => {
417
- let { video: t, canvas: n } = e, r = e.mode ?? z() ?? "window", i = e.maxWidth ?? (r === "burn-in" ? I : ae), 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) => {
418
- r.drawImage(t, 0, 0, e.width, e.height), n.width > 0 && n.height > 0 && r.drawImage(n, 0, 0, e.width, e.height);
459
+ }, P = 1280, F = 1920, I = 250, L = 100, oe = () => typeof HTMLCanvasElement < "u" && "captureStream" in HTMLCanvasElement.prototype, se = () => typeof document < "u" && typeof HTMLVideoElement < "u" && typeof HTMLVideoElement.prototype.requestPictureInPicture == "function" && !!document.pictureInPictureEnabled, R = () => typeof HTMLVideoElement < "u" && "mozCaptureStream" in HTMLVideoElement.prototype, z = () => oe() ? se() ? "window" : R() ? "burn-in" : null : null, B = (e) => {
460
+ let { video: t, subtitles: n } = e, r = e.mode ?? z() ?? "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) => {
461
+ r.drawImage(t, 0, 0, e.width, e.height);
462
+ let i = n.querySelector("canvas");
463
+ i && i.width > 0 && i.height > 0 && r.drawImage(i, 0, 0, e.width, e.height);
419
464
  }, h = () => {
420
465
  a && m(a.composite, a.context);
421
466
  }, g = "requestVideoFrameCallback" in t, _ = () => {
422
467
  h(), v();
423
468
  }, v = () => {
424
469
  d || !a || (o = g ? t.requestVideoFrameCallback(_) : requestAnimationFrame(_));
425
- }, ee = () => {
426
- o !== void 0 && (g ? t.cancelVideoFrameCallback(o) : cancelAnimationFrame(o)), s !== void 0 && clearInterval(s), o = void 0, s = void 0;
427
470
  }, y = () => {
428
- "mediaSession" in navigator && (navigator.mediaSession.playbackState = t.paused ? "paused" : "playing");
471
+ o !== void 0 && (g ? t.cancelVideoFrameCallback(o) : cancelAnimationFrame(o)), s !== void 0 && clearInterval(s), o = void 0, s = void 0;
429
472
  }, b = () => {
430
- c || l || !t.paused || t.play().catch(() => {});
473
+ "mediaSession" in navigator && (navigator.mediaSession.playbackState = t.paused ? "paused" : "playing");
431
474
  }, x = () => {
475
+ c || l || !t.paused || t.play().catch(() => {});
476
+ }, S = () => {
432
477
  c || l || (t.paused || t.pause(), r !== "burn-in" && (c = !0, a?.mirror.play().catch(() => {}).finally(() => {
433
478
  c = !1;
434
479
  })));
435
- }, S = () => {
436
- y(), a?.mirror.play().catch(() => {});
437
480
  }, C = () => {
438
- y(), r === "burn-in" && a?.mirror.pause();
481
+ b(), a?.mirror.play().catch(() => {});
439
482
  }, w = () => {
483
+ b(), r === "burn-in" && a?.mirror.pause();
484
+ }, T = () => {
440
485
  if (r !== "burn-in" || !a || !t.paused || l) return;
441
486
  l = !0;
442
487
  let { mirror: e } = a;
443
488
  h(), e.play().then(() => new Promise((e) => {
444
- setTimeout(e, se);
489
+ setTimeout(e, L);
445
490
  })).catch(() => {}).finally(() => {
446
491
  e.pause(), setTimeout(() => {
447
492
  l = !1;
448
- }, se);
493
+ }, L);
449
494
  });
450
- }, T = [["play", () => {
495
+ }, E = [["play", () => {
451
496
  t.play().catch(() => {});
452
- }], ["pause", () => t.pause()]], E = (e) => {
453
- if ("mediaSession" in navigator) for (let [t, n] of T) try {
497
+ }], ["pause", () => t.pause()]], ee = (e) => {
498
+ if ("mediaSession" in navigator) for (let [t, n] of E) try {
454
499
  navigator.mediaSession.setActionHandler(t, e ? n : null);
455
500
  } catch {}
456
501
  }, D = () => {
457
- if (ee(), E(!1), t.removeEventListener("play", S), t.removeEventListener("pause", C), t.removeEventListener("seeked", w), !a) {
502
+ if (y(), ee(!1), t.removeEventListener("play", C), t.removeEventListener("pause", w), t.removeEventListener("seeked", T), !a) {
458
503
  f?.();
459
504
  return;
460
505
  }
461
506
  let { stream: e, mirror: n } = a;
462
- n.removeEventListener("play", b), n.removeEventListener("pause", x), n.removeEventListener("leavepictureinpicture", O);
507
+ n.removeEventListener("play", x), n.removeEventListener("pause", S), n.removeEventListener("leavepictureinpicture", O);
463
508
  for (let t of e.getTracks()) t.stop();
464
509
  n.remove(), a = void 0, f?.();
465
510
  }, O = () => D(), k = (e) => {
@@ -482,7 +527,7 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
482
527
  };
483
528
  if (a = f, u.srcObject = f.stream, (e.container ?? t.parentElement ?? document.body).appendChild(u), v(), s = setInterval(() => {
484
529
  t.paused && h();
485
- }, oe), u.play().catch(() => {}), u.readyState === 0 && await new Promise((e) => {
530
+ }, I), u.play().catch(() => {}), u.readyState === 0 && await new Promise((e) => {
486
531
  let t = () => {
487
532
  clearTimeout(n), e();
488
533
  }, n = setTimeout(t, 1e3);
@@ -491,7 +536,7 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
491
536
  u.remove();
492
537
  return;
493
538
  }
494
- if (u.addEventListener("play", b), u.addEventListener("pause", x), u.addEventListener("leavepictureinpicture", O), t.addEventListener("play", S), t.addEventListener("pause", C), t.addEventListener("seeked", w), E(!0), y(), r === "burn-in") {
539
+ if (u.addEventListener("play", x), u.addEventListener("pause", S), u.addEventListener("leavepictureinpicture", O), t.addEventListener("play", C), t.addEventListener("pause", w), t.addEventListener("seeked", T), ee(!0), b(), r === "burn-in") {
495
540
  t.paused && u.pause(), e.onBurnedInChange?.(!0);
496
541
  return;
497
542
  }
@@ -528,4 +573,4 @@ var i = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
528
573
  };
529
574
  };
530
575
  //#endregion
531
- export { _ as a, j as c, i as d, o as f, A as i, s as l, z as n, v as o, F as r, te as s, B as t, g as u };
576
+ export { g as a, A as c, i as d, o as f, k as i, s as l, z as n, _ as o, N as r, te as s, B as t, h as u };