使用 Social Stream Ninja 控制 OBS

直接从 Event Flow 控制 OBS,无需 Streamer.bot。本指南涵盖设置、所有 OBS 触发器和操作、实用方案,以及旧版停靠面板/浏览器源控件。

简体中文

1. 将 Flow Actions 连接到 OBS

OBS WebSocket v5 内置于 OBS 28 及更新版本。Social Stream Ninja 使用它进行完整的 OBS 控制并接收媒体事件。

  1. 在 OBS 中,打开 工具 → WebSocket 服务器设置(Tools → WebSocket Server Settings).
  2. 启用 WebSocket 服务器。保留默认端口 4455;如果需要,可设置密码。
  3. 在 Social Stream Ninja 中,打开 Flow Actions 部分,并设置 OBS WebSocket URL 和可选密码。
  4. 复制 Flow Actions URL 并保持打开。对于叠加层/音频操作,建议使用 OBS 浏览器源。
  5. 使用 OBS WebSocket 测试器 在构建流程之前确认连接。
直接 URL 示例
https://socialstream.ninja/actions.html?session=YOUR_SESSION&obsws=ws://127.0.0.1:4455

添加 &obspw=YOUR_PASSWORD 仅当 OBS 要求身份验证时。添加 &obsdebug=1 在诊断问题时显示小型连接状态徽章。
保持 Flow Actions 页面运行。 它是接收 Event Flow 操作并发送 OBS WebSocket 请求的桥接。如果它是 OBS 浏览器源,请关闭 不可见时关闭来源(Shutdown source when not visible) 当来源必须在隐藏时继续控制 OBS。
Chat / stream event │ ▼ Social Stream Ninja Event Flow │ same session ID ▼ Flow Actions page (actions.html) │ OBS WebSocket v5 · ws://127.0.0.1:4455 ▼ OBS Studio

两种 OBS 连接模式

模式支持内容要求
OBS WebSocket v5本指南中的每个触发器和操作。OBS 28+、已启用 WebSocket 服务器、Flow Actions 页面已打开。
OBS 浏览器源 API用于场景切换、开始/停止直播、开始/停止录制和保存回放缓冲区的回退方式。以 Advanced Access Level 加载在 OBS 内的 Flow Actions。来源、滤镜、文本、音量、媒体、刷新和媒体结束功能仍需要 WebSocket。

2. 向流程添加 OBS 节点

  1. 打开 Event Flow 编辑器 并创建或编辑流程。
  2. 将触发器拖到画布上。
  3. 展开 OBS Studio 在 Actions 列表中,并拖入所需的 OBS 操作。
  4. 将触发器连接到操作,配置精确的 OBS 场景/来源名称,保存并启用流程。
Social Stream Ninja Event Flow 编辑器中的 OBS Studio 操作列表
OBS Studio 分组包含场景、来源、文本、媒体、音频、滤镜、输出和回放缓冲区控件。
OBS 名称必须完全匹配,包括空格和标点符号。来源操作以 OBS 输入名称为目标,而不是独立重命名后的场景项目标签。

3. OBS 触发器

OBS 报告匹配事件时,这些触发器会启动流程。它们以以下形式到达: type: "obs";OBS 专属详情位于 meta.

触发器触发时机实用数据
OBS 直播开始(OBS Stream Started)直播达到启动状态。meta.outputState, meta.outputActive
OBS 直播停止(OBS Stream Stopped)直播达到停止状态。meta.outputState, meta.outputActive
OBS 录制开始(OBS Recording Started)录制开始。meta.outputState
OBS 录制停止(OBS Recording Stopped)录制停止。meta.outputState
OBS 场景已更改(OBS Scene Changed)当前节目场景发生变化。meta.sceneName
OBS 媒体结束(OBS Media Ended) WebSocket媒体输入完成播放。可按精确的 Media Source Name 进行筛选。meta.inputName, meta.inputUuid
OBS 回放缓冲区已保存(OBS Replay Buffer Saved)OBS 完成保存回放。meta.savedReplayPath

