当前位置:首页 > VUE

vue实现拍摄视频上传

2026-02-24 05:38:00VUE

Vue 实现拍摄视频上传

准备工作

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

获取摄像头权限

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

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

录制视频

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

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
  • 不同浏览器支持的视频格式可能不同,建议测试兼容性
  • 上传大文件时需考虑分片上传或进度显示

vue实现拍摄视频上传

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

相关文章

elementui视频

elementui视频

以下是关于 ElementUI 视频资源的整理,涵盖教程、实战案例和官方资源: ElementUI 官方视频资源 ElementUI 官方文档虽以文字为主,但部分社区或第三方平台可能有官方团队发布的…

jquery 上传

jquery 上传

jQuery 文件上传方法 使用 jQuery 实现文件上传可以通过多种方式完成,以下是常见的几种方法: 使用原生表单和 AJAX 创建一个包含文件输入的表单,并通过 jQuery 的 AJA…

vue实现分段上传

vue实现分段上传

实现分段上传的基本思路 分段上传(分片上传)是将大文件分割成多个小块分别上传,最后在服务器合并的技术。这种方式能提高上传稳定性、支持断点续传,并减轻服务器压力。 前端实现步骤 安装依赖 需要axio…

vue视频怎么实现

vue视频怎么实现

Vue 视频实现方法 在 Vue 中实现视频功能可以通过多种方式完成,以下是常见的几种方法: 使用 HTML5 <video> 标签 在 Vue 组件模板中直接使用 HTML5 的…

vue webrtc实现视频

vue webrtc实现视频

Vue 与 WebRTC 实现视频通信 WebRTC(Web Real-Time Communication)是一种支持浏览器实时音视频通信的技术。结合 Vue.js 框架,可以快速构建视频通话应用。…

vue实现直播视频

vue实现直播视频

Vue 实现直播视频的技术方案 方案一:基于 H5 的 video 标签与 MSE(Media Source Extensions) 使用 H5 的 <video> 标签结合 MSE 技…