You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在嵌入交互式模拟的绘图Web应用中实现屏幕与音频录制?

针对你的绘图Web应用录制需求的解决方案

你的场景是教师录制带交互式模拟的绘图课程,核心需求是屏幕/特定区域录制+音频捕获,下面分三个部分给你清晰的实操指导:

一、RecordRTC:新手友好的最优配置

RecordRTC确实功能庞杂,但你不用纠结所有选项,针对你的需求,聚焦「屏幕捕获+音频录制」的核心组合就行,我给你梳理最简可用的配置:

关键代码示例

// 1. 发起屏幕+音频捕获请求
async function startRecording() {
  // 允许用户选择录制整个屏幕、特定窗口或浏览器标签页,同时捕获音频
  const stream = await navigator.mediaDevices.getDisplayMedia({
    video: true,
    audio: { echoCancellation: true } // 开启回声消除,适合麦克风录制
  });

  // 2. 初始化RecordRTC,只保留必要配置
  const recorder = RecordRTC(stream, {
    type: 'video', // 同时录制视频+音频
    mimeType: 'video/webm;codecs=vp9', // VP9编码兼顾文件大小和画质
    audioBitsPerSecond: 128000, // 适合语音的音频比特率
    videoBitsPerSecond: 2500000 // 平衡质量与体积的视频比特率
  });

  // 3. 启动录制
  recorder.startRecording();

  // 4. 停止录制并导出文件(示例:30秒后自动停止)
  setTimeout(() => {
    recorder.stopRecording(() => {
      const blob = recorder.getBlob();
      // 生成下载链接
      const downloadUrl = URL.createObjectURL(blob);
      const link = document.createElement('a');
      link.href = downloadUrl;
      link.download = 'lesson-recording.webm';
      link.click();
      // 释放媒体流资源
      stream.getTracks().forEach(track => track.stop());
    });
  }, 30000);
}

新手注意事项

  • 如果需要只录制应用内的绘图区域,可以引导用户在捕获时选择「你的Web应用标签页」,后续还能通过Canvas裁剪录制内容(RecordRTC支持直接从Canvas捕获流)。
  • 暂时不用碰滤镜、字幕等进阶功能,先把核心录制流程跑通,再按需扩展。

二、WebRTC原生实现:无需依赖库的轻量方案

当然可以用WebRTC原生API实现!RecordRTC本质就是封装了WebRTC的getDisplayMedia和MediaRecorder API。如果你想减少第三方依赖,直接用原生API也很简单:

async function startNativeRecording() {
  // 捕获浏览器标签页+音频
  const stream = await navigator.mediaDevices.getDisplayMedia({
    video: { displaySurface: 'browser' },
    audio: true
  });

  // 初始化原生MediaRecorder
  const mediaRecorder = new MediaRecorder(stream, {
    mimeType: 'video/webm;codecs=vp9'
  });
  const recordingChunks = [];

  // 收集录制数据
  mediaRecorder.ondataavailable = (e) => recordingChunks.push(e.data);
  // 录制结束后导出文件
  mediaRecorder.onstop = () => {
    const blob = new Blob(recordingChunks, { type: 'video/webm' });
    // 下载逻辑同RecordRTC示例
  };

  mediaRecorder.start();
}

优势

  • 无需引入额外库,降低应用体积。
  • 完全可控,方便后续定制化(比如实时推流录制内容)。

三、Chrome扩展:精准录制特定区域

如果需要精确录制页面内的某个绘图区域(比如只录Canvas画布,不包含导航栏),Chrome扩展是更可靠的方案——它能直接获取DOM元素的坐标和尺寸,实现精准裁剪。

核心实现思路

  1. 用chrome.desktopCapture API请求屏幕捕获权限。
  2. 在内容脚本中获取目标绘图元素的位置(通过getBoundingClientRect())。
  3. 将捕获的视频流裁剪后绘制到Canvas,再录制Canvas的流。

简化代码示例(扩展核心部分)

// background.js - 扩展后台脚本
chrome.runtime.onMessage.addListener(async (message, sender, sendResponse) => {
  if (message.type === 'start-recording') {
    // 弹出选择录制源的窗口
    const streamId = await chrome.desktopCapture.chooseDesktopMedia(
      ['screen', 'window'],
      sender.tab
    );
    sendResponse({ streamId });
  }
});

// content-script.js - 注入页面的脚本
async function startRegionRecording() {
  // 向后台请求录制流ID
  const { streamId } = await chrome.runtime.sendMessage({ type: 'start-recording' });
  // 获取录制流
  const stream = await navigator.mediaDevices.getUserMedia({
    video: {
      mandatory: {
        chromeMediaSource: 'desktop',
        chromeMediaSourceId: streamId,
        minWidth: 1280,
        minHeight: 720
      }
    },
    audio: true
  });

  // 获取绘图区域的位置和尺寸
  const drawingCanvas = document.getElementById('your-drawing-canvas');
  const rect = drawingCanvas.getBoundingClientRect();

  // 创建用于裁剪的Canvas
  const cropCanvas = document.createElement('canvas');
  cropCanvas.width = rect.width;
  cropCanvas.height = rect.height;
  const ctx = cropCanvas.getContext('2d');

  // 将录制流加载到视频元素
  const videoElement = document.createElement('video');
  videoElement.srcObject = stream;
  videoElement.play();

  // 实时裁剪画面到Canvas
  setInterval(() => {
    ctx.drawImage(
      videoElement,
      rect.left, rect.top, rect.width, rect.height, // 源区域
      0, 0, rect.width, rect.height // 目标区域
    );
  }, 16); // 约60帧/秒

  // 录制裁剪后的Canvas流
  const recorder = RecordRTC(cropCanvas.captureStream(), { type: 'video' });
  recorder.startRecording();
}

注意事项

  • 扩展需要在manifest.json中声明desktopCapture和activeTab权限。
  • 这种方式能精准控制录制范围,非常适合教师只展示绘图过程的场景。

总结一下:

  • 想快速落地,优先用RecordRTC的最简配置,上手快、功能足够。
  • 追求轻量可控,选WebRTC原生API。
  • 需要精准录制特定区域,就开发Chrome扩展。

内容的提问来源于stack exchange,提问作者Jithin Ks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:00:26