xg-cms 国标中心管理

围绕 GB/T 28181 信令交互与资源管理构建的 CMS:设备/通道生命周期、目录同步、实时点播、云台控制,并与 ZLMediaKit 通过 Hook 协议联动完成媒体调度。

定位与价值

xg-cms 用于承载国标平台的“控制面”能力:以 SIP 信令为核心,面向业务系统提供稳定的设备管理与点播编排接口。它通常与媒体服务器(例如 ZLMediaKit)配合使用,将媒体能力外置,形成清晰的分层:

  • 控制面(xg-cms):GB/T 28181 设备接入、目录管理、点播/回放指令、云台控制、广播等。
  • 数据面(媒体服务器):RTP 收流、转封装、分发、录制等媒体处理能力。

这种拆分使得平台具备更好的可扩展性,也便于与既有业务系统集成。

核心能力(以仓库功能清单为准)

能力项 状态 说明
GB28181 注册与 Digest 认证 已支持 设备注册/注销、鉴权与心跳保活。
目录查询与订阅 已支持 目录查询、目录订阅通知,维护通道资源视图。
实时点播(Invite)与 RTP 接收 已支持 对接媒体服务器,完成实时预览链路搭建。
云台控制(PTZ) 已支持 提供云台控制指令下发能力。
语音广播 已支持 支持国标语音广播相关能力。
历史回放/级联/更多状态接口 规划中 仓库 README 标注为未完成项,适合作为后续迭代方向。

对外接口(HTTP API / Swagger)

xg-cms 提供基于 Gin 的 HTTP API,并内置 Swagger 文档入口,便于联调与二次开发。

功能域 路由示例 说明
Swagger GET /swagger/*any 在线接口文档(服务启动后访问)。
GB28181 控制 GET /dev/v1/gb/invite / GET /dev/v1/gb/ptz / GET /dev/v1/gb/catalog 点播、云台、目录查询等控制入口。
WebRTC 播放 POST /dev/v1/rtc/play WebRTC 播放相关接口。
WebSocket GET /dev/ws/chat 实时消息通道(路由受 JWT 中间件保护)。

与 ZLMediaKit 的联动(Hook 驱动的调度闭环)

xg-cms 通过 ZLMediaKit 的 HTTP Hook 机制感知播放/拉流事件,并在“流不存在”等场景触发按需点播,形成典型的媒体调度闭环:

Hook 用途 实现入口
on_play 播放鉴权与策略控制 POST /dev/v1/zlk/hook/on_play
on_stream_not_found 按需拉流(请求的流不存在时触发点播) POST /dev/v1/zlk/hook/on_stream_not_found
on_stream_none_reader 无人观看资源回收(关闭直播流、发送 Bye) POST /dev/v1/zlk/hook/on_stream_none_reader
on_server_started / on_server_keepalive 媒体节点生命周期感知 POST /dev/v1/zlk/hook/on_server_started
on_flow_report 流量统计与审计 POST /dev/v1/zlk/hook/on_flow_report

ZLMediaKit Hook 参考文档:Web Hook API

部署与运维要点

核心配置集中在 xg-cms/config.yml,典型包括:

  • HTTP 服务监听:http.host / http.port(默认 8080)。
  • MySQL:mysql.dsn(可配置 mysql.initdb 初始化表结构)。
  • Redis:redis.host / redis.port / redis.password
  • SIP:sip.listen_ip / sip.publish_ip / sip.port(默认 15060,支持 UDP/TCP)。
  • ZLMediaKit:zlk.host / zlk.public_ip / zlk.secret,以及 hook 回调地址。

仓库提供 Docker Compose 方式运行与交叉编译说明(详见 CMD.MD)。

技术栈概览(来自 go.mod)

模块 说明
Gin HTTP API 服务框架。
GoSIP GB/T 28181 信令栈基础能力。
GORM + MySQL 设备、通道、位置等数据持久化。
Redis 缓存、会话/状态支撑。
Swagger 接口文档生成与展示。
gin-jwt JWT 鉴权中间件(当前路由中部分功能可启用)。

典型应用场景

  • 多品牌国标摄像机统一接入:目录自动同步、通道状态可视化、统一点播入口。
  • 视频中台控制面:为上层业务提供统一 REST API(预览、PTZ、订阅、广播)。
  • 媒体调度闭环:结合 ZLMediaKit Hook 实现按需拉流与无人观看自动关闭,降低资源占用。