rrweb 录制数据转视频实战:rrvideo CLI 安装、配置与实现原理

发布时间:2026/9/20 11:30:31

rrweb 录制数据转视频实战:rrvideo CLI 安装、配置与实现原理 前端可观测性开发工具【免费下载链接】rrwebrecord and replay the web项目地址https://gitcode.com/gh_mirrors/rr/rrweb点击查看免费下载rrvideo 是 rrweb 官方提供的命令行工具负责把 rrweb 录制生成的 JSON 会话数据session events渲染为标准的 WebM 视频文件适用于无需交互回放的场景例如将录制结果分享到视频平台、作为 Bug 上报附件或进行自动化归档。读完本文你将掌握 rrvideo 的安装方式、三种常用 CLI 调用形态、完整的配置文件写法以及其基于 Playwright 无头浏览器与 rrweb-player 的底层渲染原理。rrvideo 在 rrweb 生态中的定位rrwebrecord and replay the web的核心思路是录制端把页面 DOM 变化、输入、滚动、鼠标交互等事件序列序列化为紧凑的 JSON 数据而非视频流回放端再按时间轴重建像素级画面。这种做法的优点是数据量小、便于检索与压缩但代价是无法在原生视频播放器、IM 或视频网站上直接播放。rrvideo 正是为解决这一闭环而生它在无头浏览器中启动 rrweb-player 对事件序列做一次真实回放同时用浏览器原生的 MediaRecorder 能力把回放过程录制成视频文件。官方文档 转换为视频 也明确把 rrvideo 列为将录制数据转为视频的推荐工具。从 package.json 可以看出它依赖playwright驱动无头浏览器、rrweb-player页面内回放器以及minimistCLI 参数解析三者共同构成了命令行入口 → 回放渲染 → 视频输出的完整链路。安装 rrvideorrvideo 以全局 CLI 形式发布在 npm 上安装需要两个前置条件安装 Node.js执行全局安装命令npm i -g rrvideo安装过程中需要注意rrvideo 的 package.json 中配置了install钩子脚本会调用playwright install下载 Playwright 所需的 Chromium 浏览器内核。如果当前环境无法联网下载浏览器如 CI 或离线环境可以通过环境变量跳过PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD1 npm i -g rrvideo安装完成后即获得rrvideo可执行命令对应package.json中bin: { rrvideo: build/cli.js }的声明。基本用法将 rrweb 会话转换为视频最简单的方式仅指定输入文件rrvideo --input PATH_TO_YOUR_RRWEB_EVENTS_FILE其中PATH_TO_YOUR_RRWEB_EVENTS_FILE指向一份 rrweb 录制导出的 JSON 文件事件数组。运行后rrvideo 会在当前执行目录下生成一个名为rrvideo-output.webm的视频文件。这一默认输出路径在 src/index.ts 的defaultConfig中有明确定义output: rrvideo-output.webm并且输入、输出相对路径都会基于process.cwd()解析为绝对路径。指定输出路径rrvideo --input PATH_TO_YOUR_RRWEB_EVENTS_FILE --output OUTPUT_PATH--output接受绝对路径或相对路径视频将写入指定位置若父目录不存在会报错源码中会提示 Cant create video file. Please check the output path.。若省略该参数则回退到默认的rrvideo-output.webm。通过配置文件定制回放rrvideo --input PATH_TO_YOUR_RRWEB_EVENTS_JSON_FILE --config PATH_TO_YOUR_RRVIDEO_CONFIG_FILE--config指向一个 JSON 配置文件用于控制回放细节。rrvideo 会读取该文件并把它作为 rrweb-player 的 props除events外传入回放器具体解析逻辑见 src/cli.tsargv.config分支。配置文件详解仓库中提供了官方示例配置文件 rrvideo.config.example.json完整内容如下{ width: 1400, height: 900, speed: 4, skipInactive: true, mouseTail: { strokeStyle: green, lineWidth: 2 } }这些字段在源码中的角色如下字段示例值作用width/height1400/900回放器目标画布尺寸像素。在 src/index.ts 中配置会被合并进 rrweb-player 的 props同时用于推导浏览器视口大小speed4回放倍速。该值不仅控制回放节奏还直接参与播放超时计算expectedPlaybackTime videoDuration / speed源码会据此设定播放时长 2 分钟缓冲的总超时避免长录制被固定超时误杀对应 CHANGELOG 2.0.0 的调整skipInactivetrue是否跳过页面无活动的时间段从而缩短视频长度、避免长时间静止画面mouseTail{strokeStyle: green, lineWidth: 2}鼠标轨迹尾迹样式strokeStyle为轨迹颜色lineWidth为轨迹线条宽度需要说明的是由于 rrvideo 将整个配置文件透传为 rrweb-player 的 props类型约束为OmitConstructorParameterstypeof Player[0][props], events见 src/index.ts因此 rrweb-player 支持的其他回放配置项如autoPlay、showController、showDebug等原则上也可写入该文件。不过 rrvideo 在渲染时会强制覆盖events为你的录制数据并强制showController: false、autoPlay: false先挂载 finish / progress 事件再手动play()以保证录制过程不受控制器 UI 干扰且进度可追踪。底层实现原理从 src/index.ts 的transformToVideo函数可以还原出完整的转换流水线大致分为五步读取并解析事件读取--input指向的 JSON 文件解析为eventWithTime[]事件数组若未提供--inputsrc/cli.ts 会直接抛出please pass --input to your rrweb events file错误对应 test/cli.test.ts 中的第一个测试用例。计算最大视口getMaxViewport遍历所有Meta类型事件取录制过程中的最大width/height作为回放画布尺寸基准确保不同分辨率下的页面内容都不被裁剪。画质缩放源码内置MaxScaleValue 2.5结合resolutionRatio取值范围 01默认0.8对视口做超采样放大即scaledViewport maxViewport * resolutionRatio * 2.5再用 CSStransform: scale(...)把回放画面缩放回目标尺寸。这种以高分辨率渲染后缩小的方式能显著提升视频清晰度同时在resolutionRatio的权衡下控制文件体积。无头浏览器录制以chromium.launch({ headless: config.headless })启动 Playwright 浏览器用browser.newContext({ viewport: scaledViewport, recordVideo: { dir, size } })开启视频录制页面加载一份动态生成的 HTML其中内联了 rrweb-player 的 UMD 脚本与样式路径由require.resolve(rrweb-player)推导随后new rrwebPlayer({ target: document.body, props: {...} })重建页面并play()。等待结束并落盘页面通过exposeFunction暴露onReplayFinish与onReplayProgressUpdate两个桥接函数前者在回放完成后触发 Promise 解析含基于播放时长的动态超时保护后者驱动 CLI 的进度条见 src/cli.ts 中ProgressBar的使用回放结束后把临时录制文件移动到--output指定路径并清理__rrvideo__temp__临时目录。视频录制期间页面上的报错pageerror与控制台输出console会被转发到终端便于定位回放异常。质量与结果验证仓库自带 CLI 的集成测试 test/cli.test.ts可直接印证上述行为不带--input运行时抛出please pass --input to your rrweb events file仅传--input时在仓库根目录生成rrvideo-output.webm同时传--input与--output时视频写入指定路径。测试数据 test/events/example.ts 展示了一份最小可用的 rrweb 事件结构包含DomContentLoaded、Load、Meta声明 1000×800 视口、FullSnapshot完整 DOM 快照以及IncrementalSnapshotMutation 增补 select 元素、Input 输入事件可作为你手工构造测试录制的参照模板——即一份可被 rrvideo 消费的 JSON 至少应包含 Meta 与 FullSnapshot再配合若干增量事件描述动态变化。使用建议与注意事项浏览器依赖rrvideo 依赖 Playwright 的 Chromium 内核安装时若跳过浏览器下载PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD1运行时需要单独确保浏览器可用否则会启动失败。长录制会转码较久转换是真实回放一次的过程视频时长与录制时长成正比受speed倍速影响超时上限为回放时长 2 分钟缓冲。输出格式默认输出为 WebMrrvideo-output.webm如需 MP4 等容器格式可在输出后自行转封装。文件体积控制resolutionRatio默认0.8是源码注释中质量与文件体积的权衡值追求更小文件可调低追求更高画质可调高最大 1。如需在浏览器内直接体验交互式回放而非转视频可参考 docs/recipes/index.zh_CN.md 下关于 rrweb-player 的文档二者在 rrweb 工作流中互补。综上rrvideo 用真实回放 浏览器录制的方式填补了 rrweb 事件数据与视频文件之间的鸿沟一条命令即可完成转换配置文件则让你在画质、尺寸、倍速与鼠标轨迹表现上拥有充分的定制空间。赞分享前端可观测性开发工具【免费下载链接】rrwebrecord and replay the web项目地址https://gitcode.com/gh_mirrors/rr/rrweb点击查看免费下载相关推荐rrweb 录制数据转视频实战使用 rrvideo 将会话回放导出为 WebM 视频rrweb 录制数据转视频实战使用 rrvideo 将会话回放导出为 WebM 视频 rrweb 的录制产物是一种高效、易于压缩的文本格式事件流回放时可达到前端可观测性开发工具rrweb 录制数据转视频实战使用 rrvideo 将会话回放导出为 WebM 视频rrweb 录制数据转视频实战使用 rrvideo 将会话回放导出为 WebM 视频 rrweb 的录制数据是高效的文本 JSON 格式可在浏览器中做像素级前端可观测性开发工具rrweb 跨域 iframe 录制实战原理、配置与四种注入方案rrweb 跨域 iframe 录制实战原理、配置与四种注入方案 本指南以 rrweb 官方配方文档 docs/recipes/cross origin if前端可观测性开发工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/20 11:25:30

