当前位置:首页 > VUE

vue实现拍摄视频上传

2026-02-24 05:38:00VUE

Vue 实现拍摄视频上传

准备工作

确保项目已安装Vue.js及相关依赖。需要使用浏览器提供的MediaDevices API进行视频拍摄,并通过FormData实现文件上传。

获取摄像头权限

通过navigator.mediaDevices.getUserMedia请求摄像头权限,将视频流绑定到<video>元素:

vue实现拍摄视频上传

async function startCamera() {
  const stream = await navigator.mediaDevices.getUserMedia({ video: true });
  const videoElement = document.getElementById('cameraView');
  videoElement.srcObject = stream;
}

录制视频

使用MediaRecorder API录制视频流,存储为Blob对象:

vue实现拍摄视频上传

let mediaRecorder;
let recordedChunks = [];

function startRecording() {
  recordedChunks = [];
  const stream = document.getElementById('cameraView').srcObject;
  mediaRecorder = new MediaRecorder(stream);

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

  mediaRecorder.start();
}

停止录制并生成文件

录制结束后将数据块合并为Blob对象,可通过URL.createObjectURL生成预览:

function stopRecording() {
  mediaRecorder.stop();
  mediaRecorder.onstop = () => {
    const videoBlob = new Blob(recordedChunks, { type: 'video/webm' });
    const videoUrl = URL.createObjectURL(videoBlob);
    // 预览或上传
  };
}

文件上传

通过FormData将视频文件发送到服务器:

function uploadVideo(videoBlob) {
  const formData = new FormData();
  formData.append('video', videoBlob, 'recorded_video.webm');

  axios.post('/api/upload', formData, {
    headers: { 'Content-Type': 'multipart/form-data' }
  }).then(response => {
    console.log('上传成功', response);
  });
}

完整组件示例

<template>
  <div>
    <video id="cameraView" autoplay muted></video>
    <button @click="startRecording">开始录制</button>
    <button @click="stopRecording">停止录制</button>
  </div>
</template>

<script>
export default {
  methods: {
    async startCamera() {
      const stream = await navigator.mediaDevices.getUserMedia({ video: true });
      document.getElementById('cameraView').srcObject = stream;
    },
    startRecording() {
      this.recordedChunks = [];
      const stream = document.getElementById('cameraView').srcObject;
      this.mediaRecorder = new MediaRecorder(stream);
      this.mediaRecorder.ondataavailable = this.handleDataAvailable;
      this.mediaRecorder.start();
    },
    stopRecording() {
      this.mediaRecorder.stop();
      this.mediaRecorder.onstop = this.handleStop;
    },
    handleDataAvailable(event) {
      if (event.data.size > 0) this.recordedChunks.push(event.data);
    },
    handleStop() {
      const videoBlob = new Blob(this.recordedChunks, { type: 'video/webm' });
      this.uploadVideo(videoBlob);
    },
    uploadVideo(videoBlob) {
      const formData = new FormData();
      formData.append('video', videoBlob, 'recording.webm');
      axios.post('/upload', formData);
    }
  },
  mounted() {
    this.startCamera();
  }
};
</script>

注意事项

  • 需在HTTPS环境或localhost下使用摄像头API
  • 不同浏览器支持的视频格式可能不同,建议测试兼容性
  • 上传大文件时需考虑分片上传或进度显示

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

相关文章

h5实现实时视频通话

h5实现实时视频通话

实现H5实时视频通话的技术方案 WebRTC是实现H5实时视频通话的核心技术,无需插件即可在浏览器中实现点对点通信。以下是关键实现步骤: 基础环境准备 确保使用支持WebRTC的现代浏览器(Chro…

vue实现缓存视频

vue实现缓存视频

Vue 实现视频缓存的方法 在 Vue 中实现视频缓存可以通过多种方式完成,包括使用浏览器的缓存机制、Service Worker 或者借助第三方库。以下是几种常见的方法: 使用 Service W…

vue实现上传视频

vue实现上传视频

使用 <input type="file"> 实现基础上传 通过 HTML 原生文件选择控件获取视频文件,结合 Vue 处理上传逻辑。 <template> <…

vue实现视频弹幕

vue实现视频弹幕

Vue 实现视频弹幕功能 实现视频弹幕功能需要结合视频播放器和弹幕渲染逻辑,以下是具体实现方法: 视频播放器集成 使用第三方视频播放器库如video.js或原生video标签作为基础: <v…

前端vue实现导出视频

前端vue实现导出视频

实现视频导出的基本思路 在Vue中实现视频导出功能通常涉及以下两种场景:导出已有视频文件或录制屏幕/摄像头内容后导出。核心流程包括获取视频数据、处理格式转换及触发下载。 导出已有视频文件 若需直接导…

vue登录注册实现视频

vue登录注册实现视频

以下是通过Vue实现登录注册功能的常见方法及相关视频资源推荐: 视频教程推荐 B站系列教程 《Vue3+Element Plus登录注册实战》 链接:需自行搜索"Vue3 Element Plus登…