nimeet 文档中心
English

白板快速开始

创建房间、签发房间 Token、用 Web SDK 加入并画出第一条笔迹。

版本 v1.0.0 · 更新于 2026-10-28 · 修订 1

这一页用四步跑通白板:创建房间、签发房间 Token、用 Web SDK 加入并画一笔、导出快照或回放。

前置条件

  • 已有一个启用 RTC 的项目,拿到 customerId / customerSecret(控制台的项目密钥页)。
  • 控制面地址(示例使用 https://api.your-domain.example)。
  • Node.js 22+ 或任意支持 Fetch 的浏览器运行时。

第一步:创建房间

用项目凭证调用房间接口。limit 表示同时可写的成员上限,0 为不限制。

bash
curl --request POST "$NIMEET_API_BASE/v1/whiteboard/rooms" \
  --user "$NIMEET_CUSTOMER_ID:$NIMEET_CUSTOMER_SECRET" \
  --header "content-type: application/json" \
  --data '{"isRecord": false, "limit": 8}'

响应中的 uuid 就是房间标识。

第二步:签发房间 Token

房间 Token 绑定到该房间,并带角色与有效期(毫秒,0 表示不过期)。浏览器只应拿到 Token,不应拿到项目密钥。

bash
curl --request POST "$NIMEET_API_BASE/v1/whiteboard/tokens/rooms/$ROOM_UUID" \
  --user "$NIMEET_CUSTOMER_ID:$NIMEET_CUSTOMER_SECRET" \
  --header "content-type: application/json" \
  --data '{"role": "writer", "lifespan": 3600000}'

第三步:加入房间并画一笔

javascript
import { WhiteboardSdk } from '@nimeet/sdk-whiteboard-web';

const sdk = new WhiteboardSdk({ apiBase: 'https://api.your-domain.example' });
const room = await sdk.joinRoom({
  uuid: ROOM_UUID,
  roomToken: ROOM_TOKEN,
  memberId: 'alice',
});

await room.addPage({ name: 'page1', path: '/demo/page1' });
await room.setScenePath('/demo/page1');

const stroke = await room.drawStroke({
  appliance: 'pencil',
  color: '#1f6feb',
  width: 3,
  points: [
    { x: 120, y: 160 },
    { x: 220, y: 240 },
    { x: 320, y: 180 },
  ],
});
console.log('stroke', stroke.id, 'room version', room.roomInfo.version);

页面切换、图片插入、视口移动分别使用 room.setScenePath、room.insertImage、room.moveCamera;撤销与重做是 room.undo() / room.redo()。

第四步:导出与回放

bash
curl --request GET "$NIMEET_API_BASE/v1/whiteboard/rooms/$ROOM_UUID/snapshot" \
  --user "$NIMEET_CUSTOMER_ID:$NIMEET_CUSTOMER_SECRET"

curl --request GET "$NIMEET_API_BASE/v1/whiteboard/rooms/$ROOM_UUID/replay?from=2026-10-28T00:00:00Z" \
  --user "$NIMEET_CUSTOMER_ID:$NIMEET_CUSTOMER_SECRET"

快照包含所有场景、笔迹、图片和操作日志;回放返回按时间排序的操作帧。也可以直接下载 <ROOM_UUID>/snapshot.svg 作为当前场景的缩略图。

实时同步

Web SDK 通过注入的 LiveKit transport 把操作发布到 whiteboard topic:

javascript
import { LiveKitWhiteboardSync, WhiteboardSdk } from '@nimeet/sdk-whiteboard-web';

const sync = new LiveKitWhiteboardSync({
  publishData: (payload, options) => room.localParticipant.publishData(payload, options),
});
room.localParticipant.on('dataReceived', (packet) => sync.receive(packet.payload));

const sdk = new WhiteboardSdk({ apiBase: 'https://api.your-domain.example' });
const whiteboard = await sdk.joinRoom({ uuid: ROOM_UUID, roomToken: ROOM_TOKEN, memberId: 'alice', sync });

REST 仍是权威状态;实时通道丢包时调用 room.refresh() 重新拉取场景状态即可对齐。

下一步

本页由文档构建流水线生成 · 2026-10-31 01:24:02 UTC · 文档中心 v1.1.0.

内容依据公开 API 定义.

ni-meet 是自建 RTC PaaS,媒体面基于 LiveKit(Apache-2.0),并与声网 API 兼容。