Skip to main content

REST / WebSocket API

API 定位:批量提取 KVM 屏幕 / OCR / 审计数据用作 AI 训练样本。 不是 用作 Agent runtime control(那走 in-process gRPC,不暴露 HTTP)。

认证

所有 API 走 JWT — 先 login 拿 token,header 加 Authorization: Bearer <token>

TOKEN=$(curl -sk -X POST https://<KVM>:8080/api/auth/login \
-H 'Content-Type: application/json' \
-d '{"username":"admin","password":"<your-pw>"}' \
| jq -r .token)

curl -sk -H "Authorization: Bearer $TOKEN" \
https://<KVM>:8080/api/kvm/status

JWT 有效期 24h,可在配置里改。失效后会 401 — 重新 login。

关键 endpoint

数据提取(AI 训练 use case)

Endpoint用途
GET /api/v1/snapshots/list?from=<ts>&to=<ts>&page=<n>分页列出屏幕快照(JPEG)
GET /api/v1/snapshots/<id>单张快照原图
GET /api/v1/ocr/results?from=<ts>&page=<n>OCR 文本 + bbox 列表
GET /api/v1/audit/export?format=jsonl&from=<ts>审计日志 jsonl 流(签名链)
GET /api/v1/recording/list屏幕录像 segment 列表(HLS)
GET /api/v1/manifest全量数据 manifest(一次 GET 知所有可下载范围)

控制接口(运维 use case)

Endpoint用途
GET /api/kvm/status设备状态(HDMI / 视频 / HID / 客户端数)
POST /api/kvm/video/resolution切分辨率({width,height,fps}
POST /api/kvm/shortcut发组合键({shortcut:"ctrl_alt_del"}
POST /api/kvm/power/{on,off,reset}电源控制(需目标机 BIOS 配合 WoL)

信令 / 视频流

Endpoint协议用途
WSS /wsWebSocketWebRTC 信令(SDP offer/answer + ICE)
WebRTC peerRTP/SRTPH.264 视频 + datachannel HID

v2.0.4 起 /ws 强制 JWT 鉴权。无 token 直接 401。 之前 v1.x → v2.0.3 是 wide-open,CVE-2026-05-22-001 已修。

指标 / 可观测性(v2.1.0 新增,无 auth)

Endpoint协议用途
GET /api/metricsPrometheus 0.0.4 text28 字段 — fps / encode latency / shmring 健康 / TWCC 自适应状态

关键字段(详见仓内 docs/API.md §18):

  • kvm_video_frames_captured_total — L1 capture fps(rate(...) [10s]
  • kvm_mpp_encode_latency_us{quantile} — L3 编码 p50/p95/p99(rc.2 实测 p50=4019µs, p99=4121µs)
  • kvm_video_shmring_writes_total — Lever #2 快路径帧数(应等于 frames_captured)
  • kvm_adaptive_loss_ema_bp / kvm_adaptive_rtt_ema_ms — TWCC 自适应控制器状态
  • kvm_hid_latency_us{quantile} — HID 写延迟 p50/p95/p99

直接 scrape 例:

curl -sk https://<host>:8080/api/metrics | grep -E '^kvm_(video|mpp_encode)_' | head

分页 + 长期 token

数据提取场景设计:

  • 分页page + page_size(默认 50,max 500)
  • manifest:单一 endpoint 返回所有可下载范围(起止 timestamp / 总数 / 分片大小),客户端按此拉
  • 长期 token:admin 在 /api/v1/tokens/issue 签发 90 天 token 给爬虫用,不需要每天 login

错误码

HTTP含义处理
200 / 202成功(202 = 异步操作已接受)
400请求参数错(如 {width: -1}检查 payload
401token 缺失 / 过期重新 login
403权限不够(如普通用户调 admin endpoint)升级 role
409资源冲突(如同时切两次分辨率)重试
429限流退避后重试
5xx服务端错journalctl -u kvm-server

完整 API 文档

仓库内 docs/API.md + docs/API_FOR_DATA_EXTRACTION.md 含完整 OpenAPI 风格描述。