在线考试远程监考怎么落地?多路视频拉流与音频异常标记的一套实践


去年期末季,教务王老师几乎住在监控室:三十个考场、九百个机位,本校监考只有十二人。IT 小张说摄像机早就接进乐橙 App 了,可考试系统里仍是一屏一路、还经常黑屏。后来我们才明白:远程监考要过的第一关,不是「买更多摄像头」,而是把每路画面变成监考后台可批量调度、可并发拉取、可留痕的云资产


为什么在线教育现在绕不开「远程监考」

机考、网课结业考、职业资格线上笔试——监管要求「能看清考生、能追溯过程」。纯客户端切屏检测防不住代考;视觉 + 行为 + 环境才是完整链路。对技术团队来说,难点通常落在三块:

痛点 表面现象 根因
多路看视频 监考端卡顿、只能轮巡 并发拉流无规划、码流选型不当
设备不可管 考前能预览,考中系统没画面 摄像机在 App 里,未进开发者资产池
「听见异常」 嘈杂、多人说话无标记 只有视频没有音频分析链路

乐橙开放平台适合已采用或计划采用乐橙 IPC/通道设备的教育机构与 SaaS 厂商:通过现行 OpenAPI 做设备绑定、分页查资产、按通道创建直播地址;对讲、云台等能力在设备能力集(如 AudioTalkPTZ)里体现,由 SDK 或轻应用组件承接。音频异常检测本身不是平台内置的单一接口,而是你在拿到音视频流之后,在业务层做的分析——下文会写清边界,避免「平台一键 AI 监考」的误解。

我们的 MVP 边界(第一期砍需求)

产品最初想要「自动判作弊」——评审后收敛为:

第一期(4 周)
  ✓ 考场—机位—设备通道映射
  ✓ 开考前资产同步、在线状态巡检
  ✓ 监考墙多路 HLS(辅码流为主)
  ✓ 单路音量 RMS 超阈 + 持续时长 → 异常事件入队
  ✗ 人脸比对、姿态估计(第二期)
  ✗ 全考场同时主码流(带宽扛不住)

协议层坚持两点:只用文档现行 OpenAPI(统一 system + params 签名请求);不用已标明不再维护的旧版协议模块(例如老的 deviceList 查资产,改为 listDeviceDetailsByPage)。

总体思路

考场摄像机 → 乐橙云 → 监考后端(代调 OpenAPI)→ 监考 Web/客户端
                              ↓
                    音频分析 worker(业务层,消费流或旁路采样)
                              ↓
                         异常事件 / 监考工单

密钥与签名只在服务端;考生端不持有 appSecret。直播地址短时签发、跟考试会话绑定,防止外泄长期有效链接。


1. 业务模型:考场—机位—通道

一场考试对应一个 exam_session;每个机位(或每个考生座位)映射到一台设备的某个 channelId

exam_session
   └── exam_room (考场)
          └── seat (机位) → deviceId + channelId

分页同步设备时,把平台返回的 deviceStatuschannelList[].channelStatus 写入本地表。开考前 30 分钟跑巡检任务:非 online 的机位进「考前故障」列表,避免开考后监考才发现离线。

2. 平台调用壳与令牌(与巡店项目共用)

监考服务和门店项目共用一层网关封装。核心是:每次请求新 time/nonce,MD5 签名,POST 到 /openapi/{方法名}

async function platformCall(method, params) {
  const body = buildSignedBody(appId, appSecret, params);
  const res = await postJson(`/openapi/${method}`, body);
  if (res.result.code !== '0') throw new PlatformError(res.result);
  return res.result.data;
}

accessToken 管理员令牌缓存约三天,遇 TK1002 刷新——监考高峰不要每个老师点击都重新鉴权。

3. 考前资产同步:listDeviceDetailsByPage

async function loadExamDevices(token) {
  const seats = [];
  let page = 1;
  const pageSize = 50;
  for (;;) {
    const data = await platformCall('listDeviceDetailsByPage', {
      token,
      pageSize,
      page,
      source: 'bind',
    });
    for (const dev of data.deviceList || []) {
      if (dev.deviceStatus !== 'online') continue;
      for (const ch of dev.channelList || []) {
        if (ch.channelStatus !== 'online') continue;
        seats.push({
          deviceId: dev.deviceId,
          channelId: ch.channelId,
          ability: dev.deviceAbility,
          channelAbility: ch.channelAbility,
        });
      }
    }
    if (!data.deviceList?.length || data.deviceList.length < pageSize) break;
    page += 1;
  }
  return seats;
}

绑定新考场摄像机时,仍走控制台或 bindDevice踩坑:实施用教务个人号在 App 里添加,考试系统同步不到——改为开发者主账号绑定,验收标准写进考务 SOP:「分页列表出现 deviceId 且在线」。

deviceAbility / channelAbility 可提前知道是否支持 AudioTalk(对讲)、PTZ(云台)等,避免 UI 展示不可用按钮。

4. 多路拉流:bindDeviceLive + 监考墙

监考墙同时展示 N 路(我们生产默认 N≤16,可配置)。每路开考时由后端签发 HLS,辅码流 streamId: 1 降低带宽;抽检可疑机位再切主码流。

async function issueProctorStream(token, deviceId, channelId, hd = false) {
  const data = await platformCall('bindDeviceLive', {
    token,
    deviceId,
    channelId: String(channelId),
    streamId: hd ? 0 : 1,
    liveMode: 'proxy',
  });
  const stream = data.streams?.[0];
  if (!stream?.hls) throw new Error('无可用 HLS');
  return {
    hls: stream.hls,
    liveToken: data.liveToken,
    coverUrl: stream.coverUrl,
  };
}

