RTSP協(xié)議詳解-創(chuàng)新互聯(lián)

參考: 手撕RTSP協(xié)議系列

創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作與策劃設(shè)計(jì),江安網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:江安等地區(qū)。江安做網(wǎng)站價(jià)格咨詢:18980820575Rtsp基本流程 rtsp協(xié)議簡介

rtsp,英文全稱 Real Time Streaming Protocol,RFC2326,實(shí)時(shí)流傳輸協(xié)議,是TCP/IP協(xié)議體系中的一個(gè)應(yīng)用層協(xié)議!協(xié)議主要規(guī)定定了一對(duì)多應(yīng)用程序如何有效地通過IP網(wǎng)絡(luò)傳送多媒體數(shù)據(jù)。RTSP體系結(jié)位于RTP和RTCP之上(RTCP用于控制傳輸,RTP用于數(shù)據(jù)傳輸),使用TCP或UDP完成數(shù)據(jù)傳輸!

rtsp基本交互過程

假設(shè)我們現(xiàn)在要向一個(gè)RTSP的sever發(fā)送請(qǐng)求獲取數(shù)據(jù),基本流程如下:

在這里插入圖片描述

OPTIONS

C—>S

客戶端向服務(wù)器端發(fā)送OPTIONS,請(qǐng)求可用的方法。

S—>C

服務(wù)器端回復(fù)客戶端,消息中包含當(dāng)前可用的方法。

DESCRIBE

C—>S

客戶端向服務(wù)器請(qǐng)求媒體描述文件,一般通過rtsp開頭的url來發(fā)起請(qǐng)求,格式為sdp。

S—>C

服務(wù)器回復(fù)客戶端sdp文件,該文件告訴客戶端服務(wù)器有哪些音視頻流,有什么屬性,如編解碼器信息,幀率等。

SETUP

C—>S

客戶端向服務(wù)器端發(fā)起建立連接請(qǐng)求,請(qǐng)求建立會(huì)話連接,準(zhǔn)備開始接收音視頻數(shù)據(jù),請(qǐng)求信息描述了期望音視頻數(shù)據(jù)包基于UDP還是TCP傳輸,指定了RTP,RTCP端口,以及是單播還是組播等信息!

S—>C

服務(wù)器端收到客戶端請(qǐng)求后,根據(jù)客戶端請(qǐng)求的端口號(hào)確定發(fā)送控制數(shù)據(jù)的端口以及音視頻數(shù)據(jù)的端口!

PLAY

C—>S

客戶端向服務(wù)端請(qǐng)求播放媒體。

S—>C

服務(wù)器回復(fù)客戶端200 OK! 之后開始通過SETUP中指定的端口開始發(fā)送數(shù)據(jù)!

TEARDOWN

C---->S

結(jié)束播放的時(shí)候,客戶端向服務(wù)器端發(fā)起結(jié)束請(qǐng)求

S—>C

服務(wù)端收到消息后,向客戶端發(fā)送200 OK,之后斷開連接

上述的流程基本涵蓋了RTSP的流程,當(dāng)然,RTSP除此之外,還有PAUSE,SCALE,GET_PARAMETER,SET_PARAMETER等參數(shù)。

Rtsp抓包示例

在這里插入圖片描述

Rtsp消息格式

RTSP消息分為兩大類,一類是請(qǐng)求消息(request),一類是回應(yīng)消息(ressponse)

請(qǐng)求報(bào)文

請(qǐng)求消息的格式如下:

在這里插入圖片描述

也就是說:

方法 URI RTSP版本 CR LF

消息頭 CR LF CR LF

消息體 CR LF

1).請(qǐng)求消息的第一行的語法結(jié)構(gòu)如下:

Request-Line = Method 空格 Request-URI 空格 RTSP-Version CRLF

其中方法包括OPIONS、DESCRIBE、SETUP、PLAY、TEARDOWN等,URI是接受方的地址,例如:rtsp://192.168.0.1/video1.3gp。

RTSP版本一般都是 RTSP/1.0。每行后面的CR LF表示回車換行,需要接受端有相應(yīng)的解析,

