首页| 论坛| 消息
主题:Qt/C++开发监控GB28181系统/个人理解/要点总结/经验分享
liudianwu发表于 2026-01-11 09:22
## 一、前言说明
### 1.1 新增协议
**gb28181-2022主要新增了如下几个协议:**
1. 注册重定向,有些大的平台,下级域可能几万个设备同时连接,会导致并发不够,所以需要有个注册重定向机制,主动告知下级域重新注册到指定的上级域服务器,也就是相当于有个专门的重定向注册服务程序,专门分配注册连接。如果离线后,又需要先注册到重定向服务器,重新分配。
2. 图像抓拍,支持最多抓拍10张图片,可以设置抓拍间隔,最小1s。有些场景尤其是4G摄像头,为了省流量,平时就只需要抓拍报警图像到平台即可,平时不点播视频,视频太费流量。还有就是本来一些场景需要抓拍报警图片专门存储,之前2016版本只能去点播视频抓图,整个过程很繁琐很慢,使用非常鸡肋,而且费宽带。
3. 云台绝对控制,也叫精准控制,之前云台只能连续控制,也是最常用的方式,有些场景需要精准定位控制云台。并且云台位置变化会主动推送到服务器。
4. 增加了看守位的查询HomePositionQuery、巡航轨迹列表查询CruiseTrackListQuery、巡航轨迹查询CruiseTrackQuery、目标跟踪控制命令TargetTrack。
5. 增加了存储卡状态查询及应答命令,设备升级命令。这两个用的少一些。
### 1.2 个人理解
1. gb2818协议是基于sip协议的一套协议框架,而sip是和http协议类似的一套基于udp/tcp载体的协议,最终底层通过udp/tcp收发数据。sip是一套多媒体通信框架,而gb28181就是在这套框架上,定义了具体的通信内容,也就是收发数据填充的内容。
2. sip协议收发通常用的第三方开源库有osip/exosip,exosip依赖osip,是对osip的二次封装,带了具体传输层,osip相当于用来构建要收发的数据,本身没有收发功能。还有个更强大开源库pjsip,带了rtp解析。具体可参考 https://blog.csdn.net/weixin_43147845/article/details/144219082
3. sip协议说复杂也复杂,说简单也简单,复杂就是涉及到的具体协议规约特别庞大,和http协议是并列的一种机制。简单就是如果只是少量的通信,可以直接用udp/tcp通信收发解析,要发送的数据每一行都回车换行,最后一起发出去即可。就是发送和解析不大方便,需要去寻找和取出关键字再处理,而开源库会给你处理好对应的数据结构,比如解析后有枚举字段直接判断。
4. onvif是国际标准协议,gb28181是国家标准协议,各有优缺点,onvif通常是通过搜索到设备再去和设备通信,而gb28181刚好相反,是让设备主动连服务器,带上校验等参数,连上后,服务器再去和设备通信。这样相当于可以跨网了,而onvif通常只能局域网。gb28181还有个优势就是组网,可以层层级联,非常适合国内各种大监控系统的建设。
5. onvif客户端是先udp组播获取到设备,然后再发送http请求到不同的地址来交互,请求中可以获取到视频流rtsp地址,然后自己用ffmpeg等框架打开这个地址播放就行。而gb28181服务端是先udp/tcp监听端口,对连上的设备进行sip协议格式的数据内容的交互,发送请求播放指令后,开启发送rtp数据包,再用ffmpeg等框架解析这个数据包就行。
6. gb28181注册的时候Expires为有效期时间,一般是3600秒,如果是0则表示注销。同理订阅也是这个机制,订阅下发的时候有个有效期,如果有效期0就表示取消订阅。
### 1.3 要点总结
1. gb28181协议一般会选择udp通信,默认也是udp,早期国标设备都是只支持udp。
2. 服务端开启端口监听,设备端填写好对应参数后,会尝试往对应端口发数据进行连接。
3. 设备端间隔(心跳间隔默认是60s)发送REGISTER信令,服务端收到后,分析数据中是否带了鉴权信息(也就是用户认证相关信息),没有带的话则应答Unauthorized,带了的话,可以取出认证的信息,和要求的参数对比,比如国标服务端编号、认证密码、域编码信息,不一致则应答信息错误,叫客户端重新发。都没问题则表示认证通过。
4. 认证后服务端发送MESSAGE信令,带上xml数据,获取设备信息,收到设备信息后,再去查阅目录也就是获取通道列表。
5. 设备端在注册成功后,每隔一段时间发送一次心跳信息。方便服务端判断是否离线。
6. 设备端一旦注册成功,在有效期(一般是3600s)内,不会再去注册,默认就是认为已经注册成功。所以有时候服务端这边开启服务后,未必先收到REGISTER注册指令,而是可能先收到的心跳指令,所以服务端这边要做个特殊处理,收到心跳后,先判断该设备在系统中是否已经存在,不存在则先获取设备信息,再去获取通信列表。
7. 服务端支持多个设备注册,通过设备编号区分,严格要求同一个系统中设备编号不能重复,否则容易错乱。
8. 每个设备都可以有多个视频通道,一般摄像头IPC只有1个通道,录像机NVR有多个通道。如果是国标级联,相当于把服务端当做一台NVR设备,每个设备的通道都转换成唯一标识的通道。
9. 点播视频和云台控制等,都有个前提是要先获取到对应的通道列表,因为下发的数据中就要指定是哪个通道。
10. 点播视频是

浏览大图

浏览大图

浏览大图

浏览大图

浏览大图
下一页 (1/4)
回帖(0):

全部回帖(0)»
最新回帖
收藏本帖
发新帖