本文主要主要针对28181协议中视频流的部分,来阐述视频流通过28181协议如何进行视频会话和视频传输的。本文主要介绍28181协议中引用的协议、视频封装格式、实时视频点播协议交互流程等内容。
28181协议规范中涉及到SIP、SDP、RTP、RTCP、RTSP等应用层协议,其中SIP+XML主要用于消息交互,SIP+SDP主要用户视频会话,RTP/RTCP主要用于媒体流传输控制,RTSP主要用户录像回放。有关各种协议的详细介绍可参考如下文章,本文不做详细介绍:
为方便以后查看,关注公众号:壹零仓,发送消息获取相关文章,比如:发送RTP,可获取RTP协议的介绍。
本章节主要针对实时视频点播协议进行详细介绍,28181发起视频会话前,首先视频终端设备需要注册到国标平台,国标平台需要查询到设备的摄像头ID,根据摄像头ID发起视频会话,进行音视频传输。
本章节抓取的协议的实验环境如下:
有关国标平台EasyGBS的使用介绍,后面会单独出一篇文章进行介绍。
28181传输层支持TCP和UDP,视频申请支持主动模式和被动模式,本文主要以常用的UDP被动模式为例,说明交互流程,后续文章会详细介绍视频主被动模式以及基于TCP的传输。
GB/T 28181协议介绍 的文章中已经介绍了设备注册流程,设备注册流程图如下:
REGISTER sip:34020000002000000001@3402000000 SIP/2.0
Via: SIP/2.0/UDP 10.45.12.141:5060;rport;branch=z9hG4bK873415819
From: ;tag=292191181
To:
Call-ID: 924327262
CSeq: 1 REGISTER
Contact:
Max-Forwards: 70
User-Agent: IP Camera
Expires: 3600
Content-Length: 0
协议详解:
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: ;tag=292191181
To: ;tag=53631846
CSeq: 1 REGISTER
Call-ID: 924327262
User-Agent: EasyGBS v200511
Content-Length: 0
Contact:
WWW-Authenticate: Digest realm="3402000000",nonce="29eb6d344c29a70a0997d173e937e693"
协议详解如下:
REGISTER sip:34020000002000000001@3402000000 SIP/2.0
Via: SIP/2.0/UDP 10.45.12.141:5060;rport;branch=z9hG4bK864745657
From: ;tag=292191181
To:
Call-ID: 924327262
CSeq: 2 REGISTER
Contact:
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
这里相比第一次发送的REGISTER消息,多了Authorization字段,其字段内容为digest认证信息。
SIP/2.0 200 OK
Via: SIP/2.0/UDP 10.45.12.141:5060;rport=5060;received=10.45.12.141;branch=z9hG4bK864745657
From: ;tag=292191181
To: ;tag=424631862
CSeq: 2 REGISTER
Call-ID: 924327262
User-Agent: Easy SIP Server
Content-Length: 0
Date: 2022-11-07T17:22:22.710
Expires: 3600
Contact:
头字段解析同上文,这里不做过多描述。
28181协议中规定了保活的消息类型:Keepalive,主要用于设备端向国标平台定时汇报设备状态,进而实现服务器与设备之间的心跳检测机制,一般当国标平台在两个心跳周期未接收到心跳,则认为设备出下线,所以为了保证设备与国标平台之间的正常通信,设备端需要定时向国标平台发送保活协议,协议流程如下:
MESSAGE sip:34020000002000000001@3402000000 SIP/2.0
Via: SIP/2.0/UDP 10.45.12.141:5060;rport;branch=z9hG4bK999920179
From: ;tag=1336295153
To:
Call-ID: 1577903431
CSeq: 20 MESSAGE
Content-Type: Application/MANSCDP+xml
Max-Forwards: 70
User-Agent: IP Camera
Content-Length: 164
Keepalive
1822
34020000001110000002
OK
sip方法采用MESSAGE,sip头前文已经详细介绍了,这里针对消息体进行详解。
MESSAGE消息头中Content-type头为Content-type: Application/MANSCDP+xml,表示保活信息报送命令采用MANSCDP(监控报警联网系统控制描述协议,Monitoringand Alarming Network System Control Description Protocol)协议格式定义,消息体详细解释见GB/T28181-2022 A.2.5通知命令-状态信息报送部分,GB/T28181-2022可通过关注公众号:壹零仓,发送:协议规范,来获取。
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: ;tag=1336295153
To: ;tag=698636847
CSeq: 20 MESSAGE
Call-ID: 1577903431
User-Agent: Easy SIP Server
Content-Length: 0
INVITE sip:[email protected]:5060;transport=udp SIP/2.0
Via: SIP/2.0/UDP 10.45.12.83:5061;rport=5061;branch=z9hG4bK735682946
From: ;tag=671682946
To:
Call-ID: 787682407
CSeq: 3 INVITE
Max-Forwards: 70
User-Agent: Easy SIP Server
Content-Length: 218
Content-Type: application/sdp
Contact:
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
SIP方法为INVITE,消息体为SDP,这里对请求的SDP进行详细介绍:
o=<用户名> <会话版本> <网络类型><地址类型> <地址>
,国标协议中,用户名为国标ID,这里为服务器ID,session id为0,会话版本为0,网络类型为IN,地址类型为IPv4,地址为服务器IP地址。s=
,会话名称默认为Play,会话描述默认为空。c=
,t=
,实时视频时都赋值为0。28181中规定了SDP各字段的含义,具体可参照GB/T28181-2022 附录F。服务端发送INVITE携带的媒体信息,表示国标服务器支持的流媒体。
SIP/2.0 200 OK
Via: SIP/2.0/UDP 10.45.12.83:5061;rport=5061;branch=z9hG4bK735682946
From: ;tag=671682946
To: ;tag=140553725
Call-ID: 787682407
CSeq: 3 INVITE
Contact:
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
响应中的SDP描述的流媒体信息表示IPC支持的流媒体格式及传输方式,IPC响应的SDP中,包含了a=setup:active,这个字段只在TCP传输中起作用,UDP可以忽略,对于TCP传输,包含此字段表示IPC主动连接国标服务器,如果为a=setup:passive表示IPC端为被动模式,由国标服务器发起TCP连接。
通过SDP可以看出,IPC发送的是PS封装的实时流,payload为96,采用UDP的传输模式,发送流的源端端口为15060。国标协议支持最广泛的流媒体封装协议为PS,有关PS的详细介绍可关注公众号:壹零仓,发送:ps,获取相关文章。
ACK sip:[email protected]:5060;transport=udp SIP/2.0
Via: SIP/2.0/UDP 10.45.12.83:5061;rport=5061;branch=z9hG4bK672682961
From: ;tag=671682946
To: ;tag=140553725
Call-ID: 787682407
CSeq: 3 ACK
Max-Forwards: 70
User-Agent: Easy SIP Server
Content-Length: 0
SIP的ACK方法,通知IPC服务端已经准备好了,可以发送媒体流了。
通过视频会话可知,接下来IPC应该主动向国标服务器发送RTP流,RTP协议带的媒体流封装格式为PS,传输层协议为UDP,RTP源端地址为15060,目的端地址为50000,SSRC=0200000002,抓包协议实例如下:
从RTP解析上看,与视频会话交互的信息一致。
GB/T28181协议经过多个版本的迭代,应用在音视频传输中,已经非常完善了,最新的协议版本已经支持TCP模式进行信令交互和音视频传输,还支持主被动模式,在跨网上也有很好的适应性。
关注公众号:壹零仓,发送:28181,获取更多28181文章。