Files
v10/dist/dev/media/dom/text/resolve-vtt-segment.js
T

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