HTML5多媒体API兼容需按能力检测而非UA判断,优先降级与渐进增强:用typeof和in检测API存在性,MediaRecorder用isTypeSupported预判格式,AudioContext回退webkit前缀,旧版Safari/IE采用Web Audio+Worker录制或引导客户端,getUserMedia须HTTPS+手势触发并统一错误处理。

HTML5 多媒体 API(如 MediaRecorder、getUserMedia、AudioContext、VideoTrack 等)在现代浏览器中已广泛支持,但旧版浏览器(尤其是 IE、Safari 11 及更早、Android Webview 旧版本)仍存在缺失或行为不一致的问题。补全的关键不是“模拟全部功能”,而是按需降级、特征检测 + 渐进增强,并借助轻量级 polyfill 或封装层弥合差异。
按能力检测而非 UA 判断
UA 字符串不可靠,且新版 Safari/Chrome 可能启用实验性 API 但未默认开启。应使用 typeof、'mediaDevices' in navigator、MediaRecorder && 'state' in MediaRecorder.prototype 等方式动态判断:
-
navigator.mediaDevices?.getUserMedia存在且可调用才启用摄像头/麦克风 -
MediaRecorder?.isTypeSupported('audio/webm;codecs=opus')用于预判录制格式兼容性 - 对
AudioContext使用window.AudioContext || window.webkitAudioContext并检查.createMediaStreamSource是否可用
MediaRecorder 兼容性兜底策略
MediaRecorder 在 Safari 14.1+ 和 IE 中完全不可用,Android 4.4–6.x Webview 支持有限。可行方案包括:
- 降级为
Web Audio API + Worker录制:用MediaStreamAudioSourceNode拿到音频流,通过ScriptProcessorNode(已废弃,但旧版需兼容)或AudioWorklet(新标准)采集 PCM 数据,再编码为 WAV/MP3(需前端 JS 编码库如libmp3lame.js) - Safari 11–13 可尝试
canvas.captureStream().getVideoTracks()+MediaRecorder组合,但仅限视频;音频需额外AudioContext合成 - IE11 完全放弃原生录制,引导用户下载桌面客户端或使用 WebRTC 回退到 Flash(已淘汰,仅作历史参考)
getUserMedia 权限与错误处理强化
不同浏览器对权限拒绝、设备不可用、HTTPS 限制的报错信息差异大(如 Chrome 返回 NotAllowedError,Safari 可能静默失败)。建议统一封装:
- 始终在 HTTPS 或 localhost 下运行,避免 Safari/Edge 拒绝调用
- 捕获
PermissionDeniedError、NotFoundError、SecurityError并映射为用户友好的提示(如“请允许摄像头访问”、“未检测到麦克风”) - 对 iOS Safari,需监听
deviceorientation或用户手势后首次调用getUserMedia,否则被拦截
音视频轨道控制的跨浏览器写法
MediaStreamTrack 的 enabled、contentHint、applyConstraints 在 Safari 和旧 Android 上支持不全:
- 切换静音/关闭视频时,优先操作
track.enabled = false;若不生效(如 Safari 12),回退到video.srcObject = null再重新赋值 -
applyConstraints调用前先检查track.getCapabilities()是否存在,否则跳过或只设基础约束(如{ width: { ideal: 1280 } }) - iOS Safari 不支持
contentHint = 'detail',但可设echoCancellation: true(需在getUserMedia选项中声明)
不复杂但容易忽略:所有多媒体操作必须由用户手势触发(如 click/tap),且不能延迟到 Promise.then 中执行;Safari 对自动播放限制严格,video.play() 需配合 muted 属性或用户交互上下文。补全不是堆 polyfill,而是理解各引擎边界,用最小适配换取最大可用性。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











