RTSP协议详解

定义:

RTSP[3]协议以客户服务器方式工作,它是一个多媒体播放控制协议,用来使用户在播放从因特网下载的实时数据时能够进行控制,如:暂停/继续、后退、前进等。因此 RTSP 又称为“因特网录像机遥控协议”。

客户端和服务端rtsp实现过程:

    1.客户端发起RTSP OPTION请求,目的是得到服务器提供的方法。RTSP提供的方法一般包括OPTIONS、DESCRIBE、SETUP、TEARDOWN、PlAY、PAUSE、SCALE、GET_PARAMETER。
    2.服务器对RTSP OPTION回应,服务器提供什么方法就回复什么方法。下面,我们只对DESCRIBE、SETUP、TEARDOWN、PLAY、PAUSE方法做了具体解释。
    3.客户端发起RTSP DESCRIBE请求,服务器收到的信息主要有媒体的名字,解码类型,视频分辨率等描述,目的是为了从服务器那里得到会话描述信息。
    4.客户端对RTSP DESCRIBE响应,发送必要的媒体参数,在传输H.264文件时,主要包括SPS/PPS、媒体名、传输协议等信息。
    5.客户端发起RTSP SETUP请求,目的是请求会话建立并准备传输。请求信息主要包括传输协议和客户端端口号。
    6.服务器对RTSP SETUP响应,目的是请求播放视频流。
    7.客户端发出了RTSP PLAY请求,目的是请求播放视频流。
    8.服务器对RTSP PLAY响应,响应的信息包括会话标识符,RTP包的序列号,时间戳。此时服务器对H264视频流封装打包进行传输。
    9.客户端发出RTSP TEARDOWN请求,目的是关闭连接,终止传输。
    10.服务器关闭连接,停止传输。

模拟过程:

客户端->>服务器:OPTION
服务器->>客户端: DESCRIBE, SETUP, TEARDOWN, PLAY,PAUSE,OPTIONS等
客户端->>服务器:DESCRIBE
服务器->>客户端:200 OK (SDP)
客户端->>服务器:PLAY
服务器->>客户端: (RTP包)

RTSP协议与HTTP协议的区别:

    1.RTSP引入了几种新的方法,比如DESCRIBE、PLAY、SETUP等,并且有不同的协议标识符,RTSP为rtsp1.0,HTTP为http1.1;
    2.HTTP是无状态的协议,而RTSP为每个会话保持状态;
    3.RTSP协议的客户端和服务器端都可以发送Request请求,而在HTTPF协议中,只有客户端能发送Request请求。
    4.在RTSP协议中,载荷数据一般是通过带外方式来传送的(除了交织的情况),及通过RTP协议在不同的通道中来传送载荷数据。而HTTP协议的
    载荷数据都是通过带内方式传送,比如请求的网页数据是在回应的消息体中携带的。
    5.使用ISO 10646(UTF-8)而不是ISO 8859-1,以配合当前HTML的国际化。
    6.RTSP使用URL请求时包含绝对URL、而由于历史原因造成的向后兼容性问题,HTTP/1.1只在请求中包含绝对路径,把主机名放入单独的标题域中。

RTSP的方法:

rtsp中定义的方法有:OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, SCALE, GET_PARAMETER ,SET_PARAMETER ,下面就说常用的:

1.OPTION —目的是得到服务器提供的可用方法:

    客服端发送的格式:
    OPTIONS rtsp://192.168.20.136:5000/xxx666 RTSP/1.0
    CSeq: 1         //每个消息都有序号来标记,第一个包通常是option请求消息
    User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)

    服务器的回应信息包括提供的一些方法,例如:
    RTSP/1.0 200 OK
    Server: UServer 0.9.7_rc1
    Cseq: 1         //每个回应消息的cseq数值和请求消息的cseq相对应
    Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, SCALE, GET_PARAMETER //服务器提供的可用的方法

