RTSP(Real-TimeStreamProtocol)协议是一个基于文本的多媒体播放控制协议,属于应用层。RTSP以客户端方式工作,对流媒体提供播放、暂停、后退、前进等操作。该标准由IETF指定,对应的协议是RFC2326。
RTSP作为一个应用层协议,提供了一个可供扩展的框架,使得流媒体的受控和点播变得可能,它主要用来控制具有实时特性的数据的发送,但其本身并不用于传送流媒体数据,而必须依赖下层传输协议(如RTP/RTCP)所提供的服务来完成流媒体数据的传送。RTSP负责定义具体的控制信息、操作方法、状态码,以及描述与RTP之间的交互操作。RTSP媒体服务协议框架如下:

客户端要播放RTSP媒体流,就需要知道媒体源的URL,RTSP的URL格式一般如下:
rtsp://host[:port]/[abs_path]/content_name
host:有效的域名或IP地址;
port:端口号,缺省为554,若为缺省可不填写,否则必须写明。
例如,一个完整的RTSPURL可写为:
rtsp://192.168.1.67:554/test
又如目前市面上常用的海康网络摄像头的RTSP地址格式为:
rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream
示例:
rtsp://admin:12345@192.168.1.67:554/h264/ch1/main/av_streamrtsp://admin:12345@192.168.1.67/mpeg4/ch1/sub/av_stream
RTSP报文
对RTSP协议的使用有了一个大概的了解之后,我们来看一下RTSP报文结构。
RTSP是一种基于文本的协议,用CRLF(回车换行)作为每一行的结束符,其好处是,在使用过程中可以方便地增加自定义参数,也方便抓包分析。从消息传送方向上来分,RTSP的报文有两类:请求报文和响应报文。请求报文是指从客户端向服务器发送的请求(也有少量从服务器向客户端发送的请求),响应报文是指从服务器到客户端的回应。
RTSP请求报文的常用方法与作用:

一次基本的RTSP交互过程如下,C表示客户端,S表示服务端。