2).在消息頭中除了第一行的內(nèi)容外,還有一些需求提供附加信息。其中有些是一定要的,后續(xù)我們會(huì)詳細(xì)介紹經(jīng)常用到的幾個(gè)域的含義。

消息頭 = Accept

? | Accept-Encoding

? | Accept-Language

? | Authorization

? | From

? | If-Modified-Since

? | Range

? | Referer

? | User-Agent

3).最后一個(gè)消息頭需要有兩個(gè)CR LF。消息體是可選的,有的Request消息并不帶消息體。

如圖中所示,該RTSP請(qǐng)求消息的方法為OPTIONS,請(qǐng)求的目標(biāo)地址為rtsp://192.17.1.63:554,RTSP的版本為1.0;

接下來包含兩種類型的消息,第一種為CSeq表示序列號(hào),本次請(qǐng)求的序列號(hào)為1(服務(wù)器端回復(fù)此請(qǐng)求的數(shù)據(jù)包的序列號(hào)也是1);

第二種為User-Agent,表示用戶代理,值為 “Lavf58.42.100”;

由于User-Agent為最后一條消息,其后要跟兩組回車和換行!
在這里插入圖片描述

用戶代理為LibVLC/2.2.4,使用VLC播放器rtsp流的一個(gè)代理

響應(yīng)報(bào)文

響應(yīng)報(bào)文的開始行是狀態(tài)行,RTSP響應(yīng)報(bào)文的結(jié)構(gòu)如下圖所示
在這里插入圖片描述

也就是說:回應(yīng)消息由RTSP版本+狀態(tài)碼+解釋開頭,之后跟一條或多條消息

RTSP版本 狀態(tài)碼 解釋 CR LF

消息頭 CR LF CR LF

消息體 CR LF

說明:

狀態(tài)碼:表示狀態(tài),同http的返回狀態(tài),如200,表示OK

解釋:針對(duì)狀態(tài)碼的文本解釋

同樣:最后一條消息也是需要 跟兩個(gè)回車和換行!
在這里插入圖片描述
在這里插入圖片描述

回復(fù)消息以Response標(biāo)識(shí),該消息中RTSP的版本號(hào)為1.0;

服務(wù)器回復(fù)的狀態(tài)碼為401;

針對(duì)狀態(tài)碼401的解釋為Unauthorized(未授權(quán));

包含兩種類型的消息:

一是WWW-Authenticate:告訴請(qǐng)求端授權(quán)認(rèn)證需要的信息;

二是Date:表示當(dāng)前日期和時(shí)間!

sdp格式詳解

sdp,英文全稱Session Description Protocol,會(huì)話描述協(xié)議,對(duì)應(yīng)RFC2327。我們?cè)诖私榻B,是因?yàn)镽TSP協(xié)議中使用sdp進(jìn)行媒體信息的描述,不過,sdp的應(yīng)用不止于此,語音通話SIP協(xié)議,監(jiān)控安防GB28181國標(biāo), 當(dāng)下比較火熱的webRtc都用到了sdp,可謂應(yīng)用廣泛!

sdp的目的就是在媒體會(huì)話中,傳遞媒體流信息,允許會(huì)話描述的接收者去參與會(huì)話,定義了會(huì)話描述的統(tǒng)一格式!

OPTION

OPTION是一個(gè)request消息,各個(gè)字段:

OPTIONS:標(biāo)識(shí)請(qǐng)求命令的類型;

RTSP URI:請(qǐng)求的服務(wù)端的URI,以rtsp://開頭的地址,一般為rtsp://ip:554(rtsp默認(rèn)端口號(hào));

RTSP VER:標(biāo)識(shí)RTSP 版本號(hào),一般常見RTSP/1.0;

CSeq:數(shù)據(jù)包序列號(hào),由于OPTIONS一般而言為RTSP請(qǐng)求的第一條指令,一般而言,針對(duì)OPTIONS,該值為1;

User-Agent:用戶代理;

回復(fù)消息的結(jié)構(gòu):

OPTIONS的回復(fù)遵循RTSP response消息的格式,第一行回復(fù)RTSP的版本,狀態(tài)碼,狀態(tài)描述;然后是序列號(hào),與OPTION請(qǐng)求中的序列號(hào)相同;之后是Public字段,用于描述服務(wù)器當(dāng)前提供了哪些方法;最后是Date字段,表示日期。

