互动白板

介绍互动白板功能和应用场景,以及如何通过接入白板接口实现互动白板功能。

介绍互动白板功能及如何通过白板接口实现互动白板的应用场景

简介

白板是RTC应用的一项重要互动交互技术,可以丰富RTC应用场景,提高互动性。在线上会议、在线教育、远程协作、娱乐互动等场景均有较高使用价值。

DingRTC自研的互动白板同时支持多个平台,接入简单。使用原生渲染技术实现,具有时延低、同步性好、带宽占用小、功能丰富等特点。

主要功能

image.jpeg

  • 支持画笔、直线、箭头、矩形、椭圆、文字等工具,可设置颜色、粗细等样式

  • 可显示图片、支持自定义图章。

  • 支持图形二次编辑或移动,撤销、重做

  • 支持文档转码为图片或PDF显示(需要开通)

  • 可区分角色,可显示协作者名称

  • 白板支持多页及翻页显示,PDF可滚动浏览

  • 支持画布缩放、视角同步与跟随

  • 支持截图保存,云端录制和推流

集成方法

相关概念

频道(channel):通话频道。一个通话频道内可以创建多个白板对象,每个白板间数据相互独立,频道内用户可自由加入或离开白板会话。

白板(whiteboard):由whiteboardId唯一标识,不超过128字节,由大小写字母和数字组成,其中ding开头的字符串为内部保留字段。

文档(doc):白板内相互关联的一组页面集合。由docId唯一标识。一个白板内可以有多个文档,但单一时刻只显示一个文档。

页面(page):白板的页面或画布。白板一个时刻只显示一页。

接入方法

互动白板依托于RTC服务,使用白板必须加入RTC频道。下面以C++代码为例,其它语言类似。

  1. 获取白板管理器

加入频道后可以通过白板管理器对象创建和获取白板对象

RtcEngineWbManager* wbMgr = rtcEngine->GetWbManager()
//注册事件回调
if (wbMgr) {
  wbMgr->SetEventListener(wbMgrListener);
}
  1. 创建白板对象

指定白板ID和相关初始配置。其中widthheight请在各端设置一致,以保持相同的体验。

创建白板后可通过GetWhiteboard接口获取白板对象

WBConfig config;
config.mode = WBConfig::BASIC;
config.width = 1280; //设置白板宽度
config.height = 720; //设置白板高度
RtcEngineWhiteboard* whiteboard = wbMgr->CreateWhiteboard("whiteboard", config);
//注册事件回调
if (whiteboard) {
  whiteboard->SetEventListener(whiteboardListener);
}
  1. 打开白板

传入白板窗口句柄,调用Open打开白板。

第一个打开白板的用户会触发服务器产生白板创建的广播通知OnWhiteboardStart,新加入频道的用户会收到当前已经创建的白板通知。用户可以在收到OnWhiteboardStart之后Open。

注:调用Open会自动加入对应的白板会话

// Windows: window为HWND
// Mac: window为NSView*
// iOS: window为UIView*
// Android: window为SDK定义的DingRtcWhiteboardView
void* window;
whiteboard->Open(window);

// OnWhiteboardStart事件
void WhiteboardMgrListener::OnWhiteboardStart(const char* whiteboardId, WBConfig cfg) {
  // handle whiteboard start event, like open
}
  1. 设置白板工具等

whiteboard->SetToolType(WBToolType::PATH);
whiteboard->SetColor(WBColor(1.0f, 0.0f, 0.0f, 1.0f));
whiteboard->SetLineWidth(5);
...
  1. 开始绘制

使用鼠标和触摸手势在白板视图上绘制或操作

  1. 关闭白板

调用Close接口关闭白板窗口,但会继续同步该白板会话的内容。

调用Leave接口会关闭白板窗口,并断开白板会话的连接,停止内容同步。

调用Stop接口会销毁服务器上的白板会话,并通知所有人该白板已结束,数据会被清空。请谨慎使用。

离开RTC频道也会自动离开相关白板会话。

//关闭白板视图
whiteboard->Close();

//离开白板会话
whiteboard->Leave();

//结束白板会话
//白板数据会清空,频道内所有人都受影响
whiteboard->Stop();

// OnWhiteboardStop事件
void WhiteboardMgrListener::OnWhiteboardStop(const char* whiteboardId) {
  // handle whiteboard stop event
}