sip協議解析


文檔第一部分介紹sip標准gb28181內容,第二部分介紹sip標准db33內容

SIPSIP(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消息應支持基於UDPTCP的傳輸,視頻流傳輸使用偶數端口,端口+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+1rtcp端口

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.55UDP端口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.66UDP端口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打一個電話給BobFrom頭域的內容是 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 serversREGISTER requests responses

RouteRouteVia字段正好相反,它被用來作為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-routeRecord-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字段,而UACResponse消息中檢測到Record-Route字段 時,它就會用該字段的路由信息更新自己的Route Set

Via: Via頭域是被服務器插入request中,用來檢查路由環的,並且可以使response根據via找到返回的路。它不會對未來的request 或者是response造成影響。

UAC發起一個SIP Request消息時,消息經過的每一跳(包含發起方)都會在SIP消息中增加一個Via字段,內容為自己的地址信息,表示此消息通過此地址發往下一跳。為什么要增加Via字段來記錄Request消息經過的地址呢?實際上這個地址信息將被作為Request消息的Response消息的路由,Response將根據Via字段中記錄的地址逐級返回,直到回到Request的發起方。
總的來說,如果有Routerequest就應該根據Route發送,如果沒有就根據Contact頭域發送,如果連Contact都沒有,就根據From頭域發送。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM