课件接入
适用于 Whiteboard iOS SDK 2.16.147。
多窗口以 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 替代。
接入内置课件
Native Bridge 已注册内置课件;在创建 SDK 前配置 useMultiViews,入房后添加窗口。
config.useMultiViews = YES;
// 以下在入房成功后调用。
WhiteAppParam *slide = [WhiteAppParam createSlideApp:@"/slide/lesson-1"
taskId:taskId url:url title:@"动态课件"];
[room addApp:slide completionHandler:^(NSString *appId) { NSLog(@"%@", appId); }];
[room addApp:[WhiteAppParam createPresentationApp:@"/presentation/lesson-1" scenes:scenes title:@"静态课件"]
completionHandler:^(NSString *appId) { NSLog(@"%@", appId); }];
[room addApp:[WhiteAppParam createDocsViewerApp:@"/docs/lesson-1" scenes:scenes title:@"文档"]
completionHandler:^(NSString *appId) { NSLog(@"%@", appId); }];
[room addApp:[WhiteAppParam createMediaPlayerApp:mediaUrl title:@"媒体"]
completionHandler:^(NSString *appId) { NSLog(@"%@", appId); }];
配置动态 PPT
config.whiteSlideAppParams.enableScale = YES;
config.whiteSlideAppParams.syncEventQueuePolicy = WhiteSlideSyncEventQueuePolicyLatestPendingRender;
Slide 的 enableScale 默认 false,开启后才使用页面缩放。navigationButtonMode 默认 page,可设 step 控制底部按钮按动画步骤前后移动。syncEventQueuePolicy 默认 fifo;latest-pending-render 在 interactive 模式合并积压的待渲染页,不会把所有事件都丢弃为最新一条。
动态配置注册参数
根据业务配置决定参数后,在创建 WhiteSDK 前写入 WhiteSdkConfiguration。Slide 和 Presentation 已由 Native SDK 集成,直接设置本平台公开配置即可。
| 课件 | 公开配置入口 | 配置时机 |
|---|---|---|
| Slide 动态 PPT | config.whiteSlideAppParams,类型为 WhiteSlideAppParams | 创建 SDK 前;配置项见上文“配置动态 PPT” |
| Presentation 静态 PPT / PDF | config.presentationAppOptions,类型为 WhitePresentationAppOptions | 创建 SDK 前,随后入房并添加或恢复课件 |
// 与上文 Slide 参数一起,在创建 WhiteSDK 前设置。
WhitePresentationAppOptions *presentationOptions = [WhitePresentationAppOptions new];
presentationOptions.maxCameraScale = @4;
presentationOptions.useScrollbar = @YES;
presentationOptions.useClipView = @YES;
config.presentationAppOptions = presentationOptions;
可根据业务策略给上述属性赋不同值。创建 SDK 后修改原配置对象,不会自动更新已初始化的课件;需在下一次创建 SDK 时传入新的配置。
Presentation 常用参数
| 参数 | 作用 |
|---|---|
maxCameraScale | 最大缩放倍率相对页面适配大小计算,例如 4 表示最多放大到适配大小的 4 倍 |
useScrollbar | 是否显示拖动滚动条 |
useClipView | 是否裁剪课件显示区域,只显示页面内容 |
这些参数在本端生效,各参与端应按业务要求配置。每个课件的 scenePath、scenes 和 title 仍在 addApp 的 options 中传入;每个窗口的 originSize 在 attributes 中设置,详见统一笔记。
自定义课件与 H5
// javascriptString 为打包脚本文本,variable 为脚本实际导出路径。
WhiteRegisterAppParams *registration = [WhiteRegisterAppParams
paramsWithJavascriptString:javascriptString kind:@"Plyr"
appOptions:@{} variable:@"NetlessAppPlyr.default"];
[sdk registerAppWithParams:registration completionHandler:^(NSError *error) {
if (error) { NSLog(@"%@", error); return; }
// 注册完成后进入房间,成功后再 addApp。
}];
// 已入房且注册成功:
WhiteAppOptions *options = [WhiteAppOptions new];
options.title = @"视频课件";
WhiteAppParam *app = [[WhiteAppParam alloc] initWithKind:@"Plyr" options:options
attrs:@{ @"provider": @"youtube", @"src": @"https://www.youtube.com/embed/VIDEO_ID" }];
[room addApp:app completionHandler:^(NSString *appId) { NSLog(@"%@", appId); }];
EmbeddedPage 同样需要先注册对应脚本和真实导出变量,随后以 kind=EmbeddedPage、attrs.src=H5 URL 添加。远程包可使用 paramsWithUrl:kind:appOptions:,URL 需符合 App loader 的包格式。
参考 Whiteboard iOS 自定义 App 和 Fastboard iOS 自定义 JS。Fastboard 已创建实例时可通过公开 fastRoom.whiteSDK 注册,保持其代理不变;在 join 前等待注册完成。
插件数据和协议参考 app-plyr 与 app-embedded-page。
注册是本端能力,课件 attributes 是需要协同的初始数据。同房间所有参与端都需要注册兼容的同一 kind,不能只在创建端注册。注册成功后再创建窗口;已有窗口由房间状态恢复时,也需要本端已具备对应 App。
H5 课件受 iframe 嵌入、CSP、跨域、登录态及移动 WebView 媒体策略约束。Plyr 的 provider/src 需遵循插件文档,不能把任意播放页 URL 当作可直接播放的媒体文件。要把 H5 内部操作同步给远端,还需要课件自己的协同实现。