当前位置:首页 > 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实现分页

js实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

js实现验证码

js实现验证码

实现验证码的JavaScript方法 生成随机验证码 使用Math.random()生成随机字符串,结合数字和字母: function generateCaptcha() { const cha…

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(func,…

js树实现

js树实现

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

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…