有奖捉虫:行业应用 & 管理与支持文档专题 HOT
为了保障在线考试的流畅进行,建议您在控制台 提交工单,提前报备考试人数、人员地域分布、使用的分辨率、码率等信息。

场景描述

在线考试是指通过操作计算机在网络上进行考试整个过程的一种考试形式,脱离了纸质媒体,也可以说成是通过网络媒体进行的考试。
在线考试覆盖了计算机等级考试、大学英语考试、研究生入学考试、职业类考试、财务类考试、工程类考试、外贸类考试、专升本考试、公务员考试、企业笔试等各种无纸化考试系统。在考试完成之后可以进行自动评分等操作,可以获得一张最终的成绩单,支持发送到邮箱保存和在线打印。
传统考试从出题、组卷、印刷,到试卷的分发、答题、收卷,再到批卷,公布成绩,统计分析考试结果,整个过程都需要人工参与。周期长、工作量大、容易出错,还要有适当的保密工作,使得整个学习考试成本较大。在线考试学习系统可以完全实现无纸化、网络化、自动化的计算机在线学习考试,对单位的信息化建设具有深远的现实意义和实用价值。
需要注意的是,“在线考试”和“线下机考”不是一种业务模式,线下机考指的是在线下机房的在线系统里进行考试,它与传统考试的区别仅在于一个在纸质卷子上完成试题,一个在电脑软件里完成试题。

实现方案

在线考试场景整体的参考业务流程如图所示。在线考试系统的用户通常分为:考生、监考人、考试管理员、出卷(批卷)人。
考生:需要登录考生账号进入考场,开启摄像头与屏幕分享,在被监控的状态下,完成试题提交试卷。
监考人:监考人员需要登录监考账号,监考账号可以看到所有参与考试的考生的摄像头画面判断学生是否舞弊。同时系统本身也有一定的自动监控能力,例如监控考试应用被切出的次数与时间。在部分的场景中,还需要解答考生允许范围内的疑惑。
考试管理员:创建考场,将试题上传到对应的考场,控制考场的进出,一般情况下,可以由其中一位监考老师同时兼职担当。
教师端:主要任务在考前出题与考后手动改卷(如果需要)。
在线考试业务流程图:
?
?
?
在线考试功能模块:
?
?
?

考场管理

?
?
?
在该接入场景中,TRTC 房间的概念映射为考场,每一个考场的参与的考生数固定一个上限,上限值由当时所承办的考试机构的带宽决定。考生在考试端输入账号密码后,由系统分配到对应的考场。在考生身份不定的场景下,通常使用随机分配或者按序分配,基本原则是先填满一个考场再分配到下一个考场(考场数优先原则)。而在考生身份确定的情况下,例如高校疫情期间的线上大考,学生有明确的班级归属,那么理论上一个班级应分在一个考场内,如果带宽上不允许,可以拆分考场,但通常不会让不同班级的学生分配在同一考场,这样方便监控。
对于监考老师而言,监考老师登录后首先看到的页面是选择考场,同时可以在多个考场间进行切换,切换的本质是退出exitroom/leave了原有的 TRTC 房间,再进入join/enterRoom了新的 TRTC 房间拉取不同的流。
注意:
TRTC 的 Room 是一个虚拟的房间,只要用户端调用 join/enterRoom,如果 roomId 不存在,则 TRTC 会自动创建一个 roomId 的虚拟房间。在调用后台 API 接口 DismissRoom 解散房间之后(只是解散临时房间),用户端再次调用join/enterRoom时,该虚拟房间如果不存在则会再次创建。
业务侧可以对join/enterRoom中的 userSig 参数设置有效时间。当有效时间过期,则用户端会进房失败,但用户已经在房间内的情况 userSig 过期则不会有影响,建议 userSig 有效期时长设置为考试的总时长;同时业务侧还可以对用户端的进房逻辑进行控制,如果已经超过进入考场的时间,则业务后台不再下发 userSig,这样用户端也会进房失败。

角色管理

