Skip to content

实时回放(实时模式) ​

如果你希望以实时的方式回放事件,可以使用实时模式 API。该 API 同样适用于一些实时协作场景。

使用 Replayer 进行实时回放时,配置 liveMode: true 并调用 startLive() 即可启用实时模式。

js
import { Replayer } from '@rrweb/replay';

const replayer = new Replayer([], {
  liveMode: true,
});
replayer.startLive();

之后当你收到新的事件时(例如通过 websockets),可以使用以下方式添加:

function onReceive(event) {
  replayer.addEvent(event);
}

如果一段录制仍在进行中且已经产生了事件,而你希望从“实时”时间点开始播放,也可以使用 play 函数,并传入一个与当前时间对应的偏移量:

js
import { Replayer } from '@rrweb/replay';

const replayer = new Replayer(EXISTING_EVENTS, {
  liveMode: true,
});
replayer.play(Date.now() - EXISTING_EVENTS[0].timestamp);

调用 startLive API 时,可以传入一个可选参数来设置基线时间。默认情况下该值为 Date.now(),这样事件一到达就会被应用,但这可能会让回放看起来有卡顿。因为数据传输需要时间(例如网络延迟),而且一些事件默认被节流(例如鼠标移动),会产生延迟。

以下是引入缓冲的方法:

js
const BUFFER_MS = 1000;
replayer.startLive(Date.now() - BUFFER_MS);

这会让回放始终比源端延迟 1 秒。如果数据传输时间不超过 1 秒,用户就不会感到卡顿。

play 也可以做同样的处理:replayer.play((Date.now() - EXISTING_EVENTS[0].timestamp) - BUFFER_MS)