天天看點

Rtsp之信令互動流程

Rtsp協定包含兩塊,第一部分是信令互動,這一部分建立在tcp協定的基礎之上,另一部分是流媒體資料,rtp傳輸,既可以建立在tcp協定基礎之上,也可以建立在udp協定的基礎之上。

本章主要講解一下rtsp信令這一部分的互動流程。

第一步OPTIONS,檢視服務支援哪些指令

請求:

OPTIONS rtsp://192.168.150.129:8554/H264 RTSP/1.0
CSeq: 2
User-Agent: LibVLC/3.0.2 (LIVE555 Streaming Media v2016.11.28)
           

 應答:

RTSP/1.0 200 OK
Server: VLC/3.0.3
Content-Length: 0
Cseq: 2
Public: DESCRIBE,SETUP,TEARDOWN,PLAY,PAUSE,GET_PARAMETER
           

第二步DESCRIBE,檢視服務端sdp支援情況

請求:

DESCRIBE rtsp://192.168.150.129:8554/H264 RTSP/1.0
CSeq: 3
User-Agent: LibVLC/3.0.2 (LIVE555 Streaming Media v2016.11.28)
Accept: application/sdp
           

 應答

RTSP/1.0 200 OK
Server: VLC/3.0.3
Date: Sat, 01 Sep 2018 04:38:33 GMT
Content-Type: application/sdp
Content-Base: rtsp://192.168.150.129:8554/H264
Content-Length: 578
Cache-Control: no-cache
Cseq: 3

v=0
o=- 16083645413441119698 16083645413441119698 IN IP4 WIN-NJUKDS19FLI
s=Unnamed
i=N/A
c=IN IP4 0.0.0.0
t=0 0
a=tool:vlc 3.0.3
a=recvonly
a=type:broadcast
a=charset:UTF-8
a=control:rtsp://192.168.150.129:8554/H264
m=audio 0 RTP/AVP 14
b=AS:128
b=RR:0
a=rtpmap:14 MPA/90000/2
a=control:rtsp://192.168.150.129:8554/H264/trackID=0
m=video 0 RTP/AVP 96
b=RR:0
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=64001f;sprop-parameter-sets=Z2QAH6zZQFAFuwEQAAADABAAAAMDKPGDGWA=,aOvjyyLA;
a=control:rtsp://192.168.150.129:8554/H264/trackID=1
           

 這裡的重點:

m=audio 0 RTP/AVP 14

b=AS:128

b=RR:0

a=rtpmap:14 MPA/90000/2

a=control:rtsp://192.168.150.129:8554/H264/trackID=0

說明服務端支援音頻方式,類型MPA  采樣率90000  通道數2 對于的rtp的pt 填寫值為14 RTP/AVP說支援rtp協定,UDP方式。

最後的a=control:rtsp://192.168.150.129:8554/H264/trackID=0 是在setup指令中需要使用的。

m=video 0 RTP/AVP 96

b=RR:0

a=rtpmap:96 H264/90000

a=fmtp:96packetization-mode=1;profile-level-id=64001f;sprop-parameter-sets=Z2QAH6zZQFAFuwEQAAADABAAAAMDKPGDGWA=,aOvjyyLA;

a=control:rtsp://192.168.150.129:8554/H264/trackID=1

說明服務端支援視訊方式,類型為H264,采樣率90000 ,pt值為96,最後的a頁視setup指令中需要使用的。

第三步SETUP,

啟動媒體請求 UDP方式

請求音頻資料

SETUP rtsp://192.168.150.129:8554/H264/trackID=0 RTSP/1.0
CSeq: 5
User-Agent: LibVLC/3.0.2 (LIVE555 Streaming Media v2016.11.28)
Transport: RTP/AVP;unicast;client_port=55220-55221
           

 transport裡面的RTP/AVP說明是UDP方式發送媒體流,client_port=55220-55221,表示流媒體接收端口55220,55221為rtcp接受端口,

setup 後面的url為前面sdp應答的音頻的的url

答音頻請求

RTSP/1.0 200 OK
Server: VLC/3.0.3
Date: Sat, 01 Sep 2018 04:38:34 GMT
Transport: RTP/AVP/UDP;unicast;client_port=55220-55221;server_port=54235-54236;ssrc=68D48D51;mode=play
Session: 81d2286eeee8dc56;timeout=60
Content-Length: 0
Cache-Control: no-cache
Cseq: 5
           

 transport裡面的server_port=54235-54236 辨別發送媒體流的端口為54235 發送rtcp端口為54236,

session為本次會話的辨別,後面的play 和setup 都需要帶有這字段,ssrc為rtp包裡面ssrc的值

視訊流程一樣

請求視訊資料

