Why Android captions are not showing
TL;DR — Diagnose captions that work on desktop but fail on Android phones by checking WebVTT files, delivery headers, mobile browser controls, and HTML5 track setup.
Related tool
WebVTT Validator Online
Android caption issues often show up after a page works on desktop Chrome. The desktop test passes, but the same HTML5 video has no captions on an Android phone. In most cases, the phone is exposing a basic delivery problem: an invalid WebVTT file, an unreachable track URL, missing HTTPS, wrong response headers, or a caption track that is not selected in the mobile controls.
Quick answer
Start with the WebVTT Validator. Android Chrome expects a real WebVTT file with a WEBVTT header, dot-based timestamps, valid cue timing, and blank lines between cues.
Then open the deployed .vtt URL directly on the Android phone. If the phone sees a 404 page, login page, HTML response, expired signed URL, or generic download instead of caption text, the video player will not show captions reliably.
If your source captions are SRT, convert them with the SRT to VTT Converter before attaching them to an HTML5 video track.
Validate the WebVTT file
Android Chrome does not read SRT syntax from a native HTML5 <track> element. A browser-ready VTT file should start like this:
WEBVTT
00:00:01.000 --> 00:00:03.500
First caption line.
00:00:04.000 --> 00:00:06.200
Second caption line.
Check for:
WEBVTTon the first line- dot-based timestamps instead of SRT commas
- blank lines between cues
- cue start times before cue end times
- UTF-8 text that renders correctly on mobile
If the file came from SRT, convert it instead of renaming it. For the full workflow, see how to convert SRT to VTT for HTML5 video.
Check the track URL on the phone
Open the .vtt URL directly in Android Chrome, not only on your laptop. The mobile request should return the caption text with:
HTTP/2 200
Content-Type: text/vtt
Common mobile-only failures include:
- the VTT URL depends on cookies from the desktop browser
- a signed caption URL expires before mobile playback
- the CDN blocks the phone’s request or redirects to HTML
- the page is HTTPS but the caption URL is HTTP
- the file is served as
text/plainorapplication/octet-stream - CORS blocks captions hosted on another domain
For delivery fixes, use how to fix VTT MIME type for HTML5 video and how to fix CORS errors for VTT subtitles.
Check the HTML track setup
Use a normal HTML5 video track with explicit metadata:
<video controls crossorigin="anonymous">
<source src="/videos/demo.mp4" type="video/mp4" />
<track
kind="captions"
src="/captions/demo.en.vtt"
srclang="en"
label="English"
default
/>
</video>
The default attribute helps Android Chrome select the expected track when the video loads. Without it, the viewer may need to enable captions from the mobile video controls.
If captions are cross-origin, keep crossorigin="anonymous" on the video element and send a matching Access-Control-Allow-Origin header from the caption host.
Check Android playback controls
Mobile browsers can hide caption controls behind a small menu or native player overlay. Test with the same Android device your viewers use and check:
- whether the captions menu appears in the video controls
- whether the expected language label is visible
- whether fullscreen mode changes the available controls
- whether captions become visible after manually selecting the track
- whether custom CSS is covering or recoloring caption text
If the VTT request succeeds and the track appears in the menu, the issue is usually track selection or styling rather than file delivery.
Common Android caption mistakes
Renaming SRT to VTT
Android Chrome expects WebVTT structure, not just a .vtt extension.
Fix: Convert with the SRT to VTT Converter and validate the output.
Testing only on desktop Chrome
Desktop Chrome can hide mobile-only problems with cookies, signed URLs, redirects, or fullscreen controls.
Fix: Open the production page and the direct VTT URL on an Android phone before shipping.
Serving captions over HTTP
If the video page is HTTPS and the caption file is HTTP, mobile browsers may block the track.
Fix: Serve the video page, video file, and VTT file over HTTPS.
Track loads but captions are off
The file can load correctly while no caption track is selected.
Fix: Add default for the primary track or manually enable captions from the Android video controls.
Troubleshooting checklist
- Validate the VTT file with the WebVTT Validator.
- Convert SRT or ASS captions to WebVTT if needed.
- Open the
.vttURL directly on the Android phone. - Confirm the request returns
200andContent-Type: text/vtt. - Use HTTPS for the page, video file, and caption file.
- Add CORS headers if captions are cross-origin.
- Use explicit
kind,src,srclang,label, anddefaultattributes. - Test mobile fullscreen and manually select the caption track.
Related guides
- Why subtitles do not show in HTML5 video
- Why VTT captions are not loading
- Why Chrome captions are not showing
- Why Safari captions are not showing
Related tools
Use the WebVTT Validator Online
Validate WebVTT captions online and check missing WEBVTT headers, timestamp syntax, cue order, and HTML5 caption issues. No signup, no upload, and everything runs locally in the browser.
Open VTT validator