html5的track标签怎么加字幕_视频字幕配置步骤【说明】

必须位于内且在所有之后,src需同源或配置CORS,VTT文件须为text/vtt类型、UTF-8无BOM编码、严格遵循WEBVTT语法。

track 标签必须放在 video 内部且紧挨 source 之后

浏览器只在 元素内部识别 ,且顺序很重要:必须出现在所有 标签之后、 之前。如果放错位置(比如在 前面或 video 外),字幕不会加载,控制台也不会报错,只是静默失效。

常见错误写法:

这种顺序下,Chrome 和 Firefox 都会忽略该 track。

正确顺序示例:

src 指向的 .vtt 文件必须同源或配 CORS

src 是一个独立 HTTP 请求,受跨域限制。如果视频在 https://example.com,而字幕文件放在 https://cdn.example.com/zh.vtt,浏览器会因缺少 CORS 响应头拒绝加载,控制台显示类似 Failed to load resource: No 'Access-Control-Allow-Origin' header 的错误。

  • 本地开发时直接用 file:// 协议打开 HTML,所有 .vtt 加载都会失败(浏览器禁用 file 协议下的跨域请求,即使同目录)——必须起本地服务(如 python3 -m http.server
  • VTT 文件需返回 Content-Type: text/vtt,Nginx/Apache 要显式配置 MIME 类型,否则部分浏览器(如 Safari)可能解析失败
  • 文件路径区分大小写,zh.vttZH.VTT 在 Linux 服务器上是两个不同资源

kind 属性不能写成 "subtitle" 或漏写

kind 是必填属性,合法值为 "subtitles""captions""descriptions""chapters""metadata"。注意:

  • 写成 kind="subtitle"(少 s)是无效值,浏览器当 kind="metadata" 处理,字幕不会出现在字幕菜单里
  • kind="subtitles" 表示翻译性字幕(含对话+音效说明),适合外语观众;kind="captions" 表示面向听障用户的完整音轨描述(含说话人、音乐、环境声),播放器 UI 通常分开显示这两类
  • 如果想默认启用,加 default 属性即可,但同一 kind 下只能有一个 default;多个 default 时,仅第一个生效

WebVTT 文件格式稍有偏差就完全不显示

.vtt 不是自由文本,必须以 WEBVTT 开头(顶格、无空格、无 BOM),且时间戳格式严格:00:00:01.234 --> 00:00:04.567。常见失效原因:

  • 用记事本保存为 UTF-8 + BOM(Windows 默认),会导致首行实际是 WEBVTT,浏览器解析失败
  • 时间戳里用了中文冒号(:)或全角空格,或小数点后位数不是 3 位(如 .12.1234
  • 文本行里用了 HTML 标签但没转义(如 可以,但 不支持),或用了 CSS 类名(class="highlight")——WebVTT 不支持自定义 class

    最小可用 VTT 示例:

    WEBVTT
    
    00:00:01.000 --> 00:00:03.000
    你好,欢迎观看。
    
    00:00:04.000 --> 00:00:06.000
    这是第一句字幕。

    字幕功能看着简单,但 track 的加载时机、MIME 类型、VTT 语法容错率都极低,任意一环出问题都是“无声无息不显示”。调试时优先检查 Network 面板里 .vtt 请求是否 200、响应头是否有 Content-Type: text/vtt、响应体开头是否真为 WEBVTT