当前位置:首页 > 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如何查

react如何查

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

react如何动画

react如何动画

React 动画实现方法 React 中实现动画可以通过多种方式,包括原生 CSS、第三方库或 React 内置的动画解决方案。以下是几种常见方法: 使用 CSS 动画和过渡 通过 CSS 的 tr…

如何开发react

如何开发react

开发React应用的基本步骤 安装Node.js和npm 确保系统中已安装Node.js(包含npm)。可通过官网下载安装包,安装后验证版本: node -v npm -v 创建React项目…

理解如何react

理解如何react

理解React的核心概念 React是一个用于构建用户界面的JavaScript库,专注于通过组件化开发提高代码的可维护性和复用性。其核心思想包括虚拟DOM(Virtual DOM)和单向数据流,能够…

react如何发音

react如何发音

React的发音 React的正确发音为 /riˈækt/,类似于“ree-akt”。以下是详细说明: 发音分解 第一个音节“Ree”发音类似英文单词“see”中的“ee”音。…

react 如何debug

react 如何debug

React 调试方法 使用 React Developer Tools React Developer Tools 是浏览器扩展,支持 Chrome 和 Firefox。安装后,可以在开发者工具中查看…