Skip to content

Commit e53e810

Browse files
authored
make sure native captions dont show (#1075)
1 parent 50b260d commit e53e810

File tree

2 files changed

+58
-8
lines changed

2 files changed

+58
-8
lines changed

apps/web/app/s/[videoId]/_components/CapVideoPlayer.tsx

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,18 @@ export function CapVideoPlayer({
297297
}
298298
};
299299

300+
// Ensure all caption tracks remain hidden
301+
const ensureTracksHidden = (): void => {
302+
const tracks = Array.from(video.textTracks);
303+
for (const track of tracks) {
304+
if (track.kind === "captions" || track.kind === "subtitles") {
305+
if (track.mode !== "hidden") {
306+
track.mode = "hidden";
307+
}
308+
}
309+
}
310+
};
311+
300312
const handleLoadedMetadataWithTracks = () => {
301313
setVideoLoaded(true);
302314
if (!hasPlayedOnce) {
@@ -305,6 +317,11 @@ export function CapVideoPlayer({
305317
setupTracks();
306318
};
307319

320+
// Monitor for track changes and ensure they stay hidden
321+
const handleTrackChange = () => {
322+
ensureTracksHidden();
323+
};
324+
308325
video.addEventListener("loadeddata", handleLoadedData);
309326
video.addEventListener("canplay", handleCanPlay);
310327
video.addEventListener("loadedmetadata", handleLoadedMetadataWithTracks);
@@ -313,6 +330,11 @@ export function CapVideoPlayer({
313330
video.addEventListener("error", handleError as EventListener);
314331
video.addEventListener("loadedmetadata", handleLoadedMetadataWithTracks);
315332

333+
// Add event listeners to monitor track changes
334+
video.textTracks.addEventListener("change", handleTrackChange);
335+
video.textTracks.addEventListener("addtrack", handleTrackChange);
336+
video.textTracks.addEventListener("removetrack", handleTrackChange);
337+
316338
if (video.readyState === 4) {
317339
handleLoadedData();
318340
}
@@ -341,6 +363,9 @@ export function CapVideoPlayer({
341363
"loadedmetadata",
342364
handleLoadedMetadataWithTracks,
343365
);
366+
video.textTracks.removeEventListener("change", handleTrackChange);
367+
video.textTracks.removeEventListener("addtrack", handleTrackChange);
368+
video.textTracks.removeEventListener("removetrack", handleTrackChange);
344369
if (retryTimeout.current) clearTimeout(retryTimeout.current);
345370
};
346371
}
@@ -355,6 +380,9 @@ export function CapVideoPlayer({
355380
"loadedmetadata",
356381
handleLoadedMetadataWithTracks,
357382
);
383+
video.textTracks.removeEventListener("change", handleTrackChange);
384+
video.textTracks.removeEventListener("addtrack", handleTrackChange);
385+
video.textTracks.removeEventListener("removetrack", handleTrackChange);
358386
if (retryTimeout.current) {
359387
clearTimeout(retryTimeout.current);
360388
}
@@ -462,7 +490,6 @@ export function CapVideoPlayer({
462490
kind="captions"
463491
srcLang="en"
464492
src={captionsSrc}
465-
default
466493
/>
467494
</MediaPlayerVideo>
468495
)}

apps/web/app/s/[videoId]/_components/HLSVideoPlayer.tsx

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -233,18 +233,47 @@ export function HLSVideoPlayer({
233233
}
234234
};
235235

236+
// Ensure all caption tracks remain hidden
237+
const ensureTracksHidden = (): void => {
238+
const tracks = video.textTracks;
239+
for (let i = 0; i < tracks.length; i++) {
240+
const track = tracks[i];
241+
if (
242+
track &&
243+
(track.kind === "captions" || track.kind === "subtitles")
244+
) {
245+
if (track.mode !== "hidden") {
246+
track.mode = "hidden";
247+
}
248+
}
249+
}
250+
};
251+
236252
const handleLoadedMetadata = (): void => {
237253
setupTracks();
238254
};
239255

256+
// Monitor for track changes and ensure they stay hidden
257+
const handleTrackChange = () => {
258+
ensureTracksHidden();
259+
};
260+
240261
video.addEventListener("loadedmetadata", handleLoadedMetadata);
241262

263+
// Add event listeners to monitor track changes
264+
video.textTracks.addEventListener("change", handleTrackChange);
265+
video.textTracks.addEventListener("addtrack", handleTrackChange);
266+
video.textTracks.addEventListener("removetrack", handleTrackChange);
267+
242268
if (video.readyState >= 1) {
243269
setupTracks();
244270
}
245271

246272
return () => {
247273
video.removeEventListener("loadedmetadata", handleLoadedMetadata);
274+
video.textTracks.removeEventListener("change", handleTrackChange);
275+
video.textTracks.removeEventListener("addtrack", handleTrackChange);
276+
video.textTracks.removeEventListener("removetrack", handleTrackChange);
248277
if (captionTrack) {
249278
captionTrack.removeEventListener("cuechange", handleCueChange);
250279
}
@@ -335,13 +364,7 @@ export function HLSVideoPlayer({
335364
autoPlay={autoplay}
336365
>
337366
<track default kind="chapters" src={chaptersSrc} />
338-
<track
339-
label="English"
340-
kind="captions"
341-
srcLang="en"
342-
src={captionsSrc}
343-
default
344-
/>
367+
<track label="English" kind="captions" srcLang="en" src={captionsSrc} />
345368
</MediaPlayerVideo>
346369
{currentCue && toggleCaptions && (
347370
<div

0 commit comments

Comments
 (0)