4. OBS 操作

操作配置和行为连接
切换场景(Change Scene)按精确的场景名称切换当前节目场景。WebSocket 或浏览器源 API 回退方式
切换来源(Toggle Source)显示、隐藏或切换场景项目。Scene 和 Group 是可选的目标字段。WebSocket
设置文本源(Set Text Source)使用模板占位符更新 Text (GDI+) 或 Text (FreeType 2)。WebSocket
控制媒体源(Control Media Source)播放/继续、暂停、重新开始、停止、下一个或上一个。WebSocket
设置来源音量(Set Source Volume)将输入设置为从 -100 为 +26 dB.WebSocket
刷新浏览器源(Refresh Browser Source)重新加载浏览器源,不使用缓存。WebSocket
切换滤镜(Toggle Filter)启用、禁用或切换指定名称的来源滤镜。WebSocket
静音/取消音频静音(Mute/Unmute Audio)将输入静音、取消静音或切换静音。WebSocket
开始录制(Start Recording)开始 OBS 录制。WebSocket 或浏览器源 API 回退方式
停止录制(Stop Recording)停止 OBS 录制。WebSocket 或浏览器源 API 回退方式
开始直播(Start Streaming)启动已配置的 OBS 直播输出。WebSocket 或浏览器源 API 回退方式
停止直播(Stop Streaming)停止 OBS 直播输出。WebSocket 或浏览器源 API 回退方式
控制回放缓冲区(Control Replay Buffer)启动、停止或切换回放缓冲区。WebSocket
保存回放缓冲区(Save Replay Buffer)保存当前正在运行的回放缓冲区。WebSocket 或浏览器源 API 回退方式

Set Text Source 和流程变量

文本字段支持普通消息占位符,例如 {username}, {message}, {source},以及 {donation},以及前面流程节点添加的值,例如 {counterValue}, {counterTarget},以及 {counterRemaining}.

{username}: now {counterValue}, need {counterTarget}
Set Text Source 属性,带有计数器模板变量
Set Text Source 将解析后的值直接写入指定名称的 OBS 文本输入。
对于 Text (GDI+) 或 Text (FreeType 2) 来源,关闭 从文件读取(Read from file)。否则 OBS 可能继续显示文件内容,而不是 Event Flow 发送的文本。

媒体源控件

播放 / 暂停(Play / Pause)

播放(Play) 继续播放暂停的媒体。 暂停(Pause) 保持当前位置。

重新开始 / 停止(Restart / Stop)

重新开始(Restart) 从头开始。 停止(Stop) 结束播放并重置输入。

下一个 / 上一个(Next / Previous)

在支持播放列表的输入(例如 VLC Video Source)中移动。单文件 Media Source 可能忽略这些操作。

音量、静音和滤镜

设置来源音量(Set Source Volume) 使用 dB,与 OBS 混音器刻度一致: 0 dB 表示增益不变,负值更安静,而 -100 dB 实际相当于静音。Mute 是单独的状态。Toggle Filter 仅更改现有滤镜的启用状态,不会编辑滤镜设置。

回放缓冲区

首先在以下位置启用回放缓冲区: OBS 设置 → 输出(Settings → Output)。使用 控制回放缓冲区(Control Replay Buffer) 以启动/停止它,然后 保存回放缓冲区(Save Replay Buffer) 将最近缓冲的片段写入磁盘。

直播输出警告: Start/Stop Streaming 和 Start/Stop Recording 会立即执行。使用严格的触发器、权限和冷却时间,防止普通聊天消息意外触发它们。

5. 实用方案

OBS 直播期间每小时发送消息

在 Event Flow 编辑器中,选择 从模板开始 → 中级 → OBS 直播期间每小时发送消息(Start with a template → Intermediate → Hourly message while OBS is live)。它初始为禁用状态,在一个流程中包含三个分支:

  • OBS Stream Started → Set Gate State: ON
  • Time Interval (3600 seconds) → ON/OFF Switch → Send Message
  • OBS Stream Stopped → Set Gate State: OFF

