RTSP協(xié)議
點擊關注,與你共同成長!

RTSP協(xié)議
簡介
RTSP協(xié)議即實時流協(xié)議(Real TIme Streaming Protocol,RTSP)是一種網絡應用協(xié)議,用以控制流媒體服務器。流數(shù)據(jù)本身的傳輸不是RTSP的任務,大多數(shù)RTSP服務器使用實時傳輸協(xié)議(RTP)和實時傳輸控制協(xié)議(RTCP)結合媒體流傳輸。
RTSP由RealNetworks公司,NetScape公司和哥倫比亞大學開發(fā)。
RTSP與HTTP
雖然RTSP協(xié)議在某些方面與HTTP類似,RTSP定義了控制多媒體播放控制順序。HTTP是無狀態(tài)的,但是RTSP是具有狀態(tài)的,當需要跟蹤會話時使用標識符。RTSP和HTTP一樣使用TCP來維護端到端的鏈接,大多數(shù)RTSP控制消息由客戶端發(fā)送到服務器,一些命令從服務器到客戶端傳播。RTSP協(xié)議使用554端口,http使用80端口。
RTSP消息
RTSP的消息有兩大類,一是請求消息,一個是回應消息,兩種消息的格式不同。
CR(Carriage Return)表示回車
LF(Line Feed)表示換行
請求的消息格式如下:
方法 URI RTSP版本 CR LF
消息頭 CR LF CR LF
消息體 CR LF
其中方法包括OPTIONS回應中所有的命令
響應的格式消息如下:
RTSP版本 狀態(tài)碼 解釋 CR LF
消息頭 CR LF CR LF
消息體 CR LF
狀態(tài)碼
其中RTSP版本一般都是RTSP/1.0,狀態(tài)碼200表示成功,對應的狀態(tài)碼說明如下:
Status-Code?=?"100"?;?Continue
|?"200"?;?OK
|?"201"?;?Created
|?"250"?;?Low?on?Storage?Space
|?"300"?;?Multiple?Choices
|?"301"?;?Moved?Permanently
|?"302"?;?Moved?Temporarily
|?"303"?;?See?Other
|?"304"?;?Not?Modified
|?"305"?;?Use?Proxy
|?"400"?;?Bad?Request
|?"401"?;?Unauthorized
|?"402"?;?Payment?Required
|?"403"?;?Forbidden
|?"404"?;?Not?Found
|?"405"?;?Method?Not?Allowed
|?"406"?;?Not?Acceptable
|?"407"?;?Proxy?Authentication?Required
|?"408"?;?Request?Time-out
|?"410"?;?Gone
|?"411"?;?Length?Required
|?"412"?;?Precondition?Failed
|?"413"?;?Request?Entity?Too?Large
|?"414"?;?Request-URI?Too?Large
|?"415"?;?Unsupported?Media?Type
|?"451"?;?Parameter?Not?Understood
|?"452"?;?Conference?Not?Found
|?"453"?;?Not?Enough?Bandwidth
|?"454"?;?Session?Not?Found
|?"455"?;?Method?Not?Valid?in?This?State
|?"456"?;?Header?Field?Not?Valid?for?Resource
|?"457"?;?Invalid?Range
|?"458"?;?Parameter?Is?Read-Only
|?"459"?;?Aggregate?operation?not?allowed
|?"460"?;?Only?aggregate?operation?allowed
|?"461"?;?Unsupported?transport
|?"462"?;?Destination?unreachable
|?"500"?;?Internal?Server?Error
|?"501"?;?Not?Implemented
|?"502"?;?Bad?Gateway
|?"503"?;?Service?Unavailable
|?"504"?;?Gateway?Time-out
|?"505"?;?RTSP?Version?not?supported
|?"551"?;?Option?not?supported
RTSP中定義的方法
rtsp中定義的方法有:OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, SCALE, GET_PARAMETER ,SET_PARAMETER
下面是RTSP的基本請求
(C代表客戶端,S代表服務端)
OPTIONS請求, OPTIONS請求返回服務器將接受的請求類型
C->S?:?
????OPTIONS?rtsp://example.com/media.mp4?RTSP/1.0
????CSeq:?1
????Require:?implicit-play
????Proxy-Require:?gzipped-messages
S->C:
????RTSP/1.0?200?OK
????CSeq:?1
????Public:?DESCRIBE,?SETUP,?TEARDOWN,?PLAY,?PAUSE
DESCRIBE請求,DESCRIBE請求包括RTSPURL (rstp://)以及可以處理的回復數(shù)據(jù)類型。該回復包括呈現(xiàn)描述,通常以會話描述協(xié)議SDP格式。其中,演示文稿描述列出了使用匯總網址控制的媒體流。在典型的情況下,每個音頻和視頻都有一個媒體流
C->S:?
????DESCRIBE?rtsp://example.com/media.mp4?RTSP/1.0
??????CSeq:?2
S->C:?
????RTSP/1.0?200?OK
??????CSeq:?2
??????Content-Base:?rtsp://example.com/media.mp4
??????Content-Type:?application/sdp
??????Content-Length:?460
??????m=video?0?RTP/AVP?96
??????a=control:streamid=0
??????a=range:npt=0-7.741000
??????a=length:npt=7.741000
??????a=rtpmap:96?MP4V-ES/5544
??????a=mimetype:string;"video/MP4V-ES"
??????a=AvgBitRate:integer;304018
??????a=StreamName:string;"hinted?video?track"
??????m=audio?0?RTP/AVP?97
??????a=control:streamid=1
??????a=range:npt=0-7.712000
??????a=length:npt=7.712000
??????a=rtpmap:97?mpeg4-generic/32000/2
??????a=mimetype:string;"audio/mpeg4-generic"
??????a=AvgBitRate:integer;65790
??????a=StreamName:string;"hinted?audio?track"
SETUP請求,SETUP請求制定如何傳輸媒體流,必須在發(fā)送PLAY請求之前完成。請求包含媒體流URL和傳輸說明符,該說明符通常包括用于接受RTP數(shù)據(jù)的本地端口,另一個用于RTCP數(shù)據(jù),服務器回復通常會確認所選參數(shù),并填寫缺少的部分。必須在發(fā)送聚合播放請求之前,使用SETUP配置每個媒體流。
C->S:?
??????SETUP?rtsp://example.com/media.mp4/streamid=0?RTSP/1.0
??????CSeq:?3
??????Transport:?RTP/AVP;unicast;client_port=8000-8001
S->C:?
??????RTSP/1.0?200?OK
??????CSeq:?3
??????Transport:?RTP/AVP;unicast;client_port=8000-8001;server_port=9000-9001;ssrc=1234ABCD
??????Session:?12345678
PLAY請求:PLAY播放請求,請求播放一個或者所有媒體流,如果媒體流暫停,則在暫停點恢復播放。
C->S:?
??????PLAY?rtsp://example.com/media.mp4?RTSP/1.0
??????CSeq:?4
??????Range:?npt=5-20
??????Session:?12345678
S->C:?
??????RTSP/1.0?200?OK
??????CSeq:?4
??????Session:?12345678
??????RTP-Info:?url=rtsp://example.com/media.mp4/streamid=0;seq=9810092;rtptime=3450012
PAUSE暫停請求,PAUSE暫停請求暫時停止一個或所有媒體流,通過PLAY請求恢復播放。
C->S:?
??????PAUSE?rtsp://example.com/media.mp4?RTSP/1.0
??????CSeq:?5
??????Session:?12345678
S->C:?
??????RTSP/1.0?200?OK
??????CSeq:?5
??????Session:?12345678
RECORD記錄請求,用于記錄一系列媒體數(shù)據(jù),時間戳反映開始時間和結束時間。
C->S:?
??????RECORD?rtsp://example.com/media.mp4?RTSP/1.0
??????CSeq:?6
??????Session:?12345678
S->C:?
??????RTSP/1.0?200?OK
??????CSeq:?6
??????Session:?12345678
ANNOUNCE發(fā)布請求,發(fā)布方法有兩個目的:從客戶端發(fā)送到服務器時,ANNOUNCE將請求URL標識的演示文稿或媒體對象的描述發(fā)布到服務器。當從服務器發(fā)送到客戶端時,ANNOUNCE會實時更新會話描述。
C->S:?
??????ANNOUNCE?rtsp://example.com/media.mp4?RTSP/1.0
??????CSeq:?7
??????Date:?23?Jan?1997?15:35:06?GMT
??????Session:?12345678
??????Content-Type:?application/sdp
??????Content-Length:?332
??????v=0
??????o=mhandley?2890844526?2890845468?IN?IP4?126.16.64.4
??????s=SDP?Seminar
??????i=A?Seminar?on?the?session?description?protocol
??????u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps
??????e=mjh#isi.edu?(Mark?Handley)
??????c=IN?IP4?224.2.17.12/127
??????t=2873397496?2873404696
??????a=recvonly
??????m=audio?3456?RTP/AVP?0
??????m=video?2232?RTP/AVP?31
S->C:?
??????RTSP/1.0?200?OK
??????CSeq:?7
TEARDOWN 停止發(fā)布流請求,該請求用于停止所有媒體流。并釋放服務器上所有與會話相關的數(shù)據(jù)
C->S:?
??????TEARDOWN?rtsp://example.com/media.mp4?RTSP/1.0
??????CSeq:?8
??????Session:?12345678
S->C:?
??????RTSP/1.0?200?OK
??????CSeq:?8
GET_PARAMETER 獲取參數(shù)請求,請求檢索URI中指定的流的參數(shù)。
S->C:?
??????GET_PARAMETER?rtsp://example.com/media.mp4?RTSP/1.0
??????CSeq:?9
??????Content-Type:?text/parameters
??????Session:?12345678
??????Content-Length:?15
??????packets_received
??????jitter
C->S:?
??????RTSP/1.0?200?OK
??????CSeq:?9
??????Content-Length:?46
??????Content-Type:?text/parameters
??????packets_received:?10
??????jitter:?0.3838
SET_PARAMETER 設置參數(shù)請求,請求設置URI指定的流的參數(shù)值
C->S:?
??????SET_PARAMETER?rtsp://example.com/media.mp4?RTSP/1.0
??????CSeq:?10
??????Content-length:?20
??????Content-type:?text/parameters
??????barparam:?barstuff
S->C:?
??????RTSP/1.0?451?Invalid?Parameter
??????CSeq:?10
??????Content-length:?10
??????Content-type:?text/parameters
??????barparam
REDIRECT 重定向請求,該請求通知客戶端必須鏈接到另一個服務器位置上。
S->C:?
??????REDIRECT?rtsp://example.com/media.mp4?RTSP/1.0
??????CSeq:?11
??????Location:?rtsp://bigserver.com:8001
??????Range:?clock=19960213T143205Z-
RTSP的重要字段參數(shù)
Accept: 用于指定客戶端可以接受的媒體描述信息類型。比如: Accept: application/rtsl, application/sdp;level=2 Bandwidth: 用于描述客戶端可用的帶寬值。 CSeq:指定了RTSP請求回應對的序列號,在每個請求或回應中都必須包括這個頭字段。對每個包含一個給定序列號的請求消息,都會有一個相同序列號的回應消息。 Rang:用于指定一個時間范圍,可以使用SMPTE、NTP或clock時間單元。 Session: Session頭字段標識了一個RTSP會話。Session ID 是由服務器在SETUP的回應中選擇的,客戶端一當?shù)玫絊ession ID后,在以后的對Session 的操作請求消息中都要包含Session ID. Transport: Transport頭字段包含客戶端可以接受的轉輸選項列表,包括傳輸協(xié)議,地址端口,TTL等。服務器端也通過這個頭字段返回實際選擇的具體選項。如: Transport: RTP/AVP;multicast;ttl=127;mode="PLAY", RTP/AVP;unicast;client_port=3456-3457;mode="PLAY"
SDP的格式如下
v=
o=???type>?type>?
s=
i=
u=
e=
p=
c=type>?type>?
b=:
t=?
r=??
z=????....
k=
k=:
a=
a=:
m=???
v?=?(協(xié)議版本)
o?=?(所有者/創(chuàng)建者和會話標識符)
s?=?(會話名稱)
i?=?*?(會話信息)
u?=?*?(URI?描述)
e?=?*?(Email?地址)
p?=?*?(電話號碼)
c?=?*?(連接信息)
b?=?*?(帶寬信息)
z?=?*?(時間區(qū)域調整)
k?=?*?(加密密鑰)
a?=?*?(0?個或多個媒體屬性行)
轉自:https://zhuanlan.zhihu.com/p/405784336
以上,便是今天的分享,希望大家喜歡,覺得內容不錯的,歡迎「分享」「贊」或者點擊「在看」支持,謝謝各位。

