学生端实现流程
基础流程图
以下展示了小班课场景的重要流程,可根据流程实现学生端相关功能。
学生端登录/登出流程

核心 API 时序图
参考以下时序图,搭配Express Video SDK、ZegoWhiteboardView SDK、ZegoDocsView SDK、ZEGO GO课堂后台服务可实现小班课场景的相关功能,包括课堂管理、实时音视频通讯、互动白板、文件共享等基础功能。

GO课堂业务逻辑参考
以下步骤介绍了GO课堂的基础实现流程,开发者可以据此理解GO课堂的实现方案。
初始化 SDK
初始化以下 3 个 SDK:
- Express-Video SDK(含白板功能)
- ZegoDocsView SDK
- ZegoWhiteboardView SDK
ZegoWhiteboardView SDK 需要在 Express-Video SDK 初始化完毕后、登录房间操作之前进行初始化。
详情请参考 -[ZegoLoginViewController setupSDK]
方法。
登录房间
获取业务后台 host
登录房间前需要获取GO课堂业务后台的 host 地址并在 +[ZegoNetworkManager getHostWithEnv]
方法中进行替换。
GO课堂业务后台服务需要用户自己搭建,详情请参考 GO课堂后台服务说明。
登录
使用 ZegoLoginService
类完成登录。登录成功后 App 会跳转至课堂主界面。
白板及文件视图加载
进入房间获取白板列表
如果白板列表有值,则根据白板 ZegoWhiteboardViewModel 判断是否包含文件。
- 如果 ZegoFileInfoModel 中的 fileID 为空字符串,则说明是纯白板,可将白板视图直接添加至 ZegoBoardContainer 父视图上。
- 如果 ZegoFileInfoModel 中的 fileID 有值,说明白板包含文件信息,则需要在父视图中先添加文件视图,再添加白板视图(否则文件和白板无法正常配合使用)。并根据 fileID 加载文件内容,然后调整白板和文件视图至合适的位置和尺寸。
学生端在刚进入房间的时候是不具备共享权限的,需要教师赋予学生共享权限之后,学生才可以进行创建白板,切换白板,白板绘制等操作。因此,若学生端在刚进入房间的时候拉取到白板数量为 0 时,不需要新建一个空的白板。
白板切换同步
如果远端创建了多个白板,本端可以通过如下逻辑实现本端白板和远端白板切换同步。
在进入房间后,Express-Video SDK 会调用 ZegoEventHandler 协议中的 onRoomExtraInfoUpdate:roomID: 方法,根据方法参数获取远端正在显示的白板 ID,然后在白板列表加载完毕后找到对应的 ZegoWhiteboardView 进行展示。
白板图元及文件同步
在白板和文件加载完成之后,白板图元和文件的页数需要和远端进行同步。
白板图元对象的同步在 ZegoWhiteboardView SDK 内部已经实现。白板的偏移量和文件页数的同步工作需要开发者使用相应方法自行完成。
由于白板和文件的 contentSize 是一样大的,文件和白板的滚动偏移量必须相同,否则白板上的涂鸦会对应到文件的错误位置。在与白板一一对应的 ZegoWhiteboardViewModel 中可以获取到该白板的横向与纵向偏移百分比。根据百分比偏移量,可以计算出白板和文件视图正确的偏移量,这样可以和远端保持一致。
- 纯白板页数同步
由于纯白板内部没有页数的概念,需要开发者根据偏移百分比自行定义并计算。例如GO课堂内创建的纯白板为 “5 * 白板view” 尺寸,总共有 5 页。如果纵向偏移百分比为 20%,那么当前处于第 2 页(0.2 * 5 + 1)。
- 文件页数同步
通过 ZegoDocsView 类获取文件的总页数以及当前页码。
- 动态 PPT 同步
如果是带有动画的动态 PPT 文件,需要调用 -[ZegoDocsView playAnimation:] 方法同步额外的动画信息。
- Excel sheet 同步
Excel 文件的每个 sheet 都对应着一个白板文件,本端在收到远端的当前的白板 ID 后,可以找到对应的白板和文件视图,调用 DocsView 的 -[ZegoDocsView switchSheet:] 方法即可完成 sheet 的切换。
核心 API 参考
ZEGO GO课堂后台服务
API | 实现功能 |
---|---|
login_room | 登录教室。 |
leave_room | 离开课堂。 |
end_teaching | 结束教学。 |
get_attendee_list | 获取在线成员列表。 |
get_join_live_list | 获取连麦成员列表。 |
set_user_info | 设置某个用户设备状态。 |
完整的 API 请参考 GO课堂后台服务说明。
Express Video SDK (含白板功能)
API | 实现功能 |
---|---|
createEngineWithAppID | 创建引擎单例对象。 |
setEventHandler | 设置事件通知回调。 |
loginRoom | 登录房间,推拉流前必须登录房间。 |
startPublishingStream | 用户将自己本地的音视频流推送到 ZEGO 实时音视频云。 |
stopPublishingStream | 用户停止发送本地的音视频流,结束通话。 |
startPlayingStream | 用户可以从 ZEGO 音视频云拉取远端用户的音视频流进行互通。 |
stopPlayingStream | 用户停止拉取远端的音视频流。 |
完整的 API 请参考 Express Video SDK API 文档 。
ZegoWhiteboardView SDK
API | 实现功能 |
---|---|
initWithCompleteBlock | 初始化 SDK。 |
setConfig | 设置白板配置文件。 |
initWithWhiteboardModel | 创建 zegoWhiteboardView 实例。 |
getWhiteboardListWithCompleteBlock | 获取当前房间的所有白板。 |
scrollToHorizontalPercent | 跳转到指定位置,用百分比描述。 |
完整的 API 请参考 互动白板 API 文档 。
ZegoDocsView SDK
API | 实现功能 |
---|---|
initWithConfig | 用配置实例初始化 SDK。 |
uploadFile | 从客户端本地上传文件转码,并存储。 |
loadFileWithFileID | 加载指定的文件,文件内容将被渲染到视图上。 |
flipPage | 跳转到指定页位置。 |
scrollTo | 跳转到指定位置,用百分比描述。 |
scaleDocsViewWithScaleFactor | 缩放。 |
完整的 API 请参考 文件共享 API 文档 。