下面我们通过具体的消息实例来进一步了解一下RTSP的工作过程:
OPTIONS
OPTIONS请求是客户端向服务器询问可用的方法,请求和回复实例如下:
C-S:OPTIONSrtsp:////1.0CSeq:1Require:implicit-playProxy-Require:gzipped-messagesS-C:RTSP/1.0200OKCSeq:1Public:DESCRIBE,SETUP,TEARDOWN,PLAY,PAUSE
DESCRIBE
C-S:DESCRIBErtsp:////1.0CSeq:2S-C:RTSP/1.0200OKCSeq:2Content-Base:rtsp:///:application/sdpContent-Length:460m=video0RTP/AVP96a=control:streamid=0a=range:npt=0-7.741000a=length:npt=7.741000a=rtpmap:96MP4V-ES/5544a=mimetype:string;"video/MP4V-ES"a=AvgBitRate:integer;304018a=StreamName:string;"hintedvideotrack"m=audio0RTP/AVP97a=control:streamid=1a=range:npt=0-7.712000a=length:npt=7.712000a=rtpmap:97mpeg4-generic/32000/2a=mimetype:string;"audio/mpeg4-generic"a=AvgBitRate:integer;65790a=StreamName:string;"hintedaudiotrack"
SETUP
SETUP请求确定了具体的媒体流如何传输,该请求必须在PLAY请求之前发送。SETUP请求包含媒体流的URL和客户端用于接收RTP数据(audioorvideo)的端口以及接收RTCP数据(metainformation)的端口。服务器端的回复通常包含客户端请求参数的确认,并会补充缺失的部分,比如服务器选择的发送端口。每一个媒体流在发送PLAY请求之前,都要首先通过SETUP请求来进行相应的配置。
C-S:SETUPrtsp:////streamid=0RTSP/1.0CSeq:3Transport:RTP/AVP;unicast;client_port=8000-8001S-C:RTSP/1.0200OKCSeq:3Transport:RTP/AVP;unicast;client_port=8000-8001;server_port=9000-9001;ssrc=1234ABCDSession:12345678
PLAY
客户端通过PLAY请求来播放一个或全部媒体流,PLAY请求可以发送一次或多次,发送一次时,URL为包含所有媒体流的地址,发送多次时,每一次请求携带的URL只包含一个相应的媒体流。PLAY请求中可指定播放的range,若未指定,则从媒体流的开始播放到结束,如果媒体流在播放过程中被暂停,则可在暂停处重新启动流的播放。
C-S:PLAYrtsp:////1.0CSeq:4Range:npt=5-20Session:12345678S-C:RTSP/1.0200OKCSeq:4Session:12345678RTP-Info:url=rtsp:////streamid=0;seq=9810092;rtptime=3450012
PAUSE
PAUSE请求会暂停一个或所有媒体流,后续可通过PLAY请求恢复播放。PAUSE请求中携带所请求媒体流的URL,若参数range存在,则指明在何处暂停,若该参数不存在,则暂停立即生效,且暂停时长不确定。
C-S:PAUSErtsp:////1.0CSeq:5Session:12345678S-C:RTSP/1.0200OKCSeq:5Session:12345678
TEARDOWN
结束会话请求,该请求会停止所有媒体流,并释放服务器上的相关会话数据。
C-S:TEARDOWNrtsp:////1.0CSeq:8Session:12345678S-C:RTSP/1.0200OKCSeq:8
GET_PARAMETER
检索指定URI数据中的参数值。不携带消息体的GET_PARAMETER可用来测试服务器端或客户端是否可通(类似ping的功能)。
S-C:GET_PARAMETERrtsp:////1.0CSeq:9Content-Type:text/parametersSession:12345678Content-Length:15packets_receivedjitterC-S:RTSP/1.0200OKCSeq:9Content-Length:46Content-Type:text/parameterspackets_received:10jitter:0.3838
SET_PARAMETER
用于设置指定媒体流的参数。
C-S:SET_PARAMETERrtsp:////1.0CSeq:10Content-length:20Content-type:text/parametersbarparam:barstuffS-C:RTSP/1.0451InvalidParameterCSeq:10Content-length:10Content-type:text/parametersbarparam
REDIRECT
重定向请求,用于服务器通知客户端新的服务地址,客户端需要向这个新地址重新发起请求。重定向请求中可能包含Range参数,指明重定向生效的时间。客户端若需向新服务地址发起请求,必须先teardown当前会话,再向指定的新主机setup一个新的会话。
S-C:REDIRECTrtsp:////1.0CSeq:11Location:rtsp://:8001Range:clock=19960213T143205
ANNOUNCE
ANNOUNCE请求有两个用途:(1)C-S:客户端向服务器端发布URL指定的媒体信息描述;(2)S-C:实时更新对话描述。若媒体表示中新增了一个媒体流,例如在直播过程中,则整个媒体表示的description都要被重新发送,而不是只发送新增部分。
C-S:ANNOUNCErtsp:////1.0CSeq:7Date:23Jan199715:35:06GMTSession:12345678Content-Type:application/sdpContent-Length:332v=0o==SDPSeminari=ASeminaronthesessiondescriptionprotocolu=(MarkHandley)c=/127t=28733974962873404696a=recvonlym=audio3456RTP/AVP0m=video2232RTP/AVP31S-C:RTSP/1.0200OKCSeq:7
RECORD
请求录制指定范围的媒体数据,请求中可指定录制的起止时间戳;若未指定时间范围,则使用presentationdescription中的开始和结束时间,这种情况下,如果会话已开始,则立即启动录制操作。
C-S:RECORDrtsp:////1.0CSeq:6Session:12345678S-C:RTSP/1.0200OKCSeq:6Session:12345678
OPTIONSrtsp://10.3.8.202:554RTSP/1.0CSeq:2User-Agent:LibVLC/2.2.8()RTSP/1.0200OKCSeq:2Public:OPTIONS,DESCRIBE,PLAY,PAUSE,SETUP,TEARDOWN,SET_PARAMETER,GET_PARAMETERDate:Mon,Jan29201816:56:47GMTDESCRIBErtsp://10.3.8.202:554RTSP/1.0CSeq:3User-Agent:LibVLC/2.2.8()Accept:application/sdpRTSP/1.0401UnauthorizedCSeq:3WWW-Authenticate:Digestrealm="IPCamera(10789)",nonce="6b9a455aec675b8db81a9ceb802e4eb8",stale="FALSE"Date:Mon,Jan29201816:56:47GMTDESCRIBErtsp://10.3.8.202:554RTSP/1.0CSeq:4Authorization:Digestusername="admin",realm="IPCamera(10789)",nonce="6b9a455aec675b8db81a9ceb802e4eb8",uri="rtsp://10.3.8.202:554",response="3fc4b15d7a923fc36f32897e3cee69aa"User-Agent:LibVLC/2.2.8()Accept:application/sdpRTSP/1.0200OKCSeq:4Content-Type:application/sdpContent-Base:rtsp://10.3.8.202:554/Content-Length:551v=0o=-2743227432=MediaPresentatione=NONEb=AS:5050t=00a=control:rtsp://10.3.8.202:554/m=video0RTP/AVP96c==AS:5000a=recvonlya=x-dimensions:2048,1536a=control:rtsp://10.3.8.202:554/trackID=1a=rtpmap:96H264/90000a=fmtp:96profile-level-id=420029;packetization-mode=1;sprop-parameter-sets=Z00AMp2oCAAwabgICAoAAAMAAgAAAwBlCA==,aO48gA==a=Media_header:MEDIAINFO=494D4B4801020000000000000000000000000000000000000000000000000000000000;a=appversion:1.0SETUPrtsp://10.3.8.202:554/trackID=1RTSP/1.0CSeq:5Authorization:Digestusername="admin",realm="IPCamera(10789)",nonce="6b9a455aec675b8db81a9ceb802e4eb8",uri="rtsp://10.3.8.202:554/",response="ddfbf3e268ae954979407369a104a620"User-Agent:LibVLC/2.2.8()Transport:RTP/AVP;unicast;client_port=57844-57845RTSP/1.0200OKCSeq:5Session:1273222592;timeout=60Transport:RTP/AVP;unicast;client_port=57844-57845;server_port=8218-8219;ssrc=5181c73a;mode="play"Date:Mon,Jan29201816:56:47GMTPLAYrtsp://10.3.8.202:554/RTSP/1.0CSeq:6Authorization:Digestusername="admin",realm="IPCamera(10789)",nonce="6b9a455aec675b8db81a9ceb802e4eb8",uri="rtsp://10.3.8.202:554/",response="b5abf0b230de4b49d6c6d42569f88e91"User-Agent:LibVLC/2.2.8()Session:1273222592Range:npt=0.000-RTSP/1.0200OKCSeq:6Session:1273222592RTP-Info:url=rtsp://10.3.8.202:554/trackID=1;seq=65373;rtptime=3566398668Date:Mon,Jan29201816:56:47GMTGET_PARAMETERrtsp://10.3.8.202:554/RTSP/1.0CSeq:7Authorization:Digestusername="admin",realm="IPCamera(10789)",nonce="6b9a455aec675b8db81a9ceb802e4eb8",uri="rtsp://10.3.8.202:554/",response="bb2309dcd083b25991c13e165673687b"User-Agent:LibVLC/2.2.8()Session:1273222592RTSP/1.0200OKCSeq:7Date:Mon,Jan29201816:56:47GMTTEARDOWNrtsp://10.3.8.202:554/RTSP/1.0CSeq:8Authorization:Digestusername="admin",realm="IPCamera(10789)",nonce="6b9a455aec675b8db81a9ceb802e4eb8",uri="rtsp://10.3.8.202:554/",response="e08a15c27d3daac14fd4b4bcab424a5e"User-Agent:LibVLC/2.2.8()Session:1273222592RTSP/1.0200OKCSeq:8Session:1273222592Date:Mon,Jan29201816:57:03GMT





