OBS 现在是直播视频的主要工具之一。它是 Twitch 的首选直播软件,Twitch 是最受欢迎的实时视频网站之一。有一些非常棒的附加组件,可以让主播通过手机或其他屏幕控制直播,而不会中断正在运行的视频。事实证明,使用 Node-RED 和 obs-websockets 插件构建自己的控制面板非常容易。

我的 OBS 控制仪表板
我知道你们中的许多人在想——“他说 WebSockets 和容易同时出现?” 许多人在设置和使用 WebSockets 时遇到了困难,WebSockets 允许通过 Web 服务器在单个连接上进行双向通信。Node-RED 内置了对 WebSockets 的支持,并且它是使这一切变得容易的部分,至少与编写您自己的客户端/服务器相比是这样。
在开始之前,请确保您已安装并配置了 OBS。首先下载并安装 obs-websockets 插件的最新稳定版本。对于本文,默认设置是可以的,但我强烈建议将来按照说明保护 obs-websockets 的安全。
接下来,下载并安装 Node-RED,可以在同一系统上,也可以在不同的系统上(如 Raspberry Pi)。同样,默认安装对于我们的目的来说是可以的,但明智的做法是按照他们网站上的说明保护安装的安全。
现在是有趣的部分。启动 Node-RED 并打开 Web 界面(默认情况下在 https://127.0.0.1:1880),您将得到一个空白画布。打开右侧的“汉堡”菜单,然后选择“管理调色板”。然后单击“安装”选项卡,搜索“node-red-contrib-dashboard”和“node-red-contrib-rbe”模块。
安装完成后,单击右侧列表,将以下块拖放到画布上
- 1 个 Websocket Out
- 1 个 Websocket In
- 1 个 Debug
- 1 个 Inject
- 1 个 Switch
- 1 个 Change
- 2 个 JSON
- 1 个 Catch
按以下顺序连接它们
Inject->Button->Change->JSON->Websocket Out
Websocket In->JSON->Switch->RBE->Debug
Catch->Debug

基本流程
当按钮被按下(或 Inject 节点发送时间戳)时,有效负载通过 Change 节点发送,从 JSON 对象转换为字符串,然后发送到 WebSocket Out 节点。当 WebSocket In 节点接收到消息时,它会被转换为 JSON 对象,如果不是重复项,则发送到 Debug 节点进行输出。Catch 节点将捕获任何错误并将它们放入调试面板。
有效负载中有什么?让我们设置好一切并找出答案。
首先,双击 button
以打开设置对话框。首先使用下拉菜单将有效负载更改为“JSON”。在字段中,添加以下内容
{"request-type":"GetVersion"}
启用“如果输入端收到 msg,则模拟按钮单击”复选框,然后单击“完成”以关闭按钮配置。当消息来自 Inject 节点,或者在 UI 中按下按钮时,它会将 JSON 有效负载发送到下一个节点。

设置按钮
现在打开 Change 节点。我们希望通过将第一个字段从 payload
更改为 payload.message-id
,然后使用第二个字段上的下拉菜单将类型从 String
更改为 msg.
,然后我们将 _msgid
放入字段中,从而将 msg.payload.message-id
设置为 msg._msgid
。这会将唯一消息 ID 复制到 JSON 对象有效负载,以便每个请求都有一个唯一的 ID 用于跟踪。
然后将其发送到 JSON 节点,以从 JSON 对象转换为字符串,然后传递到 Websocket Out 节点。打开 Websocket Out 节点以配置与 OBS 的连接。首先,将 Type
更改为 Connect to
,然后单击铅笔图标以创建新的连接 URL。将其设置为 ws://OBSMachine:4444/
并关闭对话框以保存。OBSMachine
是运行 OBS 和 obs-websocket 的机器的名称。例如,如果 Node-RED 在同一台机器上运行,则这将是 ws://127.0.0.1:4444
,如果它在一台名为“luxuria.local”的机器上,则这将是 ws://luxuria.local:4444
。关闭并更新 Websocket Out 节点。这会将有效负载文本字符串发送到 OBS 中的 WebSocket。

Websocket Out 节点配置
转到 WebSocket In 流程!打开 WebSocket In 节点,将其 Type
设置为 Connect to
,并将 URL 设置为我们之前定义的连接(它应该自动填充)。接下来是第二个 JSON 节点,我们可以保持不变。这接受来自 OBS 的输出并将其转换为有效负载对象。
接下来,我们将从所有其他内容中过滤掉常规的心跳和状态更新。打开 switch 并将“Property”值设置为 payload["update-type"]
。现在从下面的下拉列表中选择 Is Not Null
。单击 +
添加第二个选项,然后从下拉列表中选择 otherwise
。

Switch 节点配置
将 switch 上的新输出直接连接到 Debug 节点输入。
RBE 节点将过滤掉重复项,需要告知它要监视哪个字段。由于它应该连接到 switch 的输出,该输出仅发送状态更新,因此这很重要,因为 obs-websocket 每隔几秒钟就会发送更新。默认情况下,RBE 会比较整个有效负载对象,这将不断变化。打开 RBE 节点,并将 Property
从 payload
更改为 payload.streaming
。如果有效负载的 streaming
值发生更改,则传递消息;否则,丢弃它。
最后一步是将 Debug 节点输出从 msg.payload
更改为完整的 msg 对象。这使我们可以查看整个对象,有时该对象具有 payload
之外的有用信息。
现在,单击 Deploy
以激活更改。希望 WebSocket 节点下方会显示绿色的“已连接”消息。如果它们是红色或黄色,则连接 URL 可能不正确,需要更新,或者连接被阻止。确保远程机器上的端口 4444 已打开且可用,并且 OBS 正在运行!
如果没有 RBE 节点在 streaming
值上进行过滤,调试面板(画布右侧的错误图标)现在应该会充满 Heartbeat 消息。单击 Inject 节点左侧的按钮以发送将模拟按钮单击的信号。如果一切正常,您应该会看到一个对象到达,其中列出了 obs-websocket
可以做的所有事情。

对“GetVersion”的响应
现在在另一个选项卡或窗口中打开 https://127.0.0.1:1880/ui
。它应该显示一个按钮。按下它!调试面板应显示与之前相同的信息。
恭喜!您已经向 OBS 发送了您的第一个(并且希望不是最后一个)WebSocket 消息!
这仅仅是使用 obs-websockets
和 Node-RED 可以完成的工作的开始。obs-websockets 的 GitHub 存储库中的 protocol.md 文件中记录了支持的完整文档。通过一点实验,您可以创建一个功能齐全的控制面板来启动和停止串流、更改场景以及更多功能。如果您像我一样,您会在不知不觉中设置各种控件。

我可能有点权力过大了。
评论已关闭。