1. 将 Flow Actions 连接到 OBS
OBS WebSocket v5 内置于 OBS 28 及更新版本。Social Stream Ninja 使用它进行完整的 OBS 控制并接收媒体事件。
- 在 OBS 中,打开 工具 → WebSocket 服务器设置(Tools → WebSocket Server Settings).
- 启用 WebSocket 服务器。保留默认端口
4455;如果需要,可设置密码。 - 在 Social Stream Ninja 中,打开 Flow Actions 部分,并设置 OBS WebSocket URL 和可选密码。
- 复制 Flow Actions URL 并保持打开。对于叠加层/音频操作,建议使用 OBS 浏览器源。
- 使用 OBS WebSocket 测试器 在构建流程之前确认连接。
https://socialstream.ninja/actions.html?session=YOUR_SESSION&obsws=ws://127.0.0.1:4455添加
&obspw=YOUR_PASSWORD 仅当 OBS 要求身份验证时。添加 &obsdebug=1 在诊断问题时显示小型连接状态徽章。
两种 OBS 连接模式
| 模式 | 支持内容 | 要求 |
|---|---|---|
| OBS WebSocket v5 | 本指南中的每个触发器和操作。 | OBS 28+、已启用 WebSocket 服务器、Flow Actions 页面已打开。 |
| OBS 浏览器源 API | 用于场景切换、开始/停止直播、开始/停止录制和保存回放缓冲区的回退方式。 | 以 Advanced Access Level 加载在 OBS 内的 Flow Actions。来源、滤镜、文本、音量、媒体、刷新和媒体结束功能仍需要 WebSocket。 |
2. 向流程添加 OBS 节点
- 打开 Event Flow 编辑器 并创建或编辑流程。
- 将触发器拖到画布上。
- 展开 OBS Studio 在 Actions 列表中,并拖入所需的 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}
媒体源控件
播放 / 暂停(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) 将最近缓冲的片段写入磁盘。
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。