vidstack
Version:
Build awesome media experiences on the web.
53 lines (50 loc) • 1.65 kB
JavaScript
import { onDispose } from 'maverick.js';
import { G as TextTrack, Y as TEXT_TRACK_NATIVE, H as TEXT_TRACK_READY_STATE, Z as TEXT_TRACK_NATIVE_HLS } from '../../media-core.js';
class NativeHLSTextTracks {
constructor(_video, _context) {
this.qa = _video;
this.ph = _context;
_video.textTracks.onaddtrack = this.va.bind(this);
onDispose(this.Eh.bind(this));
}
va(event) {
const nativeTrack = event.track;
if (!nativeTrack || findTextTrackElement(this.qa, nativeTrack))
return;
const track = new TextTrack({
id: nativeTrack.id,
kind: nativeTrack.kind,
label: nativeTrack.label,
language: nativeTrack.language,
type: "vtt"
});
track[TEXT_TRACK_NATIVE] = { track: nativeTrack };
track[TEXT_TRACK_READY_STATE] = 2;
track[TEXT_TRACK_NATIVE_HLS] = true;
let lastIndex = 0;
const onCueChange = (event2) => {
if (!nativeTrack.cues)
return;
for (let i = lastIndex; i < nativeTrack.cues.length; i++) {
track.addCue(nativeTrack.cues[i], event2);
lastIndex++;
}
};
onCueChange(event);
nativeTrack.oncuechange = onCueChange;
this.ph.textTracks.add(track, event);
track.setMode(nativeTrack.mode, event);
}
Eh() {
this.qa.textTracks.onaddtrack = null;
for (const track of this.ph.textTracks) {
const nativeTrack = track[TEXT_TRACK_NATIVE]?.track;
if (nativeTrack?.oncuechange)
nativeTrack.oncuechange = null;
}
}
}
function findTextTrackElement(video, track) {
return Array.from(video.children).find((el) => el.track === track);
}
export { NativeHLSTextTracks as N };