"本文轉(zhuǎn)載自:
- [^一二三^]的流媒體協(xié)議之RTSP詳解
- [Chiang木]的實時流協(xié)議---RTSP【詳解】"
1.概述
??RTSP(Real Time Streaming Protocol 實時流協(xié)議)建立并控制一個或幾個時間同步的連續(xù)流媒體,對媒體流提供了諸如開始授瘦、暫停蝴悉、快進馋吗、停止等控制坯癣。它是TCP/IP協(xié)議體系中的一個應用層協(xié)議摇肌,協(xié)議主要規(guī)定了一對多應用程序如何有效地通過IP網(wǎng)絡傳送多媒體數(shù)據(jù)。RTSP體系結(jié)位于RTP和RTCP之上(RTCP用于控制傳輸,RTP用于數(shù)據(jù)傳輸)疲牵,使用TCP或UDP完成數(shù)據(jù)傳輸。RTSP的作用相當于流媒體服務器的遠程控制榆鼠,而它本身并不傳輸數(shù)據(jù)纲爸。
??RTSP流媒體協(xié)議交互及碼流傳輸過程中所用的協(xié)議如下:
??官方指導文檔參考:RFC 2326 - Real Time Streaming Protocol (RTSP)
??RTSP的語法和運作跟HTTP 1.1類似,但并不特別強調(diào)時間同步妆够,所以比較能容忍網(wǎng)絡延遲识啦。它具有重新導向功能,可視實際負載情況來轉(zhuǎn)換提供服務的服務器神妹,以避免過大的負載集中于同一服務器而造成延遲颓哮。
(1)RTSP協(xié)議與HTTP協(xié)議的區(qū)別:
狀態(tài):RTSP是有狀態(tài)的,它的命令總是按照順序來發(fā)送鸵荠,其中某個命令可能需要總在另外一個命令之前要發(fā)送冕茅。而http則是無狀態(tài),協(xié)議在發(fā)送一個命令以后,連接就會斷開姨伤,且命令之間是沒有依賴性的哨坪。
端口:RTSP協(xié)議使用554端口,http使用80端口乍楚。
請求:RTSP的請求服務器和客戶端都可以發(fā)送当编,而HTTP請求則只能由客戶端發(fā)送。
(2)RTSP的優(yōu)點:
易擴展:RTSP中很容易加入新的方法及參數(shù)徒溪,只需要服務器和客戶端共同協(xié)商即可
易解析:RTSP可以由標準HTTP或MIME解析器進行解析
安全:RTSP使用網(wǎng)頁安全機制忿偷,所有HTTP授權機制如basic、digest都可以直接使用
傳輸協(xié)議多選:RTSP可以使用TCP()或UDP作為其底層傳輸協(xié)議支持
多服務器支持:請求的多股流可以放在不同的服務器上臊泌,客戶端自動與這幾個服務器建立連接鲤桥,在傳輸時完成媒體流同步
2.RTSP協(xié)議交互過程
??RTSP協(xié)議通常是基于TCP的方式進行協(xié)議交互,另外也可基于HTTP缺虐,其交互過程有所不同芜壁,協(xié)議交互主要實現(xiàn)流媒體信息描述/碼流通道建立/流媒體控制等功能,這里要區(qū)分RTSP協(xié)議交互與流媒體碼流傳輸高氮,RTSP協(xié)議交互,只做流媒體會話交互功能:
通過describe來同步流媒體編碼顷牌、封裝剪芍、連接等信息;
通過setup來建立流媒體傳輸通道窟蓝;
通過play來開啟流媒體播放罪裹;
通過teardown來結(jié)束播放。
??流媒體碼流的傳輸是通過RTSP交互建立的流媒體傳輸通道來傳輸碼流运挫,其傳輸協(xié)議一般為RTP/RTCP状共,其傳輸層可以為UDP或者TCP。
2.1 RTSP基于TCP交互過程
??承載RTSP的協(xié)議為TCP谁帕,其主要交互過程如下圖所示:
??RTSP返回的狀態(tài)碼與HTTP類似峡继,各個方法的說明也很簡單也不做過多的說明。
(1)在開發(fā)中匈挖,RTSP客戶端可以直接發(fā)送describe碾牌,而無強制要求必須要發(fā)送option。
(2)describe之后儡循,根據(jù)其攜帶的SDP信息舶吗,判斷流媒體的編碼格式,封裝格式择膝,payloadtype誓琼,timescale,track標識等信息,客戶端保存此信息用于后續(xù)碼流的解復用和解碼腹侣。
(3)根據(jù)track標識去申請想要的類型的碼流呵扛;
(4)客戶端通過setup來建立碼流通道,如果有多路筐带,需要根據(jù)不同的track 調(diào)用setup方法多次今穿;
(5)一般setup建立通道可以是rtp/avp或者rtp/avp/tcp類型,這里標識以rtp傳輸音視頻伦籍;
(6)rtp/avp基于UDP傳輸蓝晒,rtp/avp/tcp基于TCP傳輸;
(7)如果基于UDP傳輸碼流時(rtp/avp類型)帖鸦,需要根據(jù)setup交互的信息芝薇,單獨建立RTP/RTCP兩路UDP通道;
(8)如果基于TCP傳輸碼流時(rtp/avp/tcp類型)作儿,則與RTSP共用一個TCP通道洛二,通過在RTP/RTCP頭加上$開頭的四個字節(jié)的tcpheader來區(qū)分是哪一路的RTP/RTCP,還是RTSP攻锰。
??RTP/AVP類型傳輸模式:單獨建立RTP和RTCP兩路UDP通道傳輸碼流數(shù)據(jù)晾嘶。
??RTP/AVP/TCP類型傳輸模式:與RTSP共用一個TCP通道。
2.2 RTSP基于HTTP的交互過程
??RTSP-over-HTTP tunneling娶吞,通過HTTP隧道來傳輸RTSP協(xié)議和媒體流垒迂,需要RTSP服務器支持此種方式,開啟HTTP隧道監(jiān)聽端口妒蛇。
??客戶端首先會建立一個鏈接通過HTTP-GET方法來獲取協(xié)議響應消息和媒體流机断,然后再建立一個鏈路,通過HTTP-POST方法來發(fā)送請求消息绣夺,兩個tcp鏈接都是長連接吏奸,POST 連接中發(fā)送RTSP請求消息,一般要進行BASE64編碼陶耍,來隱藏RTSP信息奋蔚。數(shù)據(jù)流的發(fā)送封裝方式與RTP/TCP一樣,通過GET鏈路發(fā)送給客戶端物臂,響應消息也是通過GET鏈路發(fā)送給客戶端旺拉,其流程如下:
3.RTSP方法
??RTSP常用的方法包括:OPTIONS、DESCRIBE棵磷、ANNOUNCE蛾狗、SETUP、TEARDOWN仪媒、PLAY沉桌、PAUSE谢鹊、GET_PARAMETER和SET_PARAMETER等。詳細使用介紹如下:
4.RTSP報文解析
??RTSP有兩類報文:請求報文(request)和響應報文(ressponse)留凭。請求報文是指從客戶向服務器發(fā)送請求報文佃扼,響應報文是指從服務器到客戶的應答。RTSP報文由三部分組成蔼夜,即開始行兼耀、首部行和實體主體。如下使用wireshark抓取的數(shù)據(jù)包:
4.1 請求報文
??在請求報文中求冷,開始行就是請求行瘤运,RTSP請求報文的結(jié)構(gòu)如下圖所示:
??下面是OPTIONS請求消息的一個wireshark抓包,我們以此為例進行報文解析:
(1)RTSP的第一行(請求行)
Request: OPTIONS rtsp://127.0.0.1:554/desktop RTSP/1.0\r\n
??內(nèi)容格式:
方法名稱(OPTIONS) + 空格 + URL地址 + 空格 + RTSP版本 + 回車符(CR)和換行符(LF)
??其中方法包括:OPIONS匠题、DESCRIBE拯坟、SETUP、PLAY韭山、TEARDOWN等郁季;URI是接受方的地址,例如:rtsp://127.0.0.1:554/desktop
??RTSP版本一般都是 RTSP/1.0钱磅。每行后面的CR LF表示回車換行梦裂,需要接受端有相應的解析。
(2) 第二续搀、第三塞琼、第四行表示的是該消息的各字段名稱及其對應的值:
CSeq:表示序列號,本次請求的序列號為1(服務器端回復此請求的數(shù)據(jù)包的序列號也是1)禁舷;
User-Agent:表示用戶代理,值為 “Lavf60.4.100”毅往;
最后一行:\r\n牵咙,表示本次請求報文結(jié)束。
??內(nèi)容格式:
字段名 + 空格 + 字段值 + 回車符(CR)和換行符(LF)
4.2 響應報文
??響應報文的開始行是狀態(tài)行攀唯,RTSP響應報文的結(jié)構(gòu)如下圖所示:
??下面是OPTIONS響應消息的一個wireshark抓包洁桌,我們以此為例進行報文解析:
(1)RTSP的第一行(狀態(tài)行)
Response: RTSP/1.0 200 OK\r\n
??內(nèi)容格式:
RTSP版本 + 空格 + 狀態(tài)碼 + 空格 + 狀態(tài)語 + 回車符(CR)和換行符(LF)
(2)第二、第三侯嘀、第四另凌、第五行表示的是該消息的各字段名稱及其對應的值:
Public:表示RTSP服務器支持的方法,值為“DESCRIBE戒幔,SETUP吠谢,TEARDOWN,PLAY诗茎,PAUSE工坊,OPTIONS,ANNOUNCE,RECORD”
CSeq:表示序列號王污,本次響應的序列號為1(對應恢復請求序列號1)罢吃;
Session:表示一個RTSP會話,值為 “ipAyvSBVR”昭齐;
最后一行:\r\n尿招,表示本次響應報文結(jié)束。
4.3 常用字段含義
Accept:用于指定客戶端通知服務器自己可以接受的實體數(shù)據(jù)結(jié)構(gòu)類型阱驾。例如: Accept: application/sdp就谜,之后服務器通過Content-Type字段返回其實體數(shù)據(jù)結(jié)構(gòu)類型;
Accept-Encoding:用于客戶端通知服務器自己可以接受的數(shù)據(jù)壓縮格式啊易,例如:Accept-Encoding: gzip, compress, br吁伺,之后服務器將通過Content-Encoding字段通知客戶端它的選擇;
Accept-Language:用于客戶端通知服務器自己可以理解的語言及其接受度租谈,例如:Accept-Language: fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5 篮奄,之后服務器將通過Content-Language字段通知客戶端它的選擇;
Authorization:客戶端請求消息頭含有服務器用于驗證用戶代理身份的憑證割去;
Bandwidth:用于描述客戶端可用的帶寬值窟却。例如: Bandwidth: 4000;
Blocksize:此字段由客戶端發(fā)送到媒體服務器呻逆,要求服務器提供特定的媒體包大小夸赫,服務器可以自由使用小于請求的塊大小。 此數(shù)據(jù)包大小不包括 IP咖城、UDP 或 RTP 等低層標頭茬腿;
CSeq:指定了RTSP請求響應對的序列號,對每個包含一個給定序列號的請求消息宜雀,都會有一個相同序列號的回應消息切平,且每個請求或回應中都必須包括這個頭字段;辐董、
Cache-Control:通過指定指令來實現(xiàn)緩存機制悴品。緩存指令是單向的,這意味著在請求中設置的指令简烘,不一定被包含在響應中苔严;
Conference:通知服務器不得更改同一 RTSP 會話的會議 ID;
Connection:該字段決定當前的事務完成后孤澎,是否會關閉網(wǎng)絡連接届氢。如果該值是“keep-alive”,網(wǎng)絡連接就是持久的亥至,不會關閉悼沈,使得對同一個服務器的請求可以繼續(xù)在該連接上完成或者Connection: close贱迟;
Content-Length:該字段指明在RTSP協(xié)議最后一個標頭之后的雙 CRLF 之后的內(nèi)容長度。例如在服務器響應DESCRIBE中絮供,指明sdp信息長度衣吠;
Content-Type:告訴客戶端實際返回的內(nèi)容的內(nèi)容類型;
User-Agent:該字段用來讓網(wǎng)絡協(xié)議的對端來識別發(fā)起請求的用戶代理軟件的應用類型壤靶、操作系統(tǒng)缚俏、軟件開發(fā)商以及版本號;
Expires:指明過期的時間贮乳;
Rang: 用于指定一個時間范圍忧换,可以使用SMPTE、NTP或clock時間單元向拆;
Session:Session頭字段標識了一個RTSP會話亚茬。Session ID是由服務器在SETUP的回應中選擇的,客戶端一旦得到Session ID后浓恳,在以后的對Session 的操作請求消息中都要包含Session ID.例如:Session: 411B4161;timeout=65刹缝;
Transport:Transport頭字段包含客戶端可以接受的傳輸選項列表,包括傳輸協(xié)議颈将,地址端口梢夯,TTL等。服務器端也通過這個頭字段返回實際選擇的具體選項晴圾。如: Transport: RTP/AVP/TCP;unicast;destination=192.168.31.222;source=192.168.31.222;interleaved=0-1颂砸。
5.RTSP協(xié)議推拉流
5.1 RTSP協(xié)議拉流詳解
??RTSP協(xié)議交互無論是基于TCP,還是HTTP死姚,或者其他方式人乓,其協(xié)議交互流程都不變,以下按照客戶端拉流的協(xié)議交互順序都毒,對RTSP協(xié)議各個方法極其響應進行詳細說明撒蟀。
5.1.1 OPTION方法
??請求及響應實例如下:
OPTIONS rtsp://10.45.12.141:554/h264/ch1/main/av_stream RTSP/1.0
CSeq: 2
User-Agent: LibVLC/3.0.12 (LIVE555 Streaming Media v2016.11.28)
=======================
RTSP/1.0 200 OK
CSeq: 2
Public: OPTIONS, DESCRIBE, PLAY, PAUSE, SETUP, TEARDOWN, SET_PARAMETER, GET_PARAMETER
Date: Wed, Jul 27 2022 10:37:06 GMT
??此方法主要用來詢問流媒體服務器支持哪些RTSP方法,此例子說明服務器支持OPTIONS, DESCRIBE, PLAY, PAUSE, SETUP, TEARDOWN, SET_PARAMETER, GET_PARAMETER温鸽,此方法不是交互必須的,客戶端可以跳過此方法直接發(fā)describe手负,服務器需要注意兼容涤垫。
響應報文遵循RTSP response消息的格式:
第一行:RTSP的版本,狀態(tài)碼竟终,狀態(tài)描述蝠猬;
CSeq:與OPTION請求中的序列號相同;
Public:用于描述服務器當前提供了哪些方法统捶;
Date:表示日期榆芦。
5.1.2 DESCRIBE方法
??從服務器獲取媒體流相關的信息柄粹,可以包含多個媒體流類型極信息,通過SDP來描述和區(qū)分不同媒體類型的媒體源匆绣,客戶端根據(jù)服務器支持的媒體源通過setup建立媒體流通道驻右,其實例如下:
DESCRIBE rtsp://10.45.12.141:554/h264/ch1/main/av_stream RTSP/1.0
CSeq: 3
User-Agent: LibVLC/3.0.12 (LIVE555 Streaming Media v2016.11.28)
Accept: application/sdp
=======================
RTSP/1.0 401 Unauthorized
CSeq: 3
WWW-Authenticate: Digest realm="IP Camera(C7627)", nonce="c4c4e29b1620211e44ec28b077e2eb52", stale="FALSE"
Date: Wed, Jul 27 2022 10:37:06 GMT
---------------------------------------------------------------------------------------
DESCRIBE rtsp://10.45.12.141:554/h264/ch1/main/av_stream RTSP/1.0
CSeq: 4
Authorization: Digest username="admin", realm="IP Camera(C7627)", nonce="c4c4e29b1620211e44ec28b077e2eb52", uri="rtsp://10.45.12.141:554/h264/ch1/main/av_stream", response="be7cde07af4a08db991dd58a89db7621"
User-Agent: LibVLC/3.0.12 (LIVE555 Streaming Media v2016.11.28)
Accept: application/sdp
=======================
RTSP/1.0 200 OK
CSeq: 4
Content-Type: application/sdp
Content-Base: rtsp://10.45.12.141:554/h264/ch1/main/av_stream/
Content-Length: 574
v=0
o=- 1658918226996159 1658918226996159 IN IP4 10.45.12.141
s=Media Presentation
e=NONE
b=AS:5050
t=0 0
a=control:rtsp://10.45.12.141:554/h264/ch1/main/av_stream/
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://10.45.12.141:554/h264/ch1/main/av_stream/trackID=1
a=rtpmap:96 H265/90000
a=fmtp:96 sprop-sps=QgEBAWAAAAMAsAAAAwAAAwB7oAPAgBDlja5JMvTcBAQEAg==; sprop-pps=RAHA8vA8kAA=
a=Media_header:MEDIAINFO=494D4B48010300000400050000000000000000000000000000000000000000000000000000000000;
a=appversion:1.0
??這里客戶端發(fā)送describe時,一般服務器會進行用戶鑒權崎淳,如果未攜帶Authorization鑒權信息堪夭,或者認證失敗,服務器會返回錯誤號為401的響應拣凹,客戶端接收到401響應時森爽,需要根據(jù)已知的用戶鑒權信息,生成Authorization嚣镜,再次發(fā)送describe爬迟,如果認證成功,服務器返回攜帶有SDP的響應信息菊匿。
5.1.3 SETUP方法
此方法根據(jù)流媒體服務器返回的SDP描述信息付呕,進行流媒體傳輸通道的建立,如果sdp描述多個媒體源捧请,客戶端可根據(jù)需要建立媒體傳輸鏈路凡涩,play方法后,服務器根據(jù)setup建立的媒體流傳輸通道發(fā)送媒體流疹蛉,一般有RTP over udp和RTP over tcp兩張流的傳輸方式活箕,其setup有一定的區(qū)別。
(1)RTP OVER UDP抓包實例:
SETUP rtsp://10.45.12.141:554/h264/ch1/main/av_stream/trackID=1 RTSP/1.0
CSeq: 5
Authorization: Digest username="admin", realm="IP Camera(C7627)", nonce="c4c4e29b1620211e44ec28b077e2eb52", uri="rtsp://10.45.12.141:554/h264/ch1/main/av_stream/", response="ac52cf287fe4aa6be5bb168bc9d01446"
User-Agent: LibVLC/3.0.12 (LIVE555 Streaming Media v2016.11.28)
Transport: RTP/AVP;unicast;client_port=63538-63539
=======================
RTSP/1.0 200 OK
CSeq: 5
Session: 1279114011;timeout=60
Transport: RTP/AVP;unicast;client_port=63538-63539;server_port=8312-8313;ssrc=3cc5faf7;mode="play"
Date: Wed, Jul 27 2022 10:37:07 GMT
??首先客戶端側(cè)可款,SETUP的path路徑育韩,加上了trackID=1,表示建立的時trackID=1的媒體源的碼流傳輸通道闺鲸,通過上面SDP描述可知筋讨,此路時編碼類型為H265,payloadtype=96的視頻源摸恍,這里要注意悉罕,一個setup只能給一種媒體源建立流傳輸通道。如果服務器需要認證立镶,setup也需要帶上認證信息Authorization壁袄,Transport字段表示客戶端通過何種方式申請建立媒體流傳輸通道,這里RTP/AVP表示通過UDP方式媚媒;unicast表示單播方式(也支持組播嗜逻,比較少用,這里不做介紹)缭召,如果為UDP方式栈顷,則有client_port字段逆日,client_port=63538-63539表示客戶端測此路碼流的RTP端口為UDP63538,RTCP端口為UDP63539萄凤;這里注意建立RTP碼流傳輸通道時室抽,RTP和RTCP要成對出現(xiàn),一般碼流端口號為RTCP=RTP+1蛙卤。
??服務器響應時狠半,如果支持客戶端的傳輸方式,則Transport字段中颤难,RTP/AVP;unicast神年;client_port=63538-63539;要與客戶端申請的消息保持一致,增加server_port字段行嗤,表示服務器發(fā)送RTP/RTCP的UDP端口已日,可選增加ssrc標識。這里要注意栅屏,服務端回復setup時飘千,將會生成一個session ID.后續(xù)消息必須帶有此Session字段。
(2)RTP OVER TCP抓包實例:
SETUP rtsp://10.45.12.141:554/h264/ch1/main/av_stream/trackID=1 RTSP/1.0
CSeq: 5
Authorization: Digest username="admin", realm="IP Camera(C7627)", nonce="59db6d7ba1acb14582356c8bb8e61ce8", uri="rtsp://10.45.12.141:554/h264/ch1/main/av_stream/", response="129818708e48cd0326f8b6f1b19613a3"
User-Agent: LibVLC/3.0.12 (LIVE555 Streaming Media v2016.11.28)
Transport: RTP/AVP/TCP;unicast;interleaved=0-1
=======================
RTSP/1.0 200 OK
CSeq: 5
Session: 2095163832;timeout=60
Transport: RTP/AVP/TCP;unicast;interleaved=0-1;ssrc=24e4e500;mode="play"
Date: Fri, Aug 26 2022 14:35:46 GMT
??RTP通過TCP傳輸時栈雳,與UDP方式在SETUP方法上有一定的區(qū)別护奈,主要是Transport頭,RTP/AVP/TCP表示RTP流通過TCP傳輸哥纫,當此值出現(xiàn)時霉旗,其沒有client_port字段,出現(xiàn)interleaved字段蛀骇,interleaved=0-1厌秒,表示streamid;當碼流通過TCP傳輸時擅憔,與RTSP共用一個TCP鏈路鸵闪,所以其不需要建立新的連接,為了區(qū)分RTP暑诸、RTCP及RTSP協(xié)議蚌讼,需要增加包頭標識,這里采用TCPHEAD頭字段个榕,tcphead為四個字節(jié)啦逆,格式如下:
| magic number | channel number | embedded data length | data |
magic number: 1 byte value of hex 0x24($),標識傳輸?shù)氖菙?shù)據(jù)不是rtsp協(xié)議笛洛;
channel number: 1 byte value to denote the channel,信道ID乃坤,標識流的類型苛让;
embedded data length :2 bytes to denote the embedded data length沟蔑,流長度;
data:表示RTP/RTCP包數(shù)據(jù)狱杰。
??當TCP接收到的包開頭為24時瘦材,可以判定其為RTP或者RTCP,通過streamid來區(qū)分仿畸,setup方法中interleaved=0-1食棕,標識RTP的streamid=0;RTCP的streamid=1错沽。
(3)tcphead抓包實例如下:
??第一個24 00 00 14標識此包為RTP包長度為0x14簿晓,解析時只需要根據(jù)streamid及長度讀取完整的RTP幀,去掉四字節(jié)頭千埃,通過RTP方式解析即可憔儿。由于TCP是流式傳輸,需要連續(xù)根據(jù)24標識判斷放可。
5.1.4 PLAY方法
??PLAY消息是告訴服務器端可以使用在SETUP消息中所指定的傳輸機制開始傳送數(shù)據(jù)谒臼。需要指出的是,客戶端不應該發(fā)送任何PLAY請求直到所有的SETUP消息被成功解析耀里。PLAY消息會在range中指定媒體的播放時間蜈缤,服務器在接到PLAY消息后會由range中指定的開始點開始發(fā)送媒體數(shù)據(jù)直到range中指定的結(jié)束點,PlAY可帶有scale和speed字段用于點播速度控制冯挎。對于實時流range一般為Range: npt=0.000
PLAY rtsp://10.45.12.141:554/h264/ch1/main/av_stream/ RTSP/1.0
CSeq: 6
Authorization: Digest username="admin", realm="IP Camera(C7627)", nonce="59db6d7ba1acb14582356c8bb8e61ce8", uri="rtsp://10.45.12.141:554/h264/ch1/main/av_stream/", response="0eef224891c12e902ca9185c70f969cc"
User-Agent: LibVLC/3.0.12 (LIVE555 Streaming Media v2016.11.28)
Session: 2095163832
Range: npt=0.000-
=======================
RTSP/1.0 200 OK
CSeq: 6
Session: 2095163832
RTP-Info: url=rtsp://10.45.12.141:554/h264/ch1/main/av_stream/trackID=1;seq=29458;rtptime=2518517708
Date: Fri, Aug 26 2022 14:35:46 GMT
??play方法需要帶上Session字段表示同一會話底哥,此Session由setup時服務端返回,客戶端發(fā)送play方法后织堂,即可準備接收碼流叠艳,服務器接收到play后,即可打開碼流發(fā)送通道易阳,發(fā)送碼流附较;這里要注意服務器在給出play響應時,最好帶有RTP-Info字段描述將要發(fā)送碼流的RTP信息潦俺,比如第一包RTP的seq和rtptime拒课,客戶端可以根據(jù)此字段進行解復用。
5.1.5 TEARDOWN方法
??客戶端發(fā)起表示停止媒體占用事示,并釋放相關資源早像,其實例如下:
TEARDOWN rtsp://10.45.12.141:554/h264/ch1/main/av_stream/ RTSP/1.0
CSeq: 7
Authorization: Digest username="admin", realm="IP Camera(C7627)", nonce="e3dfa4549e00a1d53c0e9f28c3348e2c", uri="rtsp://10.45.12.141:554/h264/ch1/main/av_stream/", response="0c530cba910c33ea3ef7a554dda8d0b2"
User-Agent: LibVLC/3.0.12 (LIVE555 Streaming Media v2016.11.28)
Session: 391346974
??這里teardown一般會停止RTSP會話及視頻傳輸通道,服務器接收到此方法時肖爵,釋放相關資源卢鹦。
5.1.6 其他方法
(1)PAUSE:錄像回放時會用到,用以暫停流媒體傳輸劝堪;
(2)SET_PARAMETER/GET_PARAMETER:基本沒啥用冀自,一般用來作為心跳使用揉稚,也是用option來維持心跳。
5.2 RTSP協(xié)議推流詳解
??RTSP推流流程如下:
抓包實例如下:
OPTIONS rtsp://10.45.12.141:554/live/0001 RTSP/1.0
CSeq: 1
User-Agent: znv
=======================
RTSP/1.0 200 OK
Server: EasyDarwin/7.3
Cseq: 1
Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, OPTIONS, ANNOUNCE, RECORD
=======================
ANNOUNCE rtsp://10.45.12.141:554/live/0001 RTSP/1.0
Content-Type: application/sdp
CSeq: 2
User-Agent: znv
Content-Length: 325
v=0
o=- 0 0 IN IP4 127.0.0.1
s=Media Server
c=IN IP4 192.168.1.108
t=0 0
a=tool:libavformat 57.71.100
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z2QAHqw0ygsBJ/wFuCgoKgAAB9AAAYah0MALFAALE9d5caGAFigAFieu8uFA,aO48MA==; profile-level-id=64001E
a=control:streamid=0
=======================
RTSP/1.0 200 OK
Server: EasyDarwin/7.3 (Build/17.0325; Platform/Win32; Release/EasyDarwin; State/Development; )
Cseq: 2
=======================
SETUP rtsp://10.45.12.141:554/live/0001/trackid=0 RTSP/1.0
Transport: RTP/AVP/TCP;unicast;interleaved=0-1;mode=record
CSeq: 3
User-Agent: znv
=======================
RTSP/1.0 200 OK
Server: EasyDarwin/7.3
Cseq: 3
Cache-Control: no-cache
Session: 132169028622239
Date: Tue, 13 Nov 2018 02:49:48 GMT
Expires: Tue, 13 Nov 2018 02:49:48 GMT
Transport: RTP/AVP/TCP;unicast;mode=record;interleaved=0-1
=======================
RECORD rtsp://10.45.12.141:554/live/0001 RTSP/1.0
Range: npt=0.000-
CSeq: 4
User-Agent:znv
Session: 132169028622239
=======================
RTSP/1.0 200 OK
Server: EasyDarwin/7.3
Cseq: 4
Session: 132169028622239
RTP-Info: url=rtsp://192.168.1.108:554/live.sdp/live.sdp
??RTSP推流熬粗,一般作為流媒體代理搀玖,應用CDN等場景,推流由客戶端發(fā)起驻呐,視頻由客戶端推送給服務器端灌诅,因此流媒體描述需要由客戶端通知到服務器,通過ANNOUNCE方法完成含末,其SDP描述與DESCRIBE一致猜拾,傳輸開始時,由客戶端發(fā)送RECORD方法答渔,然后由客戶端推送rtp流到服務器关带。
6.RTSP錯誤碼
??RTSP的響應內(nèi)容通常包含3位整數(shù)響應碼以及一個原因短語,短語的目的是給出狀態(tài)代碼的簡短文本描述沼撕, 客戶端不需要檢查或顯示原因短語宋雏。 按照響應碼的首位數(shù)字區(qū)別,可以分為以下五個類別:
1xx: 提示- 請求已經(jīng)收到务豺,正在處理中
2xx: 成功- 請求已經(jīng)被成功處理
3xx: 重定向- 必須采取進一步行動才能完成請求
4xx: 客戶端錯誤 - 請求中包含錯誤的參數(shù)或語法導致請求無法被滿足
5xx: 服務器錯誤 - 服務器無法滿足客戶端正確的請求
??當然磨总,RTSP的錯誤碼和RTSP方法是強相關的,某些錯誤可能只會在特定方法中才會觸發(fā)笼沥,詳細錯誤碼信息如下:
錯誤碼 | 原因短語 | 方法 |
---|---|---|
100 | Continue | All |
200 | Success | All |
201 | Created | RECORD |
300 | Multiple Choices | All |
301 | Moved Permanently | All |
302 | Moved Temporarily | All |
303 | See Other | All |
305 | Use Proxy | All |
400 | Bad Request | All |
401 | Unauthorized | All |
402 | Payment Required | All |
403 | Forbidden | All |
404 | Not Found | All |
405 | Method Not Allowed | All |
406 | Not Acceptable | All |
407 | Proxy Authentication Required | All |
408 | Request Timeout | All |
410 | Gone | All |
411 | Length Required | All |
412 | Precondition Failed | DESCRIBE, SETUP |
413 | Request Entity Too Larg | All |
414 | Request-URI Too Long | All |
415 | Unsupported Media Type | All |
451 | Invalid parameter | SETUP |
452 | Illegal Conference Identifier | SETUP |
453 | Not Enough Bandwidth | SETUP |
454 | Session Not Found | All |
455 | Method Not Valid In This State | All |
456 | Header Field Not Valid | All |
457 | Invalid Range | PLAY |
458 | Parameter Is Read-Only | SET_PARAMETER |
459 | Aggregate Operation Not Allowed | All |
460 | Only Aggregate Operation Allowed | All |
461 | Unsupported Transport | All |
462 | Destination Unreachable | All |
500 | Internal Server Error | All |
501 | Not Implemented | All |
502 | Bad Gateway | All |
503 | Service Unavailable | All |
504 | Gateway Timeout | All |
505 | RTSP Version Not Supported | All |
551 | Option not support | All |