随着GB28181服务端程序用户的增加,单一集成的应用程序模式已无法满足新的需求。为了将功能开放给第三方系统集成,需要将其改造为后台服务,并定义一套标准化的交互协议。通过TCP、WebSocket、HTTP或MQTT等协议,第三方客户端(无论是Qt、VB、C#还是Web前端)均可获取在线设备、点播视频、回放录像、接收警情通知。
服务架构采用前后端分离设计。视频点播后,流媒体服务程序(如支持RTSP、RTMP、HTTP等协议的流媒体服务器)负责将视频流分发给不同终端。网页前端可选择FLV或WebRTC格式播放,而CS架构客户端则可直接播放RTSP流。这种设计极大地拓展了系统兼容性,并且服务端与客户端的升级维护互不干扰。
一、 核心功能特性
- 基础服务:支持设备注册、注销、心跳、校时、认证等标准GB28181流程。
- 设备管理:自动获取并同步设备与通道信息(含中文名称),支持设备状态、配置、预置位查询。
- 实时点播:支持主/子码流点播,内置RTP解包,支持多路流并发及通道/流级别的独立关闭。
- 录像回放与下载:支持IPC与NVR的录像查询、回放(支持进度切换与倍速播放)及高速下载。
- 云台控制:支持全向移动、镜头变焦、光圈调节、聚焦等PTZ控制。
- 预置位管理:支持预置位的查询、调用、添加、修改与删除。
- 告警与对讲:支持订阅并接收各类警情事件(如入侵检测),支持语音对讲功能。
- 协议与兼容:同时支持UDP和TCP模式;兼容GB28181-2011/2016/2022等版本;适配海康、大华、宇视等主流厂商设备。
- 高性能与跨平台:支持高并发消息处理与多路视频同时显示;可在Windows、Linux、macOS及多种嵌入式平台上运行。
二、 服务端协议说明
本服务端同时支持多种接入协议,便于不同场景的客户端集成:
- TCP:监听指定端口(默认9001),客户端连接后进行数据交互,需维护心跳。
- WebSocket:监听WebSocketServer端口(默认9002),适用于Web前端实时双向通信。
- HTTP:监听HTTP端口(默认9003),采用POST请求,便于网页直接调用。
- MQTT:通过MQTT Broker中转。服务端订阅固定请求主题,客户端需在请求中指定用于响应的主题。
所有通信数据均采用标准JSON格式,通过type字段区分指令类型,每条指令携带唯一的uuid用于请求-应答匹配。
心跳协议示例(TCP/WebSocket必需):
// 客户端 -> 服务端
{"type":"heartBeat","uuid":"c7b91a2dbb2f4fe984d7d5fba11a7693"}
// 服务端 -> 客户端
{"type":"heartBeat","uuid":"c7b91a2dbb2f4fe984d7d5fba11a7693"}
MQTT请求示例(需指定响应主题):
// 客户端 -> 服务端 (发布到 request 主题)
{
"type": "xxx",
"response": "response/device1", // 指定服务端应答的主题
"uuid": "c7b91a2dbb2f4fe984d7d5fba11a7693"
}
三、 核心交互协议详解
以下是关键业务操作的JSON协议定义。
1. 服务与配置管理
- 读取配置:
{"type":"getConfig","uuid":"唯一标识"}
// 返回结果包含 serverId, serverIp, serverPort, listenMode 等所有配置项
- 写入配置:通过
setConfig指令下发新配置,服务端将重启以应用新配置。
2. 设备与通道信息获取
- 获取设备列表:
getDeviceInfo指令返回在线设备及其通道树状信息。
- 获取在线点播通道:
getLiveInfo指令返回当前已被点播的通道列表。
3. 实时视频点播
- 开启点播:
openVideo指令需指定deviceId, channelId。成功后将返回该路视频流的多种格式地址(RTSP, RTMP, HLS, WebRTC)。
// 请求
{
"type": "openVideo",
"uuid": "唯一标识",
"deviceId": "34020000001320000001",
"channelId": "34020000001310000001",
"enableAudio": false
}
// 响应
{
"type": "openVideo",
"uuid": "同一标识",
"directPlay": true,
"result": {
"rtsp": "rtsp://192.168.0.110:8554/stream/...",
"webrtc": "http://192.168.0.110:8889/stream/..."
// ... 其他格式地址
}
}
- 关闭点播:使用
closeVideo指令。
4. 录像回放与控制
- 回放录像:
openVideo指令增加startTime与endTime参数,返回流地址。
- 回放控制:
playControl指令,通过controlType(play/pause/scale/position)和controlValue(倍速值/进度秒数)控制播放。
5. 云台与预置位控制
- 云台控制:
ptzControl指令,通过ptzType(如right, zoomIn)和ptzSpeed(1-255)控制。
- 预置位管理:
getPreset(查询)、setPreset(调用)、addPreset(添加)、delPreset(删除)指令。查询结果通过异步通知返回。
6. 告警与异步通知
服务端会主动向客户端推送特定事件,例如:
- 设备变更:
deviceChange类型消息,通知客户端设备或通道状态有更新。
- 警情上报:
alarmInfo类型消息,携带报警设备、通道、类型、内容及时间。
- 操作结果:如预置位查询结果(
getPreset)、录像文件查询结果(selectRecord)、文件下载完成(downFinsh)等,均通过独立的异步消息返回。
通过这套清晰定义的JSON协议,后台服务成功将GB28181视频监控能力封装为标准化的API,为构建更复杂的安防平台或AI视频分析系统提供了坚实、解耦的基础。
|