Safariは大丈夫だけれどもChromeやFirefoxはビデオの字幕ファイル(vtt)がCross-origin resource sharingに対応していないと読み込まれないようです。
以下はS3に配置したビデオと字幕ファイルをCloudFront経由で配信する際の設定項目のメモ。
S3側の設定
バケット→Permissions→Cross-origin resource sharing (CORS)
以下はどのドメインからでもリクエストできる設定。
[ { "AllowedHeaders": [ "*" ], "AllowedMethods": [ "GET" ], "AllowedOrigins": [ "*" ], "ExposeHeaders": [], "MaxAgeSeconds": 3000 } ]
CloudFrontの設定
Origins→Behabiors→Cache key and origin requests→Legacy cache settings→Add header→Select headers→Origin
videoタグ
S3/CloudFrontの設定だけでなく、videoタグにはcrossorigin=”anonymous” が必要。
<video crossorigin="anonymous" preload="auto" controls="controls" width="640" height="360"> <source src="https://videos.samuraism.com/ide-techniques/java17-nosubtitles.mp4" type="video/mp4" /> <track kind="subtitles" src="https://videos.samuraism.com/ide-techniques/java17.vtt" srclang="ja" label="日本語" default="" /> </video>
動作確認
上記の設定で、Safari、Firefox、Chrome、WindowsのEdgeで字幕を表示出来るのを確認しました。