当前位置:首页 > 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('');

react实现录音功能

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

return (

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

处理兼容性问题

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

react实现录音功能

  • 检测浏览器支持情况:

    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);
};

服务器端存储

如需上传到服务器:

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实现vue

react实现vue

React 实现 Vue 功能 React 和 Vue 是两种不同的前端框架,但可以通过一些方法在 React 中实现 Vue 的特性。以下是几种常见 Vue 功能在 React 中的实现方式: 双…

react native如何启动

react native如何启动

如何启动 React Native 项目 安装 Node.js 和 npm 确保已安装 Node.js(建议版本 16 或更高)和 npm(Node.js 自带)。可通过以下命令检查版本: node…

如何降低react版本

如何降低react版本

降低 React 项目版本的步骤 检查当前 React 版本 运行以下命令查看项目中安装的 React 当前版本: npm list react 或 yarn list react 修改…

react如何更新

react如何更新

更新 React 版本的方法 检查当前 React 版本 运行以下命令查看项目中安装的 React 版本: npm list react 更新 React 及相关依赖 通过 npm 或 yarn…

react如何查

react如何查

React 查询方法 React 提供了多种查询 DOM 元素的方式,以下是几种常见的方法: 使用 ref 通过 useRef 钩子可以获取 DOM 节点的引用,适用于直接操作 DOM 的场景。…

react如何迭代

react如何迭代

在 React 中迭代数组或对象 React 提供了多种方式来处理数组或对象的迭代,以下是常见的方法: 使用 map 方法迭代数组 map 是 JavaScript 数组的内置方法,常用于在 Re…