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 个或多个媒体属性行)
### RTSP协议的详细信息和工作原理 RTSP(Real-Time Streaming Protocol)是一种网络控制协议,用于控制多媒体流的传输。它允许客户端向服务器发送请求以播放、暂停或定位媒体流。RTSP本身并不传输数据,而是通过与其他协议(如RTP/RTCP)结合使用来实现媒体流的实际传输[^1]。 #### 1. RTSP协议的基本概念 RTSP的设计目标是为实时媒体提供一个灵活的控制机制。它类似于HTTP协议,但专门为流媒体应用设计。RTSP支持点播、直播以及交互式视频会议等多种场景。客户端通过RTSP与服务器通信,发起对媒体资源的操作请求,例如播放、暂停、快进等。 - **状态模型**:RTSP定义了多个状态,包括初始状态(Initial)、准备状态(Ready)、播放状态(Playing)等。这些状态的变化由客户端发出的命令驱动。 - **方法**:RTSP定义了一系列方法,例如`SETUP`、`PLAY`、`PAUSE`、`TEARDOWN`等,用于控制媒体流的行为[^2]。 #### 2. RTSP的工作流程 RTSP的工作流程可以分为以下几个阶段: - **描述阶段**:客户端通过`DESCRIBE`方法获取媒体资源的描述信息,通常以SDP(Session Description Protocol)格式返回。这一步提供了媒体类型、编码方式和其他相关信息。 - **设置阶段**:客户端使用`SETUP`方法为每个媒体流建立传输参数。此步骤确定了传输协议(如RTP/RTCP)以及传输模式(如UDP或TCP)。 - **播放阶段**:客户端通过`PLAY`方法启动媒体流的传输。服务器根据之前协商好的参数开始发送媒体数据。 - **控制阶段**:在播放过程中,客户端可以随时发送`PAUSE`、`SEEK`等命令来调整播放行为。 - **结束阶段**:当播放完成或用户停止播放时,客户端发送`TEARDOWN`方法终止会话[^3]。 #### 3. RTSP与RTP的关系 RTSP并不直接负责媒体数据的传输,而是通过RTP(Real-time Transport Protocol)来完成这一任务。RTP是一个针对IP网络中多媒体数据传输的标准协议,能够提供时间戳、序列号等功能,确保媒体流的有序性和同步性。RTCP(RTP Control Protocol)则作为RTP的补充,用于监控服务质量并传递会话中的控制信息[^4]。 ```python # 示例代码:简单的RTSP客户端请求模拟 import socket def send_rtsp_request(ip, port): request = "DESCRIBE rtsp://{}:{}/stream RTSP/1.0\r\n".format(ip, port) request += "CSeq: 1\r\n" request += "User-Agent: Python-RTSP-Client\r\n" request += "Accept: application/sdp\r\n\r\n" sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((ip, port)) sock.sendall(request.encode()) response = sock.recv(1024).decode() print("RTSP Response:\n", response) send_rtsp_request("192.168.1.1", 554) ``` #### 4. RTSP的应用场景 RTSP广泛应用于以下领域: - **流媒体播放**:支持在线视频点播(VOD)和直播流媒体服务。 - **视频监控**:许多IP摄像头使用RTSP协议进行视频流的传输。 - **视频会议**:RTSP可用于协调多方视频会议中的媒体流传输[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值