最后放一個(gè)完整的OPTIONS請(qǐng)求的示例:

請(qǐng)求

OPTIONS rtsp://192.17.1.63:554 RTSP/1.0\r\n
CSeq: 1\r\n
User-Agent: Lavf58.42.100\r\

回復(fù)

RTSP/1.0 200 OK\r\n
CSeq: 1\r\n
Public: OPTIONS, DESCRIBE, PLAY, PAUSE, SETUP, TEARDOWN, SET_PARAMETER, GET_PARAMETER\r\n
Date:  Fri, Apr 10 2020 19:07:19 GMT\r\n
DESCRIBE

上一篇我們介紹了RTSP的OPTION指令,客戶端發(fā)起OPTION請(qǐng)求后,得到了RTSP服務(wù)器支持的指令。在此之后,客戶端會(huì)繼續(xù)向服務(wù)器發(fā)送DESCRIBE消息,來獲取會(huì)話描述信息(sdp)。本篇我們來詳細(xì)介紹一下DESCRIBE指令。

DESCRIBE的作用

向服務(wù)器請(qǐng)求會(huì)話描述信息(SDP)。

DESCRIBE的格式

1.請(qǐng)求

格式:

描述:

首先用DESCRIBE描述請(qǐng)求類型;然后在URI中請(qǐng)求的服務(wù)器端地址;RTSP_VER表示RTSP的版本號(hào),在加入\r\n消息頭結(jié)束;

消息體包含以下字段:

Accept:指明接收數(shù)據(jù)的格式,如application/sdp表示接收sdp信息,之后加入\r\n表示此條目結(jié)束;

CSeq:RTSP序列號(hào),一般DESCRIBE包在RTSP請(qǐng)求過程中的序列號(hào)為2,之后加入\r\n表示此條目結(jié)束;

UserAgent : 指明用戶代理,由于是最后一個(gè)條目,加入兩組\r\n表示結(jié)束。

案例

第一次DESCRIBE請(qǐng)求:

DESCRIBE rtsp://192.17.1.63:554 RTSP/1.0
Accept: application/sdp
CSeq: 2
User-Agent: Lavf58.42.100

服務(wù)端回復(fù)的401消息:

RTSP/1.0 401 Unauthorized
CSeq: 2
WWW-Authenticate: Digest realm="IP Camera(23306)", nonce="a946c352dd3ad04cf9830d5e72ffb11e", stale="FALSE"
Date: Fri, Apr 10 2020 19:07:19 GMT

第二次DESCRIBE請(qǐng)求

DESCRIBE rtsp://192.17.1.63:554 RTSP/1.0
Accept: application/sdp
CSeq: 3
User-Agent: Lavf58.42.100
Authorization: Digest username="admin", realm="IP Camera(23306)", nonce="a946c352dd3ad04cf9830d5e72ffb11e", uri="rtsp://192.17.1.63:554", response="8f1987b6da1aeb3f3744e1307d850281"

驗(yàn)證OK消息

RTSP/1.0 200 OK
CSeq: 3
Content-Type: application/sdp
Content-Base: rtsp://192.17.1.63:554/
Content-Length: 712


v=0
o=- 1586545639954157 1586545639954157 IN IP4 192.17.1.63
s=Media Presentation
e=NONE
b=AS:5100
t=0 0
a=control:rtsp://192.17.1.63:554/
m=video 0 RTP/AVP 96
c=IN IP4 0.0.0.0
b=AS:5000
a=recvonly
a=x-dimensions:1920,1080
a=control:rtsp://192.17.1.63:554/trackID=1
a=rtpmap:96 H264/90000
a=fmtp:96 profile-level-id=420029; packetization-mode=1; sprop-parameter-sets=Z01AKI2NQDwBE/LgLcBAQFAAAD6AAAw1DoYACYFAABfXgu8uNDAATAoAAL68F3lwoA==,aO44gA==
m=audio 0 RTP/AVP 8
c=IN IP4 0.0.0.0
b=AS:50
a=recvonly
a=control:rtsp://192.17.1.63:554/trackID=2
a=rtpmap:8 PCMA/8000
a=Media_header:MEDIAINFO=494D4B48010300000400000111710110401F000000FA000000000000000000000000000000000000;
a=appversion:1.0
SETUP

