File tree Expand file tree Collapse file tree 1 file changed +25
-9
lines changed Expand file tree Collapse file tree 1 file changed +25
-9
lines changed Original file line number Diff line number Diff 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 ( ( ) => {
You can’t perform that action at this time.
0 commit comments