Skip to content

连接建立

SDK Open 使用两个 WebSocket 通道:

  • Command WS:承载所有 JSON 指令请求和响应。
  • Video WS:只承载视频流输出和流相关事件。

业务 token 不放在 WebSocket 握手 URL 中。客户端先匿名建立 Command WS,再通过 auth.create_session 绑定会话。

连接端点

通道对外 SDK 默认连接方式明文兼容端点用途
Assethttps://sdk-runtime.localhost:18082http://127.0.0.1:17082上传输入文件和读取任务资产。
Command WSwss://sdk-runtime.localhost:18090ws://127.0.0.1:17090发送 JSON 请求、接收响应和事件。
Video WSwss://sdk-runtime.localhost:18091ws://127.0.0.1:17091接收视频流和流事件。

对外 SDK 安装包默认开启 TLS,并将 sdk-runtime.localhost 映射到 127.0.0.1。客户端应优先使用上表中的 HTTPS/WSS 端点。明文 HTTP/WS 端点仅用于明确配置的兼容场景,不建议用于新的接入;在 HTTPS 页面中也不能连接明文 ws

Video WS 无论使用 ws 还是 wss,都必须保留 session_tokenstream_id 查询参数。Command WS 仍不在握手 URL 中携带 API Key、session token 或业务参数。

TLS 配置

对外 SDK 的默认配置已启用 SDK_TLS_ENABLED=1。如在自定义部署中显式启用或调整 TLS,请提供完整证书链和匹配私钥:

配置项说明
SDK_TLS_BIND_HOSTTLS 监听地址;未设置时沿用运行时 bind_host
SDK_TLS_CERT_FILE包含服务端证书和中间证书的 PEM/fullchain 文件。
SDK_TLS_KEY_FILE服务端 PEM 私钥文件。
SDK_TLS_KEY_PASSWORD可选的私钥口令。
SDK_ASSET_HTTPS_PORTAsset HTTPS 端口,默认 18082
SDK_COMMAND_WSS_PORTCommand WSS 端口,默认 18090
SDK_VIDEO_WSS_PORTVideo WSS 端口,默认 18091
SDK_ASSET_BASE_URL远程、NAT 或 DNS 部署时设置为客户端可访问的 HTTPS 资产基地址。

官方安装包会配置 sdk-runtime.localhost 的本机证书和受信任根 CA。使用独立证书库的客户端仍需导入相应 CA。TLS 仅保护传输链路,不能替代 API Key、auth.create_session 会话鉴权、资产访问鉴权和网络访问控制。Admin 与本地 Demo 继续使用其既有 HTTP 端口。

1. 检查运行时

如果 Admin HTTP 已启用,可先访问健康检查:

bash
curl http://127.0.0.1:17080/healthz

管理状态接口需要管理 token:

bash
curl -H "Authorization: Bearer <admin-token>" http://127.0.0.1:17080/api/status

2. 连接 Command WS

使用对外 SDK 默认的 WSS 连接:

text
wss://sdk-runtime.localhost:18090

连接成功后,可以先发送 system.ping

json
{
  "request_id": "req-ping-001",
  "method": "system.ping",
  "params": {},
  "client": {
    "source": "your-app",
    "protocol_version": "2.0.0",
    "trace_id": "trc-001"
  }
}

成功响应:

json
{
  "request_id": "req-ping-001",
  "code": 0,
  "message": "ok",
  "data": {
    "pong": true
  },
  "ts": 1710000000
}

3. 查询公开能力

使用 system.capabilities 可以确认当前运行时暴露的方法和授权模型:

json
{
  "request_id": "req-cap-001",
  "method": "system.capabilities",
  "params": {}
}

返回的 methods 会包含当前公开方法,例如 auth.create_sessiondevice.listdevice.opendevice.closevideo.startvideo.stop

4. 连接 Video WS

Video WS 不能直接匿名连接。必须先通过 video.start 获取 session_tokenstream_id,再使用默认 WSS 连接:

text
wss://sdk-runtime.localhost:18091?session_token=<session-token>&stream_id=<stream-id>

如使用自定义 TLS 域名,将主机名替换为证书中的域名:

text
wss://<tls-host>:18091?session_token=<session-token>&stream_id=<stream-id>

连接成功后,服务端会先发送 video.ready 文本事件,随后为每帧发送:

  • 一个 stream.frame_meta 文本事件
  • 一个 MJPEG/JPEG 二进制帧

客户端应根据 stream.frame_meta.pixel_format=mjpeg 将二进制帧按 JPEG/MJPEG 图像解码,再绘制到 Canvas。建议按最新帧优先策略渲染,避免视频帧堆积导致延迟。

CZUR Open Platform Documentation