實(shí)際的案例:

request

SETUP rtsp://192.17.1.63:554/trackID=1 RTSP/1.0
Transport: RTP/AVP/UDP;unicast;client_port=26968-26969
CSeq: 4
User-Agent: Lavf58.42.100
Authorization: Digest username="admin", realm="IP Camera(23306)", nonce="a946c352dd3ad04cf9830d5e72ffb11e", uri="rtsp://192.17.1.63:554/trackID=1", response="e29ca030062df6022faa77fefde40b28"

Response

RTSP/1.0 200 OK
CSeq: 4
Session: 337474243;timeout=60
Transport: RTP/AVP/UDP;unicast;client_port=26968-26969;server_port=8284-8285;ssrc=4a7fb757;mode="play"
Date: Fri, Apr 10 2020 19:07:19 GMT
PLAY

實(shí)例:

RTSP PLAY (requst)

PLAY rtsp://192.17.1.63:554/ RTSP/1.0\r\n
Range: npt=0.000-\r\n
CSeq: 6\r\n
User-Agent: Lavf58.42.100\r\n
Session: 337474243\r\n
Authorization: Digest username="admin", realm="IP Camera(23306)", nonce="a946c352dd3ad04cf9830d5e72ffb11e", uri="rtsp://192.17.1.63:554/", response="9ea6c2659d3bce8d129ca3549ecc7fbf"\r\n\r\n

RTSP PLAY (response)

RTSP/1.0 200 OK\r\n
CSeq: 6\r\n
Session: 337474243\r\n
RTP-Info: url=rtsp://192.17.1.63:554/trackID=1;seq=3658;rtptime=1710363406,url=rtsp://192.17.1.63:554/trackID=2;seq=6598;rtptime=4065225152\r\n
Date: Fri, Apr 10 2020 19:07:20 GMT\r\n\r\n
PAUSE

一個(gè)官方的例子:

PAUSE rtsp://example.com/fizzle/foo RTSP/1.0\r\n
CSeq:834\r\n
Session:12345678\r\n\r\n

PAUSE回復(fù)示例

RTSP/1.0  200 OK\r\n
CSeq:834\r\n
Session:12345678\r\n\r\n
TEARDOWN

在這里插入圖片描述

該TREADOWN消息中,消息序列號(hào)為11,用戶代理為LibVLC/2.2.4,這是我們使用VLC播放器rtsp流的一個(gè)代理,消息序列號(hào)為11, Session為之前SETUP請(qǐng)求后服務(wù)端Reply返回的session字段的值,用于表示此次會(huì)話連接!

發(fā)出去請(qǐng)求后,服務(wù)端同樣也會(huì)回饋response的消息。

完整TEARDWON請(qǐng)求和回復(fù)的例子:

TEARDOWN請(qǐng)求

TEARDOWN rtsp://192.17.1.73:554/Streaming/Channels/101/?transportmode=unicast&profile=Profile_1 RTSP/1.0\r\n
CSeq: 10\r\n
Authorization: Digest username="admin", realm="bcad28138995", nonce="a1a5b9d3865180dccbaffb1cb2eb2a27", uri="rtsp://192.17.1.73:554/Streaming/Channels/101/", response="c5c005ef16638dfa326dcfc0c3f54aab"\r\n
User-Agent: LibVLC/3.0.11 (LIVE555 Streaming Media v2016.11.28)\r\n
Session: 1659421772\r\n\r\n

TEARDOWN的回復(fù)

RTSP/1.0 200 OK\r\n
CSeq: 10\r\n
Session: 1659421772\r\n
Date: Thu, Aug 27 2020 18:31:13 GMT\r\n\r\n
GET_PARAMETER

GetParameret用作向服務(wù)器獲取參數(shù),一般用于獲取時(shí)間范圍。當(dāng)發(fā)送的請(qǐng)求中沒有相關(guān)請(qǐng)求參數(shù)時(shí),則用作保持RTSP連接!

