课件接入
适用于 Whiteboard HarmonyOS SDK 0.2.11。
多窗口以 App 表示课件。先完成加入白板房间并开启多窗口;需要协同创建/操作课件时,当前端应有可写权限。保留 addApp 返回的 appId,后续用于聚焦、关闭和页面控制。
选择课件类型
| kind | 用途 | 数据来源 |
|---|---|---|
| Slide | 动态 PPT、动画与逐步播放 | 动态转码 taskId/url,或支持的转码 scenes |
| Presentation | 静态 PPT / PDF 图片页 | 静态转码 scenes |
| DocsViewer | 文档场景展示 | scenes 与 scenePath;沿用原文档展示流程 |
| MediaPlayer | 音视频文件 | 可播放的媒体 src |
| Plyr | 基于 app-plyr 的第三方媒体课件 | 自定义 App 注册后传入 provider/src |
| EmbeddedPage | H5 页面课件 | 自定义 App 注册后传入网页 src |
图片页 scenes 中需保留转码返回的 ppt.src、width、height;scenePath 使用唯一目录,避免多个窗口复用同一绑定路径。taskId 是转码任务 ID,不能用房间 UUID 替代。
接入内置课件
HarmonyOS 的 Bridge 已注册内置课件,使用 Native 接口 addApp。WindowAppParam 是接口,按字段构造参数。
// WhiteboardOptions 中先设置 useMultiViews: true;以下在 onRoomReady 后调用。
const slide: WindowAppParam = {
kind: 'Slide', options: { scenePath: '/slide/lesson-1', title: '动态课件' },
attributes: { taskId: taskId, url: url }
};
const slideId = await controller.addApp(slide);
const presentation: WindowAppParam = {
kind: 'Presentation', options: { scenePath: '/presentation/lesson-1', scenes: scenes, title: '静态课件' }
};
await controller.addApp(presentation);
const docs: WindowAppParam = {
kind: 'DocsViewer', options: { scenePath: '/docs/lesson-1', scenes: scenes, title: '文档' }
};
await controller.addApp(docs);
const media: WindowAppParam = {
kind: 'MediaPlayer', options: { title: '媒体' }, attributes: { src: mediaUrl }
};
await controller.addApp(media);
配置动态 PPT
// WhiteboardOptions 内设置:
slideAppOptions: {
enableScale: true,
navigationButtonMode: 'step',
syncEventQueuePolicy: 'latest-pending-render'
}
Slide 的 enableScale 默认 false,开启后才使用页面缩放。navigationButtonMode 默认 page,可设 step 控制底部按钮按动画步骤前后移动。syncEventQueuePolicy 默认 fifo;latest-pending-render 在 interactive 模式合并积压的待渲染页,不会把所有事件都丢弃为最新一条。
动态配置注册参数
根据业务配置决定参数后,在首次初始化白板前设置 WhiteboardOptions。Slide 和 Presentation 已由 Native SDK 集成,直接设置本平台公开配置即可。
| 课件 | 公开配置入口 | 配置时机 |
|---|---|---|
| Slide 动态 PPT | WhiteboardOptions.slideAppOptions,类型为 SlideAppOptions | 首次初始化白板前;配置项见上文“配置动态 PPT” |
| Presentation 静态 PPT / PDF | WhiteboardOptions.presentationAppOptions,类型为 PresentationAppOptions | 首次初始化白板前,随后入房并添加或恢复课件 |
import { PresentationAppOptions } from '@shengwang/whiteboard';
const presentationOptions: PresentationAppOptions = {
maxCameraScale: 4,
useScrollbar: true,
useClipView: true
};
// 在传给 Whiteboard 的 WhiteboardOptions 中设置:
// presentationAppOptions: presentationOptions
可根据业务策略为上述字段选择不同值。保持同一个白板节点运行期间,修改业务对象不会自动更新已初始化的课件;应在下一次初始化白板前确定新配置。
Presentation 常用参数
| 参数 | 作用 |
|---|---|
maxCameraScale | 最大缩放倍率相对页面适配大小计算,例如 4 表示最多放大到适配大小的 4 倍 |
useScrollbar | 是否显示拖动滚动条 |
useClipView | 是否裁剪课件显示区域,只显示页面内容 |
这些参数在本端生效,各参与端应按业务要求配置。每个课件的 scenePath、scenes 和 title 仍在 addApp 的 options 中传入;每个窗口的 originSize 在 attributes 中设置,详见统一笔记。
自定义课件与 H5
HarmonyOS 0.2.11 没有公开 registerApp 接口。要使用 Plyr 或 EmbeddedPage,需由 SDK/Bridge 集成方先将对应 Web App 注册到内嵌 Bridge 并交付一致资源;业务层仅调用 addApp 不能加载尚未注册的 kind。此处不提供不存在的 Native 注册示例。
集成方可参考 Whiteboard Bridge 的注册链路及 WindowManager 自定义 App 开发。待集成方完成注册后,业务通过 WindowAppParam 的 kind/options/attributes 创建课件,H5 地址使用 attributes.src。
插件数据和协议参考 app-plyr 与 app-embedded-page。
注册是本端能力,课件 attributes 是需要协同的初始数据。同房间所有参与端都需要注册兼容的同一 kind,不能只在创建端注册。注册成功后再创建窗口;已有窗口由房间状态恢复时,也需要本端已具备对应 App。
H5 课件受 iframe 嵌入、CSP、跨域、登录态及移动 WebView 媒体策略约束。Plyr 的 provider/src 需遵循插件文档,不能把任意播放页 URL 当作可直接播放的媒体文件。要把 H5 内部操作同步给远端,还需要课件自己的协同实现。