MiguDelay 架构 16:输出模式
MiguDelay(DDLive)项目架构系列文档:输出模式。内容基于 2026-08-04 对指定重构分支的源码扫描结果整理。
MiguDelay 架构 16:输出模式
系列导航:系列总览 · 上一篇:MiguDelay 架构 15:推流、网络复用与重试 · 下一篇:MiguDelay 架构 17:Aux 播单、Reader 与帧源
扫描基线
- 项目:
MiguDelay(DDLive)- 分支:
refactor/video-frame-provider- HEAD:
d28ec061406e4e3df93e3d1a92478d71a9ad4908- 工作树:clean
- 扫描日期:2026-08-04
- 说明:内容以当前 HEAD 源码为准;仓库旧架构文档只作为检索线索。
1. 四种模式
| Mode | 视频 | 音频 |
|---|---|---|
| Delay | 原延时视频 | 原延时音频 |
| AuxWithAudio | Aux 视频 | Aux 音频 |
| AuxVideoOnly | Aux 视频 | 原延时音频 |
| MutedLive | 非 Aux 视频路径 | 原音频路径,推流 mute |
单一 enum 取代多个可写 bool 组合。
2. 核心类
| 类 | 职责 |
|---|---|
OutputModeService |
校验、写 mode、发布 event |
OutputModeStateView |
唯一 atomic mode |
LegacyOutputModeBinding |
readiness snapshot 与兼容副作用 |
OutputModeViewModel |
QML command/read-only projection |
FrameAvailabilityTracker |
input/delay readiness |
IOutputModeSource |
media thread 只读 Port |
3. 命令链
sequenceDiagram
participant Q as QML
participant V as OutputModeViewModel
participant B as LegacyOutputModeBinding
participant S as OutputModeService
participant ST as OutputModeStateView
participant O as Output Tick
Q->>V: switchTo target
V->>B: typed command
B->>B: capture readiness snapshot
B->>S: switchMode
alt rejected
S-->>V: stable error code
else accepted
S->>ST: atomic exchange
S-->>B: mode changed event
S-->>V: authoritative state
O->>ST: acquire load
end
4. 校验
包括 shutdown、task not Running、already target、Aux playlist/reader 不可用、Delay return not ready、无 input frame、delay buffer 不足、无 delayed frame 和 output not ready。
5. accepted 后副作用
Binding 在状态提交后执行 MQTT block/delay/aux/mute、ShieldSnapshot start/flush、Aux reader load/reset、操作日志和主机复制。副作用不能先于 Service commit。
6. 跨线程读
Service 是唯一 writer;Output/Gateway 通过 shared const source 读取;Aux/Preview 持 const reference。控制线程写 atomic,媒体线程 acquire read。
7. internal reset
恢复到 Delay 仍通过 Service/StateView,但 origin 标记 internal recovery,可抑制复制、截图和操作日志等外部副作用。
8. 源码证据
src/code/module/playback/outputmode/outputmodeservice.*src/code/module/playback/outputmode/outputmodestateview.hsrc/code/module/playback/outputmode/legacyoutputmodebinding.*src/code/data/playback/outputmodeviewmodel.*src/code/module/output/outputmoderouting.h
系列导航:系列总览 · 上一篇:MiguDelay 架构 15:推流、网络复用与重试 · 下一篇:MiguDelay 架构 17:Aux 播单、Reader 与帧源
本文由作者按照
CC BY 4.0
进行授权