從抓包文件中看并沒有任何參數(shù)的信息,所以我們認(rèn)為這是一個(gè)空的 RTSP請(qǐng)求,其作用是保持RTSP連接,類似于ping的作用,類似于RTMP協(xié)議中的ping request消息。如果有實(shí)際的參數(shù)請(qǐng)求,則在增加請(qǐng)求的參數(shù)對(duì)應(yīng)的字段就可以了!

完整的GETPARAMETER的請(qǐng)求和回復(fù)的例子:

GET_PARAMETER請(qǐng)求

GET_PARAMETER rtsp://192.17.1.73:554/Streaming/Channels/101/?transportmode=unicast&profile=Profile_1 RTSP/1.0\r\n
CSeq: 7\r\n
Authorization: Digest username="admin", realm="bcad28138995", nonce="a1a5b9d3865180dccbaffb1cb2eb2a27", uri="rtsp://192.17.1.73:554/Streaming/Channels/101/", response="4764a1f2772821f5528ebbb2ad18c3f9"\r\n
User-Agent: LibVLC/3.0.11 (LIVE555 Streaming Media v2016.11.28)\r\n
Session: 1659421772\r\n\r\n

GET_PARAMETER回復(fù)

RTSP/1.0 200 OK\r\n
CSeq: 7\r\n
Date: Thu, Aug 27 2020 18:29:00 GMT\r\n
RTSP_SET_PARAMETER

SET PARAMETER作用

SET_PARAMETER方法用于給URI指定的流地址設(shè)置參數(shù)。

當(dāng)客戶端想要確定為什么某一個(gè)特定的請(qǐng)求失敗時(shí),請(qǐng)求應(yīng)該只包含一個(gè)參數(shù)。

如果請(qǐng)求中包含多個(gè)參數(shù)值,則服務(wù)器只有在所有的參數(shù)被成功設(shè)置的情況下,才會(huì)生效。

服務(wù)器允許某個(gè)參數(shù)被重復(fù)設(shè)置成相同的值,但不允許改變參數(shù)的值!

RTP包格式

RTP概覽

RTP是一種應(yīng)用層協(xié)議,傳輸層協(xié)議可以是TCP或者UDP(UDP多一些)!

RTP數(shù)據(jù)包由兩部分組成,一部分是RTP Heaeder,一部分是RTP body,RTP Header占用最少12個(gè)字節(jié),最多72個(gè)字節(jié);另一部分是RTP Payload,用來封裝實(shí)際的數(shù)據(jù)負(fù)載,如封裝h264編碼的視頻數(shù)據(jù)!下面我們來仔細(xì)看下RTP Header和RTP Body的組織形式!

RTCP協(xié)議

通過Marker=1為最后一幀的 判斷總處理的幀數(shù)是否等于Sequence number,據(jù)此判斷是否丟幀

WireShark

默認(rèn)綠色是TCP報(bào)文,深藍(lán)色是DNS,淺藍(lán)是UDP,黑色標(biāo)識(shí)出有問題的TCP報(bào)文——比如亂序報(bào)文。

Wireshark基本用法

在這里插入圖片描述
Wireshark抓包的三次握手解析:
①客戶端發(fā)起連接,先發(fā)送SYN報(bào)文,并發(fā)送序號(hào)為Seq=X=0;

②服務(wù)端收到客戶端的連接請(qǐng)求后,發(fā)送SYN + ACK報(bào)文,并發(fā)送服務(wù)端發(fā)送的序號(hào)為Seq=Y=0,和確認(rèn)序號(hào)ACK=X+1=1;

③客戶端收到服務(wù)端的確認(rèn)報(bào)文后,再次發(fā)送ACK報(bào)文給服務(wù)端,表示客戶端能與服務(wù)端正常連接通信,并發(fā)送序號(hào)Seq=Z=1, 確認(rèn)序號(hào)為ACK=Y+1=1;

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

分享標(biāo)題:RTSP協(xié)議詳解-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://muchs.cn/article38/dhggpp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)商城網(wǎng)站、云服務(wù)器面包屑導(dǎo)航、手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營