Skip to content

查看与分享录制

使用仪表板进行内部调查,或在获得授权的查看者需要托管播放器 或截图时,签发一个短期有效的预签名 URL。私有 API 密钥拥有完整的读写权限。它只能放在受信服务器上。 绝不要在浏览器代码中暴露私有 API 密钥。

在仪表板中查看录制

打开 rrweb Cloud 仪表板中的录制, 选择一个录制,并使用内置的时间线和播放控件;对于已经拥有 仪表板访问权限的团队成员来说,这是最简单的选择。

对于应用自有的查看者,请继续使用受限链接,而不是要求查看者 输入 API 密钥。

在受信服务器上,使用私有 API 密钥并附带 includeSignedUrls=true 请求录制描述符,然后只将获得授权的查看者所需的签名链接返回给它;预签名 URL 是限定到单个资源的持有者凭据,会在 expires 中编码的时间之后过期。

当签名可用时,获取录制 操作会返回以下结构:

json
{
  "recordingId": "550e8400-e29b-41d4-a716-446655440000",
  "metadata": {},
  "links": {
    "self": "/recordings/550e8400-e29b-41d4-a716-446655440000",
    "events": "/recordings/550e8400-e29b-41d4-a716-446655440000/events",
    "player": "/recordings/550e8400-e29b-41d4-a716-446655440000/player",
    "screenshot": "/recordings/550e8400-e29b-41d4-a716-446655440000/screenshot",
    "eventsSigned": "/recordings/550e8400-e29b-41d4-a716-446655440000/events?tenantId=...&expires=...&keyId=...&signature=...",
    "playerSigned": "/recordings/550e8400-e29b-41d4-a716-446655440000/player.html?tenantId=...&expires=...&keyId=...&signature=...",
    "screenshotPngSigned": "/recordings/550e8400-e29b-41d4-a716-446655440000/screenshot.png?tenantId=...&expires=...&keyId=...&signature=..."
  }
}
bash
curl --get \
  --url 'https://api.rrweb.com/recordings/550e8400-e29b-41d4-a716-446655440000' \
  --header 'Authorization: Bearer secret_key_rr_your_key' \
  --header 'Accept: application/json' \
  --data-urlencode 'includeSignedUrls=true'

在链接有效期内,请保护它不被日志和分析工具记录。 当前返回的 playerSigned 链接指向 /player.htmlscreenshotPngSigned 指向 /screenshot.png

嵌入托管播放器

从你的应用服务器为嵌入提供已授权的 playerSigned 值,然后使用 URL API 添加 modecontrolsautoplaytime 等显示选项,再将其设置为 iframe 的 src

获取录制 播放器操作记录了规范端点。

javascript
const playerUrl = new URL(playerSigned, 'https://api.rrweb.com');
playerUrl.searchParams.set('mode', 'minimal');
playerUrl.searchParams.set('controls', 'true');
playerUrl.searchParams.set('autoplay', 'false');

document.querySelector('#replay-frame').src = playerUrl.toString();
html
<iframe
  id="replay-frame"
  title="Session replay"
  allow="fullscreen"
  referrerpolicy="no-referrer"
></iframe>

/recordings/{recordingId}/player.html 端点接受:

  • controlstruefalse
  • autoplaytruefalse
  • modestandardminimalcapture
  • speed:从 0.254;以及
  • timeoffset:0offset:-5000percent:50epoch:1702900000000

签名保护请求方法、资源路径、租户和过期时间。这些播放器选项 不受完整性保护,因此如果查看者不得更改它们,请在你自己的 应用中进行约束。

捕获录制截图

在受信服务器上使用私有 API 密钥请求 /screenshot.png/screenshot.jpeg/screenshot.webp,并选择 timewidthheightquality 来控制捕获的画面。

获取录制截图 操作支持这些格式。受信服务器 可以请求任意格式,并将生成的图片代理给获得授权的查看者:

bash
curl --get \
  --url 'https://api.rrweb.com/recordings/550e8400-e29b-41d4-a716-446655440000/screenshot.png?time=percent%3A50&width=1280&height=720' \
  --header 'Authorization: Bearer secret_key_rr_your_key' \
  --header 'Accept: image/png' \
  --output recording.png

不带扩展名时,发送 Accept: image/pngimage/jpegimage/webp。扩展名优先于请求头。截图选项包括:

  • time,使用与播放器相同的 offset、percent 或 epoch 形式;
  • widthheight,各为 1 到 4096 像素;以及
  • quality,JPEG 和 WebP 使用的 1 到 100 的整数。PNG 会忽略 quality

录制详情响应会生成一个已签名的 PNG 链接。需要这些格式时, 请通过受信服务器请求 JPEG 或 WebP。

访问故障排查

  • 401 通常表示缺少身份验证,或凭据缺少录制事件的读取 权限。
  • 签名链接返回 403 通常表示其签名无效或已过期。
  • 404 表示未找到录制或事件流。
  • 422 截图响应表示请求的 time 超出了 录制范围。

完整的凭据模型参见认证