uniapp中如何使用mediarecorder实现录音功能
在uniapp中使用MediaRecorder实现录音功能时遇到了问题,具体代码如下:
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const mediaRecorder = new MediaRecorder(stream);
mediaRecorder.start();
在H5端可以正常录音,但在安卓和iOS端无法正常使用。请问:
- 在uniapp中应该如何正确使用MediaRecorder?
- 是否需要引入特定插件或进行额外配置?
- 有没有兼容多端的解决方案示例?
        
          2 回复
        
      
      
        在uniapp中,使用plus.audio.getRecorder()获取录音对象,然后调用start()和stop()方法即可实现录音功能。记得在manifest.json中配置录音权限。
在 UniApp 中使用 MediaRecorder 实现录音功能,需通过条件编译调用原生 API(如微信小程序或 H5 的接口)。以下是具体实现方法及示例代码:
1. 微信小程序环境
使用 wx.getRecorderManager() API:
// 创建录音管理器
const recorderManager = wx.getRecorderManager();
// 开始录音
recorderManager.start({
  duration: 60000, // 最长录音时间(ms)
  sampleRate: 44100, // 采样率
  numberOfChannels: 1, // 通道数
  encodeBitRate: 192000, // 编码码率
  format: 'aac' // 音频格式
});
// 监听录音结束事件
recorderManager.onStop((res) => {
  console.log('录音文件路径:', res.tempFilePath);
  // 此处可上传或处理录音文件
});
// 停止录音
recorderManager.stop();
2. H5 环境
使用浏览器原生的 MediaRecorder:
let mediaRecorder;
let audioChunks = [];
// 获取麦克风权限并开始录音
navigator.mediaDevices.getUserMedia({ audio: true })
  .then(stream => {
    mediaRecorder = new MediaRecorder(stream);
    
    mediaRecorder.ondataavailable = (event) => {
      audioChunks.push(event.data);
    };
    
    mediaRecorder.onstop = () => {
      const audioBlob = new Blob(audioChunks, { type: 'audio/wav' });
      const audioUrl = URL.createObjectURL(audioBlob);
      console.log('录音文件 URL:', audioUrl);
      // 此处可进行播放或上传
    };
    
    mediaRecorder.start();
  })
  .catch(err => {
    console.error('获取麦克风权限失败:', err);
  });
// 停止录音
mediaRecorder.stop();
3. 跨平台兼容处理
通过条件编译区分环境:
// #ifdef MP-WEIXIN
const recorderManager = wx.getRecorderManager();
// 微信小程序录音逻辑
// #endif
// #ifdef H5
// H5 环境录音逻辑
// #endif
注意事项:
- 权限申请:H5 需用户授权麦克风;小程序需在 app.json中声明"requiredPrivateInfos": ["getRecorderManager"]。
- 格式支持:不同平台支持的音频格式可能不同(如小程序推荐 AAC)。
- 文件处理:录音文件为临时路径,需及时上传或保存。
以上代码提供了基础实现,实际使用时建议添加错误处理和用户交互提示。
 
        
       
                     
                   
                    

