当前位置:首页 > React

react实现录屏

2026-01-26 23:37:57React

React 实现录屏功能

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

react实现录屏

获取屏幕共享权限

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

react实现录屏

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 组件中,管理录屏状态(开始、停止)。

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 native 如何

react native 如何

安装 React Native 开发环境 确保系统已安装 Node.js(建议版本 16 或更高)。通过以下命令安装 React Native CLI 工具: npm install -g rea…

react native如何启动

react native如何启动

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

如何评价react native

如何评价react native

React Native 的优势 跨平台开发效率高:基于 JavaScript 和 React 语法,可同时开发 iOS 和 Android 应用,减少重复代码量。性能接近原生:通过原生组件渲染,性能…

react如何取消渲染

react如何取消渲染

取消渲染的方法 在React中,取消渲染通常指的是在某些条件下阻止组件渲染或中断正在进行的渲染过程。以下是几种常见的方法: 条件渲染 通过条件判断决定是否渲染组件或部分内容。可以使用if语句或三元运…

如何生成react代码

如何生成react代码

使用 Create React App 生成项目 安装 Node.js 后,通过命令行工具运行以下命令创建新项目: npx create-react-app my-app cd my-app np…

react moment如何使用

react moment如何使用

安装 react-moment 通过 npm 或 yarn 安装 react-moment: npm install react-moment 或 yarn add react-moment 基本…