Skip to content

Commit f7601a9

Browse files
committed
Add more listeners for m3u8 hls files
1 parent 7068ffe commit f7601a9

File tree

1 file changed

+25
-9
lines changed

1 file changed

+25
-9
lines changed

dotcom-rendering/src/lib/useSubtitles.ts

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,35 @@ export const useSubtitles = ({
2626
useEffect(() => {
2727
if (!video) return;
2828

29-
const textTracks = video.textTracks;
29+
const tracks = video.textTracks;
3030

31-
const setTrackFromList = () => {
32-
const track = textTracks[0];
33-
// We currently only support one text track per video, so we are ok to access [0] here. If we add additional languages, this will need updating.
34-
if (!track) return;
31+
const pickTrack = () => {
32+
const t = tracks[0];
33+
if (!t) return;
3534

36-
setActiveTrack(track);
35+
// Trigger cue fetching immediately (don’t wait for play state)
36+
if (t.mode !== 'hidden' && t.mode !== 'showing') {
37+
t.mode = 'hidden';
38+
}
39+
40+
setActiveTrack(t);
3741
};
3842

39-
//Get Text track as soon as the video element is available.
40-
setTrackFromList();
41-
// TODO:: are there changes we need to listen for that might change the text track?
43+
// 1) pick immediately if already present
44+
pickTrack();
45+
46+
// 2) react when HLS adds tracks later (common on mobile)
47+
const onAdd = () => pickTrack();
48+
tracks.addEventListener('addtrack', onAdd);
49+
50+
// 3) also after metadata (some browsers populate then)
51+
const onMeta = () => pickTrack();
52+
video.addEventListener('loadedmetadata', onMeta);
53+
54+
return () => {
55+
tracks.removeEventListener('addtrack', onAdd);
56+
video.removeEventListener('loadedmetadata', onMeta);
57+
};
4258
}, [video]);
4359

4460
useEffect(() => {

0 commit comments

Comments
 (0)