文章

MiguDelay 架构 24:Transfer 导入导出工具链

MiguDelay(DDLive)项目架构系列文档:Transfer 导入导出工具链。内容基于 2026-08-04 对指定重构分支的源码扫描结果整理。

MiguDelay 架构 24:Transfer 导入导出工具链

系列导航系列总览 · 上一篇:MiguDelay 架构 23:屏蔽截图报告 · 下一篇:MiguDelay 架构 25:构建、依赖、测试与验证边界

扫描基线

  • 项目:MiguDelay(DDLive)
  • 分支:refactor/video-frame-provider
  • HEAD:d28ec061406e4e3df93e3d1a92478d71a9ad4908
  • 工作树:clean
  • 扫描日期:2026-08-04
  • 说明:内容以当前 HEAD 源码为准;仓库旧架构文档仅作为线索,不作为最终事实来源。

1. 定位

transfer/ 是与 DDLive GUI 进程分离的工具程序代码,可编译为 importserver、exportserver 及 resample 相关执行单元。它复制了一部分媒体基础设施,而不使用 PlaybackRuntime

2. 进程启动

sequenceDiagram
    participant M as TransferMain
    participant C as Config
    participant T as TaskHandle
    participant P as ThreadPool
    participant Q as MqttClient
    participant L as CheckLoop

    M->>C: parse transfer config
    M->>T: startRun
    M->>P: startPool 6
    M->>Q: initClient
    alt import build
        M->>L: start FileCheckLoop
    else export build
        M->>L: start ExportCheckLoop
    end
    L->>T: submit transfer tasks
    T-->>L: TaskResult callback

3. 目录模块

目录 作用
filecheckloop 文件监听、复制状态检测、导入触发
exportcheckloop 导出任务轮询
resamplecheckloop 重采样任务轮询
database/repo SQLite import/export task repository
module/taskhandle/import 导入媒体任务
module/taskhandle/export 精彩片段导出
module/taskhandle/resample 音频重采样
module/demuxer 本地文件 demux
module/encoder 音视频编码、直通、静音
module/muxer 文件与网络复用
module/filereader 录制和延时文件读取
net/mqtt 工具进程 MQTT

4. Import 流程

1
2
3
4
5
6
7
8
9
10
FileWatcher/FileCheckLoop
  -> detect completed source file
  -> create import task in repository
  -> TaskHandle StartImportFileTask
  -> local demuxer
  -> decoder or pass-through
  -> encoder
  -> muxer
  -> result callback
  -> update repository and MQTT

环境变量可覆盖 check/import path。

5. Export 流程

1
2
3
4
5
6
7
8
MQTT or repository export request
  -> ExportCheckLoop
  -> ExportHighlightsTask
  -> Record video/audio readers
  -> optional channel mute or audio conversion
  -> muxers
  -> completion callback
  -> repository/report

6. 重采样

独立 resample.cpp / ResampleTask 使用 PcmResampleEncoder 和相关 file reader/muxer,将录制音频转换为目标格式。

7. 与主程序的关系

  • 两边都有 TaskHandle、ThreadPool、MQTT、媒体模块的相似实现。
  • transfer 不使用新 playback domain services。
  • 代码复制导致修复可能需要双边同步。
  • transfer 的 TaskHandle 语义不能直接假设与主程序当前 Gateway generation/ticket 合同一致。

8. 关闭

event loop 返回后先 stop check loop,再 MQTT、TaskHandle、ThreadPool。没有主程序的 Runtime stop barrier,因此 transfer task 的完整退出依赖各 loop/TaskHandle 实现。

9. 源码证据

  • transfer/main.cpp
  • transfer/CMakeLists.txt
  • transfer/filecheckloop/*
  • transfer/exportcheckloop/*
  • transfer/resamplecheckloop/*
  • transfer/database/*
  • transfer/module/*

系列导航系列总览 · 上一篇:MiguDelay 架构 23:屏蔽截图报告 · 下一篇:MiguDelay 架构 25:构建、依赖、测试与验证边界

本文由作者按照 CC BY 4.0 进行授权