在 Safari 浏览器上使用录音功能时,会出现以下错误:
这是因为 Safari 浏览器不支持 audio/webm;codecs=opus 格式,而代码中硬编码了这个 MIME 类型。
创建了一个新的工具类来处理浏览器兼容性问题:
getSupportedMimeType(): 自动检测浏览器支持的音频格式createMediaRecorder(): 创建兼容的 MediaRecorder 实例getAudioBlobType(): 获取兼容的音频 Blob 类型getBrowserInfo(): 获取浏览器信息用于调试testAudioFormats(): 测试所有音频格式的支持情况
按优先级顺序检测以下格式:
audio/webm;codecs=opus(Chrome, Firefox)audio/webm(Chrome, Firefox)audio/mp4(Safari, iOS)audio/ogg;codecs=opus(Firefox)audio/wav(通用)audio/aac(Safari, iOS)audio/mpeg(通用)
src/views/simulation/ProjectSetupView.vuesrc/views/simulation/SimulationView.vue
创建了 audio-test.html 测试页面,可以在不同浏览器中测试音频格式支持情况。
import { createMediaRecorder, getAudioBlobType, getBrowserInfo } from '@/utils/audioUtils'
// 创建兼容的 MediaRecorder
const stream = await navigator.mediaDevices.getUserMedia({ audio: true })
const mediaRecorder = createMediaRecorder(stream)
// 创建兼容的音频 Blob
const audioBlob = new Blob(audioChunks, { type: getAudioBlobType() })
// 获取浏览器信息
const browserInfo = getBrowserInfo()
console.log('Browser:', browserInfo.name, browserInfo.version)import { testAudioFormats } from '@/utils/audioUtils'
// 在控制台输出支持的音频格式
testAudioFormats()| 浏览器 | 支持的格式 | 状态 |
|---|---|---|
| Chrome | audio/webm;codecs=opus | ✅ |
| Firefox | audio/webm;codecs=opus, audio/ogg;codecs=opus | ✅ |
| Safari | audio/mp4, audio/aac | ✅ |
| Edge | audio/webm;codecs=opus | ✅ |
| iOS Safari | audio/mp4, audio/aac | ✅ |
在录音开始时,控制台会输出以下信息:
- 浏览器名称和版本
- 是否为 Safari 或 iOS 设备
- 支持的音频格式列表
- 最终选择的音频格式
- Safari 限制: Safari 在某些情况下可能仍然有限制,特别是在 HTTPS 要求方面
- iOS 设备: iOS 设备上的 Safari 有额外的限制,需要用户明确授权
- 音频质量: 不同格式的音频质量可能略有差异
- 文件大小: 不同格式的音频文件大小可能不同
如果仍然遇到问题:
- 检查浏览器控制台的错误信息
- 确认网站运行在 HTTPS 环境下
- 检查麦克风权限是否已授予
- 使用
audio-test.html页面测试音频格式支持情况