1.6 KiB
1.6 KiB
Media Architecture
Responsibilities
Node 应用负责:
- 用户登录
- 训练计划与分析业务
- 视频库元数据写入
- 开发时
/media同源代理
Go 媒体服务负责:
- 创建录制会话
- WebRTC 信令交换
- 接收分段上传
- 写入关键片段标记
- 会话 finalize
- 归档与回放资源生成
HTTP API
POST /media/sessionsPOST /media/sessions/{id}/signalPOST /media/sessions/{id}/segments?sequence={n}&durationMs={ms}POST /media/sessions/{id}/markersPOST /media/sessions/{id}/finalizeGET /media/sessions/{id}GET /media/sessions/{id}/playbackGET /media/health
Session lifecycle
created: 会话已建立,等待录制recording: 正在录制或接收分段streaming: WebRTC 连接已建立reconnecting: 摄像头或连接中断,客户端正在恢复finalizing: 会话完成,等待 worker 归档archived: 回放已生成failed: 上传、信令或归档失败
Storage model
每个会话目录包含:
session.json: 会话状态和 marker 元数据segments/: 原始分段concat.txt: FFmpeg 拼接清单public/sessions/<id>/recording.webmpublic/sessions/<id>/recording.mp4
Archive flow
- 浏览器
finalize - 会话状态变为
ArchiveQueued - worker 读取全部分段
- 优先直接 concat,失败则重新编码为 WebM
- 可用时生成 MP4 归档
- 写回 playback URL 和文件大小
Constraints
- 当前为单机本地卷模型,不依赖对象存储
- 当前 WebRTC 仅用于浏览器到服务端的实时上行,不做多观众直播分发
- Safari 原生 MP4 录制不在当前目标内