当前位置:首页 > React

react实现录制视频上传

2026-01-27 13:52:56React

实现视频录制与上传的基本流程

使用React实现视频录制并上传需要结合浏览器提供的媒体API和HTTP上传功能。以下是关键步骤:

获取用户摄像头权限

使用navigator.mediaDevices.getUserMedia获取摄像头访问权限:

react实现录制视频上传

const constraints = { video: true, audio: true };
const stream = await navigator.mediaDevices.getUserMedia(constraints);

创建视频录制组件

使用MediaRecorder API进行录制:

react实现录制视频上传

const mediaRecorder = new MediaRecorder(stream);
const chunks = [];

mediaRecorder.ondataavailable = (e) => {
  if (e.data.size > 0) chunks.push(e.data);
};

mediaRecorder.onstop = () => {
  const blob = new Blob(chunks, { type: 'video/webm' });
  setRecordedVideo(URL.createObjectURL(blob));
};

控制录制过程

添加开始/停止录制控制:

const startRecording = () => {
  mediaRecorder.start();
  setIsRecording(true);
};

const stopRecording = () => {
  mediaRecorder.stop();
  setIsRecording(false);
};

上传视频文件

使用FormDatafetch上传视频:

const uploadVideo = async () => {
  const formData = new FormData();
  formData.append('video', blob, 'recording.webm');

  try {
    const response = await fetch('/api/upload', {
      method: 'POST',
      body: formData
    });
    // 处理响应
  } catch (error) {
    // 错误处理
  }
};

完整组件示例

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

function VideoRecorder() {
  const [isRecording, setIsRecording] = useState(false);
  const [recordedVideo, setRecordedVideo] = useState(null);
  const videoRef = useRef();
  const mediaRecorderRef = useRef();
  const streamRef = useRef();
  const chunksRef = useRef([]);

  const startRecording = async () => {
    try {
      const stream = await navigator.mediaDevices.getUserMedia({
        video: true,
        audio: true
      });
      streamRef.current = stream;
      videoRef.current.srcObject = stream;

      const mediaRecorder = new MediaRecorder(stream);
      mediaRecorderRef.current = mediaRecorder;
      chunksRef.current = [];

      mediaRecorder.ondataavailable = (e) => {
        if (e.data.size > 0) chunksRef.current.push(e.data);
      };

      mediaRecorder.onstop = () => {
        const blob = new Blob(chunksRef.current, { type: 'video/webm' });
        setRecordedVideo(URL.createObjectURL(blob));
      };

      mediaRecorder.start();
      setIsRecording(true);
    } catch (err) {
      console.error('Error accessing media devices:', err);
    }
  };

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

  const uploadVideo = async () => {
    const blob = new Blob(chunksRef.current, { type: 'video/webm' });
    const formData = new FormData();
    formData.append('video', blob, 'recording.webm');

    try {
      const response = await fetch('/api/upload', {
        method: 'POST',
        body: formData
      });
      console.log('Upload successful:', response);
    } catch (error) {
      console.error('Upload failed:', error);
    }
  };

  return (
    <div>
      <video ref={videoRef} autoPlay muted />
      {!isRecording ? (
        <button onClick={startRecording}>Start Recording</button>
      ) : (
        <button onClick={stopRecording}>Stop Recording</button>
      )}
      {recordedVideo && (
        <>
          <video src={recordedVideo} controls />
          <button onClick={uploadVideo}>Upload Video</button>
        </>
      )}
    </div>
  );
}

export default VideoRecorder;

注意事项

  • 确保服务器端有处理文件上传的接口
  • 考虑添加文件大小限制和格式验证
  • 移动设备可能需要额外的权限处理
  • 不同浏览器对视频格式的支持可能不同

标签: 上传视频
分享给朋友:

相关文章

div css制作网页视频

div css制作网页视频

使用DIV和CSS制作网页视频 在网页中嵌入视频可以通过HTML5的<video>标签结合DIV和CSS实现,以下是一种常见的实现方式: 基本HTML结构 创建一个包含视频播放器的DI…

vue实现分片播放视频

vue实现分片播放视频

实现分片播放视频的基本思路 分片播放视频的核心是将视频文件分割为多个片段,按需加载和播放。Vue中可通过HTML5的<video>标签结合自定义逻辑实现。 视频分片处理 视频文件需提前…

利用h5实现视频通话

利用h5实现视频通话

实现H5视频通话的关键技术 WebRTC(Web Real-Time Communication)是实现H5视频通话的核心技术。它允许浏览器之间直接进行实时音视频通信,无需插件或第三方软件。 基本…

vue实现上传

vue实现上传

Vue 实现文件上传 在 Vue 中实现文件上传功能可以通过原生 HTML5 的 <input type="file"> 元素结合 Vue 的数据绑定和事件处理来实现。以下是几种常见的实现…

uniapp视频

uniapp视频

uniapp视频开发基础 uniapp支持通过video组件实现视频播放功能,该组件兼容多端(H5、小程序、App等),基本用法如下: <template> <video…

h5 实现视频通话

h5 实现视频通话

H5 实现视频通话的技术方案 H5(HTML5)实现视频通话主要依赖WebRTC(Web Real-Time Communication)技术。以下是实现步骤和关键代码示例: 获取用户媒体设备权限…