SuperAPI AI 工具集

recording

通用与其它

查看项目

更新于 10-15 20:09

技能介绍

用途:涉及录制器改动时(录制按钮、进行中工具栏、权限提示、分块上传、摄像头气泡),或新增采集源、调整服务端分块收尾时参考。

数据模型:录制开始即创建 recordings 行,原生/文件录制状态由 uploading 转为 processing、ready 或 failed,上传流式写入时填充 videoUrl、durationMs、videoSizeBytes、宽高、hasAudio、hasCamera。application_state.record-intent 由 agent 写入以启动录制,UI 读取并清除后请求权限;录制时 navigation 置为 { view: "record" }。二进制上传走 /api/uploads/:id/chunk 与 /api/uploads/:id/abort,末块调用 finalize-recording。meeting_id 非空表示来自 start-meeting-recording。

生命周期:用户点击录制(Cmd+Shift+L)或 agent 调用 pnpm action start-recording --mode=screen;权限用 getDisplayMedia 或 getUserMedia,不得无用户手势提示;授权后调 create-recording 插入 uploading 行;以 video/webm;codecs=vp9,opus 启动 MediaRecorder,timeslice 2000;每块带 X-Recording-Id、X-Chunk-Index 上传,失败块存 IndexedDB 后台重发;同步用 Web Speech 累积转写,停止时 save-browser-transcript;末块 isFinal=1 触发 finalize-recording,随后可立即打开 /r/:id,无需等待上传完成。

可寻址播放:原始 MediaRecorder 输出不利于渐进播放,finalize-recording 对 MP4 做 faststart、对 WebM 做无损 remux 写入 Cues,超过 CLIPS_INLINE_REMUX_MAX_BYTES(默认 200MB)改为后台修复;可用 pnpm action reprocess-recording 重处理,时间线异常时用 --normalizeTimeline=true。

Loom 导入:用 import-loom-recording 校验 URL、读 oEmbed,创建 embed 型 ready 记录;此类记录播放器渲染 Loom iframe,原生编辑功能不可用,如需剪辑请上传原始文件。

暂停恢复:用 pause()/resume(),保持同一 MediaRecorder 实例与流,避免重复弹权限;暂停期间上传 worker 继续排空缓冲。摄像头气泡在 screen+camera 模式单独用 video 元素录制,服务端用 ffmpeg.wasm 合成。

错误恢复:权限拒绝标 failed/permission;5xx 重试 3 次后退避并暂存 IndexedDB;MediaRecorder 出错则停止并收尾保留已录内容;标签页关闭后重载检查未刷新块续传。规则:不得无用户手势启动录制,不得在暂停恢复时重新请求权限,较长录制优先用 web worker 上传,首块发送前必须已存在 recordings 行,且每次生命周期变化都要更新 navigation。