核心概念
Engine / EngineConfig / 录制模式 / 状态机 / 回调 / 文件布局的字段与不变量。
核心概念
录制引擎
IRecordingEngine(agora 命名空间,Legacy 3.x 面)与 IAgoraMediaRtcRecorder(4.x 面)是同一份录制能力的两种公开面。二者都由 Linux 录制 SDK 的同一套录制管线驱动:
宿主媒体帧 ──▶ RecordingPipeline ──▶ IRecordingSink ──▶ 产物(MP4 / egress job)
│
└── 状态机 + 回调 + 产物校验sink(录制目的地)
sink 决定「录到哪里」,由宿主注入:
| sink | 真实性 | 产物 |
|---|---|---|
FfmpegFileSink | 真实:把 YUV420p 帧通过管道交给系统 ffmpeg,写出 H.264 MP4 | <storageDir>/<name>.mp4 |
EgressWorkerSink | 真实:调用本地 egress worker REST 录制运行中的房间 | egress job 的 files[] |
没有空 sink:没有注入 sink 时管线拒绝启动(-ERR_NOT_INITIALIZED),并且 Stop 只有在产物通过校验(存在、非空、容器头正确、ffprobe 读到正的时长)时才允许进入 stopped。
会话与产物
一次「加入频道 → 离开频道」(或 startRecording → stopRecording)对应一个会话与一个 RecordingOutput:路径、字节数、时长、容器类型、校验结论。output.verified 为 true 才代表落盘可播放。
帧从哪来
本 SDK 不内置声网 RTC 媒体栈,因此帧由宿主推入:
- 旧面:
joinChannel之后调用RecordingEngine::PushVideoFrame,或安装IFrameSource后调用PumpFrames; - 新面:
startRecording之后调用RtcRecorder::PushVideoFrame; - 使用 egress sink 时无需推帧(由 egress 直接录制房间)。
这条边界在产品文档与文档里都必须如实表述:录制管线是真的,Agora 频道接入不是。