JavaScript 可通过 MediaRecorder API 实现浏览器端屏幕录制,核心步骤为:获取屏幕流 → 创建录制器 → 开始录制 → 停止并导出 Blob;需 HTTPS/localhost 环境及用户授权,支持分片、码率控制,但 Safari 不支持,且无法录制系统音频。
JavaScript 可以通过 MediaRecorder API 实现浏览器端的屏幕录制,无需插件或服务器中转,但需用户主动授权屏幕共享权限。核心流程是:获取屏幕媒体流 → 创建 MediaRecorder 实例 → 开始录制 → 停止并导出视频 Blob。
关键步骤如下:
navigator.mediaDevices.getDisplayMedia() 请求屏幕共享权限(注意:仅在安全上下文(HTTPS 或 localhost)中可用)MediaStream(含视频轨,可选音频轨)传给 new MediaRecorder(stream)
dataavailable 事件收集分段 Blob,或使用 stop() 后统一获取最终 BlobURL.createObjectURL(blob) 生成可下载链接,或通过 FileReader 转为 base64示例片段:
const stream = await navigator.mediaDevices.getDisplayMedia({ video: true });它提供轻量、标准化的客户端媒体录制能力,支持以下特性:
video/webm(含 VP8/VP9)或 video/mp4(部分 Chromium 支持,需指定 mimeType)start()、pause()、resume()、stop(),可分段录制或实时处理start、dataavailable、stop、error 等事件,便于状态管理和异常处理mimeType 和 bitsPerSecond 控制码率与体积(如 new MediaRecorder(stream, { mimeType: 'video/webm; codecs=vp9', bitsPerSecond: 2_000_000 }))实际使用中需留意:
getDisplayMedia 和 MediaRecorder 的支持有限(截至 Safari 17,仍不支持屏幕录制)audio: true 和 mediaDevices.getUserMedia 混音,有兼容性风险)recorder.start(timeslice) 分片,避免内存暴涨当 MediaRecorder 不适用时,可考虑:
CanvasCaptureMediaStream + requestAnimationFrame 手动逐帧捕获画布内容(适合录 Canvas 动画)