RTSP是基于RTP和RTCP之上的(RTP是数据包 用来传数据的 RTCP是用来传控制命令的:包含当前网络情况 客户端播放质量的反馈)
RTSP使用RTP传输媒体数据,使用RTCP来交互控制命令
整个协议是先用RTP/RTCP进行信息交互,然后是哟RTP/RTCP进行媒体数据传输
RTSP的控制命令交互格式
客户端的请求格式:
| Method url versionrn |
| CSeq:xrn |
| xxxrn |
| ... |
| rn |
method表示方法 url就是请求地址 一般为 rtsp://ip:port/session (默认端口为554 常见:8554) Version 表示版本 CSeq 序列号 递增的整数
服务器的响应格式
| Version 200 OK rn |
| CSeq:xrn |
| Xxxrn |
| ... rn |
具体含义和客户端的相同 200 是遵循http 协议的状态码 200表明成功
序列号要保持一致 也避免了后发的请求先被应答
协议内容:
OPTIONS 方法:获取服务端提供的可用方法
DESCRIBE 方法:获取对应回话的媒体描述信息
SETUP 方法:向服务器发起建立请求,建立连接回话
PLAY 方法:向服务器发起播放请求
TEARDOWN 方法:向服务器发起关闭连接回话请求
五个基本方法
协议流程:
RTSP交互过程:
客户端C向服务器S发送OPTIONS
| OPTIONS rtsp://127.0.0.1:554/live RTSP/1.0rn CSeq:1rn rn |
服务器S收到后,回应客户端C,告诉客户端可用的方法
| RTSP/1.0 200 OKrn CSeq:1rn Public:OPTIONS,DESCRIBE,SETUP,PLAY,TEARDOWNrn rn |
然后,客户端回向服务器发送DESCRIBE命令,获取媒体的描述信息 C->S
| DESCRIBE rtsp://127.0.0.1:554/live RTSP/1.0rn CSeq:2rn Accept:application/sdprn rn |
S->C
| RTSP/1.0 200 OKrn CSeq:2rn Content-length:xxxrn (指最后rn后面的长度,不是全部的长度) Content-type:application/sdprn rn v=0rn ...各种属性描述 |
这个时候,客户端就会发送SETUP命令
C->S
| SETUP rtsp://127.0.0.1:554/live/track0 RTSP/1.0rn CSeq:3rn Transport:RTP/AVP;unicast;client_port=50000-50001rn rn |
RTP/AVP 表示RTP通过UDP发送,如果是RTP/AVP/TCP则表示RTP通过TCP发送Unicast表示单播,multicast表示多播
Client_port 表示 50000是RTP端口50001是RTCP端口,都是UDP套接字
S->C
| RTSP/1.0 200 OKrn CSeq:3rn Transport:RTP/AVP;unicast;client_port=50000-50001;server_port=55000-55001rn Session:12345678rn (用于回话的 一般有八位) rn |
Server_port 表示服务器使用的这两个端口传输数据,其中55000是RTP,55001是RTCP端口
客户端收到这个后,就可以发送PLAY命令
C->S
| PLAY rtsp://127.0.0.1:554/live RTSP/1.0rn CSeq:4rn Session:12345678rn Range:npt=0.000-rn rn |
S->C
| RTSP/1.0 200 OKrn Cseq:4rn Range:npt=0.000-rn Session:12345678;timeout=60rn rn |
服务器回复完这个数据后,会向客户端的RTP端口(50000)发送数据
最后客户端要关闭连接的时候,就发送TEARDOWN
C->S
| TEARDOWN rtsp://127.0.0.1:554/live RTSP/1.0rn CSeq:5rn Session:12345678rn rn |
S->C
| RTSP/1.0 200 OKrn CSeq:5rn rn |



