当前位置:首页 > 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数据合并为完整视频文件并提供下载:

vue实现屏幕录像功能

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需要额外配置。

vue实现屏幕录像功能

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

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

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

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

相关文章

vue实现录像功能

vue实现录像功能

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

js实现屏幕截图功能

js实现屏幕截图功能

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

js怎么实现屏幕录制

js怎么实现屏幕录制

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

js实现录像

js实现录像

使用MediaRecorder API实现录像 在JavaScript中,可以通过MediaRecorder API实现浏览器端的录像功能。该API允许捕获通过<canvas>或摄像头获取…

js实现屏幕共享

js实现屏幕共享

屏幕共享的实现方法 在JavaScript中实现屏幕共享主要依赖于WebRTC(Web Real-Time Communication)技术,结合getDisplayMedia API捕获屏幕内容。以…

jquery获取屏幕宽度

jquery获取屏幕宽度

jQuery获取屏幕宽度的方法 使用jQuery获取屏幕宽度可以通过$(window).width()方法实现。该方法返回浏览器视口的宽度(不包含滚动条)。 var screenWidth = $(…