当前位置:首页 > React

react实现录屏

2026-01-26 23:37:57React

React 实现录屏功能

录屏功能可以通过浏览器提供的 MediaDevices API 和 MediaRecorder API 实现。以下是具体实现方法:

获取屏幕共享权限

使用 navigator.mediaDevices.getDisplayMedia 获取屏幕共享的媒体流。需要用户授权才能访问屏幕内容。

const startScreenCapture = async () => {
  try {
    const stream = await navigator.mediaDevices.getDisplayMedia({
      video: {
        mediaSource: 'screen',
      },
      audio: true, // 可选,是否录制音频
    });
    return stream;
  } catch (error) {
    console.error('Error accessing screen:', error);
  }
};

创建 MediaRecorder 实例

获取媒体流后,使用 MediaRecorder 录制视频。需要指定 MIME 类型(如 video/webm)。

const startRecording = (stream) => {
  const mediaRecorder = new MediaRecorder(stream, {
    mimeType: 'video/webm',
  });

  const recordedChunks = [];
  mediaRecorder.ondataavailable = (event) => {
    if (event.data.size > 0) {
      recordedChunks.push(event.data);
    }
  };

  mediaRecorder.onstop = () => {
    const blob = new Blob(recordedChunks, { type: 'video/webm' });
    const url = URL.createObjectURL(blob);
    // 提供下载或预览
    const a = document.createElement('a');
    a.href = url;
    a.download = 'recording.webm';
    a.click();
  };

  mediaRecorder.start();
  return mediaRecorder;
};

集成到 React 组件

将逻辑封装到 React 组件中,管理录屏状态(开始、停止)。

react实现录屏

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

const ScreenRecorder = () => {
  const [isRecording, setIsRecording] = useState(false);
  const mediaRecorderRef = useRef(null);
  const streamRef = useRef(null);

  const handleStartRecording = async () => {
    const stream = await startScreenCapture();
    if (stream) {
      streamRef.current = stream;
      mediaRecorderRef.current = startRecording(stream);
      setIsRecording(true);
    }
  };

  const handleStopRecording = () => {
    if (mediaRecorderRef.current) {
      mediaRecorderRef.current.stop();
      streamRef.current.getTracks().forEach(track => track.stop());
      setIsRecording(false);
    }
  };

  return (
    <div>
      <button onClick={handleStartRecording} disabled={isRecording}>
        开始录屏
      </button>
      <button onClick={handleStopRecording} disabled={!isRecording}>
        停止录屏
      </button>
    </div>
  );
};

export default ScreenRecorder;

注意事项

  1. 浏览器兼容性getDisplayMediaMediaRecorder 在 Chrome、Edge 和 Firefox 中支持较好,但 Safari 支持有限。
  2. MIME 类型:根据浏览器支持情况选择 video/webmvideo/mp4
  3. 音频录制:如需录制系统音频,需浏览器支持 audio 选项(部分浏览器需扩展程序)。
  4. 权限提示:用户需明确授权才能开始录屏。

扩展功能

  1. 录制画中画:通过 getUserMedia 同时录制摄像头视频,叠加到屏幕录制中。
  2. 实时预览:将 stream 绑定到 <video> 元素实现实时预览。
  3. 分段录制:通过 mediaRecorder.requestData() 手动分片。

以上方法提供了基础的 React 录屏实现,可根据需求进一步扩展功能。

标签: react
分享给朋友:

相关文章

react中monent如何获取日期

react中monent如何获取日期

使用 Moment.js 获取当前日期 在 React 中通过 Moment.js 获取当前日期,可以直接调用 moment() 函数。它会返回包含当前日期和时间的 Moment 对象。 impor…

react如何运行

react如何运行

运行React项目的步骤 安装Node.js 确保系统已安装Node.js(建议版本12以上),可从官网下载并安装。Node.js自带npm包管理器,用于后续依赖安装。 创建React项目 使用官方…

如何用react

如何用react

使用React的基本步骤 安装Node.js和npm 确保系统已安装Node.js和npm。Node.js自带npm,可从官网下载安装包。安装完成后,通过命令行验证版本: node -v npm -…

typescript react 如何

typescript react 如何

TypeScript 与 React 结合使用的方法 在 React 项目中使用 TypeScript 可以提升代码的可维护性和类型安全性。以下是一些关键步骤和最佳实践: 安装 TypeScript…

react项目如何调试

react项目如何调试

使用浏览器开发者工具 React项目调试最直接的方法是使用浏览器内置的开发者工具(Chrome DevTools/Firefox Developer Tools)。打开开发者工具后,切换到“Sourc…

react如何减少伤害

react如何减少伤害

减少 React 应用性能伤害的方法 使用 React.memo 或 PureComponent 对于函数组件,使用 React.memo 进行浅比较,避免不必要的重新渲染。类组件可以使用 PureC…