video2slides: 加 PDF 导出(服务端流式)+ 点击切换帧 保留/弃用

- 点击卡片切换 use/discard,手动覆盖阈值判定;手动标记角标 + 重置按钮
- 导出 PDF:后台 job,逐张把帧 JPEG 以 DCTDecode 直接嵌入、边读边写到磁盘,
  内存峰值只一张帧,防大视频 OOM;前端轮询进度条
- 下载走流式(ReaderStream),不把整份 PDF 读进内存;?c= query 触发下载
- 手撸极简 PDF writer(无新 PDF 依赖),只扫 JPEG 头取宽高分量数
This commit is contained in:
fam
2026-06-14 21:58:27 +01:00
parent 25a28ea092
commit b36e30ecbf
6 changed files with 415 additions and 16 deletions
+3
View File
@@ -35,6 +35,9 @@ async fn main() -> std::io::Result<()> {
.route("/videos/:id/frames", get(handlers::frames))
.route("/videos/:id/thumb/:idx", get(handlers::thumb))
.route("/videos/:id/frame/:idx", get(handlers::frame))
.route("/videos/:id/pdf", post(handlers::export_start))
.route("/videos/:id/pdf/status", get(handlers::export_status))
.route("/videos/:id/pdf/download", get(handlers::export_download))
.layer(DefaultBodyLimit::disable()) // 视频上传可能很大,关掉默认 2MB 限制
.with_state(state);