当前位置:首页 > JavaScript

js怎么实现屏幕录制

2026-01-31 03:04:55JavaScript

使用MediaDevices和MediaRecorder API

在JavaScript中,可以通过navigator.mediaDevices.getDisplayMedia获取屏幕内容,再结合MediaRecorder录制视频流。

js怎么实现屏幕录制

async function startRecording() {
  const stream = await navigator.mediaDevices.getDisplayMedia({ video: true });
  const recorder = new MediaRecorder(stream);
  const chunks = [];

  recorder.ondataavailable = e => chunks.push(e.data);
  recorder.onstop = () => {
    const blob = new Blob(chunks, { type: 'video/webm' });
    const url = URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = url;
    a.download = 'recording.webm';
    a.click();
  };

  recorder.start();
  // 停止录制示例:recorder.stop();
}

添加音频轨道

若需同时录制麦克风音频,需合并屏幕和音频流:

js怎么实现屏幕录制

async function recordWithAudio() {
  const screenStream = await navigator.mediaDevices.getDisplayMedia({ video: true });
  const audioStream = await navigator.mediaDevices.getUserMedia({ audio: true });
  const combinedStream = new MediaStream([
    ...screenStream.getVideoTracks(),
    ...audioStream.getAudioTracks()
  ]);

  const recorder = new MediaRecorder(combinedStream);
  // 其余逻辑同上
}

处理权限和兼容性

屏幕录制需用户明确授权,且仅在HTTPS或localhost环境下可用。检测兼容性:

if (!navigator.mediaDevices || !navigator.mediaDevices.getDisplayMedia) {
  console.error('Screen recording not supported');
}

使用第三方库简化流程

库如recordRTC可简化复杂操作:

import RecordRTC from 'recordrtc';

const stream = await navigator.mediaDevices.getDisplayMedia({ video: true });
const recorder = new RecordRTC(stream, { type: 'video' });
recorder.startRecording();

// 停止录制
recorder.stopRecording(() => {
  const blob = recorder.getBlob();
  // 处理blob
});

注意事项

  • 录制前需用户交互(如按钮点击),浏览器禁止自动启动。
  • 不同浏览器支持的视频编码可能不同(如Chrome用video/webm,Safari用video/mp4)。
  • 长时间录制需注意内存管理,可分段保存。

标签: 屏幕js
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 或直接使用 window.location 实现页面跳转,适用于普通跳转或带参数的 URL。 // 方…

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue…

vue实现屏幕共享

vue实现屏幕共享

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

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与…

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…