SRT and WebVTT subtitles

M3U8 Player With Subtitles: Add SRT or VTT to HLS

An M3U8 player with subtitles lets you play an HLS stream and attach an external .srt or .vtt caption file in the browser. This player converts SRT to WebVTT locally, adds it as a subtitle track, and does not upload the stream or subtitle file.

Last updated: June 20, 2026

智能 CORS 代理

遇到跨域失败时可通过 Cloudflare Worker 代理 manifest、key 和切片。

Video preview

链接健康度体检

解析全部分辨率轨道、统计码率与分片时长,并抽样检测分片死链。死链检测受浏览器跨域限制, 建议先开启 CORS 代理以获得准确结果。

Subtitle formats and HLS support

Subtitle sourceSupported pathWhat to expect
Local .vtt fileDrag the WebVTT file into the player.The browser can attach it directly as a subtitle track.
Local .srt fileDrag the SRT file into the player.The player converts it to WebVTT locally before adding the track.
HLS WebVTT trackPlay the stream normally if the manifest advertises subtitles.Browser and player support depends on the manifest and track metadata.
.ass or .ssa fileConvert it to SRT or VTT before loading.Styled subtitle formats are not attached directly by this browser player.
Burned-in captionsNo extra file is needed.Text is part of the video pixels and cannot be toggled as a track.

How to add subtitles to an M3U8 stream

  1. 1Play the M3U8 streamPaste the HLS URL and press Play so the video is loaded before attaching an external subtitle file.
  2. 2Add a local subtitle fileDrag a .srt or .vtt file onto the video area, or use the subtitle control in the player toolbar.
  3. 3Let SRT convert to WebVTTIf the file is SRT, the browser converts cue timing and text to WebVTT because native HTML tracks require VTT.
  4. 4Check timing and languageStart playback and confirm the captions line up with speech. If timing is off, adjust the subtitle file in an editor and reload it.
  5. 5Use proxy only for stream accessSubtitles are local, but the HLS stream may still need the proxy if CORS or Referer protection blocks playback.

Why SRT needs conversion before browser playback

HTML video tracks use WebVTT, not SubRip SRT. The player reads your local SRT file, converts timestamps and cues into a WebVTT blob in the browser, then attaches that blob to the video element. The conversion is local and does not send the subtitle file to a server.

When external subtitles are better than embedded tracks

External subtitles are useful when the HLS stream has no caption track, the embedded language is wrong, or you are QA-testing translated subtitles before publishing. They also let editors check caption timing against the live HLS playback path instead of a local MP4 export.

What to check when subtitles do not appear

Confirm the file extension is .srt or .vtt, the cue timestamps are valid, and the video has started. If the stream itself is blocked, fix playback first with CORS or Referer settings. Subtitle loading cannot repair a stream that never reaches the player.

Frequently asked questions

Can I add subtitles to an M3U8 stream online?

Yes. Play the M3U8 stream, then add a local .srt or .vtt subtitle file. The subtitle is attached in the browser and is not uploaded.

Does the player support SRT subtitles?

Yes. SRT files are converted to WebVTT locally because browsers display external text tracks through WebVTT.

Are my subtitle files uploaded?

No. The subtitle file is read by your browser, converted if needed, and attached as a local text track. It is not sent to a server.

Can I use ASS or SSA subtitles?

Not directly. Convert ASS or SSA subtitles to SRT or VTT first, then load the converted file into the player.

Why are captions out of sync?

Subtitle timing comes from the subtitle file. If captions are early or late, adjust the cue timestamps in a subtitle editor and reload the corrected file.