找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1615

积分

1

好友

227

主题
发表于 4 天前 | 查看: 14| 回复: 0

随着GB28181服务端程序用户的增加,单一集成的应用程序模式已无法满足新的需求。为了将功能开放给第三方系统集成,需要将其改造为后台服务,并定义一套标准化的交互协议。通过TCP、WebSocket、HTTP或MQTT等协议,第三方客户端(无论是Qt、VB、C#还是Web前端)均可获取在线设备、点播视频、回放录像、接收警情通知。

服务架构采用前后端分离设计。视频点播后,流媒体服务程序(如支持RTSP、RTMP、HTTP等协议的流媒体服务器)负责将视频流分发给不同终端。网页前端可选择FLV或WebRTC格式播放,而CS架构客户端则可直接播放RTSP流。这种设计极大地拓展了系统兼容性,并且服务端与客户端的升级维护互不干扰。

一、 核心功能特性

  1. 基础服务:支持设备注册、注销、心跳、校时、认证等标准GB28181流程。
  2. 设备管理:自动获取并同步设备与通道信息(含中文名称),支持设备状态、配置、预置位查询。
  3. 实时点播:支持主/子码流点播,内置RTP解包,支持多路流并发及通道/流级别的独立关闭。
  4. 录像回放与下载:支持IPC与NVR的录像查询、回放(支持进度切换与倍速播放)及高速下载。
  5. 云台控制:支持全向移动、镜头变焦、光圈调节、聚焦等PTZ控制。
  6. 预置位管理:支持预置位的查询、调用、添加、修改与删除。
  7. 告警与对讲:支持订阅并接收各类警情事件(如入侵检测),支持语音对讲功能。
  8. 协议与兼容:同时支持UDP和TCP模式;兼容GB28181-2011/2016/2022等版本;适配海康、大华、宇视等主流厂商设备。
  9. 高性能与跨平台:支持高并发消息处理与多路视频同时显示;可在Windows、Linux、macOS及多种嵌入式平台上运行。

二、 服务端协议说明

本服务端同时支持多种接入协议,便于不同场景的客户端集成:

  1. TCP:监听指定端口(默认9001),客户端连接后进行数据交互,需维护心跳。
  2. WebSocket:监听WebSocketServer端口(默认9002),适用于Web前端实时双向通信
  3. HTTP:监听HTTP端口(默认9003),采用POST请求,便于网页直接调用。
  4. 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指令增加startTimeendTime参数,返回流地址。
  • 回放控制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视频分析系统提供了坚实、解耦的基础。




上一篇:DeepWiki实战指南:AI驱动的GitHub源码阅读与Spring Boot深度分析
下一篇:亿级数据分页性能优化:从10秒到10毫秒的四种实战方案
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-24 17:17 , Processed in 0.167697 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表