当前位置:首页 > 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,如需其他格式需要引入转码库。录制时长受设备存储空间限制。

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

相关文章

php实现录像功能

php实现录像功能

PHP 实现录像功能的基本方法 PHP 本身无法直接处理视频录制,但可以通过与其他技术结合实现。以下是几种常见方案: 方案一:调用外部程序录制视频 使用 PHP 的 exec() 或 shell_e…

PHP实现录像

PHP实现录像

PHP实现录像功能 PHP本身是服务器端脚本语言,不直接处理视频录制功能,但可以通过以下方式实现录像相关功能: 使用WebRTC技术 前端通过WebRTC获取摄像头视频流,PHP后端处理视频存储:…

js实现屏幕截图功能

js实现屏幕截图功能

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

jquery获取屏幕宽度

jquery获取屏幕宽度

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

uniapp 录像

uniapp 录像

uniapp 录像功能实现方法 在 uniapp 中实现录像功能可以通过调用系统相机或使用第三方插件完成。以下是几种常见的实现方式: 使用 uni.chooseVideo 方法 该方法调用系统相册…