mirror of
https://github.com/zoriya/v10.git
synced 2026-08-16 02:45:09 +00:00
50 lines
1.4 KiB
JavaScript
50 lines
1.4 KiB
JavaScript
//#region src/media/dom/text/resolve-vtt-segment.ts
|
|
let dummyVideo = null;
|
|
function ensureDummyVideo() {
|
|
if (!dummyVideo) {
|
|
dummyVideo = document.createElement("video");
|
|
dummyVideo.muted = true;
|
|
dummyVideo.preload = "none";
|
|
dummyVideo.style.display = "none";
|
|
dummyVideo.crossOrigin = "anonymous";
|
|
}
|
|
return dummyVideo;
|
|
}
|
|
function resolveVttSegment(url) {
|
|
const video = ensureDummyVideo();
|
|
const track = document.createElement("track");
|
|
track.kind = "subtitles";
|
|
return new Promise((resolve, reject) => {
|
|
const onLoad = () => {
|
|
const cues = [];
|
|
const textTrack = track.track;
|
|
if (textTrack.cues) for (let i = 0; i < textTrack.cues.length; i++) {
|
|
const cue = textTrack.cues[i];
|
|
if (cue) cues.push(cue);
|
|
}
|
|
cleanup();
|
|
resolve(cues);
|
|
};
|
|
const onError = () => {
|
|
cleanup();
|
|
reject(/* @__PURE__ */ new Error(`Failed to load VTT segment: ${url}`));
|
|
};
|
|
const cleanup = () => {
|
|
track.removeEventListener("load", onLoad);
|
|
track.removeEventListener("error", onError);
|
|
video.removeChild(track);
|
|
};
|
|
track.addEventListener("load", onLoad);
|
|
track.addEventListener("error", onError);
|
|
video.appendChild(track);
|
|
track.track.mode = "hidden";
|
|
track.src = url;
|
|
});
|
|
}
|
|
function destroyVttResolver() {
|
|
dummyVideo = null;
|
|
}
|
|
//#endregion
|
|
export { destroyVttResolver, resolveVttSegment };
|
|
|
|
//# sourceMappingURL=resolve-vtt-segment.js.map
|