·您当前的位置:首页 > 技术教程 > live555技术 >

[RTSP]RTSP常用方法实例

时间:2015-10-19 16:12酷播
实时流协议(RTSP),英文全称为Real Time Streaming Protocol。它是一个用来获取所需要属性(编码方式、分辨率或者帧率等)实时流以及控制实时流的应用层协议。

实时流协议(RTSP),英文全称为Real Time Streaming Protocol。它是一个用来获取所需要属性(编码方式、分辨率或者帧率等)实时流以及控制实时流的应用层协议。

      RTSP是一个基于文本的协议,它与HTTP十分相似。在RTSP中,保留了几乎所有的HTTP符号以及相关定义。所以,RTSP十分利于扩展,并且容易使用程序进行解析。
      RTSP虽然可以用来获取实时流,但是协议中并没有定义传输实时流的方式。它通过与其它的传输机制配合,例如RTP,进行实时流传输。在RTSP中,我们可以在SETUP方法中设置一些参数,以选择是用TCP还是用UDP作为RTP的底层传输协议。

      RTSP通过以会话(Session)的方式描述一个连接的生命周期。会话(Session)通过RTSP客户端使用RTSP的SETUP方法建立,然后 RTSP客户端可以通过PLAY、PAUSE、RECORD等方法(Method)来控制实时流的播放、暂停以及回放等。当不再需要实时流的时 候,RTSP客户端通过TEARDOWN方法(Method)来结束这个会话(Session)。
      RTSP通过与HTTP相似的方式来定义URL,RTSP完整的URL定义如下:
      rtsp URL = ( ”rtsp:” | ”rtspu:” | ”rtsps:” )
      ”//” host [ ”:” port ] [ abs path ]
      rtsp  = 使用可信的底层传输协议,例如TCP
      rtspu = 使用不可信的底层传输协议,例如UDP
      rtsps = 使用可信加密传输协议,例如TCP + TLS
      host  = 服务器的IP地址
      port  = 服务器的端口,该字段在忽略的情况下默认与服务器的554端口进行连接
      abs path = 所申请实时流的地址
      一个简单的示例如下:
      rtsp://media.example.com:554/twister/audiotrack

      让我们来看一下上面URL的abs path = twister/audiotrack。twister表示一个标识(Presentation) ,标识(Presentation)由一个或多个实时流组成。audiotrack表示标识(Presentation)中其中一个实时流的名称。从这个 名称可以看出,我们要取的是一个音频流。如果abs path = twister/videotrack,则表示我们要取的是twister的视频流。有的服务器也支持下面的URL形式:
      rtsp://media.example.com:554/twister
      该URL表示取标识(Presentation)的视频流和音频流。

      与URL相似,RTSP也有与HTTP相似的请求(Request)定义。完整的RTSP请求(Request)定义如下:
      Request = Request-Line
           *( general-header  |
             request-header    | 
             entity-header )   
             CRLF
             [ message-body ]

      接下来让我们来看一下请求(Request)中每一部分的定义。
      Request-Line = Method SP Request-URI SP RTSP-Version CRLF

      Method = OPTIONS | 
      DESCRIBE               | 
      SETUP                     | 
      PLAY                        | 
      TEARDOWN             | 
       …
      SP = 空格
      Request-URI = RTSP服务器的URI
      RTSP-Version = RTSP的版本号
      CRLF = 回车换行
      一个简单的Request-Line的示例如下所示:
      OPTIONS rtsp://192.168.10.115/live.sdp RTSP/1.0
      general-header = Cache-Control | 
      Connection                                   | 
      Date                                             |
      Via
      这个头在我所见应用(VLC)的请求(Request)过程中一般是忽略的。在RTSP服务器的回应(Response)中,一般也只会出现该头的Date字段。示例如下:
      Date: Mon, 25 Oct 2010 11:0:22 GMT

      request-header = Accept |
      Authorization                   | 
      User-Agent                      |
      …
      Accept = RTSP服务器在响应(Response)的时候通过什么方式说明实时流的属性。一般这个填写application/sdp。表示RTSP客户端希望通过会话描述协议(SDP) 来了解流的属性。
      Authorization = 通过BASE64或者DIGEST加密的用户名和密码。
      User-Agent = 代理的名称,这个值随便填写什么都可以。
      示例如下:
      Accept: application/sdp
      User-Agent:Netposa
      响应(Response)定义如下:
      Response = Status-Line |
      *( general-header          | 
      response-header            |
      entity-header) 
      CRLF
      [ message-body ]

      Status-Line = RTSP-Version SP Status-Code SP Reason-Phrase CRLF
      Status-Code = 表示Request的结果。例如200表示成功,400表示失败
      Reason-Phrase = 回复结果的文本说明。例如成功的时候为OK
      示例如下:
      RTSP/1.0 200 OK

      response-header = Public | …
      Public = 表示RTSP服务器所支持的方法
      这个头在实际应用的响应(Response)中一般是很少出现的。只有在OPTIONS方法(Method)的响应中,才会出现。示例如下:
      Public: OPTIONS, DESCRIBE, PLAY, SETUP, TEARDOWN

      entity-header = Content-Base   | 
      Content-Length | 
      Content-Type   |
      …
      Content-Base = [ message-body ]中的信息来源。例如rtsp://192.168.10.115/live.sdp/,表示信息来自于一个文件   Content-Type = [ message-body ] 中的信息使用什么方式组织。例如application/sdp,表示使用SDP组织
      Content-Length = [ message-body ]的长度
      示例如下:
      Content-Base: rtsp://192.168.10.115/live.sdp/
      Content-Type: application/sdp
      Content-Length: 431

      message-body = 附加信息。
      示例如下:
      v=0
      o=RTSP 1288004422 894 IN IP4 0.0.0.0
      s=RTSP server
      c=IN IP4 0.0.0.0
      t=0 0
      a=charset:Shift_JIS
      a=range:npt=0-
      a=control:*
      a=etag:1234567890
      m=video 0 RTP/AVP 26

      在RTSP的请求(Request)和响应(Response)中,必须包含请求和响应序数。该序数标识一对请求和响应。在完成一对请求和响应后,无论请求是成功还是失败,都必须将该序数加一。该序数在RTSP中以CSeq字段表示。

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器