文檔第一部分介紹sip標准gb28181內容,第二部分介紹sip標准db33內容
SIP: SIP(Session Initiation Protocol)是一個應用層的信令控制協議。用於創建、修改和釋放一個或多個參與者的會話。這些會話可以是Internet多媒體會議[3] 、IP電話或多媒體分發。會話的參與者可以通過組播(multicast)、網狀單播(unicast)或兩者的混合體進行通信。
Gb28181
Sip通信協議結構:
會話通道 |
媒體通道 |
|||||||
|
SDP |
MANSCDP |
MANSRTSP |
|
|
MPEG-4/H.264/SVAC |
G.711/G.72 3.1/G.729 |
|
|
SIP |
|
|
RTP/RTCP |
|
|||
TCP/UDP |
TCP/UDP |
|||||||
IP |
SIP消息應支持基於UDP和TCP的傳輸,視頻流傳輸使用偶數端口,端口+1默認為為RTCP使用端口;
基本注冊流程示意圖:
注冊流程描述如下:
1、 SIP代理向SIP服務器發送REGISTER請求;
2、 SIP服務器向SIP代理發送響應401,並在響應的消息頭WWW-Authenticate字段中給出適合SIP代理的認證體制和參數;
3、 SIP代理重新向SIP服務器發送REGISTER請求,在請求的Authenticate字段給出信任書,包含認證信息;
4、 SIP服務器對請求進行驗證,如果檢查出SIP代理身份合法,向SIP代理發送成功響應200 OK,如果身份不合法則發送拒絕服務應答。
注冊信令消息示范:
Register sip:SIP服務器編碼@目的域名或者IP地址端口 SIP/2.0
Via:SIP/2.0/UDP 源域名或者IP地址端口
From:<sip:SIP設備編碼@源域名>;tag=185328220
To: <sip:SIP設備編碼@源域名>
Call-ID:ms1214-322164-681262131542511620107-0@172.18.16.3
CSeq:1 Register
Contact: <sip:SIP設備編碼@源IP地址端口>
Max-Forwords:70
Expires: 7200
Content-Length: 0
SIP/2.0 401 Unauthorized
To: sip:SIP設備編碼@源域名
Content-Length: 0
CSeq:1 Register
Call-ID:ms1214-322164-681262131542511620107-0@172.18.16.3
From:<sip:SIP設備編碼@源域名>;tag=185328220
Via:SIP/2.0/UDP 源域名或者IP地址端口
WWW-Authenticate: Digest realm=”64010000”,nonce=”6fe9ba44a76be22a”
Register sip:SIP服務器編碼@目的域名或者IP地址端口 SIP/2.0
Via:SIP/2.0/UDP 源域名或者IP地址端口
From:<sip:SIP設備編碼@源域名>;tag=185328220
To: <sip:SIP設備編碼@源域名>
Call-ID:ms1214-322164-681262131542511620107-0@172.18.16.3
CSeq:2 Register
Contact: <sip:SIP設備編碼@源IP地址端口>
Authorization: Digest username=”64010000002020000001”,realm=”64010000”, nonce=”6fe9ba44a76be22a”,uri=”sip:64010000002020000001@172.18.16.5:5060”,response=”9625d92d1bddea7a911926e0db054968”,algorithm=”MD5”
Max-Forwords:70
Expires: 7200
Content-Length: 0
SIP/2.0 200 OK
To: <sip:SIP設備編碼@源域名>;tag=69113a2a
Contact: sip:SIP設備編碼@源IP地址端口
Content-Length: 0
CSeq:2 Register
Call-ID:ms1214-322164-681262131542511620107-0@172.18.16.3
From:<sip:SIP設備編碼@源域名>;tag=185328220
Via:SIP/2.0/UDP 源域名或者IP地址端口
Date:2010-11-02T15:01:26.115
Expires: 7200
客戶端主動發起的實時視音頻點播流程示意圖:
客戶端發起的實時點播消息示范:(請求視頻信令與斷開視頻信息 和 回播基本無差別)
1、請求視頻流
INVITE sip:00000000001310018021@192.168.40.66:7100 SIP/2.0
Via: SIP/2.0/UDP 192.168.40.55:7100;rport;branch=z9hG4bK2480933505
From: <sip:120105110228023020@192.168.40.55:7100>;tag=2249831759
To: <sip:00000000001310018021@192.168.40.66:7100>
Call-ID: 821763613 // Call-ID:使用該字段標識一路視頻
CSeq: 20 INVITE
Contact: <sip:120105110228023020@192.168.40.55:7100>
Content-Type: Application/SDP
Max-Forwards: 70
User-Agent: NCG V2.6.0.299938
Subject: 00000000001310018021:0,120105110228023020:0
Content-Length: 239
v=0
o=00000000001310018021 0 0 IN IP4 192.168.40.55
s=Play //Play標識為點播請求 Playback標識回播請求
c=IN IP4 192.168.40.55 //192.168.40.55:音視頻流目的地址
t=0 0 //t行第一參數為視頻開始時間 第二個參數為結束時間 t = 0 0表示實時視音頻點播
m=video 5552 RTP/AVP 96 97 98 //video:表示請求視頻流 audio:表示請求音頻流 5522:音視頻流目的端口 RTP/AVP:視頻流使用協議 96 97 98:客戶端支持碼流格式
a=rtpmap:96 PS/90000
a=rtpmap:97 MPEG4/90000
a=rtpmap:98 H264/90000
a=recvonly
a=streamMode:MAIN
y=0999999999
SIP/2.0 100 Trying
Via: SIP/2.0/UDP 192.168.40.55:7100;rport=7100;branch=z9hG4bK2480933505
From: <sip:120105110228023020@192.168.40.55:7100>;tag=2249831759
To: <sip:00000000001310018021@192.168.40.66:7100>
Call-ID: 821763613
CSeq: 20 INVITE
User-Agent: NCG V2.6.0.299938
Content-Length: 0
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.40.55:7100;rport=7100;branch=z9hG4bK2480933505
From: <sip:120105110228023020@192.168.40.55:7100>;tag=2249831759
To: <sip:00000000001310018021@192.168.40.66:7100>;tag=2885333649
Call-ID: 821763613
CSeq: 20 INVITE
Contact: <sip:161128022553273720@192.168.40.66:7100>
Content-Type: Application/SDP
User-Agent: NCG V2.6.0.299938
Content-Length: 165
v=0
o=00000000001310018021 0 0 IN IP4 192.168.40.55
s=Play //Play標識為點播請求 Playback標識回播請求
c=IN IP4 192.168.40.66 //192.168.40.66:音視頻流源地址 注:視音頻源與目的地址不局限於級聯服務器本身
t=0 0
m=video 5268 RTP/AVP 96 // video:表示請求視頻流 audio:表示請求音頻流 5268:音視頻流源端口 RTP/AVP:視頻流使用協議 96:服務端所選擇的碼流格式 音視頻所使用端口統一使用偶數端口 port+1為rtcp端口
a=rtpmap:96 PS/90000
a=sendonly
y=0100005268
視頻流截包:
2、斷開視頻流
BYE sip:161128022553273720@192.168.40.66:7100 SIP/2.0
Via: SIP/2.0/UDP 192.168.40.55:7100;rport;branch=z9hG4bK1981844232
From: <sip:120105110228023020@192.168.40.55:7100>;tag=2249831759
To: <sip:00000000001310018021@192.168.40.66:7100>;tag=2885333649
Call-ID: 821763613 // Call-ID:該字段判斷請求端口哪一路視頻
CSeq: 21 BYE
Contact: <sip:120105110228023020@192.168.40.55:7100>
Max-Forwards: 70
User-Agent: NCG V2.6.0.299938
Content-Length: 0
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.40.55:7100;rport=7100;branch=z9hG4bK1981844232
From: <sip:120105110228023020@192.168.40.55:7100>;tag=2249831759
To: <sip:00000000001310018021@192.168.40.66:7100>;tag=2885333649
Call-ID: 821763613
CSeq: 21 BYE
User-Agent: NCG V2.6.0.299938
Content-Length: 0
客戶端主動發起的實時視音頻回播流程示意圖:
客戶端發起的回播控制消息示范:(請求視頻信令與斷開視頻信息 和 回播基本無差別 Play/Playback)
Gb28181標准中,明確說明歷史視音頻的回復控制命令應采用監控報警聯網系統實時流協議(MANSRTSP),並采用SIP消息INFO消息體攜帶傳輸。(GBT 28181-2016 4.3.5)
INFO sip:161128022553273720@192.168.40.66:7100 SIP/2.0
Via: SIP/2.0/UDP 192.168.40.55:7100;rport;branch=z9hG4bK1764044774
From: <sip:120105110228023020@192.168.40.55:7100>;tag=4105413651
To: <sip:00000000001310018021@192.168.40.66:7100>;tag=4232579586
Call-ID: 2259139548
CSeq: 21 INFO
Contact: <sip:120105110228023020@192.168.40.55:7100>
Content-Type: Application/MANSRTSP
Max-Forwards: 70
User-Agent: NCG V2.6.0.299938
Content-Length: 49
PLAY MANSRTSP/1.0
CSeq: 59367
Scale: 0.000000 // Scale:回播速度控制 例:Scale: 8.000000 快進x8
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.40.55:7100;rport=7100;branch=z9hG4bK1764044774
From: <sip:120105110228023020@192.168.40.55:7100>;tag=4105413651
To: <sip:00000000001310018021@192.168.40.66:7100>;tag=4232579586
Call-ID: 2259139548
CSeq: 21 INFO
Contact: <sip:161128022553273720@192.168.40.66:7100>
User-Agent: NCG V2.6.0.299938
Content-Length: 0
控制消息示例並說明:
SIP消息使用MESSAGE消息體攜帶控制命令;message消息頭Content-Type頭域為Content-Type: Application/MANSCDP+xml。
設備控制命令采用MANSCDP協議格式定義,設備在收到message消息后,應立即返回應答,應答均無消息體。
MESSAGE sip:120105110228023020@192.168.40.55:7100 SIP/2.0
Via: SIP/2.0/UDP 192.168.40.66:7100;rport;branch=z9hG4bK3098087079
From: <sip:161128022553273720@192.168.40.66:7100>;tag=10660660
To: <sip:120105110228023020@192.168.40.55:7100>
Call-ID: 3949551065
CSeq: 20 MESSAGE
Content-Type: Application/MANSCDP+xml
Max-Forwards: 70
User-Agent: NCG V2.6.0.299938
Content-Length: 151
<?xml version="1.0"?>
<Notify>
<CmdType>Keepalive</CmdType>
<SN>14885</SN>
<DeviceID>161128022553273720</DeviceID>
<Status>OK</Status>
</Notify>
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.40.66:7100;rport=7100;branch=z9hG4bK3098087079
From: <sip:161128022553273720@192.168.40.66:7100>;tag=10660660
To: <sip:120105110228023020@192.168.40.55:7100>;tag=1450434041
Call-ID: 3949551065
CSeq: 20 MESSAGE
User-Agent: NCG V2.6.0.299938
Content-Length: 0
命令類型整理:(基礎示例)
命令類型(CmdType)
命令序列號(SN)
設備編碼(DeviceID)、
執行結果(Result)、
經度(Longitude)
緯度(Latitude)
廠家信息(Manufacturer)
設備型號(Model)
固件版本(Firm-ware)
最大支持攝像機個數(Channel)
Db33
實時監控圖像獲取示意圖:
請求視頻流:
INVITE sip:00000000001310018021@192.168.40.66:7100 SIP/2.0
Via: SIP/2.0/UDP 192.168.40.55:7100;rport;branch=z9hG4bK178329191
From: <sip:120105110228023020@192.168.40.55:7100>;tag=2091251200
To: <sip:00000000001310018021@192.168.40.66:7100>
Call-ID: 4130842379
CSeq: 20 INVITE
Contact: <sip:120105110228023020@192.168.40.55:7100>
Content-Type: Application/DDCP
Max-Forwards: 70
User-Agent: NCG V2.6.0.299938
Subject: 00000000001310018021:0,120105110228023020:0
Content-Length: 297
<?xml version="1.0"?>
<Action>
<Variable>RealMedia</Variable>
<Privilege/>
<Format>1080 720 D1 HALFD1 CIF 2CIF 4CIF QCIF</Format> //碼流格式
<Video>MPEG-2 MPEG-4 M-JPEG H.264</Video> //視頻編碼類型
<Audio>G.711A G.711U G.722</Audio> //音頻編碼類型
<MaxBitrate>20480</MaxBitrate> //傳輸碼率
<Socket>192.168.40.55 UDP 5560</Socket> //表示使用設備192.168.40.55的UDP端口5560接收視頻流
</Action>
SIP/2.0 100 Trying
Via: SIP/2.0/UDP 192.168.40.55:7100;rport=7100;branch=z9hG4bK178329191
From: <sip:120105110228023020@192.168.40.55:7100>;tag=2091251200
To: <sip:00000000001310018021@192.168.40.66:7100>
Call-ID: 4130842379
CSeq: 20 INVITE
User-Agent: NCG V2.6.0.299938
Content-Length: 0
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.40.55:7100;rport=7100;branch=z9hG4bK178329191
From: <sip:120105110228023020@192.168.40.55:7100>;tag=2091251200
To: <sip:00000000001310018021@192.168.40.66:7100>;tag=2781666162
Call-ID: 4130842379
CSeq: 20 INVITE
Contact: <sip:161128022553273720@192.168.40.66:7100>
Content-Type: Application/DDCP
User-Agent: NCG V2.6.0.299938
Content-Length: 247
<?xml version="1.0"?>
<Response>
<Variable>RealMedia</Variable>
<Format>CIF</Format>
<Video>H.264</Video>
<Audio>G.711U</Audio>
<Bitrate>512</Bitrate> //傳輸碼率
<Socket>192.168.40.66 UDP 5272</Socket> //表示使用設備192.168.40.66的UDP端口5272發送視頻流
<DecoderTag>hikvision</DecoderTag>
</Response>
視頻流截包:
斷開視頻流:
BYE sip:161128022553273720@192.168.40.66:7100 SIP/2.0
Via: SIP/2.0/UDP 192.168.40.55:7100;rport;branch=z9hG4bK2697700230
From: <sip:120105110228023020@192.168.40.55:7100>;tag=2091251200
To: <sip:00000000001310018021@192.168.40.66:7100>;tag=2781666162
Call-ID: 4130842379
CSeq: 21 BYE
Contact: <sip:120105110228023020@192.168.40.55:7100>
Max-Forwards: 70
User-Agent: NCG V2.6.0.299938
Content-Length: 0
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.40.55:7100;rport=7100;branch=z9hG4bK2697700230
From: <sip:120105110228023020@192.168.40.55:7100>;tag=2091251200
To: <sip:00000000001310018021@192.168.40.66:7100>;tag=2781666162
Call-ID: 4130842379
CSeq: 21 BYE
User-Agent: NCG V2.6.0.299938
Content-Length: 0
歷史圖像獲取示意圖:
請求視頻流:
DO sip:00000000001310018021@192.168.40.66:7100 SIP/2.0
Via: SIP/2.0/UDP 192.168.40.55:7100;rport;branch=z9hG4bK2258689616
From: <sip:120105110228023020@192.168.40.55:7100>;tag=382563044
To: <sip:00000000001310018021@192.168.40.66:7100>
Call-ID: 2435803271
CSeq: 20 DO
Content-Type: Application/DDCP
Max-Forwards: 70
User-Agent: NCG V2.6.0.299938
Content-Length: 295
<?xml version="1.0"?>
<Action>
<Query>
<Variable>FileList</Variable>
<Privilege></Privilege>
<FileType>23</FileType>
<FromIndex>1</FromIndex>
<ToIndex>2</ToIndex>
<BeginTime>20170621T000000Z</BeginTime>
<EndTime>20170621T235959Z</EndTime>
<RecordPos>1</RecordPos>
</Query>
</Action>
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.40.55:7100;rport=7100;branch=z9hG4bK2258689616
From: <sip:120105110228023020@192.168.40.55:7100>;tag=382563044
To: <sip:00000000001310018021@192.168.40.66:7100>;tag=762901480
Call-ID: 2435803271
CSeq: 20 DO
Content-Type: Application/DDCP
User-Agent: NCG V2.6.0.299938
Content-Length: 875
<?xml version="1.0"?>
<Response>
<QueryResponse>
<Variable>FileList</Variable>
<Result>0</Result>
<RealFileNum>2</RealFileNum>
<FromIndex>1</FromIndex>
<ToIndex>2</ToIndex>
<FileInfolist>
<Item>
<Name>0_1_1497973658_0.h264</Name>
<BeginTime>20170621T000000Z</BeginTime>
<EndTime>20170621T022702Z</EndTime>
<FileSize>4439165188</FileSize>
<RecordType>1</RecordType>
<VodUrl>rtsp://192.168.40.66:6304/file/vag_plug://192.168.40.66:6300/0/sessions/28e8deaef7a64db88010fee38da0ba31</VodUrl>
</Item>
<Item>
<Name>0_1_1497983224_0.h264</Name>
<BeginTime>20170621T022704Z</BeginTime>
<EndTime>20170621T155926Z</EndTime>
<FileSize>24528928360</FileSize>
<RecordType>1</RecordType>
<VodUrl>rtsp://192.168.40.66:6304/file/vag_plug://192.168.40.66:6300/0/sessions/28e8deaef7a64db88010fee38da0ba31</VodUrl>
</Item>
</FileInfolist>
</QueryResponse>
</Response>
DO sip:00000000001310018021@192.168.40.66:7100 SIP/2.0
Via: SIP/2.0/UDP 192.168.40.55:7100;rport;branch=z9hG4bK929522417
From: <sip:120105110228023020@192.168.40.55:7100>;tag=3721737815
To: <sip:00000000001310018021@192.168.40.66:7100>
Call-ID: 55014328
CSeq: 20 DO
Content-Type: Application/DDCP
Max-Forwards: 70
User-Agent: NCG V2.6.0.299938
Content-Length: 308
<?xml version="1.0"?>
<Action>
<Variable>VODByRTSP</Variable>
<Privilege></Privilege>
<FileType>23</FileType>
<Name>0_1_1497973658_0.h264</Name>
<BeginTime>20170621T000000Z</BeginTime>
<EndTime>20170621T155926Z</EndTime>
<MaxBitrate>1024</MaxBitrate>
<RecordPos>1</RecordPos>
<TV>2</TV>
</Action>
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.40.55:7100;rport=7100;branch=z9hG4bK929522417
From: <sip:120105110228023020@192.168.40.55:7100>;tag=3721737815
To: <sip:00000000001310018021@192.168.40.66:7100>;tag=3556564953
Call-ID: 55014328
CSeq: 20 DO
Content-Type: Application/DDCP
User-Agent: NCG V2.6.0.299938
Content-Length: 494
<?xml version="1.0"?>
<Response>
<Variable>VODByRTSP</Variable>
<Result>0</Result>
<Bitrate>0</Bitrate>
<Playurl>rtsp://192.168.40.66:7087/ncg00/rtsp://192.168.40.66:6304/file/vag_plug://192.168.40.66:6300/0/sessions/28e8deaef7a64db88010fee38da0ba31?ncgMode=1&devType=10001&ks=1497974400&js=1498031966&usrName=admin&passWord=jdwa2003</Playurl>
<UsrName>admin</UsrName>
<PassWord>jdwa2003</PassWord>
<TV>2</TV>
<CamIndex>00000000001310018021</CamIndex>
</Response>
Record-Route說明:
From: 如果一個SIP消息中沒有Contact或者Record-Route頭域,那么callee就會根據From頭域產生后續的Request。比如:如果 Alice打一個電話給Bob,From頭域的內容是 From:Alice<sip:alice@example.org>。那么Bob打給Alice時就會使用 sip:alice@example.org作為To頭域和Request-URI頭域的內容。
Contact: 后續Request將根據Contact頭域的內容決定目的地的地址,同時將Contact頭域的內容放到Request-URI中。它還可以用來指示沒 有在Record-Route頭域中記錄的Proxies的地址。同時它還可以被用在Redirect servers和REGISTER requests 和responses。
Route:Route和Via字段正好相反,它被用來作為Request消息的路由。當一個Proxy Server收到一個Request消息時,會檢查Route字段的第一個地址是否等於自己,如果是,它將從Route字段中刪去自己的地址信息,並將消 息轉發到Route字段中指定的下個地址;如果Route字段為空,則轉發到Request URI指定的地址。
Record-Route/Route: Record-Route頭域一般是被proxies插入到request中的,這樣后續的Request如何有着和前面一樣的call-id就會被路由 到這些proxies。它也會被User Agent作為發送后續request的依據。這套機制很像source-route,Record-Route頭域的信息被復制到Route頭域中。並 且Request-URI頭域會被設置為第一個Route頭域的內容。
Record-Route字段實際上用於幫助UA建立Route Set,當UA發送Request時會用Route Set來設置上面提到的Route字段。當一個Request消息經過Proxy Server時,如果該Proxy Server希望通知UA相關的后續消息都能通過它來轉發,此時它就會在消息中添加Record-Route字段,內容為自己的地址信息。當UAS發送 Resposne消息時它將復制Request中的Record-Route字段,而UAC在Response消息中檢測到Record-Route字段 時,它就會用該字段的路由信息更新自己的Route Set。
Via: Via頭域是被服務器插入request中,用來檢查路由環的,並且可以使response根據via找到返回的路。它不會對未來的request 或者是response造成影響。
當UAC發起一個SIP Request消息時,消息經過的每一跳(包含發起方)都會在SIP消息中增加一個Via字段,內容為自己的地址信息,表示此消息通過此地址發往下一跳。為什么要增加Via字段來記錄Request消息經過的地址呢?實際上這個地址信息將被作為Request消息的Response消息的路由,Response將根據Via字段中記錄的地址逐級返回,直到回到Request的發起方。
總的來說,如果有Route,request就應該根據Route發送,如果沒有就根據Contact頭域發送,如果連Contact都沒有,就根據From頭域發送。