3.2 RTSP 协议详解

RTSP协议详解
一般是服务器是被动 在一些游戏服务器是主动
RTSP协议是基于RTP(数据包)和RTCP(控制命令 UDP)之上的
RTSP使用RTP传输媒体数据,使用RTCP来交互控制命令
整个协议是先用RTSP进行信息交互
RTSP的控制命令交然后再使用RTP/RTCP进行媒体数据传输
互格式
客户端的请求格式:

Method url version\r\n
CSeq: x\r\n
xxx\r\n
...
\r\n

method表示方法,具体见后面详细内容
Url就是请求地址,一般为rtsp://ip:port/session 默认554端口 常见:8554端口
Version 表示版本,我们这里取RTSP/1.0
CSeq序列号,递增的整数

服务器的响应格式:

Version 200 OK\r\n
CSeq: x\r\n
Xxx\r\n
...
\r\n

具体含义和前面相同
200遵循http协议的状态码 200表明成功
协议内容详解
OPTIONS方法:获取服务端提供的可用方法
DESCRIBE方法:获取对应会话的媒体描述信息
SETUP方法:向服务器发起建立请求,建立连接会话
PLAY方法:向服务器发起播放请求
TEARDOWN方法:向服务器发起关闭连接会话请求
协议流程详解
RTSP的交互过程

客户端C向服务器S发送OPTIONS

OPTIONS rtsp://127.0.0.1:554/live RTSP/1.0\r\n
CSeq: 1\r\n
\r\n

服务器S收到后,回应客户端C,告诉客户端可用的方法

RTSP/1.0 200 OK\r\n
CSeq: 1\r\n
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY\r\n
\r\n

接着,客户端会向服务器发送DESCRIBE命令,获取媒体的描述信息
C→S

DESCRIBE rtsp://127.0.0.1:554/live RTSP/1.0\r\n
CSeq: 2\r\n
Accept: application/sdp\r\n
\r\n

S→C

RTSP/1.0 200 OK\r\n
CSeq: 2\r\n
Content-length: xxx\r\n
Content-type: application/sdp\r\n
\r\n

v=0\r\n
...各种属性描述

这个时候,客户端就会发送SETUP命令
C→S

SETUP rtsp://127.0.0.1:554/live/track0 RTSP/1.0r\r\n
CSeq: 3\r\n
Transport: RTP/AVP;unicast;client_port=50000-50001\r\n
\r\n

RTP/AVP表示RTP通过UDP发送,如果是RTP/AVP/TCP则表示RTP通过TCP发送
Unicast表示单播,multicast表示多播
Client_port表示50000是RTP端口50001表示RTCP端口,都是UDP套接字
S→C

RTSP/1.0 200 OK\r\n
CSeq: 3\r\n
Transport: RTP/AVP;unicast;client_port=50000-50001;server_port=55000-55001\r\n
Session: 12345678\r\n
\r\n

Server_port表示服务器使用这两个端口传输数据,其中55000是RTP,55001是RTCP端口

客户端收到这个之后,就可以开始发送PLAY命令
C→S

PLAY rtsp://127.0.0.1:554/live RTSP/1.0\r\n
CSeq: 4\r\n
Session: 12345678\r\n
Range: npt=0.000-\r\n
\r\n

S→C

RTSP/1.0 200 OK\r\n
CSeq: 4\r\n
Range: npt=0.000-\r\n
Session: 12345678; timeout=60\r\n
\r\n

服务器回复完这个数据之后,会向客户端的RTP端口(50000)发送数据

最后,客户端要关闭连接的时候,就发送TEARDOWN命令
C→S

TEARDOWN rtsp://127.0.0.1:554/live RTSP/1.0\r\n
CSeq: 5\r\n
Session: 12345678\r\n
\r\n

S→C

RTSP/1.0 200 OK\r\n
CSeq: 5\r\n
\r\n

你可能感兴趣的:(音视频项目,音视频,服务器,udp)