介绍互动白板功能和应用场景,以及如何通过接入白板接口实现互动白板功能。
介绍互动白板功能及如何通过白板接口实现互动白板的应用场景
简介
白板是RTC应用的一项重要互动交互技术,可以丰富RTC应用场景,提高互动性。在线上会议、在线教育、远程协作、娱乐互动等场景均有较高使用价值。
DingRTC自研的互动白板同时支持多个平台,接入简单。使用原生渲染技术实现,具有时延低、同步性好、带宽占用小、功能丰富等特点。
主要功能
支持画笔、直线、箭头、矩形、椭圆、文字等工具,可设置颜色、粗细等样式
可显示图片、支持自定义图章。
支持图形二次编辑或移动,撤销、重做
支持文档转码为图片或PDF显示(需要开通)
可区分角色,可显示协作者名称
白板支持多页及翻页显示,PDF可滚动浏览
支持画布缩放、视角同步与跟随
支持截图保存,云端录制和推流
集成方法
相关概念
频道(channel):通话频道。一个通话频道内可以创建多个白板对象,每个白板间数据相互独立,频道内用户可自由加入或离开白板会话。
白板(whiteboard):由whiteboardId唯一标识,不超过128字节,由大小写字母和数字组成,其中ding开头的字符串为内部保留字段。
文档(doc):白板内相互关联的一组页面集合。由docId唯一标识。一个白板内可以有多个文档,但单一时刻只显示一个文档。
页面(page):白板的页面或画布。白板一个时刻只显示一页。
接入方法
互动白板依托于RTC服务,使用白板必须加入RTC频道。下面以C++代码为例,其它语言类似。
获取白板管理器
加入频道后可以通过白板管理器对象创建和获取白板对象
RtcEngineWbManager* wbMgr = rtcEngine->GetWbManager()
//注册事件回调
if (wbMgr) {
wbMgr->SetEventListener(wbMgrListener);
}
创建白板对象
指定白板ID和相关初始配置。其中width和height请在各端设置一致,以保持相同的体验。
创建白板后可通过GetWhiteboard接口获取白板对象
WBConfig config;
config.mode = WBConfig::BASIC;
config.width = 1280; //设置白板宽度
config.height = 720; //设置白板高度
RtcEngineWhiteboard* whiteboard = wbMgr->CreateWhiteboard("whiteboard", config);
//注册事件回调
if (whiteboard) {
whiteboard->SetEventListener(whiteboardListener);
}
打开白板
传入白板窗口句柄,调用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
}
设置白板工具等
whiteboard->SetToolType(WBToolType::PATH);
whiteboard->SetColor(WBColor(1.0f, 0.0f, 0.0f, 1.0f));
whiteboard->SetLineWidth(5);
...
开始绘制
使用鼠标和触摸手势在白板视图上绘制或操作
关闭白板
调用Close接口关闭白板窗口,但会继续同步该白板会话的内容。
调用Leave接口会关闭白板窗口,并断开白板会话的连接,停止内容同步。
调用Stop接口会销毁服务器上的白板会话,并通知所有人该白板已结束,数据会被清空。请谨慎使用。
离开RTC频道也会自动离开相关白板会话。
//关闭白板视图
whiteboard->Close();
//离开白板会话
whiteboard->Leave();
//结束白板会话
//白板数据会清空,频道内所有人都受影响
whiteboard->Stop();
// OnWhiteboardStop事件
void WhiteboardMgrListener::OnWhiteboardStop(const char* whiteboardId) {
// handle whiteboard stop event
}