录制模式
合流、单流与原始数据模式;布局、编码与输出文件差异。
录制模式
兼容版本里的 RecordingConfig.isMixingEnabled 与 4.x 的 enable_mix 决定单流还是合流;「页面式」是合流的一个布局变体。
| 模式 | 配置 | 产物 | 本 SDK 的可用性 |
|---|---|---|---|
| 单流(individual) | isMixingEnabled=false | 每个 uid 一路 MP4 | 真实:每会话一个 sink 写一路;多 uid 并发需宿主为每个 uid 建会话,startSingleRecordingByUid/setRecorderConfigByUid 属当前版本不支持 |
| 合流(composite) | isMixingEnabled=true | 一路 MP4 | 真实:合流画面由宿主/egress 产生并通过 sink 落盘;setVideoMixingLayout(布局合成)属当前版本不支持 |
| 页面式(web/page) | egress kind=web | 一路 MP4 | 真实:EgressWorkerSink(transport, "web") 由 egress worker 执行页面录制 |
布局
VideoMixingLayout 与 Region 是固定的公开类型(含 width/height/x/y/zOrder/alpha 等字段),可以完整构造并传入;但渲染合成(把多路画面画成一路)需要媒体渲染栈,本 SDK 不提供,因此 setVideoMixingLayout 抛出 NotSupportedException(4)。这与「类型存在」并不矛盾:类型是公开面,合成是能力。
需要真实合流时使用 EgressWorkerSink:布局由 egress worker(LiveKit egress)实际执行。
文件与容器
| sink | 容器 | 音轨 |
|---|---|---|
FfmpegFileSink | MP4(H.264) | 不支持:PushAudio 返回 -ERR_NOT_SUPPORTED(不静默丢音频) |
EgressWorkerSink | MP4(egress 决定) | 支持(由 egress 录制房间音轨) |
需要「音频 + 视频」本地文件时,选择 egress sink 或注入自定义 sink(IRecordingSink)把音频交给自己的封装器。