GB28181教程——国标级联

国标级联就是指两个平台之间通过级联的方式,实现上级平台对下级设备的控制和视频播放等功能。简而言之,让基层的设备能够在上级、上上级、上上上级等各个地方都能看到。
也就是说,级联的平台起到中转的作用,接受上级的SIP指令然后转发给下级设备,同时将下级的视频流转发给上级,框架图如下:

说白了,就是你的平台既要支持设备的接入,同时还要“模拟”设备,让上级平台接入。也就是要实现以下功能:平台注册、目录更新、事件发布(告警、设备移动、离线等)。

一、级联注册和普通设备注册的 5 个核心区别

项目 普通设备注册 级联注册(下级平台向上级注册)
注册的 DeviceID 20位通道ID(13开头) 20位平台ID(20开头)
注册频率 3600秒一次 600秒一次(2016)或 300秒一次(2022推荐)
Keepalive方式 90秒 MESSAGE Keepalive 必须同时支持 REGISTER 续约 + MESSAGE Keepalive
Catalog 上报 上报自己的通道 上报自己 + 下级所有通道(递归合并)
点播方式 设备直推流 上级可以选择“透传”或“代答”(后面详细讲)

二、目录订阅&通知(Subscribe&Notify)

1. 上级平台 → 下级/设备:发起事件订阅(Subscribe)

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
29
30
31
32
33
34
35
MESSAGE sip:34020000001100000001@3402000000 SIP/2.0
Via: SIP/2.0/TCP 10.10.10.100:5060;branch=z9hG4bK7744145a
Max-Forwards: 70
From: <sip:34020000002000000001@3402000000>;tag=sub20250316
To: <sip:34020000001100000001@3402000000>
Call-ID: sub20250316-885522@10.10.10.100
CSeq: 20 MESSAGE
Contact: <sip:34020000002000000001@10.10.10.100:5060>
User-Agent: NationalPlatform v2.0
Content-Type: Application/MANSCDP+xml
Content-Length: 512

<?xml version="1.0" encoding="GB2312"?>
<Message>
<CmdType>Subscribe</CmdType>
<SN>20250316001</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>
<DeviceID>34020000001100000001</DeviceID>
<EventType>Alarm</EventType>
</Item>
<Item>
<DeviceID>34020000001100000001</DeviceID>
<EventType>MobilePosition</EventType>
<Interval>10</Interval>
</Item>
</SubscribeList>
</Message>

(下级/设备)只需要回一个普通的 200 OK 即可:

1
2
3
4
5
6
7
SIP/2.0 200 OK
Via: SIP/2.0/TCP 10.10.10.100:5060;branch=z9hG4bK7744145a;received=10.10.10.100
From: <sip:34020000002000000001@3402000000>;tag=sub20250316
To: <sip:34020000001100000001@3402000000>;tag=resp2025
Call-ID: sub20250316-885522@10.10.10.100
CSeq: 20 MESSAGE
Content-Length: 0

2. 下级/设备 → 上级平台:主动上报事件(Notify)

(1)移动侦测报警

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
MESSAGE sip:34020000002000000001@3402000000 SIP/2.0
Via: SIP/2.0/TCP 192.168.1.100:5060;branch=z9hG4bK11223344
Max-Forwards: 70
From: <sip:34020000001100000001@3402000000000>;tag=alm20250316
To: <sip:34020000002000000001@3402000000>
Call-ID: alarm20250316-778899@192.168.1.100
CSeq: 888 MESSAGE
Content-Type: Application/MANSCDP+xml
Content-Length: 328

<?xml version="1.0" encoding="GB2312"?>
<Notify>
<CmdType>Alarm</CmdType>
<SN>90001</SN>
<DeviceID>34020000001310000001</DeviceID>
<AlarmPriority>2</AlarmPriority>
<AlarmMethod>VideoMotion</AlarmMethod>
<AlarmTime>2025-03-16T14:30:25</AlarmTime>
<Info>
<AlarmDescription>移动侦测报警</AlarmDescription>
</Info>
</Notify>

(2)通道上线(Status=ON)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
MESSAGE sip:34020000002000000001@3402000000 SIP/2.0
Via: SIP/2.0/TCP 192.168.1.100:5060;branch=z9hG4bK55667788
...
Content-Type: Application/MANSCDP+xml
Content-Length: 420

<?xml version="1.0" encoding="GB2312"?>
<Notify>
<CmdType>Catalog</CmdType>
<SN>90002</SN>
<DeviceID>34020000001100000001</DeviceID>
<DeviceList Num="1">
<Item>
<DeviceID>34020000001310000001</DeviceID>
<Name>东门球机</Name>
<Status>ON</Status>
</Item>
</DeviceList>
</Notify>

(3)移动位置上报(车载/单兵)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
MESSAGE sip:34020000002000000001@3402000000 SIP/2.0
Via: SIP/2.0/TCP 192.168.1.100:5060;branch=z9hG4bK99AABBCC
...
Content-Type: Application/MANSCDP+xml
Content-Length: 380

<?xml version="1.0" encoding="GB2312"?>
<Notify>
<CmdType>MobilePosition</CmdType>
<SN>90003</SN>
<DeviceID>34020000001100000001</DeviceID>
<Time>2025-03-16T14:35:00</Time>
<Longitude>118.778800</Longitude>
<Latitude>32.056700</Latitude>
<Speed>58.5</Speed>
<Direction>178</Direction>
<Altitude>25</Altitude>
</Notify>

(4)设备离线(DeviceStatus=OFFLINE)

1
2
3
4
5
6
7
8
9
10
11
12
MESSAGE sip:34020000002000000001@3402000000 SIP/2.0
...
Content-Type: Application/MANSCDP+xml
Content-Length: 220

<?xml version="1.0" encoding="GB2312"?>
<Notify>
<CmdType>DeviceStatus</CmdType>
<SN>90004</SN>
<DeviceID>34020000001100000001</DeviceID>
<Result>OFFLINE</Result>
</Notify>

上级平台收到任意 Notify 后,必须回 200 OK,否则设备会认为没送到而重发。