1. 项目背景与需求分析
在物联网平台中集成视频监控能力已经成为行业刚需。我们现有的IoT平台虽然已经支持了MQTT、HTTP、TCP等9种主流物联网协议,但在视频监控领域存在明显短板。国内安防市场主要采用GB/T28181标准(以下简称GB28181),而国际厂商设备则普遍支持ONVIF协议。这两种协议在信令控制、媒体传输等方面存在显著差异,需要针对性设计集成方案。
关键决策点:选择WVP-PRO作为GB28181信令代理,而非直接实现SIP协议栈。这是因为完整的GB28181协议栈开发成本过高,而WVP-PRO作为成熟开源项目已经实现了国标要求的全部信令交互流程。
2. 技术架构设计
2.1 整体架构分层
系统采用典型的三层架构设计:
code复制前端展示层(Vue3)
│
▼
业务逻辑层(yudao-module-iot-biz)
├── GB28181接入模块(WVP-PRO+ZLMediaKit)
└── ONVIF接入模块(Java ONVIF客户端)
│
▼
设备接入层(IPC/NVR)
2.2 核心组件选型
GB28181侧组件:
- WVP-PRO:基于Java开发的SIP信令服务器,完整实现GB28181-2016标准
- ZLMediaKit:高性能流媒体服务器,支持RTP/RTSP/RTMP等多种协议转换
ONVIF侧组件:
- ONVIF Java客户端:基于Apache CXF实现的WS-*协议栈
- 媒体处理:复用ZLMediaKit进行流转发
实测数据:在4核8G服务器上,ZLMediaKit可稳定转发200路720P视频流,CPU占用率约65%
3. GB28181集成实现
3.1 SIP信令交互流程
GB28181设备注册典型时序:
- 设备主动向WVP-PRO发起REGISTER请求
- WVP-PRO校验设备信息后返回200 OK
- 平台可随时发起INVITE请求建立媒体通道
- 设备回复SDP描述信息
- ZLMediaKit完成媒体端口协商
java复制// 示例:WVP-PRO处理设备注册的代码片段
public void processRegister(SipRequestEvent evt) {
Device device = deviceDao.findByDeviceId(evt.getDeviceId());
if (device == null) {
sendResponse(evt, 404, "Not Found");
return;
}
// 验证密码等业务逻辑...
sendResponse(evt, 200, "OK");
}
3.2 媒体传输方案
采用RTP over UDP传输视频流,关键参数配置:
| 参数项 | 推荐值 | 说明 |
|---|---|---|
| 视频编码 | H.264 | 国标强制要求 |
| 音频编码 | G.711A | 可选 |
| 传输协议 | RTP/AVP | PS封装格式 |
| 端口范围 | 30000-40000 | 需在防火墙开放 |
4. ONVIF集成实现
4.1 设备发现与能力协商
ONVIF采用WS-Discovery协议进行设备发现,核心操作:
- 发送Probe消息到239.255.255.250:3702
- 解析设备返回的XAddr(服务地址)
- 调用GetCapabilities获取设备能力集
- 通过GetProfiles获取媒体配置信息
java复制// ONVIF设备发现示例
OnvifDevice device = new OnvifDevice("192.168.1.100", "admin", "password");
DeviceCapabilities caps = device.getCapabilities();
List<Profile> profiles = device.getMedia().getProfiles();
4.2 视频流获取方式
根据设备能力选择最优取流方案:
- RTSP直连(最高效)
bash复制
rtsp://admin:password@192.168.1.100/Streaming/Channels/101 - ONVIF媒体接口(兼容性更好)
- HTTP流(部分新型设备支持)
5. 数据模型设计
5.1 核心数据表结构
媒体服务器表(media_server):
| 字段 | 类型 | 描述 |
|---|---|---|
| id | varchar(32) | 主键 |
| name | varchar(64) | 服务器名称 |
| ip | varchar(15) | IP地址 |
| streaming_port | int | 流媒体端口 |
视频通道表(video_channel):
| 字段 | 类型 | 描述 |
|---|---|---|
| channel_id | varchar(32) | 国标通道ID |
| device_id | varchar(32) | 关联设备ID |
| status | tinyint | 在线状态 |
6. 实战经验与避坑指南
6.1 GB28181常见问题
-
设备注册失败
- 检查SIP服务器域配置
- 确认设备密码与平台一致
- 抓包分析SIP消息头字段
-
视频流无法播放
- 验证ZLMediaKit端口是否开放
- 检查RTP载荷类型是否匹配
- 使用Wireshark分析RTP包序列号
6.2 ONVIF适配技巧
-
不同厂商的ONVIF实现差异:
- 海康:需要关闭WS-Security才能发现设备
- 大华:ProfileToken命名规则特殊
- 宇视:部分接口需要附加命名空间
-
性能优化建议:
- 缓存GetServices响应
- 异步处理设备发现
- 连接池管理HTTP客户端
7. 扩展能力设计
在基础视频监控能力上,我们还实现了:
- 级联上级平台(支持GB28181平台互联)
- 录像计划与存储管理
- 智能分析结果接入
- 视频质量诊断(VQD)
平台目前日均处理超过5000路视频流,平均延迟控制在300ms以内。实际部署时建议采用分布式架构,将信令服务器与媒体服务器分离部署