当前位置:首页 > JavaScript

js怎么实现屏幕录制

2026-04-04 19:00:13JavaScript

使用MediaDevices API和MediaRecorder API实现屏幕录制

通过navigator.mediaDevices.getDisplayMedia获取屏幕流,结合MediaRecorder录制视频流。

// 请求屏幕共享权限
const stream = await navigator.mediaDevices.getDisplayMedia({
  video: { mediaSource: 'screen' },
  audio: true // 可选是否录制系统音频
});

// 创建MediaRecorder实例
const recorder = new MediaRecorder(stream, {
  mimeType: 'video/webm;codecs=vp9'
});

// 收集录制的数据块
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();

添加录制控制功能

实现开始/暂停/继续/停止等控制逻辑,需注意不同状态的处理。

let isPaused = false;

function togglePause() {
  if (recorder.state === 'recording') {
    recorder.pause();
    isPaused = true;
  } else if (recorder.state === 'paused') {
    recorder.resume();
    isPaused = false;
  }
}

function stopRecording() {
  if (recorder.state !== 'inactive') {
    recorder.stop();
    stream.getTracks().forEach(track => track.stop());
  }
}

支持多种视频格式

通过检测支持的MIME类型选择最佳格式。

js怎么实现屏幕录制

function getSupportedMimeType() {
  const types = [
    'video/webm;codecs=vp9',
    'video/webm;codecs=vp8',
    'video/webm;codecs=h264',
    'video/mp4;codecs=h264'
  ];
  return types.find(type => MediaRecorder.isTypeSupported(type));
}

添加时间戳显示

记录并显示录制时长,增强用户体验。

let startTime;
const timerElement = document.getElementById('timer');

recorder.onstart = () => {
  startTime = Date.now();
  updateTimer();
};

function updateTimer() {
  if (recorder.state === 'recording') {
    const elapsed = Math.floor((Date.now() - startTime) / 1000);
    timerElement.textContent = 
      `${Math.floor(elapsed / 60)}:${('0' + elapsed % 60).slice(-2)}`;
    setTimeout(updateTimer, 1000);
  }
}

注意事项

浏览器兼容性方面需注意:

js怎么实现屏幕录制

  • Chrome、Edge和Firefox支持较好
  • Safari需要特定配置
  • 跨域iframe中可能需要权限策略

安全限制:

  • 必须用户主动触发(如点击事件)
  • HTTPS环境下或localhost才可用
  • 某些浏览器会显示明显的共享提示

性能优化:

  • 限制录制分辨率和帧率
  • 定期清理内存中的视频块
  • 考虑分片录制大文件

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

相关文章

js实现vue路由

js实现vue路由

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

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…