在考场中同时存在两个角色:考生和监考老师。
学生端在进房前需要对设备进行检测,确保摄像头画面能录到对应画面,麦克风声音足够。
考生只能推流,监考老师只能拉流。监控老师还有画面截屏、拉流参数设置等小工具权限。
为避免嘈杂,监考老师拉流时,默认只拉取视频流,音频流需要手动开启。
需要给学生下发告警信息,可以通过 SEI 来下发sendSEIMessage
在部分场景下,考生需要双路推流,一个拍摄正面,另一个从侧面拍摄以保证全景监控。
在部分场景下,考生有提问的需求,需要用到 IM 或者 SEI。为避免消息过多,一般学生需先申请,监考老师通过后再提问。
权限
监考
学生
推流
可选
Y
拉视频流
Y
N
拉音频流
需指定 user
N
信息交流(告警、提问)
Y
需申请
小工具
Y
N

账号管理

在线考试场景的账号系统,一般由账号 userId 映射为房间内的 userId 即可。唯一要注意的是在双路推流场景下,为了让 A 考生的正面视角和 A 考生的侧面视角能够对应起来,在进房时映射时按照一定规则映射为两个有关系的 userId。
?
?
?
手机端与电脑端实际为一个账号,但不互踢。
仅在使用 TRTC 时二者存在 userId 上的区别,用户不感知 userId 的区别,由程序自行映射进房 userId,其他资源应互通。

录像管理

在线考试的录像尤为关键,是复盘舞弊行为的唯一证据,因此房间内的每一路流都要单流录制。
?
?
?
TRTC 提供了一种无需手动发起并管理录制任务的自动录制方式,要使用该种录制方案,请前往 实时音视频控制台 - 应用管理 中开启云端录制功能,完成全局自动录制模板配置并开启全局自动录制。
生效后(生效等待5分钟-10分钟)TRTC 房间中的主播上行音视频后将触发启动录制任务,房间内主播都退房且超过设置的等待续录时间后将触发停止录制任务。
打开 应用管理 页面,点击目标应用的操作栏下的配置,点击左侧列表的录制管理 ,在云端录制配置中参考下图进行操作。
?
?
?
注意:
全局录制最多录制一个房间内的25路流,也就是说如果是双路考试,全局录制仅能支持12位考生,如果超过25路流将会按照进房时间由先到后排序,录制前25路流(如需单流录制需要超过25路,请参见 API 录制 )。
API 录制也有一定的并发限制,如果需要提升,可以 工单联系 腾讯云相关人员评估调整。
根据新版云端录制的规则,生成的录像文件的命名规则为<SdkAppId>_<RoomId>_UserId_s_<UserId>_UserId_e_<MediaId>_<Index>.mp4
需要注意的是,<UserId>是推流用户的 userId 进行 base64 处理后的字符串,<RoomId> 如果是字符串类型的房间 ID,也会进行 base64 处理。
当系统检测到或监考员发现有疑似作弊行为时,可以在录像对应的位置打上标记,方便后续复盘录像的时候,能够更加有效率的查看回放,这里需要用到云点播能力的视频标签功能。在视频录制完成,收到回调(311或312)后,可以通过云点播的相关接口,为视频打上标记。

试卷管理

不同的题目类型有不同的数据存储方式,这种以文档类型为主的存储格式,建议使用 云数据库 MongoDB 这种非关系型数据库。以下是常见单选、多选、填空题的数据结构类型。图片可以存放在 COS 中。
{
type:1 // 题型
title:''// 题目
item:[] // 选项
answer:1 //答案的序号
score:5 //分值
image:'' //如果有配图,图片的路径或标识符
}
除此之外,试卷模块一般还有以下的功能:
试卷导入:出卷者一般在 Excel 内编写,通过程序将 Excel 转换为 JSON 再存入数据库中,实现思路可以参考该开源包:excel-as-json - npm
随机题库:在一般职业考试里经常出现,可以通过上述的数据结构的 type 区分不同题型,提前预设好每种题型取几道。

流管理

