当前位置:首页 > VUE

vue实现屏幕录像功能

2026-01-22 21:29:02VUE

使用MediaDevices API捕获屏幕

在Vue中实现屏幕录像需要调用浏览器的MediaDevices API获取屏幕流。通过navigator.mediaDevices.getDisplayMedia()方法请求用户授权捕获屏幕内容,该方法返回Promise对象:

async function startCapture() {
  try {
    this.stream = await navigator.mediaDevices.getDisplayMedia({
      video: { displaySurface: "monitor" },
      audio: true
    });
  } catch (err) {
    console.error("Error: " + err);
  }
}

使用MediaRecorder录制视频

获得屏幕流后,创建MediaRecorder实例进行录制。需要监听数据可用事件并将数据存入数组:

function startRecording(stream) {
  this.recorder = new MediaRecorder(stream);
  this.chunks = [];

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

  this.recorder.onstop = this.saveRecording;
  this.recorder.start(1000); // 每1秒收集一次数据
}

保存录制结果

录制停止时,将收集的Blob数据合并为完整视频文件并提供下载:

function saveRecording() {
  const blob = new Blob(this.chunks, { type: "video/webm" });
  const url = URL.createObjectURL(blob);

  const a = document.createElement("a");
  a.href = url;
  a.download = "recording.webm";
  a.click();

  URL.revokeObjectURL(url);
}

Vue组件集成

将上述功能封装为Vue组件,包含开始/停止按钮和状态显示:

<template>
  <div>
    <button @click="start" :disabled="isRecording">开始录制</button>
    <button @click="stop" :disabled="!isRecording">停止录制</button>
    <p>状态: {{ statusText }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      stream: null,
      recorder: null,
      chunks: [],
      isRecording: false
    };
  },
  computed: {
    statusText() {
      return this.isRecording ? "录制中..." : "准备就绪";
    }
  },
  methods: {
    async start() {
      await this.startCapture();
      this.startRecording(this.stream);
      this.isRecording = true;
    },
    stop() {
      this.recorder.stop();
      this.stream.getTracks().forEach(track => track.stop());
      this.isRecording = false;
    }
  }
};
</script>

注意事项

浏览器兼容性方面,该功能仅在现代浏览器中可用,Chrome和Edge支持最佳。Safari需要额外配置。

安全限制要求网站必须通过HTTPS提供服务,本地开发时localhost也被视为安全源。

用户必须手动触发录制操作,无法通过代码自动开始录制,这是浏览器的安全策略要求。

视频格式通常为webm,如需其他格式需要引入转码库。录制时长受设备存储空间限制。

vue实现屏幕录像功能

标签: 录像屏幕
分享给朋友:

相关文章

vue实现共享屏幕

vue实现共享屏幕

Vue 实现共享屏幕 在 Vue 中实现共享屏幕功能通常需要结合浏览器的 Web API(如 getDisplayMedia)和第三方库(如 WebRTC)。以下是实现共享屏幕的几种方法: 使用浏览…

vue实现屏幕撑满

vue实现屏幕撑满

Vue 实现屏幕撑满的方法 在 Vue 项目中实现屏幕撑满通常涉及 CSS 和 Vue 组件的布局设置。以下是几种常见方法: 使用 CSS 设置根元素高度 通过设置 html、body 和根组件的高…

vue实现屏幕截图

vue实现屏幕截图

Vue实现屏幕截图的方法 在Vue中实现屏幕截图功能,可以通过多种方式完成,包括使用HTML5的Canvas API、第三方库或浏览器扩展。以下是几种常见的方法: 使用html2canvas库 h…

vue实现屏幕适配

vue实现屏幕适配

Vue 实现屏幕适配的方法 使用 CSS 媒体查询 通过 CSS 媒体查询根据不同屏幕尺寸应用不同的样式规则。在 Vue 组件的 <style> 标签中直接编写媒体查询代码。 @med…

vue实现录像功能

vue实现录像功能

使用Vue实现录像功能 在Vue中实现录像功能通常需要结合浏览器的MediaDevices API和HTML5的<video>、<canvas>元素。以下是实现步骤: 获取用…

vue实现自适应屏幕

vue实现自适应屏幕

Vue实现自适应屏幕的方法 使用CSS媒体查询 在Vue组件中直接使用CSS媒体查询,根据屏幕尺寸调整样式。这种方法适用于简单的布局调整。 <style scoped> .contai…