和capture属性 在Vue模板中添加一个文件输入元素,通过capture属性指定使用摄像头拍摄视频:…">
当前位置:首页 > VUE

vue实现拍摄视频上传

2026-01-23 15:00:50VUE

Vue实现拍摄视频上传的方法

使用HTML5的<input type="file">capture属性

在Vue模板中添加一个文件输入元素,通过capture属性指定使用摄像头拍摄视频:

<template>
  <input type="file" accept="video/*" capture="environment" @change="handleVideoUpload" />
</template>

accept="video/*"限制只能选择视频文件,capture="environment"指定使用后置摄像头。

vue实现拍摄视频上传

通过getUserMediaAPI直接调用摄像头

利用浏览器提供的MediaDevices API实现更灵活的拍摄控制:

methods: {
  async startRecording() {
    const stream = await navigator.mediaDevices.getUserMedia({
      video: true,
      audio: true
    });
    this.mediaRecorder = new MediaRecorder(stream);
    this.chunks = [];

    this.mediaRecorder.ondataavailable = e => {
      this.chunks.push(e.data);
    };

    this.mediaRecorder.onstop = () => {
      const blob = new Blob(this.chunks, { type: 'video/mp4' });
      this.uploadVideo(blob);
    };

    this.mediaRecorder.start();
  },

  stopRecording() {
    this.mediaRecorder.stop();
    this.mediaRecorder.stream.getTracks().forEach(track => track.stop());
  },

  uploadVideo(blob) {
    const formData = new FormData();
    formData.append('video', blob, 'recorded-video.mp4');

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

使用第三方库增强功能

对于更复杂的需求,可以考虑使用以下库:

vue实现拍摄视频上传

  • vue-video-recorder:提供完整的视频录制组件
  • recordrtc:支持多种录制格式和效果
  • vue-webcam:简化摄像头访问的Vue组件

处理移动端兼容性

移动设备可能需要特殊处理:

// 检测是否移动设备
const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);

// 移动端可能需要不同的配置
if(isMobile) {
  this.mediaRecorder = new MediaRecorder(stream, {
    mimeType: 'video/webm',
    videoBitsPerSecond: 3000000
  });
}

上传进度显示

使用axios的onUploadProgress实现上传进度显示:

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

  axios.post('/upload', formData, {
    onUploadProgress: progressEvent => {
      const percentCompleted = Math.round(
        (progressEvent.loaded * 100) / progressEvent.total
      );
      this.uploadProgress = percentCompleted;
    }
  });
}

注意事项

  • 确保服务器端已配置接收大文件上传
  • 考虑视频压缩以减少上传大小
  • 处理用户权限拒绝的情况
  • 在Safari等浏览器中测试兼容性

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

相关文章

h5实现实时视频通话

h5实现实时视频通话

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

vue webrtc实现视频

vue webrtc实现视频

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

vue实现上传视频

vue实现上传视频

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

vue实现拖拽上传

vue实现拖拽上传

Vue 拖拽上传实现方法 使用 HTML5 原生拖拽 API 在 Vue 中可以通过监听原生拖拽事件实现基础功能: <template> <div class="dr…

vue 视频android实现

vue 视频android实现

在Vue中实现Android端的视频功能,可以通过以下方法完成,结合WebView或原生混合开发方案: 使用WebView嵌入H5视频 适用于轻量级需求,通过Vue构建H5页面,在Android W…

vue实现视频剪切

vue实现视频剪切

Vue 实现视频剪切的方法 在 Vue 中实现视频剪切功能可以通过多种方式完成,以下是一些常见的方法: 使用 HTML5 Video API 和 Canvas HTML5 提供了 Video 和 C…