RTSP协议详解

本文详细介绍了实时流传输协议(RTSP)的工作原理及其在多媒体数据传输中的应用。RTSP是一种应用层协议,位于RTP和RTCP之上,支持音频与视频的受控点播。文章还对比了RTSP与HTTP的不同之处,并阐述了RTSP的具体实现过程。

参考资料地址

http://blog.sina.com.cn/s/blog_450e44880100mfiu.html

http://www.mikewootc.com/wiki/net/protocol/rtsp.html

 

RTSP,实时流传输协议,是TCP/UDP协议体系中的一个应用层协议,由哥伦比亚大学, 网景和RealNetworks公司提交的IETF RFC标准.该协议定义了一对多应用程序如何有效地通过IP网络传输多媒体数据。RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或者RTP完成数据传输。

流媒体服务协议栈

RTSP提供了一个可扩展框架,使实时数据,如音频与视频的受控点播成为可能,数据源包括现场数据与存储在剪辑中数据。该协议目的在于控制多个数据发送链接,Wie选择发送通道。如UDP 组播UDP与TCP,提供途径,并为选择基于RTP上发送机制提供方法。

它的语法和运作跟HTTP 1.1类似, 但并不特别强调时间同步, 所以比较能容忍网络延迟.

HTTP与RTSP相比, * HTTP传送HTML. HTTP请求由客户机发出, 服务器作出响应 * RTSP传送的是多媒体数据. 使用RTSP时, 客户机和服务器都可以发出请求, 即RTSP可以是双向的.

RTSP是用来控制声音或影像的多媒体串流协议,并允许同时多个串流需求控制,传输时所用的网络通信协议并不在其定义的范围内,服务器段可以自动选择使用TCP或UDP来传送串流内容。

而前面提到的允许同时多个串流需求控制,除了可以减低服务器端的网络用量,更能支持多方视讯会议,因为与HTTP 1.1的运作方式相似,所以代理服务器的快选功能,同样适用于RTSP,并因RTSP具有重新导向功能,可视实际负载情况来转换提供服务的服务器,以避免过大的负载集中在同一服务器而造成延迟。

该协议用于CS模型,是一个基于文本的协议,用于在客户端和服务器段建立和协商实时流会话。

实时流协议建立并控制一个或几个时间同步的连续流媒体,尽管连续媒体流与控制流交换是可可能的。通常它本省并不发送连续流,换言之,RTSP充当多媒体服务器的网络远程控制,RTSP链接没有绑定到传输层链接,如TCP,在RTSP连接期间,RTSP用户可以打开或关闭多个服务器的可传输连接已发出RTSP请求。此外,可以使用无连接传输协议,如UDP,RTSP流控制的流可能用到RTP,但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请求,服务器收到的信息主要有媒体的名字,解码类型,视频分辨率等描述,目的是为了从服务器那里得到会话描述信息(SDP)。

(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)服务器关闭连接,停止传输。

3. SETUP请求消息处理过程

        RTSPClientSession类用于处理单独的客户会话。其类成员函数handleCmd_SETUP()处理客户端的SETUP请求。调用parseTransportHeader()对SETUP请求的传输头解析,调用子会话(这里具体实现类为OnDemandServerMediaSubsession)的getStreamParameters()函数获取流媒体发送传输参数。将这些参数组装成响应消息,返回给客户端。

        获取发送传输参数的过程:调用子会话(具体实现类MPEG1or2DemuxedServerMediaSubsession)的createNewStreamSource(...)创建MPEG1or2VideoStreamFramer,选择发送传输参数,并调用子会话的createNewRTPSink(...)创建MPEG1or2VideoRTPSink。同时将这些信息保存在StreamState类对象中,用于记录流的状态。

        客户端发送两个SETUP请求,分别用于建立音频和视频的RTP接收。

 

 

 

 

4. PLAY请求消息处理过程

      RTSPClientSession类成员函数handleCmd_PLAY()处理客户端的播放请求。首先调用子会话的startStream(),内部调用MediaSink::startPlaying(...),然后是MultiFramedRTPSink::continuePlaying(),接着调用MultiFramedRTPSink::buildAndSendPacket(...)。buildAndSendPacke内部先设置RTP包头,内部再调用MultiFramedRTPSink::packFrame()填充编码帧数据。

      packFrame内部通过FramedSource::getNextFrame(), 接着MPEGVideoStreamFramer::doGetNextFrame(),再接着经过MPEGVideoStreamFramer::continueReadProcessing(), FramedSource::afterGetting(...), MultiFramedRTPSink::afterGettingFrame(...), MultiFramedRTPSink::afterGettingFrame1(...)等一系列繁琐调用,最后到了MultiFramedRTPSink::sendPacketIfNecessary(), 这里才真正发送RTP数据包。然后是计算下一个数据包发送时间,把MultiFramedRTPSink::sendNext(...)函数句柄传给任务调度器,作为一个延时事件调度。在主循环中,当MultiFramedRTPSink::sendNext()被调度时,又开始调用MultiFramedRTPSink::buildAndSendPacket(...)开始新的发送数据过程,这样客户端可以源源不断的收到服务器传来的RTP包了。

发送RTP数据包的间隔计算方法:

        Update the time at which the next packet should be sent, based on the duration of the frame that we just packed into it.

 

转载于:https://www.cnblogs.com/hun2014/p/5749317.html

### 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、付费专栏及课程。

余额充值