在线考试场景中,一般只有音视频流这一种,在带宽允许的情况下,也会让学生推送屏幕的画面,不过应用层的监控一般交由客户端侧自行撰写业务逻辑处理,考虑到老师不会自动拉取屏幕分享画面,详情见 监控管理
受带宽压力的限制,学生画面一般分辨率都非常低,会以牺牲清晰度的情况保证画面流畅不卡顿。推荐方案请参考 关键业务逻辑 - 考场划分,该部分详细讲述了老师如何实现同时拉取多流以及对应的 UI 处理。
此外,在一些场景下,老师有点开学生画面详细查看的需要,但学生画面分辨率均较低,点开后画面模糊无法判断细节,这里可以考虑使用 双路编码 得以实现。双路编码可以在学生端推流时,将画面同时编码为清晰大画面和低清小画面。监考老师全局监控页面时,拉取低清小画面;具体点开某个页面时,再拉取该流的高清大画面。
如果有屏幕分享流,那么一个 userId 将最多推送三路流:一路主画面高清音视频,一路主画面低清晰度音视频,一路屏幕分享。当教师确认屏幕中的学生存在违规行为,需要截图为证时,可以在大画面下,使用 snapshot 截图。
通常为避免嘈杂和减少带宽压力,监考老师拉流时,应将音频流默认静音或者按需拉取。
?
?
?
这张图里的架构比较大,默认是比较完整的架构,实际上可以根据自己业务架构的需要删减。

监控管理防止作弊

以下介绍几种在线考试的监控方式和处理手段:
1. 双路监控
双摄像头监考可以说是最有效的防作弊功能之一。开启双摄像头监考后,监考员可以 360° 检测到考生周围的环境,考生的一举一动都在监考老师和智能系统的“眼里”。
该方案已经在前面的章节反复提及,具体程序实现可以参考 关键业务逻辑 - 双路视频防止作弊
2. 页面监控
页面监控指的是对考生考试应用页面的行为的监控,从而做出提醒或者判定学生舞弊。同时兼容录制,将考生的考试过程全程录制下来,监考老师在考完后可以查看考生详情记录,包括切屏、中断等,这可以作为规范考生行为的手段,也可以作为考生作弊的证据。该方案可讲述的内容较多,具体细节请见 关键业务逻辑 - 页面检测
3. 人脸监控
系统可以自动识别考生疑似作弊的行为,例如出现多个人脸、考生脸部遮挡等,并向考生发出作弊警告。除此之外,监考中心还可以实时生成考生作弊率排行榜,将部分重点监控的考生放在首页,让监考老师更容易看见。
更进一步的,可以接入 AI 系统识别,在考生进入考试前,需要确认个人信息是否正确,并进行人脸识别。系统会通过摄像头判断考生是否为本人考试,这样会有效避免他人替考的行为。同时如果出现画面内考生消失再出现时,可以再次进行识别。
对于人脸AI如何与登录系统、监控系统结合使用,详情见 关键业务逻辑 - AI 与监控
4. 声音监控
设置声音灵敏度限制,只要考生及其周围环境的声音超过一定的声音灵敏度限制,系统就会判定为疑似作弊行为,并发送警告提示,用于判断考生是否在和屏幕外的人进行交流。
在 TRTC 的事件回调中,onUserVoiceVolume 回调可以监听到每一路流的声音大小,可以用于判定考生方的分贝。

关键业务逻辑

本章节将会对核心功能层的业务逻辑进行讲解,提供流程图、调用时序图以及相关 API 的关键参数。
对于在线考试场景,监控端和学生端一般使用 Web 桌面浏览器端,对应较严格的场景,学生会增加一个移动端,用于实时拍摄学生的侧面,通用模块将会使用伪代码的方式带过,具体接口用法可参考官网对应的语言的 API 文档。

考场划分

在线考试场景中,一场考试可能有上千人,甚至上万人。TRTC 一个房间限制50人同时推流,所以需要对学生按人数进行虚拟考场分配。如果不是很严格的考试,一个学生使用一路视频流即可,预留一路视频给监控老师,一个虚拟考场,建议分配40-49个学生。给这些学生分配相同的 roomId。进房后只推流,不拉流。

实现流程

?
?
?
相同考试,相同时间的学生,可以按小于49人/考场的方式,在业务后台提前分配好虚拟考场,为每个虚拟考场映射好 TRTC 的房间号 roomId。考试前,需要引导学生提前30分钟进入“考场”等待。进入考场后,引导学生完成摄像头、麦克风、扬声器的检测。可以提前5分钟开始推流,提前检测学生推流是否正常。
?
?
?
监控老师端,不建议一次拉取所有学生的视频,这样需要很高的带宽。例如一路 360P 视频需要 400-600 kbps 带宽,40个学生,需要16-24 mbps 带宽。如果同一个办公室有10个监控老师拉流,则需要160-240 mbps 带宽。所以,监控考试端可以做分页展示,例如一页展示9路视频,点击下一页,则停止拉流当前的9路视频,再拉流下一页的9路视频。
注意:
因为拉流底层是异步操作,会有短暂延时,所以分页点击按钮的点击,要做个频率限制,限制在1-2s左右。如果太频繁点击,则容易引起底层响应不及时,导致出现未知的异常。

