用途:把 MP4 渐进式下载升级为自适应流媒体。流程为 MP4(TUS 上传完成)→ ffprobe 探测 → FFmpeg 转码 DASH → 存储 → 发布 .mpd 地址。默认面向 VOD 完整文件,直播 DASH/HLS 不在范围内。
主要能力:用 ffprobe 获取时长、编码与分辨率;用 FFmpeg 生成多码率 ABR 阶梯(示例为 360p/720p/1080p,H.264 + AAC 立体声,CMAF 独立 init 分片);通过 -adaptation_sets、-use_timeline、-use_template、-seg_duration 等参数输出 manifest.mpd、init-.m4s 与 chunk-.m4s;以 job/worker 队列异步执行,返回 202,并标记 ready/failed 状态。
使用方式:上传完成钩子(TUS PreFinish/PostFinish)入队并携带 videoID;worker 内用 exec.CommandContext 调用 FFmpeg,设置超时与取消;产物先写 staging 目录,完成后原子发布 .mpd;由对象存储/CDN 或 Gin 提供静态与 range 访问,MIME 使用 application/dash+xml 与 video/iso.segment 或 video/mp4;前端用 dash.js 或 Shaka 播放 .mpd。
限制与注意:禁止在 Gin handler 中同步转码,需队列与并发上限;路径使用不透明 ID,不得拼接客户端文件名;转码前校验编码与容器;GOP 需与 seg_duration 对齐;无音轨时按探测结果省略音频映射;libx265/AV1 仅在播放器与 CPU 成本可接受时使用,H.264 为兼容默认;需处理 CORS、缓存策略与幂等(同一 videoID 不重复编码)。资料未提供具体价格、平台与性能数据。