连接与重连
本指南介绍如何连接到正在运行的 OBS 实例、连接状态机、自动重连机制,以及可以绑定的连接相关事件。
启用 OBS WebSocket 服务器
在插件建立连接之前,需要先在 OBS 内启用 WebSocket 服务器:
- 打开 OBS Studio
- 前往 工具 → WebSocket 服务器设置
- 勾选 启用 WebSocket 服务器
- 设置密码(推荐)
- 记下端口号(默认值:
4455)
连接
您可以通过 OBS Component(按 Actor 配置)或 OBS Subsystem(全局)进行连接。两者均接受主机地址、端口和密码。
通过 OBS Component(推荐大多数用户使用)
- 将 OBS Controller 组件添加到任意 Actor。
- 在细节面板顶部的 Features 选择器中,开启所需的功能域(默认启用场景与录制推流,连接功能始终开启)。
- 在连接卡片中输入连接设置,然后点击 Connect。
- 使用内置控件,或在 Blueprint 中绑定事件。
细节面板无需编写任何代码即可对 OBS 进行全面控制,且仅显示您所选择的功能,保持最小化组件的整洁。
通过 OBS Subsystem(Blueprint)
// Get the OBS Subsystem
Get Game Instance → Get Subsystem (InhyeongOBSSubsystem)
// Connect to OBS
Connect (Host: "localhost", Port: 4455, Password: "your_password")
// React to events
Bind to On Connected
Bind to On Disconnected
通过 OBS Subsystem(C++)
// Get subsystem
UInhyeongOBSSubsystem* OBS = GetGameInstance()->GetSubsystem<UInhyeongOBSSubsystem>();
// Connect
OBS->Connect("localhost", 4455, "password");
// Bind to events (dynamic delegates for UFUNCTIONs)
OBS->OnConnected.AddDynamic(this, &AMyActor::HandleConnected);
// Or use native delegates with lambdas
OBS->GetClient()->OnConnectedNative.AddLambda([]() {
UE_LOG(LogTemp, Log, TEXT("Connected to OBS"));
});
身份验证
当设置了密码时,OBS 会使用 SHA256 质询/响应握手机制。该过程在连接序列中自动完成,因此您只需提供密码即可。若需要密码但未提供,连接将立即失败,而不会挂起等待。
连接状态机
连接将经历以下状态:
Disconnected → Connecting → Authenticating → Connected
| 状态 | 含义 |
|---|---|
Disconnected | 无活跃连接 |
Connecting | 正在向 OBS 打开 WebSocket |
Authenticating | 正在执行 SHA256 质询握手 |
Connected | 已完成身份识别,可发送请求并接收事件 |
进入 Connected 状态后,客户端会通过 ID 关联请求,并将传入的 OBS 事件分发至相应的处理器。
自动重连
自动重连默认启用。若连接断开,客户端将使用指数退避策略重试,避免对 OBS 造成过于频繁的请求。退避时间随每次尝试递增,一旦达到所配置的最大尝试次数则停止重连(设置为无限时将无限期重试)。
若在重连进行中手动调用 Connect(),不会取消正在进行的重连尝试,而是以新的连接目标覆盖它。
连接与重连事件
绑定以下事件以响应连接生命周期的变化。
连接
| 事件 | 描述 |
|---|---|
OnConnected | 已成功连接到 OBS |
OnDisconnected(Reason) | 已从 OBS 断开连接 |
OnConnectionError(Error) | 连接失败 |
重连
| 事件 | 描述 |
|---|---|
OnReconnecting(AttemptNumber) | 重连尝试开始 |
OnReconnectFailed | 所有重连尝试均已耗尽 |
每个事件均以 Blueprint 可赋值的动态委托和原生 C++ 委托两种形式提供(原生变体以 Native 为后缀)。
有关所有 OBS 功能域的完整事件目录,请参阅事件参考。