UNPKG

vidstack

Version:

Build awesome media experiences on the web.

53 lines (50 loc) 1.71 kB
import { onDispose } from 'maverick.js'; import { H as TextTrack, Z as TEXT_TRACK_NATIVE, J as TEXT_TRACK_READY_STATE, _ as TEXT_TRACK_NATIVE_HLS } from '../../media-core.js'; class NativeHLSTextTracks { constructor(_video, _context) { this._video = _video; this._context = _context; _video.textTracks.onaddtrack = this._onAddTrack.bind(this); onDispose(this._onDispose.bind(this)); } _onAddTrack(event) { const nativeTrack = event.track; if (!nativeTrack || findTextTrackElement(this._video, 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._context.textTracks.add(track, event); track.setMode(nativeTrack.mode, event); } _onDispose() { this._video.textTracks.onaddtrack = null; for (const track of this._context.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 };