video标签无反应应先检查src路径和状态码,常见问题包括404、403、CORS、file://协议限制、MIME类型错误;MP4需H.264+AAC编码;多source兜底时mp4放首位;autoplay必须muted且服务端配置正确。
deo 标签没反应?先检查 src 是否加载成功很多情况根本不是格式问题,而是 src 路径出错或资源未返回 200。浏览器控制台 Network 面板里找对应视频请求,看状态码是不是 404、403 或 CORS 错误。
常见踩坑点:
src 是相对路径但当前页面 URL 带 hash(如 page.html#section),部分浏览器会误解析路径file:// 协议),Chrome 等浏览器默认禁用 video 的 load 行为,必须起本地服务(如 python3 -m http.server)text/plain,浏览器直接拒播HTML5 video 支持的不是“文件扩展名”,而是封装格式(container)+ 视频编码(codec)+ 音频编码(codec)三者组合。MP4 容器本身没问题,但若视频用 AV1 编码、音频用 Opus,Safari 和旧版 Edge 就无法播放。
验证和转码建议:
ffprobe video.mp4 查编码:Stream #0:0: Video: h264 (High) 和 Stream #0:1: Audio: aac (LC) 才稳妥ffmpeg -i input.mp4 -c:v libx264 -profile:v high -c:a aac -b:a 128k output.mp4
单一 src 属性不够健壮,必须用多个 source 元素让浏览器自主选择。顺序很重要:把兼容性最广的放前面,浏览器遇到第一个能播的就停。
推荐写法(含 fallback 文字):
说明:
video/mp4:覆盖 Chrome、Firefox、Edge、Safari(iOS/macOS)、Android WebViewvideo/webm(VP9 + Opus):Chrome/Firefox 安卓端更省带宽,但 Safari 完全不认video/ogg(Theora + Vorbis):仅 Firefox 旧版本需要,现在可省略Chrome、Safari、Firefox 都强制要求 autoplay 视频必须 muted,否则即使用户已交互过也会被拦截。这不是 bug,是策略。
正确写法:
注意几个关键属性:
muted:必须显式写,不能靠 JS 后续设置(时机太晚)playsinline:iOS Safari 必加,否则全屏播放且无法自动触发loop:配合 autoplay 实现背景视频效果,否则播完就停黑屏play() 并捕获 Promise 拒绝file:// 协议限制——这两项不解决,后面所有编码优化都白搭。