HTML5视频字幕需用引入WebVTT文件,首行WEBVTT、时间轴毫秒三位、iOS需设text/vtt类型并JS强制启用。

video 标签里怎么加字幕轨道
HTML5 的 <video></video> 本身不直接写入字幕文本,而是通过 <track></track> 标签引入外部字幕文件(通常是 WebVTT 格式)。广告视频和其他视频一样,走这个标准流程。
关键点是:<track></track> 必须作为 <video></video> 的子元素,且放在所有 <source></source> 之后、 之前;否则浏览器会忽略它。
-
kind="subtitles"是必须的,不能写成"caption"(那是为听障设计的,含音效描述) -
srclang要明确指定语言,比如zh或en,否则多语言切换可能失效 -
label是用户在播放器字幕菜单里看到的名字,建议用可读名称如"中文(简体)" - 字幕文件路径要能被浏览器直接访问(同源或配好 CORS),本地双击 HTML 文件时,
file://协议下多数浏览器会因安全策略拒绝加载<track></track>
WebVTT 字幕文件怎么写才不报错
广告视频字幕对时间精度要求高,常见错误是格式不合法导致整条轨道静默。WebVTT 不是随便换行就能用的纯文本——第一行必须是 WEBVTT(全大写,前后无空格),第二行必须为空行。
每段字幕以序号开头,接着是时间轴(格式: hh:mm:ss.mmm --> hh:mm:ss.mmm),再空一行后写内容。时间轴里的毫秒必须是三位数,00:01:02.5 会失败,得写成 00:01:02.500。
立即学习“前端免费学习笔记(深入)”;
WEBVTT 1 00:00:01.000 --> 00:00:04.200 欢迎收看本品牌广告 2 00:00:04.500 --> 00:00:07.800 现在下单享限时优惠
广告视频自动启用字幕为什么没反应
即使 <track></track> 写对了、VTT 文件也正常,字幕仍不显示,大概率是没设默认开启。浏览器不会自动打开字幕,除非显式声明 default 属性。
注意:default 只能出现在一个 <track></track> 上;多个都加会导致全部失效。它只控制初始状态,不影响后续用户手动开关。
- 不要写
default="true"—— 这是无效的,HTML 布尔属性只需存在即生效 - 如果广告视频嵌在 iframe 里(比如第三方广告平台),父页面无法控制其内部
<video></video>的字幕行为,此时得靠广告主提供支持 - 某些广告 SDK 会劫持
<video></video>元素并替换 DOM,导致你写的<track></track>被移除,需要在 SDK 加载完成后重新注入
移动端 iOS Safari 字幕不显示的特殊处理
iOS Safari 对 <track></track> 的兼容性较弱,尤其当视频设置了 playsinline 或使用了自定义控件时,字幕渲染容易丢失。
实测有效做法:
- 确保 VTT 文件响应头包含
Content-Type: text/vtt,Nginx/Apache 需单独配置,否则 iOS 可能拒载 - 避免在
<video></video>上同时设置autoplay和muted外还加controls—— 某些 iOS 版本下这组合会让字幕菜单不可见 - 用 JavaScript 监听
loadedmetadata事件后,手动调用video.textTracks[0].mode = "showing"强制启用,比纯 HTML 更可靠
广告场景下,字幕不只是辅助功能,更是信息传达的关键一环。时间轴不准、语言标签缺失、或依赖未声明的 MIME 类型,都可能让几秒钟的广告漏掉核心卖点。这些细节不报错,但悄无声息地失效。



