SETUP rtsp://192.168.150.129:8554/H264/trackID=1 RTSP/1.0
CSeq: 7
User-Agent: LibVLC/3.0.2 (LIVE555 Streaming Media v2016.11.28)
Transport: RTP/AVP;unicast;client_port=55222-55223
Session: 81d2286eeee8dc56
           

應答視訊請求:

RTSP/1.0 200 OK
Server: VLC/3.0.3
Date: Sat, 01 Sep 2018 04:38:34 GMT
Transport: RTP/AVP/UDP;unicast;client_port=55222-55223;server_port=54236-54237;ssrc=C470E2F0;mode=play
Session: 81d2286eeee8dc56;timeout=60
Content-Length: 0
Cache-Control: no-cache
Cseq: 7
           

啟動媒體請求 TCP方式:

請求視訊:

SETUP rtsp://10.10.14.168:554/user=admin_password=tlJwpbo6_channel=1_stream=0.sdp/trackID=2?real_stream RTSP/1.0
CSeq: 7
Authorization: Digest username="admin", realm="IP Camera(C3459)", nonce="7c4e0298a2d0f792ed11e284ee0e2300", uri="rtsp://10.10.14.168:554/user=admin_password=tlJwpbo6_channel=1_stream=0.sdp/", response="5a987d357fb858e636f765e37dd6b0a3"
User-Agent: LibVLC/2.1.0 (LIVE555 Streaming Media v2011.12.23)
Transport: RTP/AVP/TCP;unicast;interleaved=0-1

RTSP/1.0 200 OK
CSeq: 7
Session:       1931661604;timeout=60
Transport: RTP/AVP/TCP;unicast;interleaved=0-1;ssrc=1855e319;mode="play"
Date:  Tue, Sep 04 2018 14:45:00 GMT
           

 請求音頻:

SETUP rtsp://10.10.14.168:554/Streaming/Channels/101/trackID=2 RTSP/1.0
CSeq: 8
Authorization: Digest username="admin", realm="IP Camera(C3459)", nonce="9a7fb020dcf4be47cc43bf1f0ecf0cc0", uri="rtsp://10.10.14.168:554/Streaming/Channels/101/", response="34e71f4a77e64a15b65e5ef5304cc759"
User-Agent: LibVLC/2.2.1 (LIVE555 Streaming Media v2014.07.25)
Transport: RTP/AVP/TCP;unicast;interleaved=2-3
Session: 1641687743

RTSP/1.0 200 OK
CSeq: 8
Session:       1641687743;timeout=60
Transport: RTP/AVP/TCP;unicast;interleaved=2-3;ssrc=27ebd3e5;mode="play"
Date:  Tue, Sep 04 2018 14:50:59 GMT
           

 第四步PLAY,讓背景開始發送媒體流

請求:

PLAY rtsp://192.168.150.129:8554/H264 RTSP/1.0
CSeq: 8
User-Agent: LibVLC/3.0.2 (LIVE555 Streaming Media v2016.11.28)
Session: 81d2286eeee8dc56
Range: npt=0.000-
           

應答

RTSP/1.0 200 OK
Server: VLC/3.0.3
Date: Sat, 01 Sep 2018 04:38:34 GMT
RTP-Info: url=rtsp://192.168.150.129:8554/H264/trackID=0;seq=44225;rtptime=26995590, url=rtsp://192.168.150.129:8554/H264/trackID=1;seq=48797;rtptime=26995590
Range: npt=123.437000-
Session: 81d2286eeee8dc56;timeout=60
Content-Length: 0
Cache-Control: no-cache
Cseq: 8
           

************大華的應答居然是這樣子的*************************

PLAY rtsp://10.10.14.162:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif RTSP/1.0
Session: 234447372275
CSeq: 5

RTSP/1.0 200 OK
Server: Rtsp Server/2.0
CSeq: 5
Session: 234447372275
RTP-Info: url=trackID=0;seq=59454;rtptime=1291528915;ssrc=48b42fb1,url=trackID=1;seq=6089;rtptime=165528883;ssrc=1ca16dac
Range: npt=0.000000-
           

 注意看RTP-Info的url沒有寫請求的url,而是直接寫了一個trackId,日了,這裡的解析需要再優化一下,不能拿Url去比對。

第五步,TEARDOWN 結束回話

請求:

TEARDOWN rtsp://192.168.150.129:8554/H264 RTSP/1.0
CSeq: 9
User-Agent: LibVLC/3.0.2 (LIVE555 Streaming Media v2016.11.28)
Session: 81d2286eeee8dc56
           

 應答:

RTSP/1.0 200 OK
Server: VLC/3.0.3
Date: Sat, 01 Sep 2018 04:38:41 GMT
Session: 81d2286eeee8dc56;timeout=60
Content-Length: 0
Cache-Control: no-cache
Cseq: 9
           

繼續閱讀