diff --git a/.changeset/brave-walls-shine.md b/.changeset/brave-walls-shine.md
new file mode 100644
index 00000000..6cca7cf7
--- /dev/null
+++ b/.changeset/brave-walls-shine.md
@@ -0,0 +1,6 @@
+---
+"@rrweb/record": major
+"@rrweb/replay": major
+---
+
+BREAKING CHANGE: Rename UMD global names from `rrweb` to `rrwebRecord` for the recorder and `rrwebReplay` for the replayer. This avoids conflicts when both are loaded on the same page.
diff --git a/.changeset/cuddly-dolphins-approve.md b/.changeset/cuddly-dolphins-approve.md
new file mode 100644
index 00000000..e05403b6
--- /dev/null
+++ b/.changeset/cuddly-dolphins-approve.md
@@ -0,0 +1,10 @@
+---
+"@rrweb/all": patch
+"@rrweb/packer": patch
+"@rrweb/record": patch
+"rrweb-snapshot": patch
+"rrweb": patch
+"@rrweb/web-extension": patch
+---
+
+Drop base64 inlined worker source from all bundles
diff --git a/.changeset/tender-foxes-rest.md b/.changeset/tender-foxes-rest.md
new file mode 100644
index 00000000..594f363f
--- /dev/null
+++ b/.changeset/tender-foxes-rest.md
@@ -0,0 +1,5 @@
+---
+"rrvideo": patch
+---
+
+Adjust replay timeout to be based on video duration plus a 2-minute buffer instead of a fixed 2-minute timeout. This prevents timeout errors for longer recordings.
diff --git a/.changeset/twenty-flies-attend.md b/.changeset/twenty-flies-attend.md
new file mode 100644
index 00000000..23e9fc98
--- /dev/null
+++ b/.changeset/twenty-flies-attend.md
@@ -0,0 +1,5 @@
+---
+"rrvideo": patch
+---
+
+Add better logging on playback and fix the use of rrweb-player so it doesn't stall and fail playback
diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml
index f51b6283..7addf410 100644
--- a/.github/workflows/ci-cd.yml
+++ b/.github/workflows/ci-cd.yml
@@ -31,6 +31,9 @@ jobs:
- name: Build Project
run: NODE_OPTIONS='--max-old-space-size=4096' yarn build:all
+ - name: Install Playwright browsers
+ run: cd packages/rrvideo && yarn playwright install chromium
+
- name: Check types
run: yarn check-types
diff --git a/guide.md b/guide.md
index 764e359f..887382a0 100644
--- a/guide.md
+++ b/guide.md
@@ -33,6 +33,20 @@ This also can be done by using the `@rrweb/record` package and the CDN service:
```
+The recorder UMD build exposes a global named `rrwebRecord`.
+
+#### Only include the replayer code
+
+```html
+
+
+```
+
+The replayer UMD build exposes a global named `rrwebReplay`.
+
#### Other packages
Besides the `rrweb` and `@rrweb/record` packages, rrweb also provides other packages for different usage.
@@ -326,7 +340,7 @@ rrweb-player can also be included with `
+
```
Or installed by using NPM:
diff --git a/guide.zh_CN.md b/guide.zh_CN.md
index 4078cb2b..aa7ee438 100644
--- a/guide.zh_CN.md
+++ b/guide.zh_CN.md
@@ -30,6 +30,20 @@ rrweb 代码分为录制和回放两部分,大多数时候用户在被录制
```
+录制端的 UMD build 会暴露全局变量 `rrwebRecord`。
+
+#### 仅引入回放部分
+
+```html
+
+
+```
+
+回放端的 UMD build 会暴露全局变量 `rrwebReplay`。
+
#### 其他包
除了 `rrweb` 和 `@rrweb/record` 包之外,rrweb 还提供了其他不同用途的包。
@@ -320,7 +334,7 @@ rrweb-player 同样可以使用 CDN 方式安装:
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/rrweb-player@latest/dist/style.css"
/>
-
+
```
或者通过 npm 安装:
diff --git a/packages/all/package.json b/packages/all/package.json
index 6ba3be11..1c82ec37 100644
--- a/packages/all/package.json
+++ b/packages/all/package.json
@@ -50,7 +50,7 @@
],
"devDependencies": {
"puppeteer": "^20.9.0",
- "vite": "^5.3.1",
+ "vite": "^6.0.1",
"vite-plugin-dts": "^3.9.1",
"vitest": "^1.4.0",
"typescript": "^5.4.5"
diff --git a/packages/packer/package.json b/packages/packer/package.json
index 662b294a..0120aa94 100644
--- a/packages/packer/package.json
+++ b/packages/packer/package.json
@@ -71,7 +71,7 @@
"package.json"
],
"devDependencies": {
- "vite": "^5.3.1",
+ "vite": "^6.0.1",
"vite-plugin-dts": "^3.9.1",
"vitest": "^1.4.0",
"typescript": "^5.4.5"
diff --git a/packages/plugins/rrweb-plugin-canvas-webrtc-record/package.json b/packages/plugins/rrweb-plugin-canvas-webrtc-record/package.json
index 2d908e8c..3507a881 100644
--- a/packages/plugins/rrweb-plugin-canvas-webrtc-record/package.json
+++ b/packages/plugins/rrweb-plugin-canvas-webrtc-record/package.json
@@ -45,7 +45,7 @@
"devDependencies": {
"rrweb": "^2.0.0-alpha.20",
"typescript": "^5.4.5",
- "vite": "^5.3.1",
+ "vite": "^6.0.1",
"vite-plugin-dts": "^3.9.1"
},
"peerDependencies": {
diff --git a/packages/plugins/rrweb-plugin-canvas-webrtc-replay/package.json b/packages/plugins/rrweb-plugin-canvas-webrtc-replay/package.json
index c31cb7d0..8c11d607 100644
--- a/packages/plugins/rrweb-plugin-canvas-webrtc-replay/package.json
+++ b/packages/plugins/rrweb-plugin-canvas-webrtc-replay/package.json
@@ -45,7 +45,7 @@
"devDependencies": {
"rrweb": "^2.0.0-alpha.20",
"typescript": "^5.4.5",
- "vite": "^5.3.1",
+ "vite": "^6.0.1",
"vite-plugin-dts": "^3.9.1"
},
"peerDependencies": {
diff --git a/packages/plugins/rrweb-plugin-console-record/package.json b/packages/plugins/rrweb-plugin-console-record/package.json
index 63825db4..a5d98992 100644
--- a/packages/plugins/rrweb-plugin-console-record/package.json
+++ b/packages/plugins/rrweb-plugin-console-record/package.json
@@ -47,7 +47,7 @@
"devDependencies": {
"rrweb": "^2.0.0-alpha.20",
"typescript": "^5.4.5",
- "vite": "^5.3.1",
+ "vite": "^6.0.1",
"vite-plugin-dts": "^3.9.1",
"vitest": "^1.4.0",
"puppeteer": "^20.9.0"
diff --git a/packages/plugins/rrweb-plugin-console-replay/package.json b/packages/plugins/rrweb-plugin-console-replay/package.json
index ac88d7ea..0f7d9038 100644
--- a/packages/plugins/rrweb-plugin-console-replay/package.json
+++ b/packages/plugins/rrweb-plugin-console-replay/package.json
@@ -46,7 +46,7 @@
"@rrweb/rrweb-plugin-console-record": "^2.0.0-alpha.20",
"rrweb": "^2.0.0-alpha.20",
"typescript": "^5.4.5",
- "vite": "^5.3.1",
+ "vite": "^6.0.1",
"vite-plugin-dts": "^3.9.1"
},
"peerDependencies": {
diff --git a/packages/plugins/rrweb-plugin-sequential-id-record/package.json b/packages/plugins/rrweb-plugin-sequential-id-record/package.json
index 61fee1b9..25128478 100644
--- a/packages/plugins/rrweb-plugin-sequential-id-record/package.json
+++ b/packages/plugins/rrweb-plugin-sequential-id-record/package.json
@@ -45,7 +45,7 @@
"devDependencies": {
"rrweb": "^2.0.0-alpha.20",
"typescript": "^5.4.5",
- "vite": "^5.3.1",
+ "vite": "^6.0.1",
"vite-plugin-dts": "^3.9.1"
},
"peerDependencies": {
diff --git a/packages/plugins/rrweb-plugin-sequential-id-replay/package.json b/packages/plugins/rrweb-plugin-sequential-id-replay/package.json
index 2d32495c..3228f84c 100644
--- a/packages/plugins/rrweb-plugin-sequential-id-replay/package.json
+++ b/packages/plugins/rrweb-plugin-sequential-id-replay/package.json
@@ -46,7 +46,7 @@
"@rrweb/rrweb-plugin-sequential-id-record": "^2.0.0-alpha.20",
"rrweb": "^2.0.0-alpha.20",
"typescript": "^5.4.5",
- "vite": "^5.3.1",
+ "vite": "^6.0.1",
"vite-plugin-dts": "^3.9.1"
},
"peerDependencies": {
diff --git a/packages/record/package.json b/packages/record/package.json
index 266984e1..0bc9ebfd 100644
--- a/packages/record/package.json
+++ b/packages/record/package.json
@@ -49,7 +49,7 @@
],
"devDependencies": {
"puppeteer": "^20.9.0",
- "vite": "^5.3.1",
+ "vite": "^6.0.1",
"vite-plugin-dts": "^3.9.1",
"vitest": "^1.4.0",
"typescript": "^5.4.5"
diff --git a/packages/record/vite.config.ts b/packages/record/vite.config.ts
index cf4366a0..fff4031c 100644
--- a/packages/record/vite.config.ts
+++ b/packages/record/vite.config.ts
@@ -1,4 +1,4 @@
import path from 'path';
import config from '../../vite.config.default';
-export default config(path.resolve(__dirname, 'src/index.ts'), 'rrweb');
+export default config(path.resolve(__dirname, 'src/index.ts'), 'rrwebRecord');
diff --git a/packages/replay/package.json b/packages/replay/package.json
index 02760133..8c821627 100644
--- a/packages/replay/package.json
+++ b/packages/replay/package.json
@@ -50,7 +50,7 @@
],
"devDependencies": {
"puppeteer": "^20.9.0",
- "vite": "^5.3.1",
+ "vite": "^6.0.1",
"vite-plugin-dts": "^3.9.1",
"vitest": "^1.4.0",
"typescript": "^5.4.5"
diff --git a/packages/replay/vite.config.ts b/packages/replay/vite.config.ts
index cf4366a0..30c839ed 100644
--- a/packages/replay/vite.config.ts
+++ b/packages/replay/vite.config.ts
@@ -1,4 +1,4 @@
import path from 'path';
import config from '../../vite.config.default';
-export default config(path.resolve(__dirname, 'src/index.ts'), 'rrweb');
+export default config(path.resolve(__dirname, 'src/index.ts'), 'rrwebReplay');
diff --git a/packages/rrdom-nodejs/package.json b/packages/rrdom-nodejs/package.json
index d7c82193..b58b0d88 100644
--- a/packages/rrdom-nodejs/package.json
+++ b/packages/rrdom-nodejs/package.json
@@ -46,7 +46,7 @@
"compare-versions": "^4.1.3",
"eslint": "^8.15.0",
"puppeteer": "^9.1.1",
- "vite": "^5.3.1",
+ "vite": "^6.0.1",
"vite-plugin-dts": "^3.9.1",
"vitest": "^1.4.0",
"typescript": "^5.4.5"
diff --git a/packages/rrdom/package.json b/packages/rrdom/package.json
index 7760a8af..dbd14207 100644
--- a/packages/rrdom/package.json
+++ b/packages/rrdom/package.json
@@ -48,7 +48,7 @@
"eslint": "^8.15.0",
"puppeteer": "^17.1.3",
"typescript": "^5.4.5",
- "vite": "^5.3.1",
+ "vite": "^6.0.1",
"vite-plugin-dts": "^3.9.1"
},
"dependencies": {
diff --git a/packages/rrvideo/src/index.ts b/packages/rrvideo/src/index.ts
index b1d38f1a..31d07815 100644
--- a/packages/rrvideo/src/index.ts
+++ b/packages/rrvideo/src/index.ts
@@ -57,22 +57,27 @@ function getHtml(events: Array, config?: RRvideoConfig): string {
)};
/*-->*/
const userConfig = ${JSON.stringify(config?.rrwebPlayer || {})};
- window.replayer = new rrwebPlayer.Player({
- target: document.body,
- width: userConfig.width,
- height: userConfig.height,
- props: {
- ...userConfig,
- events,
- showController: false,
- },
- });
- window.replayer.addEventListener('finish', () => window.onReplayFinish());
- window.replayer.addEventListener('ui-update-progress', (payload)=> window.onReplayProgressUpdate
- (payload));
- window.replayer.addEventListener('resize',()=>document.querySelector('.replayer-wrapper').style.transform = 'scale(${
- (config?.resolutionRatio ?? 1) * MaxScaleValue
- }) translate(-50%, -50%)');
+ try {
+ window.replayer = new rrwebPlayer({
+ target: document.body,
+ props: {
+ ...userConfig,
+ events,
+ showController: false,
+ autoPlay: false,
+ },
+ });
+ window.replayer.addEventListener('finish', () => window.onReplayFinish());
+ window.replayer.addEventListener('ui-update-progress', (payload)=> window.onReplayProgressUpdate(payload));
+ window.replayer.addEventListener('resize', () => document.querySelector('.replayer-wrapper').style.transform = 'scale(${
+ (config?.resolutionRatio ?? 1) * MaxScaleValue
+ }) translate(-50%, -50%)');
+ // Start playback after event listeners are attached
+ window.replayer.play();
+ } catch (error) {
+ console.error('Error initializing replayer:', error);
+ window.onReplayFinish();
+ }