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

react如何保养

保持组件简洁 将大型组件拆分为更小、更专注的组件,每个组件只负责单一功能。避免在单个组件中处理过多逻辑或状态,这有助于提高可维护性和可测试性。 合理使用状态管理 根据应用复杂度选择状态管理方案。简单…

react如何收录

react如何收录

React 收录方法 React 的收录主要涉及搜索引擎优化(SEO)和预渲染技术。由于 React 是单页应用(SPA),默认情况下内容由 JavaScript 动态生成,可能导致搜索引擎爬虫难以收…

react如何验证

react如何验证

表单验证方法 在React中验证表单数据通常使用以下几种方式: 内置HTML5验证 利用HTML5原生表单验证属性如required、pattern等,结合form.noValidate属性禁用浏览…

如何同步react

如何同步react

同步React组件状态的方法 使用useState和useEffect钩子组合可以同步React组件的状态。useState用于声明状态变量,useEffect用于监听状态变化并执行副作用。 imp…

react如何发音

react如何发音

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

react native如何

react native如何

React Native 基础知识 React Native 是一个由 Facebook 开发的框架,用于使用 JavaScript 和 React 构建跨平台移动应用。它允许开发者编写一次代码,同时…