Skip to content

Desuq Cafe

文档菜单

此翻译可能落后于最新的英文版本。 查看英文版

连接与重连

本指南介绍如何连接到正在运行的 OBS 实例、连接状态机、自动重连机制,以及可以绑定的连接相关事件。

启用 OBS WebSocket 服务器

在插件建立连接之前,需要先在 OBS 内启用 WebSocket 服务器:

  1. 打开 OBS Studio
  2. 前往 工具 → WebSocket 服务器设置
  3. 勾选 启用 WebSocket 服务器
  4. 设置密码(推荐)
  5. 记下端口号(默认值:4455

连接

您可以通过 OBS Component(按 Actor 配置)或 OBS Subsystem(全局)进行连接。两者均接受主机地址、端口和密码。

通过 OBS Component(推荐大多数用户使用)

  1. OBS Controller 组件添加到任意 Actor。
  2. 在细节面板顶部的 Features 选择器中,开启所需的功能域(默认启用场景与录制推流,连接功能始终开启)。
  3. 在连接卡片中输入连接设置,然后点击 Connect
  4. 使用内置控件,或在 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 功能域的完整事件目录,请参阅事件参考