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.cpptransfer/CMakeLists.txttransfer/filecheckloop/*transfer/exportcheckloop/*transfer/resamplecheckloop/*transfer/database/*transfer/module/*
系列导航:系列总览 · 上一篇:MiguDelay 架构 23:屏蔽截图报告 · 下一篇:MiguDelay 架构 25:构建、依赖、测试与验证边界
本文由作者按照
CC BY 4.0
进行授权