# WebSocket 服务器
DDTV5 内置了一个 WebSocket 推送通道,用于把运行过程中的状态变化(开播、开始录制、录制结束、登录态变化、配置修改等)实时推送给所有已连接的客户端。WEBUI 的实时状态刷新就是基于它实现的。
# 这是什么
- WebSocket 服务跟随 WEB 服务一起启动,没有独立的开关和端口,挂在主 HTTP 服务的
/ws路径上。 - 只要
EnableWebServer为true(默认)且Port不为 0,WebSocket 推送就可用。 - 连接无鉴权,不需要计算
sig。 - 这是一个单向推送通道:服务端会主动广播事件消息;客户端发给服务端的消息只会被原样回显(echo),不会被处理。需要执行操作请使用 HTTP API。
# 怎么连接
ws://<IP>:<端口>/ws
默认即 ws://127.0.0.1:11419/ws。用浏览器开发者工具就可以快速验证:
const ws = new WebSocket("ws://127.0.0.1:11419/ws");
ws.onmessage = (e) => console.log(JSON.parse(e.data));
连接成功后,每当 DDTV 发生状态变化(例如某个房间开播、开始录制),你就会收到一条 JSON 消息。
# 推送消息长什么样
每条推送消息都是统一的 JSON 结构:
{
"cmd": "StartRecording",
"code": 40104,
"data": { "Name": "某某主播", "UID": 672346917, "...": "..." },
"message": "开始录制"
}
cmd/code:事件名称和事件代码(如40104= 开始录制、40105= 录制结束、40102= 开播事件、30106= 登录态失效)data:关联的房间信息对象(与具体房间无关的事件为null)message:事件描述文本
完整的事件代码表、data 字段结构、消息合并机制说明以及 JavaScript / Python 客户端示例,见 WebSocket 推送协议文档。
# 使用建议
注意
- 服务端会把同一批中相同事件 + 相同房间的重复消息合并为最新一条再广播,因此该通道不适合当作完整事件日志;需要可靠事件流的场景请自行在接收端结合 HTTP API 查询兜底。
- 消息不能丢的场景也可以改用 WebHook:同一份推送内容会以 HTTP POST 发到你配置的地址,无需维持长连接。
- WebSocket 通道没有鉴权,请勿把 DDTV 的端口直接暴露到公网;如需远程访问请自行加反向代理和访问控制。