RTSP协议
参考
本人也是初学,主要是为了初步了解该协议,便于后续开发中使用。
RTSP
RTSP服务端源码
B站新手向
函数
strdup()
概念
RTSP
RTSP协议以客户服务器方式工作,,如:暂停/继续、后退、前进等。它是一个多媒体播放控制协议,用来使用户在播放从因特网下载的实时数据时能够进行控制, 因此 RTSP 又称为“因特网录像机遥控协议”。
应用层协议,体系结构位于RTP/RTCP之上,本身不是用于传输流媒体数
据,其本身是一个实时控制交互协议(负责服务端和客户端的交互请求)。
RTP
负责对流媒体数据进行封包并实现媒体流的实时传输,即它按照RPT数据包格式来封装流媒体数据,并利用与它绑定的协议进行数据包的传输。
RTP在端口号1025到65535之间选择一个未使用的偶数UDP端口号,而在同一次会话中的RTCP则使用下一个基数UDP端口号。RTP默认端口号5004,所以RTCP端口号默认为5005。
RTCP
RTCP也是用UDP来传送的,但RTCP封装的仅仅是一些控制信息,因而分组很短,所以可以将多个RTCP分组封装在一个UDP包中
工作原理
RTSP负责定义具体的控制信息、操作方法、状态码,以及描述与RTP之间的交互操作。RTSP媒体服务协议框架如下:
一次基本的RTSP操作过程:
- 首先,客户端连接到流服务器并发送一个RTSP描述命令(DESCRIBE)。
- 流服务器通过一个SDP描述来进行反馈,反馈信息包括流数量、媒体类型等信息。
- 客户端再分析该SDP描述,并为会话中的每一个流发送一个RTSP建立命令(SETUP),RTSP建立命令告诉服务器客户端用于接收媒体数据的端口。流媒体连接建立完成后,
- 客户端发送一个播放命令(PLAY),服务器就开始在UDP上传送媒体流(RTP包)到客户端。在播放过程中客户端还可以向服务器发送命令来控制快进、快退和暂停等。
- 最后,客户端可发送一个终止命令(TERADOWN)来结束流媒体会话
RTSP客户都请求格式
method url vesion\r\n
CSeq: x\r\n
xxx\r\n
…
\r\n
- method:方法,表明这次请求的方法,rtsp定义了很多方法,稍后介绍
- url:格式一般为rtsp://ip:port/session,ip表主机ip,port表端口好,如果不写那么就是默认端口,rtsp的默认端口为554,session表明请求哪一个会话
- version:表示rtsp的版本,现在为RTSP/1.0
- CSeq:序列号,每个RTSP请求和响应都对应一个序列号,序列号是递增的
RTSP服务端响应格式
RTSP服务端的响应格式
vesion 200 OK\r\n
CSeq: x\r\n
xxx\r\n
…
\r\n
- version:表示rtsp的版本,现在为RTSP/1.0
- CSeq:序列号,这个必须与对应请求的序列号相同
RTSP方法
RTSP重要头参数
RTSP重要头字段参数
Accept: 用于指定客户端可以接受的媒体描述信息类型。比如: Accept: application/rtsl, application/sdp;level=2
Bandwidth: 用于描述客户端可用的带宽值。
CSeq:指定了RTSP请求回应对的序列号,在每个请求或回应中都必须包括这个头字段。对每个包含一个给定序列号的请求消息,都会有一个相同序列号的回应消息。
Rang:用于指定一个时间范围,可以使用SMPTE、NTP或clock时间单元。
Session: Session头字段标识了一个RTSP会话。Session ID 是由服务器在SETUP的回应中选择的,客户端一当得到Session ID后,在以后的对Session 的操作请求消息中都要包含Session ID.
Transport: Transport头字段包含客户端可以接受的转输选项列表,包括传输协议,地址端口,TTL等。服务器端也通过这个头字段返回实际选择的具体选项。如: Transport: RTP/AVP;multicast;ttl=127;mode=“PLAY”, RTP/AVP;unicast;client_port=3456-3457;mode=“PLAY”
RTSP请求过程
源码分析
还在看,持续更新