HTML5视频黑屏或报错主因是资源链路问题而非浏览器不支持,需重点排查src路径、MIME类型配置、编码兼容性(推荐H.264+AAC)、跨域限制,并用canPlayType()检测格式支持。
HTML5 视频不需要“安装播放器”——浏览器原生支持 标签,只要视频格式兼容、MIME 类型正确、服务器配置得当,就能直接播放。
常见原因不是浏览器不支持,而是资源链路断了。重点排查以下几点:
src 路径错误(如相对路径写成 ./video.mp4 但实际在 /assets/video.mp4)video/mp4,否则 Chrome/Firefox 会拒绝加载 的 src 指向其他域名,且目标服务器没返回 Access-Control-Allow-Origin,会静默失败别查浏览器版本列表,直接用 JavaScript 调用 canPlayType() 方法判断:
const video = document.createElement('video');
console.log(video.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"')); // "probably"
console.log(video.canPlayType('video/webm; codecs="vp9, opus"')); // "maybe" 或 ""
注意:canPlayType() 返回 "probably" 表示高概率支持,"maybe" 表示不确定,空字符串表示不支持。不要依赖返回值做唯一判断,建议 fallback 到 MP4 + H.264。
这是最容易被忽略却导致 404 或静默失败的关键点。不同环境配置方式不同:
.htaccess 或虚拟主机配置中添加 AddType video/mp4 .mp4、AddType video/webm .webm、AddType video/ogg .ogv
http 或 server 块中确保包含 include mime.types;,并确认 mime.types 文件里有对应行(默认通常已有)res.sendFile() 会自动根据扩展名推断 MIME;但若用 res.send() 流式传输,必须手动设 res.set('Content-Type', 'video/mp4')
serve(npx serve)或 Python 的 python3 -m http.server 更可靠不要一上来就堆属性。先保证能播,再加控制:
关键细节:
.mp4(H.264+AAC),覆盖 99% 主流浏览器 顺序重要:浏览器按顺序尝试,遇到第一个能播的就停;把 MP4 放前面更稳妥type 属性—
—虽然浏览器可探测,但加上后能跳过预加载失败的资源muted:Chrome/Firefox 禁止有声自动播放,否则 autoplay 会被忽略真正卡住人的往往不是语法,而是服务器返回的 Content-Type 错了,或者 FFmpeg 转码时用了浏览器不认识的 profile(比如 H.264 High Profile)。先用 curl -I 视频URL 看响应头,再用 ffprobe 视频文件 查编码参数,比反复改 HTML 有效得多。