时序图

?
?
?

页面检测

基于浏览器封装度较高,许多桌面软件可监听到的硬件行为或应用行为没法直接监听,这里介绍几种在线考试中会用到的网页页面检测的方式和对应的实现。
1. 监听 tab 切换
当页面切换会触发 visibilitychange事件,可以通过判断 document.hidden是否为 true 来判断,当为 true 则表示切换到了其他页面。
2. 监听网页缩放
当用户缩放页面的时候会触发窗体的 resize 事件,以及设备的 devicePixelRatio 也会跟着变化,可以在 resize 事件中检测 devicePixelRatio 和缩放事件之前的devicePixelRatio值进行对比,如果变化,则可以认为页面发生了缩放。
3. 监听网页退后台
Document.visibilityState(只读属性),返回 document 的可见性,即当前可见元素的上下文环境。由此可以知道当前文档(页面)是在背后,或是不可见的隐藏的标签页,或者正在预渲染。可用的值如下:
'visible' : 此时页面内容至少是部分可见,即此页面在前景标签页中,并且窗口没有最小化。
'hidden' : 此时页面对用户不可见,即文档处于背景标签页或者窗口处于最小化状态,或者操作系统正处于 '锁屏状态'。
'prerender' : 页面此时正在渲染中,因此是不可见的 (considered hidden for purposes of document.hidden) 文档只能从此状态开始,永远不能从其他值变为此状态。
当此属性的值改变时,会递交 visibilitychange 事件给 Document。

双路视频防止作弊

普通的在线考试中,摄像头一般使用笔记本自带的摄像头,只能拍摄到学生的正面。对于比较严格的考试,这种满足不了要求,为了防止考试作弊,需要把学生的侧后面也需要拍摄到。

实现流程

?
?
与单路流监考不一样的地方是,增加一路侧后方的视频监控,一般侧后方的监控使用手机端,方便移动和调整位置。需要注意的是,在位置摆放时,需要引导学生进行摆放,例如提供摆放的效果图。摆放完成后,分别采集正面视频和侧面视频的一帧图片,发送到自己的业务后台做判断,自动判断学生摆放的位置是否合格。

时序图

?
注意:
因为学生有2路流,TRTC 需要传2个 userId,而学生的 userId 在自己的业务系统里面只有一个,可以在自己的 userId 后面拼接后缀来区分侧面流。例如1001、1001_1,1001表示正面视频流的 userId,_1表示侧面视频流的 userId,这个命名规则业务自己可以灵活自定义。

AI 与监控

随着在线考试人数的增多,寄希望于由完全监考老师判断学生舞弊较为困难,目前成熟的考试系统都会在不同的考试阶段引入不同的 AI 功能进行辅助筛选,由AI 把重点关注对象选出,然后再由人工进行进一步的判断。

实现流程

登录系统 + 人脸核身:
?
?
?
监考系统 + 人脸比对:
?
?
?

时序图

登录系统 + 人脸核身:
?
?
?
监考系统 + 人脸核身:
?
?
?

方案配套产品

系统层级
产品名称
场景用途
接入层
提供低延时、高品质的多人音视频实时互动直播解决方案。在此场景下,监控老师可以实时监控考生的视频画面。
接入层
提供基于群组功能的房间管理、消息的收发,以及自定义信令等通信需要。在此场景下,可以通过自定义消息下发监考异常告警和其他自定义信息。
云端服务
提供实时音视频的旁路转推,以及加速媒体流的分发服务,此外还具备录制、鉴黄等附加能力。在此场景下,可以做后台监控,视频录制等功能。
云端服务
面向音视频、图片等媒体,提供制作上传、存储、转码、媒体处理、媒体 AI、加速分发播放、版权保护等一体化的高品质媒体服务。在此场景下,可以做视频录制文件的二次转码和加工。
数据存储
提供音视频录制文件、音视频切片文件的存储服务。在此场景下,可以把录制文件转移到 COS 作为长期存储。
?


http://www.vxiaotou.com