深度强化学习实车部署实战:Sim2Real从仿真训练到落地避坑指南

简介:面向毕业设计与课程项目的深度强化实车部署教程资源,定位在帮助学习者理解PPO和SAC算法从仿真训练到实车部署的完整链路。压缩包共19个文件,约39.56MB,主体为6个Python源码脚本、8个模型权重文件(6个pth与2个pt&a…

2026/9/20 11:25:30

银河麒麟V10手动升级OpenSSH 9.x实操指南与避坑

1. 为什么要在银河麒麟V10上折腾OpenSSH升级银河麒麟V10(x86_64)这套系统,接触过的人都知道,它底层是Linux内核,包管理走的是RPM体系,但软件源里的OpenSSH版本往往停留在比较老的阶段。我这次接到的需求很直…

2026/9/20 11:25:30

Atlas 300V 24G推理卡部署YOLO全流程实战与环境避坑指南

Atlas这个词最近在AI圈子里刷屏频率不低,尤其Atlas 300V 24G这款卡,后台一直有人问:它到底算不算运算加速卡?能不能直接用来部署YOLO?部署过程折腾不折腾?这些问题我刚好在项目里都摸过一遍,今天…

2026/9/20 12:40:39

windows控制台cmd乱码解决方案

我们在cmd中执行命令的时候,有时候会出现中文乱码问题,我们可以使用chcp命令解决乱码在控制台输入chcp命令可以查看当前代码页的编码是963(简体中文 GBK编码)控制台中输入chcp 65001并回车将代码页编码改为 UTF-8,这样…

2026/9/20 12:40:39

advmemtest:免费图形化内存测试工具,不限轮数定位颗粒错误

搞内存测试这件事,说起来多少有点“平时没人关心,坏了才想起补课”的意思。无论是新装机的稳定性验证,还是老机器蓝屏、死机、软件闪退,排查到最后十有八九都把矛头指向内存。但市面上的内存测试工具,要么是命令行老古…

2026/9/20 12:40:39

Atlas 300V 24G部署YOLOv5全流程:从推理卡认知到模型转换与调优

接到一块 Atlas 300V 24G 的时候,我干的第一件事不是装驱动,而是先回答自己一个很基础的问题:它到底算不算“运算加速卡”?关于 Atlas 300V 24G 的定位,网上说法很乱,等我把 YOLOv5 在这张卡上完整部署跑通…

2026/9/20 12:40:39

无效对话过滤与强信号判定技术解析

1. 无效对话过滤首先,我们需要检查文本是否包含任何阻断项,如恶意攻击或纯垃圾/零互动。在提供的文本中,没有发现针对聊天对象的恶意攻击或纯垃圾/零互动的情况。因此,我们可以继续进行分析。2. 强信号判定接下来,我们…

2026/9/20 12:40:39

docker 安装 Minio

数据迁移(离线迁移)tmux new -s sync_miniorsync -av --partial -e ‘ssh -p 目标端口’ /mnt/vdb1/minio root目标ip:/目标路径查看进度:tmux a -t sync_jianguan查看列表:tmux ls验证是否传输完毕(看文件数是否一致&…

2026/9/20 0:04:49

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/20 0:04:49

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/20 0:04:49

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/20 0:04:49

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/20 4:54:47

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/20 5:01:23

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/20 5:09:33

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码