MiguDelay 架构 14:录制、编码与原始复用
MiguDelay(DDLive)项目架构系列文档:录制、编码与原始复用。内容基于 2026-08-04 对指定重构分支的源码扫描结果整理。
MiguDelay 架构 14:录制、编码与原始复用
系列导航:系列总览 · 上一篇:MiguDelay 架构 13:长延时文件链与 DelayFileReader · 下一篇:MiguDelay 架构 15:推流、网络复用与重试
扫描基线
- 项目:
MiguDelay(DDLive)- 分支:
refactor/video-frame-provider- HEAD:
d28ec061406e4e3df93e3d1a92478d71a9ad4908- 工作树:clean
- 扫描日期:2026-08-04
- 说明:内容以当前 HEAD 源码为准;仓库旧架构文档只作为检索线索。
1. 真实实现
Orchestrator 根据主流快照分别提交视频录制和音频录制。StartRecordTask 当前实际实现是 video-only 与 audio-only 两条链;startRecordAudioVideo() 仍是空壳,因此上层拆分请求是当前合同。
2. 核心类
| 类 | 作用 |
|---|---|
StartRecordTask |
构造 encoder 与 raw muxer |
RecordContext |
持有 encoder/muxer |
| 视频 Encoder | MPEG2、AVC、X264、NV HEVC |
| 音频 Encoder | AAC、PassThrough |
RawVideoPacketMuxer |
写视频数据与索引 |
RawAudioPacketMuxer |
写音频数据 |
StopRecordTask |
take context 后停止 |
3. 视频录制链
sequenceDiagram
participant T as StartRecordTask
participant H as TaskHandle
participant O as Output
participant E as Video Encoder
participant M as RawVideoPacketMuxer
participant C as RecordContext
T->>H: getRecvContext
T->>C: create RecordContext
T->>E: init and start encoder
T->>O: register current original video callback
T->>M: init video and index paths
T->>E: register encoded video callback
T->>M: startMuxer
T->>H: setRecordContext
4. 音频录制链
1
2
3
4
5
Output.CurrentAudioFrameProcessed
-> AACFFmpegEncoder or AudioDataPassThrough
-> EncodedAudioFrameProcessed
-> RawAudioPacketMuxer
-> PCM recording file
5. 参数流
视频 encoder 使用尺寸、GOP、bitrate、color metadata、目标 pixel format、bit depth、frame-rate rational 和 context-pool size。Raw video header 保存编码类型、分辨率、帧率、pixel format 和完成标记。
音频参数来自对应 input track;audio index 决定注册哪一轨。Raw audio header 保存 sample format、sample rate、总/有效 channel 数和每视频帧 sample 数。
6. 生命周期
- recv context 必须存在。
- recordId 不得占用。
- encoder/muxer init 或 start 失败则不发布成功。
setRecordContext()是最终注册门。- stop 使用
takeRecordContext(recordId)。 RecordContext析构顺序:muxer → video encoder → audio encoder。
7. 类调用总链
1
2
3
4
5
6
7
8
9
TaskOrchestrator
-> TaskHandleGateway.startRecord
-> LegacyTaskHandleAdapter
-> TaskHandle.addTask
-> StartRecordTask.execute
-> Output callback
-> EncoderBase
-> MuxerBase
-> record files
8. 源码证据
src/code/module/taskhandle/record/StartRecordTask.cppsrc/code/module/taskhandle/record/StopRecordTask.cppsrc/code/module/encoder/**src/code/module/muxer/rawdatamuxer/**
系列导航:系列总览 · 上一篇:MiguDelay 架构 13:长延时文件链与 DelayFileReader · 下一篇:MiguDelay 架构 15:推流、网络复用与重试
本文由作者按照
CC BY 4.0
进行授权