并发规划(踩坑实录):平台按账号统计播放并发——同一通道多个监考在看算多路,一人看多路也算多路。三百机位不等于三百路同时拉满;我们采用 「分区监考 + 轮巡池」:每老师固定 12 路墙,其余机位 30 秒轮播,可疑位锁定高清。促销级考试日前用「预估在线监考人数 × 每人大路数」与运营核对带宽与路数额度。

前端多路播放器用网格布局;单路异常(缓冲失败)自动重试签发地址,三次失败标红并写审计日志。

5. 音频异常:平台给流,业务做判断

需要说清楚:乐橙提供的是带音频能力的视频流与设备能力;「异常检测」是监考系统自己的规则引擎。

我们第一期做法:

HLS 播放端(Web)→ Web Audio API 取 AnalyserNode
    → 每 200ms 计算 RMS
    → 连续超阈 ≥ 3s → POST 内部 /proctor/events
监考后台 → 对应机位高亮 + 截图(播放器 capture 或后端抓图任务)

示意(浏览器端,非生产完整版):

function watchAudioLevel(audioContext, mediaElement, onAlert) {
  const src = audioContext.createMediaElementSource(mediaElement);
  const analyser = audioContext.createAnalyser();
  src.connect(analyser);
  analyser.connect(audioContext.destination);
  const buf = new Uint8Array(analyser.frequencyBinCount);
  let overSince = 0;
  setInterval(() => {
    analyser.getByteTimeDomainData(buf);
    let sum = 0;
    for (const v of buf) {
      const x = (v - 128) / 128;
      sum += x * x;
    }
    const rms = Math.sqrt(sum / buf.length);
    if (rms > 0.15) {
      overSince ||= Date.now();
      if (Date.now() - overSince > 3000) onAlert({ rms, at: Date.now() });
    } else overSince = 0;
  }, 200);
}

阈值要按考场标定:空调、走廊传声会让误报飙升。我们在考前空场 5 分钟做噪声基线,动态阈值 = 基线 × 1.8。

若需服务端分析,可对短时切片用 FFmpeg 抽音频轨算能量——仍在业务服务器,不依赖停维护的旧协议。

对讲能力:设备能力含 AudioTalk 时,可通过官方 OpenSDK轻应用播放器组件startTalk 做考中喊话警告;OpenAPI 的 bindDeviceLive 解决的是「看」,不是「喊话」,架构上要分层。

6. 监考会话状态机

未开始 → 资产巡检 → 进行中(拉流/监测)→ 结束(销毁播放地址引用)
                ↓
           异常事件(音频/离线/人工标记)

考试结束不再保留 HLS URL 明文;审计保留「何时何人看过哪路」。

7. 架构图(落地)

┌──────────┐   ┌─────────────┐   ┌─────────────────────┐
│ 考场 IPC  │──▶│ 乐橙设备云   │◀──│ 监考后端             │
└──────────┘   └─────────────┘   │ · Token / 签名       │
                      ▲          │ · listDeviceDetails  │
                      │ OpenAPI  │ · bindDeviceLive 池  │
                      └──────────│ · 事件 / 审计        │
                                 └──────────┬──────────┘
                                            │
                    ┌───────────────────────┼───────────────────────┐
                    ▼                       ▼                       ▼
              监考墙 Web                考务巡检大屏              异常工单队列
              (多路 HLS +              (在线率)                 (音频/离线)
               音频 RMS)

边界与合规

  • 隐私:告知考生监控范围与留存周期;画面与异常事件访问需 RBAC。
  • 公平:网络差导致离线要有申诉流程,不能单因 offline 自动判违规。
  • AI 判作弊:人脸、姿态属算法层,需单独评估准确率与合规,别和「拉流」混为一谈。
  • 旧接口:新立项统一 listDeviceDetailsByPage,勿从过期博客复制 deviceList 示例。

性能与稳定性

建议
码流 墙巡辅码流,复核主码流
并发 按账号限额规划;分区 + 轮巡
同步 设备列表定时任务,非每路播放时全量拉
时钟 签名时间 NTP 同步
考前 空场噪声基线、全链路试播

录像留痕

长期存证可结合云存储套餐(通道 csStatus 为 using 时)或本地 SD 卡回放能力——属于第二期「事后追溯」,与实时监考墙解耦。


小结

远程监考的技术底座,可以压缩成四步:设备进开发者资产池 → 分页同步在线通道 → 按考场批量签发 HLS → 业务层做音频/人工异常标记。乐橙开放平台提供设备云与现行 OpenAPI,适合教育机构、考试 SaaS 把「多路看视频」做成可运营能力;音频异常、作弊策略、考务流程仍在你的系统里迭代。

若你正在做在线教育、职业考试或校内机考产品,建议先用一台考场 IPC 走通:创建应用、绑定设备、分页列表在线、单路辅码流试播,再扩到监考墙。平台以视频技术与安全为核心,开放低代码组件与 OpenAPI,帮助开发者较低成本落地视频场景——监考、实训示教、在线答辩都属于同一类能力延伸。

注册与文档:在 乐橙开放平台 完成开发者注册,于控制台创建应用获取密钥;接口说明在平台在线开发文档中按方法名查阅(开发规范、分页查询设备详情、创建设备直播地址、设备直播说明等章节)。以上为项目实践记录,生产环境以平台最新文档与控制台配置为准。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