目录
1:GB/T28181协议中使用的应用层协议介绍:
协议规范涉及SIP、SDP、RTP、RTCP、RTSP等应用层协议。其他协议会单独列篇
SIP+XML用于消息交互,SIP+SDP用于视频会话,RTP/RTCP用于媒体流传输控制,RTSP一般可用于录像回放,也可用于实时视频查看。
28181协议中 SIP+XML用于消息查找设备和返回设备信息 交互示例:
发送设备目录查询(服务器->设备)
MESSAGE sip:34020000001320000264@3402000000 SIP/2.0
Via: SIP/2.0/UDP 192.168.2.135:5060;rport;branch=z9hG4bK364291932
From: <sip:34020000002000000001@3402000000>;tag=204291932
To: <sip:34020000001320000264@3402000000>
Call-ID: 955291932
CSeq: 14 MESSAGE
Max-Forwards: 70
User-Agent: LiveQing
Content-Length: 161
Content-Type: Application/MANSCDP+xml
<?xml version="1.0" encoding="UTF-8"?>
<Query>
<CmdType>Catalog</CmdType>
<SN>55291932</SN>
<DeviceID>34020000001320000264</DeviceID>
</Query>
返回设备信息 设备-》服务器
MESSAGE sip:34020000002000000001@3402000000 SIP/2.0
Via: SIP/2.0/UDP 192.168.2.64:5060;rport=5060;received=192.168.2.64;branch=z9hG4bK74939292
From: <sip:34020000001320000264@3402000000>;tag=6586670
To: <sip:34020000002000000001@3402000000>
Call-ID: 1535161485
CSeq: 20 MESSAGE
Content-Type: Application/MANSCDP+xml
Max-Forwards: 70
User-Agent: IP Camera
Content-Length: 587
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<CmdType>Catalog</CmdType>
<SN>55291932</SN>
<DeviceID>34020000001320000264</DeviceID>
<SumNum>1</SumNum>
<DeviceList Num="1">
<Item>
<DeviceID>34020000001320000264</DeviceID>
<Name>TSET</Name>
<Manufacturer>Hikvision</Manufacturer>
<Model>IP Camera</Model>
<Owner>Owner</Owner>
<CivilCode>CivilCode</CivilCode>
<Address>Address</Address>
<Parental>0</Parental>
<ParentID>34020000001320000264</ParentID>
<SafetyWay>0</SafetyWay>
<RegisterWay>1</RegisterWay>
<Secrecy>0</Secrecy>
<Status>ON</Status>
</Item>
</DeviceList>
</Response>
MESSAGE: SIP请求方法,表示设备正在发送一个消息给指定的接收方。
Via: SIP消息经过的路由,包含协议版本、传输协议、源IP地址和端口号等。这里的branch参数是用于唯一标识这个请求的分支标识符。
From: 发起方信息,包括用户URI和标签。标签用于唯一标识请求,这个标签与接收方的响应中的标签相对应。
To: 接收方信息,与From字段类似,但通常不包含标签。
Call-ID: 呼叫ID,用于唯一标识一次通话。这个ID应该在一次通话中是唯一的。
CSeq: 命令序列号,用于标识请求的序列。这里的值为20,表示这是第20个MESSAGE请求。
Content-Type: 消息体的类型,这里是Application/MANSCDP+xml,表示消息体是一个XML文档,内容符合MANSCDP的格式。
Max-Forwards: 最大转发次数,用于防止消息在网络中无限循环。
User-Agent: 设备使用的用户代理,通常指示设备的类型和版本号。
Content-Length: 消息体的长度,这里是587,表示消息体的长度为587个字节。
消息体: 包含了具体的消息内容,这里是一个XML文档,表示设备发送了一个响应消息。XML文档中包含了命令类型(CmdType)、序列号(SN)和设备ID(DeviceID)等信息,以及一个设备列表(DeviceList),其中包含了一个设备条目(Item),包括设备ID、名称、厂商、型号等详细信息。
这些字段共同构成了SIP MESSAGE请求,用于设备向另一个设备或服务发送消息,这里的消息内容是一个XML格式的响应消息,用于回复查询设备目录的请求。
2:GB28181协议交互流程
交互主要有以下几个环节:
1.设备注册到国标平台:视频终端IPC设备需要注册到国标平台(例如:EasyGBS),国标平台要找到查询设备id信息(参考上面的xml交互示例),后根据设备摄像头id去发起视频会话
2.设备保活维持心跳:设备端定时向国标平台发送保活信息,否则会被平台认为掉线
3.视频播放:通过SIP协议,INVITE 请求建立通话播放音视频
3:设备注册到国标平台:
3.1:
示例:
REGISTER sip:34020000002000000001@3402000000 SIP/2.0
Via: SIP/2.0/UDP 10.45.12.141:5060;rport;branch=z9hG4bK873415819
From: <sip:34020000001110000002@3402000000>;tag=292191181
To: <sip:34020000001110000002@3402000000>
Call-ID: 924327262
CSeq: 1 REGISTER
Contact: <sip:34020000001110000002@10.45.12.141:5060>
Max-Forwards: 70
User-Agent: IP Camera
Expires: 3600
Content-Length: 0
REGISTER: SIP请求方法,表示设备正在注册到SIP服务器。
Via: SIP消息经过的路由,包含协议版本、传输协议、源IP地址和端口号等信息。
From: 发起方信息,包括用户名、域名和标签等信息。标签用于唯一标识请求,可以由设备生成。
To: 接收方信息,与From字段类似,但通常不包含标签。
Call-ID: 呼叫ID,用于唯一标识一次通话。
CSeq: 命令序列号,用于标识请求的序列。这里的值为1,表示这是第一个REGISTER请求。
Contact: 包含设备的联系信息,包括用户名、域名和IP地址等。这个信息用于告诉服务器设备的位置。
Max-Forwards: 最大转发次数,用于防止消息在网络中无限循环。
User-Agent: 设备使用的用户代理,通常指示设备的类型和版本号。
Expires: 注册的有效期限,以秒为单位。这里的值为3600秒,表示注册信息在3600秒后过期。
这些字段共同构成了SIP注册请求,用于设备向SIP服务器注册自身信息,以便后续能够进行通信。
3.2:
第一次注册后会认证失败,这时响应式内容会多个认证参数 :WWW-Authenticate头,指示认证方式和参数。也就是为digest认证信息。 例如:
SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP 10.45.12.141:5060;rport=5060;received=10.45.12.141;branch=z9hG4bK873415819
From: <sip:34020000001110000002@3402000000>;tag=292191181
To: <sip:34020000001110000002@3402000000>;tag=53631846
CSeq: 1 REGISTER
Call-ID: 924327262
User-Agent: EasyGBS v200511
Content-Length: 0
Contact: <sip:34020000002000000001@10.45.12.83:5061>
WWW-Authenticate: Digest realm="3402000000",nonce="29eb6d344c29a70a0997d173e937e693"
其他字段意思看上文
WWW-Authenticate: 身份验证挑战信息,包含了服务器要求客户端提供的身份验证信息的详细信息,包括领域(realm)和随机数(nonce)等。客户端需要使用这些信息来生成身份验证响应。
3.3 带有REGISTER信息再去注册一次。示例如下:
REGISTER sip:34020000002000000001@3402000000 SIP/2.0
Via: SIP/2.0/UDP 10.45.12.141:5060;rport;branch=z9hG4bK864745657
From: <sip:34020000001110000002@3402000000>;tag=292191181
To: <sip:34020000001110000002@3402000000>
Call-ID: 924327262
CSeq: 2 REGISTER
Contact: <sip:34020000001110000002@10.45.12.141:5060>
Authorization: Digest username="34020000001110000002", realm="3402000000", nonce="29eb6d344c29a70a0997d173e937e693", uri="sip:34020000002000000001@3402000000", response="42b636f290984b1d796907c882e4d5a8", algorithm=MD5
Max-Forwards: 70
User-Agent: IP Camera
Expires: 3600
Content-Length: 0
字段意思看上文
4:设备保活维持心跳
MESSAGE sip:34020000002000000001@3402000000 SIP/2.0
Via: SIP/2.0/UDP 10.45.12.141:5060;rport;branch=z9hG4bK999920179
From: <sip:34020000001110000002@3402000000>;tag=1336295153
To: <sip:34020000002000000001@3402000000>
Call-ID: 1577903431
CSeq: 20 MESSAGE
Content-Type: Application/MANSCDP+xml
Max-Forwards: 70
User-Agent: IP Camera
Content-Length: 164
<?xml version="1.0" encoding="GB2312"?>
<Notify>
<CmdType>Keepalive</CmdType>
<SN>1822</SN>
<DeviceID>34020000001110000002</DeviceID>
<Status>OK</Status>
</Notify>
MESSAGE消息头中Content-type头为Content-type: Application/MANSCDP+xml,表示保活信息报送命令采用MANSCDP(监控报警联网系统控制描述协议,Monitoringand Alarming Network System Control Description Protocol)协议格式定义,消息体详细解释见GB/T28181-2022 A.2.5通知命令-状态信息报送部分,
xml中Notify元素表示此消息是通知命令
xml中CmdType表示命令类型,这里为Keepalive
xml中的SN表示序列号
xml中的DeviceID表示设备ID
xml中的Status表示设备状态,这里为OK
4.2:保活服务器相应消息如下:
SIP/2.0 200 OK
Via: SIP/2.0/UDP 10.45.12.141:5060;rport=5060;received=10.45.12.141;branch=z9hG4bK999920179
From: <sip:34020000001110000002@3402000000>;tag=1336295153
To: <sip:34020000002000000001@3402000000>;tag=698636847
CSeq: 20 MESSAGE
Call-ID: 1577903431
User-Agent: Easy SIP Server
Content-Length: 0
除了MANSCDP协议格式,GB/T28181-2022标准还支持其他的协议格式,具体取决于设备之间的通信需求和约定。以下是一些可能的替代协议格式的示例:
1:PSIA-Event: PSIA(Physical Security Interoperability Alliance)事件格式
是另一个常用的事件报告协议。
它定义了一种用于安全设备之间通信的XML格式。示例消息可能如下:
Content-Type: application/psia-event+xml
<?xml version="1.0" encoding="UTF-8"?>
<Event>
<EventType>Alarm</EventType>
<EventID>1234</EventID>
<DeviceID>34020000002000000001</DeviceID>
<Time>2022-04-08T10:00:00</Time>
<Description>Fire alarm detected</Description>
</Event>
2:ONVIF-Event: ONVIF(Open Network Video Interface Forum)事件格式
是一种用于视频监控设备之间通信的标准化协议。
它定义了一种XML格式来描述设备状态和事件。示例消息可能如下:
Content-Type: application/onvif-event+xml
<?xml version="1.0" encoding="UTF-8"?>
<NotificationMessage>
<Topic>Alarm</Topic>
<MessageID>1234</MessageID>
<ProducerReference>34020000002000000001</ProducerReference>
<Message>
<Alarm>
<Time>2022-04-08T10:00:00</Time>
<Description>Fire alarm detected</Description>
</Alarm>
</Message>
</NotificationMessage>
5:28181播放环节流程图大致如下:
5.1 SDP 邀请示例:
INVITE sip:34020000001320000002@10.45.12.141:5060;transport=udp SIP/2.0
Via: SIP/2.0/UDP 10.45.12.83:5061;rport=5061;branch=z9hG4bK735682946
From: <sip:34020000002000000001@3402000000>;tag=671682946
To: <sip:34020000001320000002@10.45.12.141:5060>
Call-ID: 787682407
CSeq: 3 INVITE
Max-Forwards: 70
User-Agent: Easy SIP Server
Content-Length: 218
Content-Type: application/sdp
Contact: <sip:34020000002000000001@10.45.12.83:5061>
Subject: 34020000001320000002:0200000002,34020000002000000001:0
v=0
o=34020000002000000001 0 0 IN IP4 10.45.12.83
s=Play
c=IN IP4 10.45.12.83
t=0 0
m=video 50000 RTP/AVP 96 98 97
a=recvonly
a=rtpmap:96 PS/90000
a=rtpmap:98 H264/90000
a=rtpmap:97 MPEG4/90000
y=0200000002
v=0: 协议版本。这里的值为0,表示SDP协议的版本号。
o=34020000002000000001 0 0 IN IP4 10.45.12.83: 会话所有者标识。包含了用户名、会话ID、会话版本号、网络类型、地址类型和地址等信息。这里的意思是设备ID为34020000002000000001,会话ID和会话版本号都为0,使用的网络类型是IPv4,地址为10.45.12.83。
s=Play: 会话名称和描述。这里的值为"Play",表示该会话用于播放视频。
c=IN IP4 10.45.12.83: 数据连接描述。这里指定了媒体流的连接信息,使用的是IPv4地址10.45.12.83。
t=0 0: 会话活动时间。这里的值表示会话的起始时间和结束时间,都为0,表示未指定特定的会话时间。
m=video 50000 RTP/AVP 96 98 97: 媒体描述。指定了媒体类型、端口、传输层协议和媒体格式等信息。这里是视频类型,端口号是50000,传输层协议是RTP/AVP,支持的媒体格式有96、98和97。
a=recvonly: 媒体扩展属性。这里表示该媒体流是只接收不发送的。
a=rtpmap:96 PS/90000: 媒体扩展属性。指定了媒体格式96(Payload Type)对应的RTP映射信息。这里表示媒体格式96是PS(Payload Structure)类型,采样率是90000。
a=rtpmap:98 H264/90000: 同上,指定了媒体格式98对应的RTP映射信息,表示媒体格式98是H264编码类型,采样率是90000。
a=rtpmap:97 MPEG4/90000: 同上,指定了媒体格式97对应的RTP映射信息,表示媒体格式97是MPEG4编码类型,采样率是90000。
y=0200000002: 会话ID扩展属性。表示会话ID的扩展信息,具体含义可能需要根据协议规范或具体应用进行解释。
这些信息共同描述了一个SIP SDP会话,包括了会话的基本参数、媒体流的传输信息以及媒体格式的描述
5.2 邀请INVITE响应示例
SIP/2.0 200 OK
Via: SIP/2.0/UDP 10.45.12.83:5061;rport=5061;branch=z9hG4bK735682946
From: <sip:34020000002000000001@3402000000>;tag=671682946
To: <sip:34020000001320000002@10.45.12.141:5060>;tag=140553725
Call-ID: 787682407
CSeq: 3 INVITE
Contact: <sip:34020000001110000002@10.45.12.141:5060>
Content-Type: application/sdp
User-Agent: IP Camera
Content-Length: 199
v=0
o=34020000001110000002 261 261 IN IP4 10.45.12.141
s=Play
c=IN IP4 10.45.12.141
t=0 0
m=video 15060 RTP/AVP 96
a=setup:active
a=sendonly
a=rtpmap:96 PS/90000
a=filesize:0
y=0200000002
v=0: 协议版本。这里的值为0,表示SDP协议的版本号。
o=34020000001110000002 261 261 IN IP4 10.45.12.141: 会话所有者标识。包含了用户名、会话ID、会话版本号、网络类型、地址类型和地址等信息。这里的意思是设备ID为34020000001110000002,会话ID和会话版本号都为261,使用的网络类型是IPv4,地址为10.45.12.141。
s=Play: 会话名称和描述。这里的值为"Play",表示该会话用于播放视频。
c=IN IP4 10.45.12.141: 数据连接描述。这里指定了媒体流的连接信息,使用的是IPv4地址10.45.12.141。
t=0 0: 会话活动时间。这里的值表示会话的起始时间和结束时间,都为0,表示未指定特定的会话时间。
m=video 15060 RTP/AVP 96: 媒体描述。指定了媒体类型、端口、传输层协议和媒体格式等信息。这里是视频类型,端口号是15060,传输层协议是RTP/AVP,支持的媒体格式只有96。
a=setup:active: 媒体扩展属性。这里表示媒体流是主动设置的。
a=sendonly: 媒体扩展属性。这里表示该媒体流是只发送不接收的。
a=rtpmap:96 PS/90000: 媒体扩展属性。指定了媒体格式96(Payload Type)对应的RTP映射信息。这里表示媒体格式96是PS(Payload Structure)类型,采样率是90000。
a=filesize:0: 媒体扩展属性。表示文件大小为0。
y=0200000002: 会话ID扩展属性。表示会话ID的扩展信息,具体含义可能需要根据协议规范或具体应用进行解释。
5.3 返回ACK示例,也就是告诉对方准备好了,可以发送媒体流了
ACK sip:34020000001320000002@10.45.12.141:5060;transport=udp SIP/2.0
Via: SIP/2.0/UDP 10.45.12.83:5061;rport=5061;branch=z9hG4bK672682961
From: <sip:34020000002000000001@3402000000>;tag=671682946
To: <sip:34020000001320000002@10.45.12.141:5060>;tag=140553725
Call-ID: 787682407
CSeq: 3 ACK
Max-Forwards: 70
User-Agent: Easy SIP Server
Content-Length: 0
6:媒体流传输
接下来IPC应该主动向国标服务器发送RTP流,RTP协议带的媒体流封装格式为PS,传输层协议为UDP,RTP源端地址为15060,目的端地址为50000,SSRC=0200000002