Skip to main content

技术选型:录频解决方案

link

好的,我把 rrweb 的原理整理成一份精简的要点总结,方便你快速回顾和理解。


📌 rrweb 核心原理(一句话版)

rrweb 不录制画面像素,而是记录 DOM 结构 + 所有变化 + 用户操作,回放时在 iframe 中“重建”页面。


🔍 工作流程

1. 录制阶段(Record)

  • 全量快照:开始时,遍历整个 DOM,生成一份完整的“页面快照”(JSON 数据)。
  • 增量快照:之后通过 MutationObserver 监听所有 DOM 变更(增删节点、属性变化、文本修改),同时监听 inputclickscroll 等用户交互事件,将这些变化序列化成增量的 JSON 数据。
  • 数据压缩:使用序列化 + 去重映射表,减小数据体积(通常比视频小很多)。

2. 回放阶段(Replay)

  • 在一个独立的 <iframe> 中,根据全量快照重建页面初始状态。
  • 按照时间戳顺序,依次回放所有增量事件,重现页面变化和用户操作(如鼠标移动、输入等)。

⚙️ 关键技术点

技术手段作用
MutationObserver监听 DOM 结构、属性、文本变化
事件监听捕获鼠标、键盘、滚动等交互
序列化(id 映射)将循环引用的 DOM 转为可 JSON 化的数据
相对时间戳保证回放时事件顺序和延迟一致
iframe 沙箱隔离回放环境,避免影响当前页面

✅ 优点

  • 无弹窗:不依赖 getDisplayMedia,用户无感知。
  • 文件小:存储的是数据变化,体积远小于视频。
  • 可交互:回放时支持暂停、快进,甚至修改 DOM 来调试。
  • 隐私友好:可配置忽略敏感输入(如密码)。

⚠️ 局限性

  • 无法录制 Canvas / WebGL 绘图内容(只能看到初始状态,动画无法记录)。
  • 不能完美捕捉 CSS 动画(只记录最终态)。
  • 不支持录制 视频 / 音频 标签的播放内容。
  • 跨域 iframe 内容无法访问(需特殊配置)。

📦 常用场景

  • 用户行为分析(录屏回放)
  • Bug 重现与调试
  • 客服对话回放
  • A/B 测试可视化

如果你想要一个基于 rrweb 的最小化 Demo(index.html),我也可以直接帮你写出来,让你跑起来体验一下。需要吗?