录制与推流
本指南涵盖所有 OBS 输出:录制(包括分割文件与章节标记)、推流、虚拟摄像头、Replay Buffer(含文件名冲突防护),以及通用输出控制和推流字幕。
录制
| 函数 | 说明 |
|---|---|
StartRecord() | 开始录制 |
StopRecord() | 停止录制 |
PauseRecord() | 暂停录制 |
ResumeRecord() | 恢复录制 |
ToggleRecord() | 切换录制状态 |
ToggleRecordPause() | 切换录制暂停状态 |
GetRecordStatus() | 获取当前录制状态 |
IsRecording() | 检查当前是否正在录制 |
录制目录
| 函数 | 说明 |
|---|---|
GetRecordDirectory() | 获取当前录制目录(异步) |
SetRecordDirectory(Directory) | 设置录制目录(下次录制时生效) |
GetCachedRecordDirectory() | 获取已缓存的目录值 |
注意:
SetRecordDirectory的更改在下一次录制开始时才会生效,不会立即应用。
录制分割与章节标记(OBS 30.2+ / obs-websocket 5.5.0+)
| 函数 | 说明 |
|---|---|
SplitRecordFile() | 将当前录制分割到新文件 |
CreateRecordChapter(ChapterName) | 向录制添加章节标记(名称可选) |
要求:
- OBS 30.2.0 或更高版本
- obs-websocket 5.5.0 或更高版本
- 必须正在进行录制
- 章节标记仅适用于 Hybrid MP4 录制格式
推流
| 函数 | 说明 |
|---|---|
StartStream() | 开始推流 |
StopStream() | 停止推流 |
ToggleStream() | 切换推流状态 |
GetStreamStatus() | 获取当前推流状态 |
IsStreaming() | 检查当前是否正在推流 |
虚拟摄像头
| 函数 | 说明 |
|---|---|
StartVirtualCam() | 启动虚拟摄像头 |
StopVirtualCam() | 停止虚拟摄像头 |
ToggleVirtualCam() | 切换虚拟摄像头 |
GetVirtualCamStatus() | 获取当前虚拟摄像头状态 |
IsVirtualCamActive() | 检查是否处于活动状态 |
Replay Buffer
| 函数 | 说明 |
|---|---|
StartReplayBuffer() | 启动 Replay Buffer |
StopReplayBuffer() | 停止 Replay Buffer |
ToggleReplayBuffer() | 切换 Replay Buffer 状态 |
SaveReplayBuffer() | 将当前缓存保存到文件 |
GetReplayBufferStatus() | 获取当前 Replay Buffer 状态 |
IsReplayBufferActive() | 检查是否处于活动状态 |
GetLastReplayPath() | 获取上次保存的回放文件路径 |
**注意:**请先在 OBS 设置 → 输出 → Replay Buffer 中启用 Replay Buffer!
文件名冲突防护(需手动启用)
OBS 以时间戳命名回放文件,因此快速连续保存可能导致文件互相覆盖。输出处理器可自动重命名每个已保存的文件,并为其附加引擎内的标签。这些功能位于 GetClient()->GetOutputs() 下:
| 函数 | 说明 |
|---|---|
SetReplayCollisionProofing(bEnable) | 为每个已保存的回放追加毫秒级精确后缀,确保文件不会发生冲突 |
SetNextReplayContextLabel(Label) | 为下一次保存附加经过净化处理的标签(例如 "BossKill"),并嵌入文件名中 |
SaveReplayBufferWithContext(Label) | 立即保存缓存,并使用一次性上下文标签 |
GetLastReplayPath() 返回最终(重命名后)的路径。若 OBS 在不同的机器上写入文件,则跳过重命名并保留原始路径。
通用输出控制
按名称控制任意 OBS 输出,包括自定义输出和插件输出。
| 函数 | 说明 |
|---|---|
GetOutputList() | 获取所有可用输出(异步) |
GetOutputStatus(OutputName) | 获取指定输出的状态 |
GetOutputSettings(OutputName) | 获取输出的设置 |
SetOutputSettings(OutputName, Settings) | 设置输出设置(C++ 版本) |
SetOutputSettingsFromString(OutputName, JsonSettings) | 设置输出设置(Blueprint 友好版本) |
StartOutput(OutputName) | 启动指定输出 |
StopOutput(OutputName) | 停止指定输出 |
ToggleOutput(OutputName) | 切换输出的开关状态 |
GetCachedOutputs() | 获取已缓存的输出列表 |
**注意:**输出名称为 OBS 内部名称,可能与显示名称不同。请使用
GetOutputList()发现可用的输出。
推流字幕
| 函数 | 说明 |
|---|---|
SendStreamCaption(CaptionText) | 通过推流发送 CEA-608 字幕文本 |
要求:
- 推流必须处于活动状态
- 以 CEA-608 格式发送隐藏式字幕
输出事件
OnStreamStateChanged(bActive, State):推流状态发生变化时触发。OnRecordStateChanged(bActive, State):录制状态发生变化时触发。OnVirtualCamStateChanged(bActive, State):虚拟摄像头状态发生变化时触发。OnReplayBufferStateChanged(bActive, State):Replay Buffer 状态发生变化时触发。OnReplayBufferSaved(FilePath):回放保存到文件时触发。OnRecordFileChanged(NewOutputPath):录制分割后开始写入新文件时触发。OnRecordDirectoryReceived(RecordDirectory):录制目录获取完成时触发。OnOutputListReceived(Outputs):输出列表获取完成时触发。OnOutputStatusReceived(Status):某个输出的状态获取完成时触发。
如需查看所有 OBS 领域事件的完整目录,请参阅事件参考。