前言
实时流协议(Real Time Streaming Protocol, RTSP)是一种网络控制协议,主要用于控制多媒体流的传输。它允许客户端向服务器请求音视频流,并控制这些流的播放、暂停等操作。
一、RTSP的组成
RTSP协议基于RTP(Real-time Transport Protocol)和RTCP(RTP Control Protocol)。其中,RTP负责传输媒体数据,而RTCP则用于提供传输质量反馈和其他控制信息。
- RTSP使用RTP来传输媒体数据。
- RTCP用于交互控制命令。
- 客户端通常先通过RTCP进行信息交互,再使用RTP进行媒体数据传输。
二、RTCP的交互过程
1. 客户端的请求格式
RTSP客户端请求的基本格式如下:
- method:表示请求的方法,如OPTIONS、DESCRIBE等。
- URL:请求的目标地址,通常为rtsp://ip:port/session,默认端口为554。
- Version:协议版本,通常为RTSP/1.0。
- CSeq:序列号,每次请求时递增。
Method URL Version\r\nCSeq: x\r\n...\r\n
2. 服务器的响应格式
RTSP服务器响应的基本格式如下:
- 状态码:遵循HTTP协议的状态码,200表示成功。
Version 200 OK\r\nCSeq: x\r\n...\r\n
3. Method分类
RTSP定义了多种方法,常见的有:
- OPTIONS:获取服务器支持的方法列表。
- DESCRIBE:获取会话的媒体描述信息。
- SETUP:建立会话连接。
- PLAY:开始播放媒体流。
- TEARDOWN:关闭会话连接。
客户端通过这些方法与服务器进行交互,完成媒体流的控制。
4. 协议流程
以下是RTSP协议的一个典型流程:
OPTIONS rtsp://127.0.0.1:554/live RTSP/1.0\r\nCSeq: 1\r\n\r\n
RTSP/1.0 200 OK\r\nCSeq: 1\r\nPublic: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY\r\n\r\n
DESCRIBE rtsp://127.0.0.1:554/live RTSP/1.0\r\nCSeq: 2\r\nAccept: application/sdp\r\n\r\n
RTSP/1.0 200 OK\r\nCSeq: 2\r\nContent-length: xxx\r\nContent-type: application/sdp\r\nv=0\r\n... 各种属性描述
SETUP rtsp://127.0.0.1:554/live/track0 RTSP/1.0\r\nCSeq: 3\r\nTransport: RTP/AVP;unicast;client_port=50000-50001\r\n\r\n
说明:
- RTP/AVP表示RTP通过UDP发送,RTP/AVP/TCP表示RTP通过TCP发送。
- Unicast表示单播,Multicast表示多播。
- Client_port表示客户端的RTP端口(50000)和RTCP端口(50001),都是UDP套接字。
RTSP/1.0 200 OK\r\nCSeq: 3\r\nTransport: RTP/AVP;unicast;client_port=50000-50001;server_port=55000-55001\r\nSession: 12345678\r\n\r\n
说明:
- Server_port表示服务器使用的RTP端口(55000)和RTCP端口(55001)。
PLAY rtsp://127.0.0.1:554/live RTSP/1.0\r\nCSeq: 4\r\nSession: 12345678\r\nRange: npt=0.000-\r\n\r\n
RTSP/1.0 200 OK\r\nCSeq: 4\r\nRange: npt=0.000-\r\nSession: 12345678; timeout=60\r\n\r\n
说明:
- 服务器回复后,会向客户端的RTP端口(50000)发送数据。
- 如果客户端播放完毕未发送TEARDOWN方法,连接将保持,但不会有数据传输。
TEARDOWN rtsp://127.0.0.1:554/live RTSP/1.0\r\nCSeq: 5\r\nSession: 12345678\r\n\r\n
RTSP/1.0 200 OK\r\nCSeq: 5\r\n\r\n
5. SDP格式
SDP(Session Description Protocol)用于描述会话的元数据,其格式如下:
- 由多行的key=value组成。
- 内容包括会话元数据、网络描述、流描述、加密描述、QoS和分组描述等。
v= 开始都是会话描述m= 开始都是媒体描述t= 开始时时间描述会话描述:v 表示版本o 表示用户、会话ID、会话版本、网络类型、地址类型、地址s 表示会话名称i 表示会话文本信息u 表示会话信息地址e 表示电子邮件地址p 表示电话信息c 表示连接类型和地址b 表示带宽限制z 表示时区信息k 表示加密密钥时间描述:t 表示开始和结束时间r 表示重复的周期和持续时间媒体描述:m 表示媒体类型、端口号、传输协议、媒体格式a 表示媒体格式属性,例如:a=rtpmap:96 H264/90000 表示编码格式和时钟频率a=framerate:25 表示帧率a=control:track0 表示该路视频在会话中的编号