2.DESCRIBE —C向S发起DESCRIBE请求,为了得到会话描述信息(SDP):

    客服端发送的格式:
    DESCRIBE rtsp://192.168.20.136:5000/xxx666 RTSP/1.0
    CSeq: 2
    token:
    Accept: application/sdp
    User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)

    服务器回应一些对此会话的描述信息(sdp):
    RTSP/1.0 200 OK
    Server: UServer 0.9.7_rc1
    Cseq: 2
    x-prev-url: rtsp://192.168.20.136:5000
    x-next-url: rtsp://192.168.20.136:5000
    x-Accept-Retransmit: our-retransmit
    x-Accept-Dynamic-Rate: 1
    Cache-Control: must-revalidate
    Last-Modified: Fri, 10 Nov 2006 12:34:38 GMT
    Date: Fri, 10 Nov 2006 12:34:38 GMT
    Expires: Fri, 10 Nov 2006 12:34:38 GMT
    Content-Base: rtsp://192.168.20.136:5000/xxx666/
    Content-Length: 344
    Content-Type: application/sdp
    v=0        //以下都是sdp信息
    o=OnewaveUServerNG 1451516402 1025358037 IN IP4 192.168.20.136
    s=/xxx666
    u=http:///
    e=admin@
    c=IN IP4 0.0.0.0
    t=0 0
    a=isma-compliance:1,1.0,1
    a=range:npt=0-
    m=video 0 RTP/AVP 96    //m表示媒体描述,下面是对会话中视频通道的媒体描述
    a=rtpmap:96 MP4V-ES/90000
    a=fmtp:96 profile-level-id=245;config=000001B0F5000001B509000001000000012000C888B0E0E0FA62D089028307
    a=control:trackID=0//trackID=0表示视频流用的是通道0

3.SETUP —客户端提醒服务器建立会话,并确定传输模式:

    客服端发送的格式:
    SETUP rtsp://192.168.20.136:5000/xxx666/trackID=0 RTSP/1.0    
    CSeq: 3
    Transport: RTP/AVP/TCP;unicast;interleaved=0-1      
    User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)
    //uri中带有trackID=0,表示对该通道进行设置。Transport参数设置了传输模式,包的结构。接下来的数据包头部第二个字节位置就是interleaved,它的值是每个通道都不同的,trackID=0的interleaved值有两个0或1,0表示rtp包,1表示rtcp包,接受端根据interleaved的值来区别是哪种数据包。

    服务器回应信息:
    RTSP/1.0 200 OK
    Server: UServer 0.9.7_rc1
    Cseq: 3
    Session: 6310936469860791894     //服务器回应的会话标识符
    Cache-Control: no-cache
    Transport: RTP/AVP/TCP;unicast;interleaved=0-1;ssrc=6B8B4567

4.PLAY —客户端发送播放请求:

    客服端发送的格式:
    PLAY rtsp://192.168.20.136:5000/xxx666 RTSP/1.0
    CSeq: 4
    Session: 6310936469860791894
    Range: npt=0.000-      //设置播放时间的范围
    User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)

    服务器回应信息:
    RTSP/1.0 200 OK
    Server: UServer 0.9.7_rc1
    Cseq: 4
    Session: 6310936469860791894
    Range: npt=0.000000-
    RTP-Info: url=trackID=0;seq=17040;rtptime=1467265309     
    //seq和rtptime都是rtp包中的信息

    5.TEARDOWN ---客户端发起关闭请求:

    客服端发送的格式:
    TEARDOWN rtsp://192.168.20.136:5000/xxx666 RTSP/1.0
    CSeq: 5
    Session: 6310936469860791894
    User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)

    服务器回应:
    RTSP/1.0 200 OK
    Server: UServer 0.9.7_rc1
    Cseq: 5
    Session: 6310936469860791894
    Connection: Close
    以上方法都是交互过程中最为常用的,其它还有一些重要的方法如get/set_parameter,pause,redirect等等

    ps:
    sdp的格式
    v=<version>
    o=<username> <session id> <version> <network type> <address type> <address>
    s=<session name>
    i=<session description>
    u=<URI>
    e=<email address>
    p=<phone number>
    c=<network type> <address type> <connection address>
    b=<modifier>:<bandwidth-value>
    t=<start time> <stop time>
    r=<repeat interval> <active duration> <list of offsets from start-time>
    z=<adjustment time> <offset> <adjustment time> <offset> ....
    k=<method>
    k=<method>:<encryption key>
    a=<attribute>
    a=<attribute>:<value>
    m=<media> <port> <transport> <fmt list>
    v = (协议版本)
    o = (所有者/创建者和会话标识符)
    s = (会话名称)
    i = * (会话信息)
    u = * (URI 描述)
    e = * (Email 地址)
    p = * (电话号码)
    c = * (连接信息)
    b = * (带宽信息)
    z = * (时间区域调整)
    k = * (加密密钥)
    a = * (0 个或多个会话属性行)
    时间描述:
    t = (会话活动时间)
    r = * (0或多次重复次数)
    媒体描述:
    m = (媒体名称和传输地址)
    i = * (媒体标题)
    c = * (连接信息 — 如果包含在会话层则该字段可选)
    b = * (带宽信息)
    k = * (加密密钥)
    a = * (0 个或多个媒体属性行)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章