继续操作前请注册或者登录。
HIGHLIGHT_DEPLOYMENT.md 4.5 KB

WebScreen 高光录制部署文档

1. 部署范围

当前仅部署到新验证服务器,只启用 xdyui2。

不要直接替换现有正式录制服务器。CrazyTalk 等 xdyui2 验证通过后再添加。

2. 环境要求

  • Node.js 与现有 WebScreen 生产版本一致。
  • web_capture_c 可执行文件及依赖完整。
  • PCLive 回放地址能从服务器访问。
  • 服务器时钟已通过 NTP 同步。
  • OSS AccessKey 环境变量已配置,供文件状态查询使用。
  • 原本地文件搬运至 OSS 的定时任务已部署。

WebScreen 只监听端口 3001。

3. 安装

cd /root/webScreen
npm install
npm test

确认录制程序可执行:

test -x /root/web_capture_release/linux-x64/web_capture_c

4. 配置

保留服务器原 GETCLASSURLPARAMETER、PROJECTWINCATALOG、PROJECTCATALOG 和 BACKMEDIACONFIG,增加:

"HIGHLIGHTCONFIG": {
  "enabled": true,
  "sourceMode": "site",
  "siteIds": ["xdyui2"],
  "apiBaseUrl": "https://saas.xuedianyun.com",
  "pageSize": 100,
  "taskPageSize": 100,
  "maxPages": 1000,
  "maxConcurrent": 2,
  "maxDurationMs": 21600000,
  "apiTimeoutMs": 10000,
  "apiRetryCount": 2,
  "apiRetryBaseDelayMs": 500,
  "loadGraceMs": 60000,
  "endGraceMs": 10000,
  "taskRetentionMs": 86400000,
  "outputNamespace": "",
  "outputBaseUrl": "https://xdymp4.xuedianyun.com"
}

验证 JSON:

node -e "JSON.parse(require('fs').readFileSync('config/config.json')); console.log('config ok')"

5. 启动

npm run pm2
pm2 show webScreen
curl http://127.0.0.1:3001/highlight/status

预期:

{"code":0,"message":"success","data":{"queued":0,"recording":0,"knownTasks":0}}

6. 首次手工验证

先查询某节已知课堂,不启动录制:

curl -X POST http://127.0.0.1:3001/highlight/preview/by-class \
  -H 'Content-Type: application/json' \
  -d '{"classId":"课堂号"}'

检查响应中的:

  • siteId 必须是 xdyui2。
  • playbackUrl 包含 recBeginTime 和 recEndTime。
  • 文件名包含 _highlight_高光ID.mp4。
  • duration 等于 endTime-beginTime。

再手工触发单课堂:

curl -X POST http://127.0.0.1:3001/highlight/recording/by-class \
  -H 'Content-Type: application/json' \
  -d '{"classId":"课堂号"}'

观察:

tail -f log/$(date +%Y%m%d).txt
find /root/web_capture_release/media/xdyui2 -type f

一个课堂有 N 条高光时,应出现 N 个不同文件。

7. 验证多文件查询

curl -X POST http://127.0.0.1:3001/highlight/fileExists \
  -H 'Content-Type: application/json' \
  -d '{"siteId":"xdyui2","classId":"课堂号"}'

本地文件等待搬运时,状态应为 uploading;OSS 可见后应为 generated 并返回 URL。

8. 验证 cron 全量模式

先手工执行独立的高光 cron 入口:

curl -fsS -X POST http://127.0.0.1:3001/highlight/recording/scheduled

响应 data.mode 应为 site,时间窗应为 Asia/Shanghai 前一天。

确认无误后配置:

57 7 * * * curl -fsS -X POST http://127.0.0.1:3001/highlight/recording/scheduled >/dev/null 2>&1

9. 切换任务模式

xdyui2 全量验证完成后,可改为:

"sourceMode": "task"

任务模式只处理:

status = 0
onlyHighlight = 1
siteId = xdyui2

当前没有任务状态回写接口。重复 cron 依靠队列、本地文件和 OSS 文件跳过,代码中保留 TODO。后端接口确定后再补领取和结果回写。

10. OSS 搬运验证

高光录制完成后,本地目录应包含:

{classId}_highlight_{highlightId}.mp4
download.json

等待现有搬运任务执行,再检查:

https://xdymp4.xuedianyun.com/oss/xdyui2/{yyyyMMdd}/{classId}_highlight_{highlightId}.mp4

确认搬运程序不会只匹配旧 {classId}.mp4 文件名。

11. 回滚

最快业务回滚:

"HIGHLIGHTCONFIG": {
  "enabled": false
}

然后:

pm2 restart webScreen

关闭后,高光查询、录制和文件检查接口停止处理,状态接口仍可访问;GET /recording 始终运行原整堂录制逻辑。高光使用独立文件名,不覆盖旧整堂 MP4。

12. 上线 CrazyTalk 前检查

  1. 获取 CrazyTalk 准确、区分大小写的 siteId。
  2. xdyui2 连续验证多天,无重复、缺段和错误路径。
  3. 确认 OSS 搬运支持高光文件名。
  4. 确认任务状态回写方案。
  5. 将 CrazyTalk 加入 HIGHLIGHTCONFIG.siteIds,不要改旧 GETCLASSURLPARAMETER.siteId。