当前位置:首页 > 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也被视为安全源。

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

vue实现屏幕录像功能

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

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

相关文章

vue实现屏幕共享

vue实现屏幕共享

Vue 实现屏幕共享的方法 屏幕共享功能通常结合浏览器原生 API 和第三方库实现。以下是基于 Vue 的实现方案: 使用浏览器原生 API 捕获屏幕 通过 getDisplayMedia API…

vue实现屏幕适配

vue实现屏幕适配

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

js实现屏幕截图功能

js实现屏幕截图功能

使用HTML2Canvas库实现截图 HTML2Canvas是一个流行的JavaScript库,可以将网页元素或整个页面转换为Canvas图像。安装方式: npm install html2canv…

js怎么实现屏幕录制

js怎么实现屏幕录制

使用MediaDevices和MediaRecorder API 在JavaScript中,可以通过navigator.mediaDevices.getDisplayMedia获取屏幕内容,再结合Me…

uniapp如何录像

uniapp如何录像

使用uniapp实现录像功能 在uniapp中实现录像功能可以通过调用系统相机或使用第三方插件完成。以下是具体实现方法: 调用系统相机API uniapp提供了uni.chooseVideo方法,可…

php实现录像功能

php实现录像功能

PHP实现录像功能的方法 PHP本身是服务器端脚本语言,无法直接操作客户端设备进行录像。需要通过浏览器API或第三方服务间接实现。以下是几种常见方案: 浏览器MediaDevices API配合前端…