# learning
**Repository Path**: tobe-or-nottobe/learning
## Basic Information
- **Project Name**: learning
- **Description**: 学习用
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-04-06
- **Last Updated**: 2021-06-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
_Read this article in another language: [English](README.md)_
> 本文介绍如何使用 eEducation 6.0.0 版本。这是一个不向下兼容的版本。如需使用 eEducation 5.0.0 版本,请查看 [eEducation 5.0.0 使用指南](https://github.com/AgoraIO-Usecase/eEducation/wiki/eEducation-5.0.0-%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97)。
## 目录
* [项目概述](#overview)
* [支持场景](#scene)
* [平台兼容](#platform)
* [功能列表](#function)
* [限制条件](#restriction)
* [快速开始](#start)
* [前提条件](#prerequisites)
* [运行示例项目](#run)
* [Agora 教育云服务](#edu-cloud-service)
* [常见问题](#faq)
## 项目概述
Agora eEducation 是声网专为教育行业提供的示例项目,演示了如何通过 [Agora 教育云服务](https://agoradoc.github.io/cn/edu-cloud-service/restfulapi/),并配合 **Agora RTC SDK**、**Agora RTM SDK**、**Agora 云端录制服务**和**第三方 Netless 白板 SDK**,快速实现基本的在线互动教学场景。
### 支持场景
eEducation 示例项目支持以下教学场景:
* 1 对 1 互动教学:1 位老师对 1 名学生进行专属在线辅导教学,老师和学生能够进行实时音视频互动。
* 1 对 N 在线小班课:1 位教师对 N 名学生(2 ≤ N ≤ 16)进行在线辅导教学,老师和学生能够进行实时音视频互动。
* 互动直播大班课:一名老师进行教学,多名学生实时观看和收听,学生人数无上限。与此同时,学生可以“举手”请求发言,与老师进行实时音视频互动。
* 超级小班课:将直播大班课的规模优势和互动小班课的教学体验相结合,支持将一个千人直播大班课里的学生拆分成若干个小班,每个小班最多 4 人。大班中主讲老师进行直播授课,小班中学生进行实时音视频分组讨论。此外,还可为小班配备助教老师。
### 平台兼容
eEducation 示例项目支持以下平台和版本:
* iOS 10 及以上。iOS 9 系列版本未经验证。
* Android 4.4 及以上。
* Web Chrome 72 及以上,Web 其他浏览器未经验证。
### 功能列表
eEducation 示例项目支持以下功能:
| 功能简介 | iOS/Android (学生端) | Web(教师端) | Web(学生端) | Web(助教端,仅超小课有) | 功能描述 |
| :--------------------------------------- | :----------------------------------------- | :---------- | :----------------------------------------- | :-------------------- | :----------------------------------------------------------- |
| 实时音视频互动 | ✅ | ✅ | ✅ | ✅ | 助教端仅能实时接收教师和学生的音视频。 |
| 文字聊天 | ✅ | ✅ | ✅ | ✅ | / |
| 互动白板 | ✅ 1 对 1 互动教学
✅ 小班课
❌ 大班课/超小课 | ✅ | ✅ 1 对 1 互动教学
✅ 小班课
❌ 大班课/超小课 | ❌ |
1 对 1 互动教学中,学生和老师默认都可以操作白板。1 对 N 在线小班课中,学生默认没有权限操作白板,老师可以授权学生操作白板。互动直播大班课和超级小班课中,学生不能操作白板,只能观看。 |
| 白板跟随 | ✅ | ✅ | ✅ | ✅ | 老师端点击白板跟随后,学生和助教的白板视野跟随老师的白板。 |
| 教学文件上传(PPT、Word、PDF、音视频等) | ❌ | ✅ | ❌ | ❌ | 老师端上传文件,学生端只能观看。 |
| 举手连麦 | ✅ | ✅ | ✅ | ❌ | 互动直播大班课中,学生“举手”请求发言,老师同意或取消。 |
| 屏幕共享 | ❌ | ✅ | ❌ | ❌ | 老师端发起屏幕共享,学生端只能观看。 |
| 录制回放 | ❌ | ✅ | ❌ | ❌ | 老师端开启录制,需要录制至少 15 秒。录制结束后链接会显示在聊天消息里面,点击链接即可跳转到回放页面。 |
### 限制条件
eEducation 示例项目目前存在以下限制条件。
1. **需要自行集成云端录制**:该示例项目中,云端录制功能只作为展示。如果你需要正式使用声网云端录制功能,请参考[云端录制快速开始](https://docs.agora.io/cn/cloud-recording/cloud_recording_rest?platform=All%20Platforms)进行集成。
2. **OSS 只支持阿里云和七牛云**:由于白板课件存储的原因,该示例项目目前只支持阿里云和七牛云的 OSS。详见[阿里云 OSS 配置指南](https://github.com/AgoraIO-Usecase/eEducation/wiki/%E6%90%AD%E5%BB%BA%E4%B8%80%E4%B8%AAaliyun-oss)。
3. **白板课件管理**:该示例项目中,白板课件管理部署在前端。我们建议你实现排课业务后,在课程里预先上传课件,Web 端只读取课件即可。我们不建议使用示例项目中的 `accessKey` 和 `secretKey` 的上传方案集成,可能存在安全隐患。
4. **教室内用户异常退出,无法及时更新用户信息**:由于该示例项目没有实现排课系统,使用 Agora RTM SDK 查询在线人数。教室内用户异常退出后,RTM 无法及时知晓该用户状态。一般需要等待 30 秒左右,RTM 才能更新当前用户状态。你可以通过自行实现排课系统来规避此问题。
5. **对接自己的业务**:Agora 教育云服务无法直接扩展业务,但是我们预留了 `userUuid` 和 `roomUuid` 字段用于你对接自己的用户系统和排课系统。比如添加排课系统,你可以传入这 2 个字段用于对接 Agora 教育云服务。
6. **并发频道限制**:目前每个 AppId 同时最多 200 个频道,如果需要继续更多频道,请联系我们。
7. **等待 5 分钟**:创建 AppId 后需要等待 5 分钟进行后续操作,这一步是为了等待后台数据同步完成。
## 快速开始
### 前提条件
在编译及运行 eEducation 示例项目之前,你需要完成以下准备工作。
#### 获取声网 App ID
1. 在声网[控制台](https://console.agora.io/)创建一个账号。
2. 登录声网控制台,创建一个项目,鉴权方式选择 **“App ID + App 证书 + Token”**。注意,请确保该项目启用了 [App 证书](https://docs.agora.io/en/Agora%20Platform/token?platform=All%20Platforms#appcertificate)。
3. 前往**项目管理**页面,获取该项目的 App ID。
#### 获取声网 Customer ID 和 Customer 密钥
1. 登录声网[控制台](https://console.agora.io/),点击页面右上角的用户名,在下拉列表中打开 RESTful API 页面。
2. 点击下载,即可获取客户 ID(customerId)和客户密钥(customerSecret)。
#### 获取第三方白板 Netless 的 AppIdentifier 和 sdkToken,并把 sdkToken 注册到 Agora 教育云服务
1. 登录 [Netless 控制台](https://console.herewhite.com/),点击左侧导航栏**应用管理**按钮,创建一个应用后,点击**配置**,获取 `AppIdentifier`,然后点击**生成 sdkToken**,然后复制此 `sdkToken`。
2. 登录 [Agora 控制台](https://console.agora.io/),点击左侧导航栏项目管理按钮,再点击对应项目的**编辑**按钮.
点击**aPaas配置**按钮,勾选**白板**,按照下面格式填写到输入框中。
{
"token": ""// The Netless sdkToken you get in the previous step
}
### 运行示例项目
参考以下文档在对应的平台编译及运行示例项目:
* [Android 运行指南](./education_Android/README.zh.md)
* [iOS 运行指南](./education_iOS/README.zh.md)
* [Web & Electron 运行指南](./education_web/README.zh.md)
## 教育云服务
教育云服务是 Agora 专为后端开发能力不够的开发者提供的云服务,能够实现房间、用户和流的状态管理以及状态变更的消息通知。详见[教育云服务 RESTful API 文档](https://agoradoc.github.io/cn/edu-cloud-service/restfulapi/)。
## 常见问题
### 安全相关
如果你担心白板 sdkToken 安全问题,你可以部署你自己的生成 Token 的服务。你需要将白板的 sdkToken 保存在你自己的服务端,然后参考以下 Netless 相关文档在你的客户端代码中部署一个生成当前白板房间 Token 的服务:
* JS: [白板鉴权](https://developer.netless.link/document-zh/home/project-and-authority/)
* Android: [创建白板房间和获取白板房间信息](https://developer.netless.link/android-zh/home/android-create-room/)
* iOS:[创建白板房间和获取白板房间信息](https://developer.netless.link/ios-zh/home/ios-create-room/)
### Web & Electron 项目相关
#### 1. 中国区安装速度慢
中国区用户可以通过预设安装变量来提高安装速度。
```text
# 中国区macOS用户可通过以下命令设置环境变量
export ELECTRON_MIRROR="https://npm.taobao.org/mirrors/electron/"
export ELECTRON_CUSTOM_DIR="5.0.8"
export SASS_BINARY_SITE="https://npm.taobao.org/mirrors/node-sass/"
# 中国区Windows用户可通过以下命令设置环境变量
set ELECTRON_MIRROR=https://npm.taobao.org/mirrors/electron/
set ELECTRON_CUSTOM_DIR=5.0.8
set SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass/
```
预设安装变量后,建议中国区用户通过以下方式安装npm依赖包
```text
npm i --registry=https://registry.npm.taobao.org/
```
#### 2. 运行 Electron 项目失败
排查步骤:
1. 查看当前环境机器是否占用了 localhost:3000 。
2. 也可能是因为 Electron 没有下载成功。清理 `node_modules/electron`,预设安装变量,然后运行 `npm i electron`。
#### 3. 如何打包 Windows Electron demo
Windows 系统上打包 Electron demo 时,注意安装的 `agora-electron-sdk` 版本是否和打包的版本一致。例如安装 win32 agora-electron-sdk 的必须在打包之前 `npm install --arch=ia32 electron@5.0.8`。
#### 4. 如何打包 macOS Electron demo
如需在 App Store 发布,请参考 Electron 和 App Store 相关资料。
#### 5. 运行时遇到 window.__netlessJavaScriptLoader was override 报错
排查步骤:
1. 用 `npm list | grep 'white-web-sdk'` 查找当前他安装了几个 SDK。
2. 在 `node_modules` 里找到 `white-web-sdk` 最新的版本,然后删除其他多余的包。
#### 6. 使用非 npm 方式安装环境
如果不是用 npm 安装,建议移除 `node_modules`,`yarn.lock`,`package-lock.json`。
#### 7. 运行时遇到 agora_node_ext.node is not a valid Win32 application 报错
排查步骤:
1. 先删掉 `node_modules/electron`
2. `npm install electron@<需要的版本> electron --arch=ia32`
3. 在 `package.json` 里加入以下字段,然后重新安装 `npm i agora-electron-sdk`
```
"agora_electron": {
"electron_version": "7.1.2",
"prebuilt": true,
"platform": "win32"
},
```