标题:从零实现GB28181服务端与设备端:踩坑与突破
作者:liudianwu
日期:2025-10-29 08:07
内容:
## 一、前言说明
在GB/T 28181项目的开发过程中,前前后后确实耗费了不少精力。最初的动力来自于服务端组件的实现。对照国标文档反复研读,逐条实现所需的协议交互流程,整个过程下来,深刻体会到GB28181协议的复杂性远超ONVIF。
为什么说它更难?因为它本质上是一个“协议杂交体”:
- 信令层基于 **SIP 协议**,用于设备注册、心跳、目录查询等;
- 消息内容使用 **XML 封装**,结构繁琐,解析需格外小心;
- 云台控制沿用了模拟时代的 **16进制指令编码**,像是“时光倒流”;
- 音视频传输则依赖独立的 **RTP 流**;
- 而播放控制又用的是 **RTSP 协议中的 PLAY、TEARDOWN 等命令**。
可以说,GB/T 28181 把多种不同时代、不同领域的技术拼接在一起,形成了一套庞大而复杂的体系。没有几个月的深入钻研,很难真正掌握,发量减少也是情理之中了。一旦服务端实现稳定,反过来再去理解设备端的交互逻辑就变得清晰许多。设备端的本质其实并不复杂:底层基于 **UDP 和 TCP 通信**,根据国标文档解析收到的 SIP/RTSP 消息,按规范回复即可。只要严格按照标准实现,交互流程基本不会出错——如果出现问题,大概率是对方平台或设备厂商的实现不合规。
## 二、效果图
## 三、相关地址
1. 国内站点:[https://gitee.com/feiyangqingyun](https://gitee.com/feiyangqingyun)
2. 国际站点:[https://github.com/feiyangqingyun](https://github.com/feiyangqingyun)
3. 个人作品:[https://blog.csdn.net/feiyangqingyun/article/details/97565652](https://blog.csdn.net/feiyangqingyun/article/details/97565652)
4. 文件地址:[https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g](https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g) 提取码:01jf 文件名:bin_video_gb28181/bin_video_simulate。
## 四、功能特点
1. 支持设备注册、注销、心跳、校时、注册认证、注销认证等。
2. 设备上线后可以手动获取设备状态、设备信息、配置信息、预置位信息等。
3. 设备上线后自动获取设备通道信息,包括中文通道名称。识别到通道上线离线变化,会重新获取该设备的所有通道信息。
4. 支持视频点播,可以分别点播主码流和子码流,内置rtp解包线程,解包后发给视频播放组件解码播放。
5. 每个设备每个通道支持 ..