当前位置:首页 > React

react实现录音功能

2026-01-26 23:31:49React

使用浏览器 MediaRecorder API 实现录音

React 中实现录音功能可以通过浏览器的 MediaRecorder API 结合 getUserMedia 实现。以下是一个基础实现方案:

安装必要依赖(如需要存储音频):

npm install recordrtc

核心代码示例:

import React, { useState, useRef } from 'react';

const AudioRecorder = () => {
  const [isRecording, setIsRecording] = useState(false);
  const [audioURL, setAudioURL] = useState('');
  const mediaRecorderRef = useRef(null);
  const audioChunksRef = useRef([]);

  const startRecording = async () => {
    try {
      const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
      mediaRecorderRef.current = new MediaRecorder(stream);

      mediaRecorderRef.current.ondataavailable = (event) => {
        audioChunksRef.current.push(event.data);
      };

      mediaRecorderRef.current.onstop = () => {
        const audioBlob = new Blob(audioChunksRef.current);
        const audioUrl = URL.createObjectURL(audioBlob);
        setAudioURL(audioUrl);
        audioChunksRef.current = [];
      };

      mediaRecorderRef.current.start();
      setIsRecording(true);
    } catch (err) {
      console.error('Error accessing microphone:', err);
    }
  };

  const stopRecording = () => {
    mediaRecorderRef.current.stop();
    mediaRecorderRef.current.stream.getTracks().forEach(track => track.stop());
    setIsRecording(false);
  };

  return (
    <div>
      <button onClick={isRecording ? stopRecording : startRecording}>
        {isRecording ? 'Stop Recording' : 'Start Recording'}
      </button>
      {audioURL && (
        <audio controls src={audioURL} />
      )}
    </div>
  );
};

export default AudioRecorder;

使用第三方库简化实现

对于更复杂的需求(如音频处理、格式转换),可以使用以下库:

  1. react-mic
    npm install react-mic

    示例代码:

    
    import { ReactMic } from 'react-mic';

function App() { const [isRecording, setIsRecording] = useState(false); const [blobURL, setBlobURL] = useState('');

const onStop = (recordedBlob) => { setBlobURL(recordedBlob.blobURL); };

return (

setIsRecording(!isRecording)}> {isRecording ? 'Stop' : 'Start'}
); } ```
  1. RecordRTC: 提供更多高级功能如音频格式转换、视频录制等。

处理兼容性问题

不同浏览器的录音实现可能有差异,建议:

  • 检测浏览器支持情况:

    if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {
    alert('Your browser does not support recording!');
    }
  • 添加 polyfill 对于旧版浏览器:

    npm install webrtc-adapter

保存录音文件

将录音保存为可下载文件:

const downloadAudio = () => {
  const a = document.createElement('a');
  a.href = audioURL;
  a.download = 'recording.webm';
  document.body.appendChild(a);
  a.click();
  document.body.removeChild(a);
};

服务器端存储

如需上传到服务器:

react实现录音功能

const uploadAudio = async () => {
  const audioBlob = new Blob(audioChunksRef.current);
  const formData = new FormData();
  formData.append('audio', audioBlob, 'recording.webm');

  try {
    await fetch('/upload-endpoint', {
      method: 'POST',
      body: formData
    });
  } catch (err) {
    console.error('Upload failed:', err);
  }
};

分享给朋友:

相关文章

如何react页面

如何react页面

创建 React 页面 使用 create-react-app 快速初始化项目: npx create-react-app my-app cd my-app npm start 基础页面结构 在 s…

react 如何调试

react 如何调试

调试 React 应用的方法 使用 React Developer Tools 安装 Chrome 或 Firefox 的 React Developer Tools 扩展,可以检查组件树、状态和 p…

如何配置react

如何配置react

配置React项目的步骤 安装Node.js和npm 确保系统已安装Node.js(包含npm)。可通过官网下载并安装最新版本。安装完成后,运行以下命令验证版本: node -v npm -v 创建…

react如何清理

react如何清理

清理 React 项目的方法 清理未使用的依赖项 运行 npm prune 或 yarn install --production 可以移除 node_modules 中未在 package.json…

react如何重启

react如何重启

重启 React 应用的方法 重新加载当前页面 使用 window.location.reload() 强制刷新页面,这会重新加载整个应用并重置所有状态。 window.location…

如何恢复react

如何恢复react

恢复 React 项目的方法 检查并修复依赖项 运行 npm install 或 yarn install 重新安装所有依赖项。如果依赖项损坏或缺失,这将恢复项目所需的库和工具。 恢复删除的文件 如…