浏览器实际支持的编码组合需实测验证,不能仅凭文件后缀或canPlayType()返回"probably"判断;真实兼容性取决于容器、编解码器及参数三者叠加,如Safari不支持MP3中的HE-AAC v2或fltp采样格式。

查清浏览器实际支持哪些编码组合
别信文件后缀,也别只看 canPlayType() 返回 "probably" 就以为能播——它只检查 MIME 类型字符串是否被识别,不验证解码器是否存在。真实兼容性取决于“容器 + 视频/音频编码 + 编码参数”三者叠加,比如 .mp3 文件若用 AAC-LC 以外的编码(如 HE-AAC v2),Safari 就会静音或直接失败。
实操建议:
立即学习“前端免费学习笔记(深入)”;
把任意文章或文档内容转换成精美的全屏翻页 HTML 演示文件(幻灯片风格)。当用户发来一篇文章、文档链接、Markdown 内容、或粘贴的文本,并且希望生成演示用的 HTML 时触发。支持任意内容来源:iWiki 链接、KM 链接、本地文件路径、直接粘贴的文本。生成的 HTML 文件保存到本地工作区,并通过企微直接发送给用户。触发词示例:帮我把这篇文章做成PPT、转成演示文档、生成HTML幻灯片、做个演示、转成可以演示的格式、article to deck、make a slide。
- 用
ffprobe your-audio.mp3查真实流信息,重点看这行:Audio: mp3 (mp3), 44100 Hz, stereo, fltp, 128 kb/s—— 其中fltp(浮点采样格式)在 Safari 中大概率被拒 - 对关键音频,跑一遍
audio.canPlayType('audio/mpeg')、audio.canPlayType('audio/ogg')、audio.canPlayType('audio/wav'),但仅作初筛;真正要确认,得加载一个极短样本(loadedmetadata 或error事件 - 移动端尤其要单独测:iOS Safari 对 32kHz 以上采样率 + float 格式 WAV 几乎全拒,哪怕
canPlayType返回"probably"
检查服务器返回的 Content-Type 是否正确
即使格式本身没问题,如果服务器没配对 MIME 类型,浏览器根本不敢开始解码。常见错误是返回 text/plain、application/octet-stream 或空着 Content-Type 头,此时控制台不会报错,但音频永远黑屏。
实操建议:
立即学习“前端免费学习笔记(深入)”;
- 打开开发者工具 → Network 面板 → 找音频请求 → 看 Response Headers 里的
Content-Type值是否匹配真实格式(如.mp3必须是audio/mpeg,不是audio/mp3) - Apache 用户加这行:
AddType audio/mpeg .mp3;Nginx 用户在types块里补:audio/mpeg mp3; - 本地开发时用
python3 -m http.server 8000启服务,别双击file://打开 HTML——很多 MIME 错误其实在file://下根本不会触发,一上线就崩
避免只写单个 src 导致静默失败
只写 <audio src="a.mp3"></audio> 是最危险的做法。一旦该格式不被当前浏览器支持,play() 不抛错、不提示、不 fallback,用户看到的就是“点了没反应”。这不是 bug,是规范行为。
实操建议:
立即学习“前端免费学习笔记(深入)”;
- 必须用多
<source></source>显式声明 fallback:<source src="a.mp3" type="audio/mpeg"></source>+<source src="a.ogg" type="audio/ogg"></source>+ (可选)<source src="a.wav" type="audio/wav"></source> -
type属性不能省:不写type,浏览器会发起预检请求(OPTIONS),且部分旧版 Chrome 会忽略该source - 把最兼容的格式(通常是
audio/mpeg)放第一个,因为浏览器按顺序试,遇到第一个能播的就停
留意控制台 MEDIA_ERR_SRC_NOT_SUPPORTED(code: 4)
这个错误常被误读为“路径错了”或“网络挂了”,其实它代表浏览器已成功加载文件,但在解码阶段当场判死刑——就是编码不支持。它和 404、ERR_CONNECTION_REFUSED 完全不同层级。
实操建议:
立即学习“前端免费学习笔记(深入)”;
- 看到控制台报
MediaError {code: 4},立刻放弃查路径、查网络,转向查编码和 MIME - 配合 Network 面板确认请求状态码是 200,再用
ffprobe检查音频轨细节 - 如果用了
MediaRecorder录音后直出 MP3,注意:所有主流浏览器都不支持mimeType: 'audio/mp3',isTypeSupported('audio/mp3')永远返回false,硬写会导致录制失败或静默降级


















