tamakyi
|
8e82aa54c6
|
修第二批 P1:合并收尾、分块上限、确定性失败与 ffmpeg 路径归一
一、合并收尾只删真正进了成片的分段
prepareForMerge 中途有 4 处会回退成「只合并第一个分段」,而收尾仍按原分段列表
全删源视频 —— 后半场没进成片却照样被删掉,等于永久丢数据。现在 prepareForMerge
把「实际参与合并的源文件」一并返回(新增 used),收尾只删这些。
二、拼接中断不再在录播目录留几 GB 中间文件
concat 失败分支原来只有「被停止」那条路径删了 acfunlive_chunk_joined.*,
普通失败会把它留在录播目录,而且带着 chunkTempPrefix,界面文件列表里根本看不见。
三、把「被停止」和「拼接失败」分开
停止任务会杀掉 ffmpeg 让它非 0 退出,原来一律报成「拼接失败」,
卡片上显示的是失败而不是已停止;prepareForMerge 那里也统一改用 errors.Is 判断。
四、单块弹幕条数加硬上限(maxDanmuPerChunkHard = 200)
块尾会把「显示时间跨过块尾」的弹幕一并并入,弹幕密集时单块能膨胀到几百条。
一条弹幕在 -filter_complex 里约占 110 字节,几百条足以顶破 Windows 的
32767 字符命令行上限,表现同样是「合并失败且看不出原因」。到上限就把块尾
收到下一条弹幕出现之前,保证被挤到下一块的弹幕不会因为「整条早于块头」被丢弃。
五、确定性失败不再白重试三次
头像超出体积/尺寸上限这类失败重试多少次结果都一样,原来会白白把十几 MB 重新下三遍。
新增 noRetryError(runThrice 用 errors.As 识别)只标记这两个上限,网络类错误照旧重试。
六、ffmpeg 路径统一归一成绝对路径
PATH 里带「.」这类相对条目、或程序目录探测失败时,getFFmpeg 会返回相对路径。
合并时 ffmpeg 工作目录被改成输出目录,相对路径到那边就找不着了;而且 Windows 上
exec 会直接拒绝执行「相对当前目录」找到的可执行文件,报错还跟路径完全看不出关系。
验证:
- gofmt -l 空;go vet ./... 空;go build ./... 与 GOOS=linux go build 通过
- go test ./... 全绿(10.8s);go test -race ./... 全绿(14.7s)
- 新增 chunks_test.go 10 个用例;6 项修复逐条反向验证(临时退回修复 → 对应测试确实失败)
- 51897 隔离实例上新产物实测:e2e.py 24 项全过;smoke_extra.py 34 项全过
(含并发合并返回 409 并报出在跑的任务名、口令失败后正确口令仍立刻可用、
超大头像被拒不误伤正常头像且只尝试 1 次、停止后无临时文件残留)
|
2026-09-26 09:35:51 +08:00 |
|