HTML5视频中track字幕失效的主因是未满足三个硬性条件:kind必须为”subtitles”、srclang需明确指定语言如”zh”、src须同源或服务端配置CORS;同时VTT文件须以WEBVTT开头、时间戳用英文句点、块间空行≥2、无UTF-8 BOM。
HTML5 视频标签改格式后 track 标签失效的典型表现
直接换用 标签但没同步处理字幕资源,浏览器就压根不加载字幕——连“字幕”按钮都不出现。常见于把 Flash 播放器迁移到 HTML5 时,只改了 ,却漏掉 或其属性配置。
track 标签必须满足的三个硬性条件
哪怕路径、格式都对,只要缺一条件,字幕照样不显示:
-
kind="subtitles"(不能写成kind="caption",除非你真在做无障碍字幕) -
srclang必须明确指定语言,比如srclang="zh";空值或srclang="auto"会被忽略 -
src必须是同源 URL(协议+域名+端口一致),跨域需服务端配Access-Control-Allow-Origin,否则控制台报Failed to load resource: net::ERR_FAILED
VTT 文件本身常被忽略的格式陷阱
不是所有 .vtt 都能播。浏览器对 WebVTT 解析极严格,以下任一问题都会导致静默失败(无报错,但字幕空白):
- 文件开头缺
WEBVTT纯文本声明(必须顶格、无 BOM、无空行) - 时间戳格式错误,比如写成
00:01:02,500 --> 00:01:05,000(逗号应为英文句点:00:01:02.500) - 字幕块之间空行不足两行(规范要求至少两个换行符分隔)
- 含 UTF-8 BOM:用 VS Code 打开 → 右下角点编码 → 选 “Save with Encoding” → “UTF-8”(非 “UTF-8 with BOM”)
调试时优先检查的三处控制台线索
打开开发者工具,切到 Console 和 Network 面板,重点盯: