参考本文,你可以构建一个简单的互动白板桌面应用,基于 Electron 架构,集成火山引擎互动白板 SDK,实现白板绘制和实时同步。
在项目文件夹中创建以下文件:
.
├── index.html // 设计 app 的用户界面
├── main.js // 主进程文件
├── package.json // 安装和管理项目依赖项。你可以通过 npm init 命令进行项目初始化配置
└── renderer.js // 渲染进程文件
通过包管理工具 npm 下载 SDK。不指定版本表示下载最新版本。
npm install @volcengine/white-board-manage --save
node_modules 目录下。比如:./node_modules/@volcengine/white-board-manage。参考以下代码,在 index.html 中完成用户交互界面的设计,即白板画布。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>WhiteBoard Quickstart</title>
<style>
.whiteboard-view {
width: 640px;
height: 360px;
border: 1px solid lightblue;
}
</style>
</head>
<body>
<h1>WhiteBoard Quickstart</h1>
<!--画布 -->
<div class="whiteboard-view">
<div id="whiteboard"></div>
</div>
<script src="./renderer.js"></script>
</body>
</html>
html在 main.js 中实现 Electron 应用的主进程。
const { app, BrowserWindow } = require("electron");
const path = require("path");
// 如果你使用 Electron 9.x 及以上版本,将 allowRendererProcessReuse 设为 false。
app.allowRendererProcessReuse = false;
function createWindow() {
// 创建浏览器窗口
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
preload: path.join(__dirname, "renderer.js"),
nodeIntegration: true,
contextIsolation: false
},
});
// 加载 index.html 文件的内容
mainWindow.loadFile("./index.html");
// 开启开发者工具
mainWindow.webContents.openDevTools();
}
// 管理 Electron 应用的浏览器窗口
app.whenReady().then(() => {
createWindow();
// 如果当前没有窗口打开,则新建一个窗口(适用于 macOS)
app.on("activate", function () {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow();
}
});
});
// 如果所有窗口都已关闭,则退出 Electron 应用(适用于 Windows)
app.on("window-all-closed", function () {
if (process.platform !== "darwin") app.quit();
});
javascript在渲染进程 renderer.js 中利用白板 SDK 实现白板的基础功能。
API 调用时序参考下图。

调用 init 创建一个本地 白板房间 对象。
Board.init({
domId: 'whiteboard',
appId,
});
javascript参考 开通服务 获取 appId。
WhiteBoardRoom 的promise。leaveRoom 退出房间后停止计费。建议在即将使用白板前创建白板实例。并结束使用后及时销毁白板实例。 const activeRoom = await veWhiteBoard.joinRoom({
roomId, // 白板房间 roomId 不能与 RTC 房间 roomId 相同。以免影响白板房间和 RTC 房间内回调提醒相互影响。建议为白板房间名加上 `whiteboard_` 前缀。
userId, //白板用户 userId 不能与 RTC userId 相同。
token, //参考 [使用 Token 完成鉴权](70121.html) 获取 Token。Token 有效时长应大于单次白板互动时长。例如, 24 小时。
});
javascriptWhiteBoard 后监听想要关注的事件回调。例如,在进房成功后获取白板对象信息、白板改变、回放状态变化等。activeRoom..on(SDK.WhiteBoardRoomEventsTypes.onError, function (res) {
if (res.errorCode === ErrorCode.DUPLICATE_LOGIN) {
message.error('您已被踢出房间');
// 根据实际业务要求添加监听到不同状态后的响应措施。
}
});
// 监听当前白板改变,获取当前被激活白板。
activeRoom.on(
SDK.WhiteBoardRoomEventsTypes.onCurrentWhiteBoardChanged,
async ({ userId, boardId, whiteBoard }) => {
},
);
javascript调用 WhiteBoard 类的 setEditType 方法设置工具类型,目前支持工具类型如下:
pointer // 选取图元 ToolMode.POINTER
pencilBrush //涂鸦画笔 ToolMode.PENCIL_BRUSH
textbox // 文本 ToolMode.TEXT
circle // 圆 ToolMode.CIRCLE
line // 直线 ToolMode.LINE
rect // 矩形 ToolMode.RECT
arrow // 箭头 ToolMode.ARROW
eraser // 橡皮擦 ToolMode.ERASER
zoom // 平移 ToolMode.zoom
whiteBoard.setEditType(key);
javascript调用 leaveRoom离开房间。调用后将同时销毁白板房间实例。你将无法继续调用 WhiteboardRoom 中的方法。
在渲染进程中实现白板互动的完整示例代码如下。
window.addEventListener("DOMContentLoaded", bootstrap);
let activeRoom;
let activeWhiteBoard;
async function bootstrap() {
const SDK = require("@volcengine/white-board-manage");
const veWhiteBoard = SDK.default;
// 填入你的 App ID
const APPID = "";
// 填入你的 Room ID
const roomId = 'my-room';
// 填入你的 User ID
const userId = 'test';
// 填入你的 Token
const token = "";
veWhiteBoard.init({
appId: APPID,
domId: 'whiteboard',
});
activeRoom = await veWhiteBoard.joinRoom({
roomId,
userId,
token,
});
activeRoom.on(SDK.WhiteBoardRoomEventsTypes.onCurrentWhiteBoardChanged, ev => {
activeWhiteBoard = ev.whiteBoard;
// 使用画笔能力
activeWhiteBoard.setEditType(SDK.ToolMode.PENCIL_BRUSH);
});
}
/**
* 离开房间
*/
async function leaveRoom() {
if (activeRoom) {
activeRoom.leaveRoom();
}
}
javascriptnpm install electron@latest --save-dev
package.json 指定主进程文件和开始脚本。{
"main": "main.js", // 指定实际项目入口文件
"scripts": {
"start": "electron ."
},
}
npm run start
推荐使用 electron-builder 工具打包你的 Electron 项目。
npm install electron-builder@latest --save-dev
{
"scripts": {
"build": "electron-builder"
},
}
jsonnpm run build