UNPKG

vidstack

Version:

Build awesome media experiences on the web.

53 lines (50 loc) 1.65 kB
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 };