使用obs-websocket-js连接OBS Studio遇‘Server sent no subprotocol’错误求助
解决obs-websocket-js连接OBS时的
Server sent no subprotocol错误 错误原因
这个错误是因为WebSocket握手阶段,客户端(你的Node.js代码)发送了RPC版本子协议请求,但OBS端的obs-websocket插件不支持该子协议协商逻辑,本质是obs-websocket-js版本与OBS端的obs-websocket插件版本不兼容。
你的代码使用的是obs-websocket-js v5+版本的API写法,该版本要求OBS端安装v5.x系列的obs-websocket插件;如果OBS里装的是v4.x旧版插件,它不支持RPC子协议协商,就会返回这个错误。
解决方案
方案1:升级OBS端的obs-websocket插件到v5.x
- 在Ubuntu虚拟机的OBS中,打开
工具 > obs-websocket 设置,查看当前插件版本。 - 如果是v4.x,卸载旧插件,下载适配Ubuntu系统的v5.x版本obs-websocket插件并安装。
- 重启OBS,进入obs-websocket设置:
- 勾选"启用WebSocket服务器"
- 确认端口为
4444(和代码中一致) - 取消勾选"仅允许本地连接"(确保主机能访问虚拟机的OBS)
- 调整代码(v5.x默认会自动协商RPC版本,可省略手动设置):
const OBSWebSocket = require("obs-websocket-js").default; const obs = new OBSWebSocket(); const connect = async () => { try { const { obsWebSocketVersion, negotiatedRpcVersion } = await obs.connect( "ws://192.168.100.170:4444", undefined // 如果OBS插件设置了密码,填写对应密码 ); return `Connected to server ${obsWebSocketVersion} (using RPC ${negotiatedRpcVersion})`; } catch (error) { console.error("Failed to connect", error.code, error.message); } }; connect().then((value) => console.log(value));
方案2:降级obs-websocket-js到v4.x(适配旧版插件)
如果不想升级OBS插件,可将客户端库降级到v4.x版本:
- 执行命令切换版本:
npm uninstall obs-websocket-js && npm install obs-websocket-js@4 - 修改代码为v4.x的API写法:
const OBSWebSocket = require('obs-websocket-js'); const obs = new OBSWebSocket(); const connect = async () => { try { await obs.connect({ address: '192.168.100.170:4444', password: undefined // OBS插件设置了密码则填写 }); console.log('Connected to OBS successfully'); } catch (error) { console.error('Failed to connect', error); } }; connect();
额外检查项
- 确认主机能ping通虚拟机的IP
192.168.100.170,确保网络连通。 - 虚拟机的防火墙允许4444端口的TCP连接。
内容的提问来源于stack exchange,提问作者CostelMD
相关产品推荐
相关产品推荐

