track标签不会自动生效,必须紧贴source后作为video直接子元素,kind、srclang、label三属性缺一不可,webvtt文件首行为webvtt全大写无bom、utf-8编码、时间戳毫秒三位、服务端返回text/vtt mime类型。

track 标签不会自动生效,哪怕写对了标签名,只要结构错一位,浏览器就当它不存在——不报错、不加载、字幕菜单空着。
track 必须紧贴 source 之后且在 video 内部
浏览器只认一种嵌套顺序:video → source(可多个)→ track(可多个)→ /video。任何偏移都会导致静默失效。
- track 不能放在 source 前面
- track 不能写在 video 外部(比如套在 div 里或紧跟在 video 后)
- 多个 track 之间不要插注释、空行或其它标签(部分浏览器会中断解析)
- 正确示例:
<video controls><source src="movie.mp4" type="video/mp4"><track kind="subtitles" srclang="zh" label="中文(简体)" src="zh.vtt" default><track kind="subtitles" srclang="en" label="English" src="en.vtt"></track></track></source></video>
kind、srclang、label 三个属性一个都不能少
这三个不是“建议填写”,而是浏览器识别轨道的硬性字段。缺任意一个,track 就被忽略。
- kind="subtitles":必须是这个值(不是 "subtitle"、"captions" 或留空)
- srclang:必须是合法 BCP 47 语言码,如 "zh"、"en-US"、"ja";"ch"、"chinese"、"cn" 全部无效
- label:用户在字幕菜单里看到的名字,为空时可能显示 "(no label)",无法区分语种
vtt 文件路径和格式必须同时达标
src 指向的 .vtt 文件,得过四关才算真正可用:
- HTTP 返回状态码必须是 200(常见失败是 404,尤其本地开发用 file:// 协议时必挂)
- 服务端必须返回 Content-Type: text/vtt(Nginx/Apache 需显式配置 MIME 类型)
- 文件首行必须严格为 WEBVTT(全大写、无空格、无 BOM)
- 编码必须是 UTF-8 无 BOM(VS Code 右下角选 “Save with Encoding” → UTF-8)
- 时间戳格式必须为 00:00:01.234 --> 00:00:04.567(毫秒三位、箭头前后各一个空格)
default 属性只能设在一个 track 上
default 表示页面加载时默认启用该轨道,但有严格限制:
- 只能有一个 track 带 default,多个会导致全部失效(行为未定义)
- 用户手动切换后,default 就不再起作用
- 它不等于“强制显示”,只是初始状态;若用户关闭字幕,default 不会再触发
真正卡住人的地方,往往不是 JS 控制逻辑,而是 track 标签刚写进 HTML 就已经失效——位置偏了半行、srclang 拼错一个字母、vtt 文件多了一个 BOM,全都没提示,只留下空白的字幕菜单。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











