1入口与权限
账号/角色
登录、权限校验、操作审计
管理员管理用户与配置;普通用户受限于上传/查看/下载。关键操作记录操作人和视频 ID。
目标:围绕“上传 → 断点续传 → 存储 → 异步转码 → 封面抽帧 → 权限与分发 → 审计追踪”,形成稳定可追溯的视频资产管理链路。 当前仓库包含一个纯 PHP API 原型(上传、入队、Worker、回调记录)。
从客户端上传到云端转码回调的核心路径(可横向滚动)。
管理员管理用户与配置;普通用户受限于上传/查看/下载。关键操作记录操作人和视频 ID。
提交文件元信息(filename/size/mime/chunks),返回 upload_id 与分片大小建议。
按 index 上传二进制分片,支持失败重试与从最近成功分片续传;本地维护 manifest.json。
校验 total_chunks 与扩展名,合并为完整文件;video_id 作为后续存储与转码关联的唯一标识。
源视频存储至约定路径(按 video_id 归档并重命名),上传完成后设置互联网只读(ACL/桶策略)。
生成转码输出路径与截图参数,将作业写入队列;同时写入任务记录,便于追踪与重试。
从队列读取作业,调用华为云 MPC 提交异步转码,并按配置抽取 5 帧截图(含主封面候选)。
MPC 回调携带 task_id 与状态;系统更新任务状态与回调 payload,便于错误追踪与告警。
列表分页、标签检索、排序与视图切换;对外分发统一基于只读对象链接或 CDN,并受权限约束。
与 REQUIREMENTS.md 一致的 OBS 路径规范。
obs://obs-shine-video/{video_id}/{video_id}.{ext}
obs://obs-shine-video-result/out-new/{yyyy-mm-dd}/{video_id}/
thumbnail/ (默认抽 5 帧,含主封面候选)
transcoding/ (多码率/多封装按模板生成)
保证“可追踪、可重试、可回放”。
src/Services/ChunkStore.php(manifest.json 持久化)。src/Services/ObsClient.php(简单 AK/SK 签名 PUT)。src/Queue/RedisQueue.php(无 Redis 扩展则写入 fallback log)。worker/transcode_worker.php(消费队列、调用 MPC)。src/Controllers/CallbackController.php(写入 storage/jobs)。便于对照流程快速联调。
POST /uploads/init
POST /uploads/{id}/chunk?index=0
POST /uploads/{id}/complete
POST /callbacks/mpc
GET /health
php -S localhost:8000 -t public/
# .env 中设置 LOCAL_MOCK=true 跳过 OBS/MPC 实际调用
静态页用于展示全局结构,真实实现以代码为准。
| 环节 | 职责 | 入口/文件 |
|---|---|---|
| 路由 | 纯 PHP 路由匹配与分发 | public/index.php、src/Http/Router.php |
| 上传控制器 | init/chunk/complete;组装 OBS 路径并入队任务 | src/Controllers/UploadController.php |
| 分片存储 | chunks 写入、manifest 跟踪、合并与清理 | src/Services/ChunkStore.php |
| OBS 客户端 | PUT 上传源视频(可带 x-obs-acl 等头) | src/Services/ObsClient.php |
| 队列 | Redis rPush(无扩展则落盘 fallback) | src/Queue/RedisQueue.php |
| Worker | 消费队列,调用 MPC 提交转码与截图 | worker/transcode_worker.php |
| MPC 客户端 | 调用 /transcodings 与 /thumbnails | src/Services/MpcClient.php |
| 回调 | 接收 task 状态并写入 JobStore | src/Controllers/CallbackController.php |
| 审计/任务记录 | 落盘日志与 jobs json(后续可替换为 MySQL) | src/Support/Logger.php、src/Support/JobStore.php |
用于演示“检索列表 → 详情页”的信息结构与视觉风格。