场景描述
概述
小班课是一个教育培训概念,指的是学生数量在 1-8 人之间的班级上课规模,教学人员配置为 1-2 人,其中一个主讲师,另外一个是助教,小班课的“小”是相对于一对一和大班课。由于线下小班课有诸多上课时间空间限制、场租物业成本等问题,因此线上授课将会成为一个趋势。
实现方案
整体小班课 App 分为四个角色,老师、教务平台(助教)、学生、家长。每个角色在小班课中均有各自负责的功能。老师主要负责课程的内容与上课;教务平台或助教作为学生家长与教师的桥梁,安排上课、发放讲义以及一些后台技术行为;学生则是完成老师与教务平台的任务;家长负责监督。小班课场景整体的参考业务流程如图所示,具体情况可根据自身业务情况与需求调整。
以下是小班课场景通常涉及的功能模块:
房间管理
房间管理根据业务情况,一般由老师或教务系统负责,主要功能有:创建房间、进入房间、邀请加入、销毁房间、退出房间等。教务系统根据课程表自动创建或由老师手动创建上课的房间。
需要注意的是,业务上的房间和在 TRTC SDK 的房间并非是一个概念。业务上的房间是线下教室的抽象化,音视频通话仅是该房间中的一个功能模块,还有其他房间上课业务的实现也将在该房间内进行。而 TRTC SDK 的房间仅仅只是 TRTC 为用于某一群用户可以互相拉取对方流而设置的技术隔离方案。为方便区分,这里用教室代指业务的房间、TRTC 房间指 TRTC 的 room 这个概念。
与课程表对应,一堂课则对应一个教室 id,教室 id 为唯一值同时也可作为对应 TRTC 房间的 roomId,建议用字符串 strRoomId 作为房间 id,后期可扩展性更好。房间 id 可以作为后续的 TRTC roomId 和 IM groupId。上课结束后 TRTC 房间可以不用手动解散,当最后一个用户退出房间后,TRTC 房间会自己销毁;除了 TRTC 房间,如果教室内有用到即时通讯相关的功能,那么 IM 的 groupId 则需要手动解散群组,防止群组累计过多,触发IM群组创建上限,导致群组创建失败。
角色管理
对于整个业务系统来说,我们有老师、学生、助教(教务管理员)、家长这些身份,但对于 TRTC 来说,并不区分这些角色,需要业务侧来管控不同角色的权限。
一般老师、学生可以推流也可以拉流;
助教和家长只能拉流;
不存在角色变换的情况,因此进房应是唯一确定角色身份及权限的时间点;
老师、教务有权管控学生的推流情况,例如选择上麦的学生,否则学生不可自行开麦。
账号管理
和教室与房间一样,整个业务系统需要有一个自身的账号体系,同时进入 TRTC Room 也需要有 userId,IM 也需要。
可以用业务自己的 userId,如果为了保密,可以自己做一层哈希的映射,把 userId 映射为唯一对应的 TRTC 和 IM 的 userId,userId 需要唯一。在 Web 端的场景下,如果用到屏幕分享,则一个用户角色需要两个 TRTC userId,一个 userId 用来推视频流,一个 userId 用来推屏幕分享流。而在原生端环境下,则是在同一个 userId 下,创建子实例进行推流。
同时,如果业务的账号系统本身不允许多端登录,那么自建账号系统还需要检测是否已登录或顶替下线的功能。
录像管理
在远程教育应用场景中,考虑复盘、质检、审核、存档和回放等需求,常需要将整个视频通话以及各自的视频流录制和存储下来。而实时音视频流本身无法录制,需要将其转推为可录制的直播流格式。
基于腾讯云旁路转推能力,能将通话中的实时音视频,推送一路一模一样的直播流到云直播平台。
基于腾讯云直播能力与 COS 对象存储服务,能快速将直播流内容存储至云平台并进行二次制作和分发。
基于直播录制服务,能快速将您的直播活动传播到各种应用场景和 App 中。
基于云点播,能将录制的内容在播放器中播放。
录制根据划分标准不同有几种区别:
全局和指定:全局录制是自动检测当前有几路流,并全部录制;指定录制需要使用 SDK 或者 restful API 指定流 ID 进行录制;
单流和混流:单流录制即每一路流独立成录像文件;混流可以将其中某些或全部流同时展现出来合成一个视频文件。
一般从老师点击“开始上课后”,才开始调用录像接口,这样可以防止过早录像,前面一段时间后台要二次处理剪辑。混流录制,把白板、多个学生、老师的视频做混流后再录像,这样是一个完整的录像文件,课程回放不需要做多路视频和白板的时间戳对齐。
教材管理
教材管理主要分为两部分:
供给白板使用的上课素材。
教材库/文库,可供学生课前/课后下载反复查阅。
提前把绑定课程的教材上传到白板后台,节约动态 PPT、静态文件的转码时间。如果有大的视频文件,需提前上传到后台,放在上课过程中临时上传占用老师带宽导致网络卡顿。
教材展示
方案架构
腾讯云互动白板提供的白板推流服务支持将白板画面推流到实时音视频房间,观看端不需要集成互动白板也能观看到白板画面,再结合实时音视频旁路推流及云端混流的能力,可以把白板画面与实时音视频房间内的其他音视频流按照指定的布局混到一起推到 CDN,其他客户端通过 CDN 拉流观看,非常适合大部分观看端不需要通过白板进行互动的直播场景。
具体实现
开发者需要将需要展示的教材加载到白板上,这里需要用到互动白板提供的转码功能,将其加载进白板的流中推送出去。
教材类型 | 转码类型 | 输出格式 | 动画效果 |
ppt、pptx、doc、docx、pdf | 静态转码 | jpg | 不保留 |
ppt、pptx | 动态转码 | h5 | 保留 |
视频文件 | 无需转码,使用 addVideoFile | \\ | \\ |
API 调用时序
教材共享下载
当文件成功上传至 COS 时,COS 会提供下载链接。
业务方可通过 COS 的 API , 拉取存储桶及对应的文件列表。
可在 COS 的控制台设置权限管控,只允许特定用户或特定链接下载文件。
存储在腾讯云对象存储(Cloud Object Storage,COS)中的内容,需要符合相关法律法规。
流管理
音视频流
在小班课场景中,音视频流分为学生流与老师流,老师端可以管控学生流的推送情况,助教可以监控所有流的推送情况但自身不推流。
老师端视频分辨率高于学生端视频分辨率,学生端分辨率达到刚好能看见行为的清晰度即可;
学生端默认应处于闭麦状态,老师主动点名或学生申请连麦通过时,才可以打开麦克风;
学生端默认应处于打开摄像头状态,当需要有类似考试等场景时,老师应拥有关闭学生间互相推送音视频流的权限;
在某些需要多角度展示老师视角的场景(如绘画课、书法课,需要额外一个摄像头用来拍摄老师的侧面展示手型),则需要额外创建一个实例并选择对应的摄像头,用于推送一路不含音轨的视频流。
屏幕分享流
在 TRTC 中,提供了专门的 API 或参数打开屏幕分享。屏幕分享默认有视频流与音频,视频流为选择的窗口,音频流为系统音量。
注意:
如您在 Web 端上使用屏幕分享,采集系统声音只支持 Chrome M74+ ,在 Windows 和 Chrome OS 上,可以捕获整个系统的音频,在 Linux 和 Mac 上,只能捕获选项卡的音频。其它 Chrome 版本、其它系统、其它浏览器均不支持。
在 Web 端,屏幕分享流与音视频流是独立平级的。但在原生端默认情况下,屏幕分享流使用的是辅流,音视频流使用的是主流,如果使用主流做屏幕分享,您需要提前停止摄像头采集 stopLocalPreview 以避免相互冲突,且同一个房间中同时只能有一个用户使用辅流做屏幕分享,也就是说,同一个房间中同时只允许一个用户开启辅流。
白板流
关键业务逻辑
本章节将会对核心功能层的业务逻辑进行讲解,提供流程图、调用时序图以及相关 API 的关键参数。
对于小班课,老师端使用 C++ 与 electron 端的情况最多(跨平台),学生端则是移动端,Web 或小程序,由于涉及的终端较多,通用模块将会使用伪代码的方式带过,具体接口用法可参考官网对应的语言的API文档。
小班课音视频通话方案
在小班课场景中,不论是教师端还是学生端均有较大可能存在需要拉取多路流和推送多路流的场景。以美术培训为例,老师需要推送音视频流、屏幕分享流、白板流,学生推送音视频流和白板流,同时彼此还需拉取其他人的白板流,学生至少需要拉取老师的三路流。因此在实现上有诸多注意要素。
实现流程
首先对于小班课这种多流上行的音视频通话场景,参数上,老师应选择较清晰画面,学生则选择刚好能看清表情和嘴型的画质即可。以下是推荐的分辨率与帧率,及对应的码率,如果已知网络环境较差或学生数量较多,可以适当下调。
教师与学生端推荐视频参数:
终端 | 推荐分辨率 | 推荐帧率 | 所需码率 |
在线教育(老师 @ Mac Win) | 960x540 | 15 | 850kbps |
在线教育(老师 @ iPad) | 640x360 | 15 | 550kbps |
在线教育(学生) | 320x180 | 15 | 250kbps |
其次,在 TRTC Web SDK 中,多流的推送需要使用多实例进行实现,大致思路如下图:
注意:
如果 1v5 小班课,则每个用户需要推1路,拉5路,共需要6路视频带宽;如果 1v10 小班课,则每个用户需要11路带宽。需要注意的是,在测试环境,测试机器通常连接在同一个路由器下面,11个用户都在一个路由器下面,则该路由器需要 11*11=121 路视频带宽。如果要在测试环境测试10个 user 的压力,实际上只要开3个 user 就能达到类似效果。
不同分辨率与码率下的带宽要求:
参数 | 老师 | 学生1 | 学生2 | 学生3 | 学生4 | 学生5 | |
分辨率/码率 | 240P 0.25M | 240P 0.25M | 240P 0.25M | 240P 0.25M | 240P 0.25M | 240P 0.25M | 合理 |
| 带宽要求 | 1上5下:1.5M | 1上5下:1.5M | 1上5下:1.5M | 1上5下:1.5M | 1上5下:1.5M | 1上5下:1.5M |
分辨率/码率 | 720P 2M | 720P 2M | 720P 2M | 720P 2M | 720P 2M | 720P 2M | 不合理 |
| 带宽要求 | 1上5下:12M | 1上5下:12M | 1上5下:12M | 1上5下:12M | 1上5下:12M | 1上5下:12M |
时序图
学生端相较于教师端,有以下变化:
登录时为检查是否为学生账号。
推摄像头麦克风流时,默认不推麦克风流或默认闭麦。
不推屏幕分享流。
视情况不使用白板。
点名与举手
小班课看似和公司小组开会、培训是一样的场景,但由于专门的线上课老师有自己严格的课程节奏安排以及课时要求,学生不能随意开麦发言打断,因此需要交互时,要么由老师点名或学生自己举手,抽象来看这就是一个简易的麦位管理。
实现流程
可以使用腾讯云 IM 的信令,信令接口是基于 IM 消息提供的一套邀请流程控制的接口,可以实现多种实时场景,例如:
直播聊天室中进行上麦、下麦管理。
聊天场景中实现类似微信中的音视频通话功能。
教育场景中老师邀请同学们举手、发言的流程控制。
1. 老师调用接口邀请同学们举手,同学们收到回调。
2. 同学们根据回调中的邀请列表和字段判断被邀请者里有自己且是举手操作,决定是否举手。
3. 如果有学生举手,所有人都可以收到有人举手回调,并展示举手学生列表。
4. 老师从举手成员列表中邀请某个同学进行发言。
5. 学生收到邀请连麦的回调,决定是否发言。
6. 如果有学生发言,所有人都可以收到有人发言的回调,展示发言成员列表,并打开该学员的麦克风。
7. 结束连麦时,关闭该学员麦克风。
时序图
注意:
如果有多平台开发计划,请先调研二者的接口差异,Web 端 IM SDK 与 原生端 IM SDK 功能并非完全一致。
如果消息没有收到或消息丢失,确认消息是否发送成功;确认接收方是否登录成功;确认发送消息的指定会话是否与接收方一致;确认是否注册了消息监听器;Android 的需要确认是否注册了多个消息监听器,并且在消息监听器中返回了 true。
如选择 uniapp 作为开发框架,请选择 tim-wx-sdk。
互动白板
多人实时白板互动,支持互动涂鸦、轨迹实时同步、文档共享、媒体共享、文档转码、白板与音视频实时同步录制、回放。支持多用户同时涂鸦、全套画笔标注工具(画笔,直线,矩形,圆形,颜色选择,画笔粗细)、翻页同步。覆盖主流平台,Android、iOS、Windows、Mac、Web、小程序端使用 SDK 接入,集成接入方便简单。支持在云端与教学音视频同步录制,解决白板内容与教学音视频分别录制带来的不同步问题、后期混流成本高等问题。支持多种格式文档转码,支持动态、静态文档转换,可将 PPT、Word、PDF 等文件转换成 HTML5 页面或图片。主要应用于线上语言培训、K12 学科辅导、STEAM 教育等线上课堂场景。
实现流程
首先是白板的摆放与大小的计算:
1. 先把老师视频宽高、学生视频宽高、聊天区域宽高确定,剩下的部分都用作白板区,然后根据实际课件与 UI 需要,计算出白板的实际大小。
2. 白板窗口的比例最好与课件的比例一致,否则容易产生显示时出现错位,和背景图片以及课件内容无法对应上,通常有窗口尺寸有三种方式适配。先确定用哪一种方式适配,通过计算窗口的比例。
3. 如果因特殊原因课件比例不固定,必然会出现比例不适配,那么会出现以下三种情况,这里罗列了不同比例下实际内容的展示效果,请开发者自行斟酌是否要动态调整白板的大小。
出现条件 | 实际内容大小 | 实际内容位置 |
widthScale < heightScale (等比变化后,宽<高) | W = W1 H = (W * H2)/W2 | left = 0 op = (H1 - H)/2 right = W1 bottom = H1 - top |
widthScale < heightScale (等比变化后,宽>高) | W = (H * W2)/H2 H = H1 | left = (W1 - W)/2 top = 0 right = W1 – left bottom = H1 |
widthScale < heightScale (等比变化后,宽=高) | W = W1 H = H1 | left = 0 top = 0 right = W1 bottom = H1 |
总结:宽度比 widthScale = W1/W2,高度比 heighScale = H1/H2。
如果 widthScale < heightScale,则纵向留有空隙。内容缩放的比例以小的值为准 contentScale = widthScale;
如果 widthScale > heightScale,则横向留有空隙。contentScale = heightScale;
如果两比例相等,则两个方向没有空隙。contentScale = widthScale = heigthScale。
时序图
录制与持久化
实现流程
1. 学生、教师单流录制
全局录制方案
单流全局录制是默认的方案,在 实时音视频控制台 - 应用管理 页面中,点击目标应用的配置,点击左侧列表的录制管理,在右侧的云端录制配置中开启云端录制,并选择全局自动录制即可实现,自动完成后续录制操作。
录制的单流,可以为后期做语音识别,专注度识别做大数据沉淀。
自动停止,即每个主播在停止音视频上行后,该主播的云端录制即会自行停止。如果您在选择文件格式 时设置了续录时间,则需要等待续录时间超时后才能收到录制文件。
指定用户录制方案
在开启云端录制时,需选择指定用户录制(推荐),使用SDK创建实例/进房时,需设置录制参数。
2. 整体课堂录制
若需要看到整个课堂的回放录像,则需要使用混流功能将以上需要的单流整合至一个录像文件。
混流是音视频通话应用中的核心技术,通过设定参数,可以将多路不同终端的音视频流、屏幕分享流、特殊渲染流等整合在一路画面并设定各自的视频参数、位置,并以直播协议(rtmp,flv,hls)推送出去,使得不在音视频房间内的观众,可通过播放器的方式播放推送地址进行单方面的观看。
同时旁路转推后为直播协议,依然可被录制服务转码成为 mp4 等视频格式的文件,保存在存储中。
注意:
REST API 控制的是 TRTC 云服务中的核心混流模块 MCU,并将 MCU 混流后的结果输送给录制系统和直播 CDN,因此 API 的名字被称为
StartMCUMixTranscode/StopMCUMixTranscode
。因此,从功能角度上来说,StartMCUMixTranscode/StopMCUMixTranscode
不仅可以实现混流的功能,也可以实现云端录制和旁路直播 CDN 的功能。在开启录制功能以后,TRTC 系统中录制下来的文件就能在腾讯云点播服务中找到。
时序图
注意:
1. 请注意,在客户端混流情况下,若您还在房间中且不再需要混流,请务必再次调用混流接口并将 config 设置为空以进行取消,不及时取消混流可能会引起不必要的计费损失。当您退房时 TRTC 会自动取消混流状态。
2. iOS、Android、Windows、Mac、Electron、Flutter 和 Web 平台的 SDK 有客户端混流的 API,如果您希望在微信小程序上也实现混流功能,请使用服务端混流。
3. 原生端中,
TRTCTranscodingConfigMode_Template_ScreenSharing
适用于在线教育场景等以屏幕分享为主的应用场景,仅支持 Windows 和 Mac 两个平台的 SDK。 该模式下,SDK 会先根据您通过 videoWidth 和 videoHeight 参数设置的目标分辨率构建一张画布。当老师未开启屏幕分享时,SDK 会将老师的摄像头画面等比例拉伸绘制到该画布上;
当老师开启屏幕分享之后,SDK 会将屏幕分享画面绘制到同样的画布上。 此种排版模式的目的是为了确保混流模块的输出分辨率一致,避免课程回放和网页观看的花屏问题(网页播放器不支持可变分辨率)。 同时,连麦学生的声音也会被默认混合到老师的音视频流中;
由于教学模式下的视频内容以屏幕分享为主,因此同时传输摄像头画面和屏幕分享画面是非常浪费带宽的。 推荐的做法是直接将摄像头画面通过
setLocalVideoRenderCallback
接口自定义绘制到当前屏幕上。 在该模式下,您无需设置 TRTCTranscodingConfig
中的 mixUsers 参数,SDK 不会混合学生的画面,以免干扰屏幕分享的效果。 方案配套产品
系统层级 | 产品名称 | 场景用途 |
接入层 | 提供低延时、高品质的多人音视频实时互动直播解决方案。在此场景下,老师和学生之间可以低延时地视频互动。 | |
接入层 | 提供基于群组功能的房间管理、消息的收发,以及自定义信令等通信需要。在此场景下,可以用 IM 的文本消息聊天,用自定义消息封装教室状态、控制状态。 | |
接入层 | 提供整套完备的多人实时白板互动服务,打破线上教学中师生信息传递障碍,拥有比面授教学板书更丰富、直观和多样的功能。在此场景下,可以用各种 PPT、Word、PDF 教材的同步操作,在教材上同步涂鸦、批注等。 | |
云端服务 | 提供实时音视频的旁路转推,以及加速媒体流的分发服务,此外还具备录制、鉴黄等附加能力。在此场景下,可以做后台监控、视频录制、旁路拉流做 AI 表情专注度分析等功能。 | |
云端服务 | 面向音视频、图片等媒体,提供制作上传、存储、转码、媒体处理、媒体 AI、加速分发播放、版权保护等一体化的高品质媒体服务。在此场景下,可以做视频录制文件的二次转码和加工。 | |
数据存储 | 提供音视频录制文件、音视频切片文件的存储服务。在此场景下,可以把录制文件转移到 COS 作为长期存储。 |