两个 Set Gate State 操作已经指向同一个开关,其默认值为 OFF。编辑 发送消息(Send Message) 以选择聊天平台(示例使用 Twitch)和消息。选择某个平台或 All Platforms;Reply to Source 无法回复 OBS 事件或计时器触发。

将 Flow Actions 连接到 OBS,保持 Social Stream 和目标聊天连接,然后保存并启用流程 在开始直播之前。开关会等待 OBS 开始事件;在直播已经进行时加载它不会将其设为 ON。重启 Social Stream 也会将开关重置为 OFF。

时序: 间隔按自己的计划运行,因此第一次提醒可能在开播后一小时以内到达。之后,当开关为 ON 时,提醒每小时重复。更改 Time Interval 值可调整频率;单位为秒。

OBS 中的计数器文本

放置 设置文本源(Set Text Source) 放在计数器/检查路径之后,并使用:

{username}: now {counterValue}, need {counterTarget}

视频结束后运行某项操作

OBS 媒体结束(OBS Media Ended) (筛选为 Intro Video) → 切换场景(Change Scene) 为 Main.

由聊天控制的媒体重启

消息等于(Message Equals) !replayintro → 权限条件 → 控制媒体源:重新开始(Control Media Source: Restart).

刷新提醒页面

消息等于(Message Equals) !refreshalerts → 版主条件 → 刷新浏览器源(Refresh Browser Source).

提醒期间降低音乐音量

设置来源音量(Set Source Volume) 为 -24 dB → 提醒操作 → Delay → 恢复到 0 dB.

回放工作流

OBS 直播开始(OBS Stream Started) → 控制回放缓冲区:开始(Control Replay Buffer: Start);另一个可信命令运行 保存回放缓冲区(Save Replay Buffer).

6. 其他内置 OBS 控件

Social Stream Ninja 在 Streaming Chat 停靠面板中也有旧版 OBS 浏览器源控件。这些控件不使用 Flow Actions WebSocket 桥接。

选项功能要求
当前 OBS 场景指示器在 Streaming Chat 停靠面板中显示当前场景。以读取权限加载在 OBS 内的停靠面板。
访客可以使用 !cycle循环切换到下一个 OBS 场景,频率限制为每 10 秒一次。启用弹出窗口选项;停靠面板以 Advanced 权限加载在 OBS 内。
特权用户可以使用 !start / !stop由可信聊天用户启动或停止直播。启用弹出窗口选项;停靠面板以 Full/Advanced 控制权限加载在 OBS 内。
远程 OBS 控制面板当目标 OBS 停靠面板授予所需控制级别时,显示场景,并可切换场景或切换直播/录制。与 OBS 内运行的停靠面板配对的 Streaming Chat 停靠面板。
OBS WebSocket 测试器在使用 Event Flow 之前检查版本、连接、场景和单独请求。打开测试器

7. 故障排查

问题检查
没有任何反应流程已保存并启用;Flow Actions 已打开;两者使用相同的会话 ID。
OBS 无法连接WebSocket 服务器已启用,URL 为 ws://127.0.0.1:4455,并且密码匹配。端口 4444 是已过时的 v4 默认值。
找不到场景/来源/滤镜复制精确的 OBS 名称。对于可见性,如果项目嵌套或不在当前场景中,请设置 Scene or Group。
文本没有变化使用 Text (GDI+) 或 Text (FreeType 2),确认输入名称,并禁用 从文件读取(Read from file).
Media Ended 从不触发使用 OBS WebSocket v5 和真实媒体输入。循环媒体不会达到结束状态。
Next/Previous 没有效果使用支持播放列表的来源,例如 VLC Video Source。
保存回放失败在 OBS 输出设置中启用回放缓冲区,并在保存前启动它。
场景变化时操作停止禁用 不可见时关闭来源(Shutdown source when not visible) 在 Flow Actions 浏览器源上,或在其他位置保持页面打开。
诊断顺序:打开 测试器 → 确认 GetVersion → 确认场景/输入 → 测试单独请求 → 测试完整 Event Flow。