网络流媒体协议之——RTSP协议

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

网络流媒体协议之——RTSP协议

文章插图
 
客户端要播放RTSP媒体流,就需要知道媒体源的URL,RTSP的URL格式一般如下:
rtsp://host[:port]/[abs_path]/content_name
  • host: 有效的域名或IP地址;
  • port: 端口号,缺省为554,若为缺省可不填写,否则必须写明 。
例如,一个完整的RTSP URL可写为:
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_streamRTSP报文
对RTSP协议的使用有了一个大概的了解之后,我们来看一下RTSP报文结构 。
RTSP是一种基于文本的协议,用CRLF(回车换行)作为每一行的结束符,其好处是,在使用过程中可以方便地增加自定义参数,也方便抓包分析 。从消息传送方向上来分,RTSP的报文有两类:请求报文和响应报文 。请求报文是指从客户端向服务器发送的请求(也有少量从服务器向客户端发送的请求),响应报文是指从服务器到客户端的回应 。
RTSP请求报文的常用方法与作用:
网络流媒体协议之——RTSP协议

文章插图
 
一次基本的RTSP交互过程如下,C表示客户端,S表示服务端 。
网络流媒体协议之——RTSP协议

文章插图
 
首先客户端连接到流媒体服务器并发送一个RTSP描述请求(DESCRIBE request),服务器通过一个SDP(Session DescriptionProtocol)描述来进行反馈(DESCRIBEresponse),反馈信息包括流数量、媒体类型等信息 。客户端分析该SDP描述,并为会话中的每一个流发送一个RTSP连接建立请求(SETUPrequest),该命令会告诉服务器用于接收媒体数据的端口,服务器响应该请求(SETUP response)并建立连接之后,就开始传送媒体流(RTP包)到客户端 。在播放过程中客户端还可以向服务器发送请求来控制快进、快退和暂停等 。最后,客户端可发送一个终止请求(TEARDOWN request)来结束流媒体会话 。
下面我们通过具体的消息实例来进一步了解一下RTSP的工作过程:
  • 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
客户端向服务器请求媒体资源描述,服务器端通过SDP(Session Description Protocol)格式回应客户端的请求 。资源描述中会列出所请求媒体的媒体流及其相关信息,典型情况下,音频和视频分别作为一个媒体流传输 。实例如下:
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: 460m=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请求确定了具体的媒体流如何传输,该请求必须在PLAY请求之前发送 。SETUP请求包含媒体流的URL和客户端用于接收RTP数据(audio or video)的端口以及接收RTCP数据(meta information)的端口 。服务器端的回复通常包含客户端请求参数的确认,并会补充缺失的部分,比如服务器选择的发送端口 。每一个媒体流在发送PLAY请求之前,都要首先通过SETUP请求来进行相应的配置 。


推荐阅读