GB28181教程——Catalog目录更新方法
设备上线、离线、目录增删到底是怎么通知平台的?
读完这篇你立刻就能:
- 看懂任何厂家的 Catalog XML
- 知道设备一上电 30 秒内必须干 3 件事
- 解决 90% 的“平台看不到通道”“目录不更新”问题
1. 先把整个目录体系画出来
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| 设备上电后 30 秒内必须完成以下 3 件事
1 设备注册成功(第3篇讲过) 2 主动上报本设备信息(DeviceInfo) 3 主动上报所有通道目录(Catalog)
设备(IPC/NVR) 平台 │ │ │ ① MESSAGE (CmdType=DeviceInfo) │ │──────────────────────────────────────► │ │ 200 OK │ │◄────────────────────────────────────── │ │ │ │ ② MESSAGE (CmdType=Catalog) │ │──────────────────────────────────────► │ │ 200 OK │ │◄────────────────────────────────────── │ │ │ │ ③ 以后通道有增删改 → 再发 Catalog │
|
这就是“设备状态+目录上报”的全部流程。
2. 设备信息上报(DeviceInfo)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| MESSAGE sip:34020000002000000001@3402000000 SIP/2.0 Via: SIP/2.0/TCP 192.168.1.100:5060;branch=z9hG4bK888 From: <sip:34020000001100000001@3402000000>;tag=info123 To: <sip:34020000002000000001@3402000000> Call-ID: deviceinfo2025@192.168.1.100 CSeq: 30 MESSAGE Content-Type: Application/MANSCDP+xml Content-Length: 312
<?xml version="1.0" encoding="GB2312"?> <Query> <CmdType>DeviceInfo</CmdType> <SN>1001</SN> <DeviceID>34020000001100000001</DeviceID> </Query>
|
平台回复的 Response(重点看这几个字段):
1 2 3 4 5 6 7 8 9 10 11
| <?xml version="1.0" encoding="GB2312"?> <Response> <CmdType>DeviceInfo</CmdType> <SN>1001</SN> <DeviceID>34020000001100000001</DeviceID> <DeviceName>海康球机-001</DeviceName> <Manufacturer>HIKVISION</Manufacturer> <Model>DS-2DE7A825IW-AEB</Model> <Firmware>V5.7.12</Firmware> <Channel>8</Channel> </Response>
|
3. 目录主动上报(Catalog)
3.1 上电后第一次全量上报
设备上电后,向平台全量上报目录,如果数量过多,可以分页,分多次上报
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| <?xml version="1.0" encoding="GB2312"?> <Notify> <CmdType>Catalog</CmdType> <SN>1002</SN> <DeviceID>34020000001100000001</DeviceID> <SumNum>2</SumNum> <DeviceList Num="2"> <Item> <DeviceID>34020000001310000001</DeviceID> <Name>球机-东门</Name> <Manufacturer>HIKVISION</Manufacturer> <Model>DS-2DE7A825IW</Model> <Owner>0</Owner> <CivilCode>340200</CivilCode> <Address>东门岗亭</Address> <Parental>0</Parental> <ParentID>34020000001100000001</ParentID> <RegisterWay>1</RegisterWay> <Secrecy>0</Secrecy> <Status>ON</Status> </Item> <Item> <DeviceID>34020000001310000002</DeviceID> <Name>枪机-西门</Name> <Status>OFF</Status> </Item> </DeviceList> </Notify>
|
3.2 平台主动查询目录
平台发送如下指令进行设备目录查询:
1 2 3 4 5
| <Query> <CmdType>Catalog</CmdType> <SN>8888</SN> <DeviceID>34020000001100000001</DeviceID> </Query>
|
必须在 5 秒内回全量 Catalog(格式和上面3.1一样,只是外层变成 Response)
4. 目录变更实时通知(增、删、改、上下线)
| 变更类型 |
怎么通知 |
关键字段 |
| 新增通道 |
发 Catalog,Item 里写新增的 |
SumNum 要更新总数 |
| 删除通道 |
发 Catalog,只列出剩余通道 |
SumNum 减小 |
| 通道上线 |
发 Catalog,只包含该通道,Status=ON |
Num=1 |
| 通道离线 |
发 Catalog,只包含该通道,Status=OFF |
Num=1 |
| 改名字/位置 |
重新发完整 Item |
所有字段重新填 |
5. 目录订阅(平台订阅目录变更通知)
平台会主动订阅(设备回复 200 OK):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <Message> <CmdType>Subscribe</CmdType> <SN>9999</SN> <DeviceID>34020000001100000001</DeviceID> <SubscribeList> <Item> <DeviceID>34020000001100000001</DeviceID> <EventType>Catalog</EventType> <StartTime>2025-01-01T00:00:00</StartTime> <EndTime>2030-12-31T23:59:59</EndTime> </Item> <Item> <EventType>Alarm</EventType> </Item> </SubscribeList> </Message>
|
回 200 OK,之后通道有任何变化需要主动发 Catalog给平台。