当前位置:首页 > JavaScript

js怎么实现屏幕录制

2026-01-31 03:04:55JavaScript

使用MediaDevices和MediaRecorder API

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

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();
}

添加音频轨道

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

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可简化复杂操作:

js怎么实现屏幕录制

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
分享给朋友:

相关文章

vue实现共享屏幕

vue实现共享屏幕

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

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

vue实现屏幕撑满

vue实现屏幕撑满

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

js实现上传文件

js实现上传文件

文件上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现文件上传功能。 <input type="file"…