RTSP协议详解

1、RTSP协议内容详解

RTSP协议是基于RTPRTCP之上的,RTSP使用RTP传输媒体数据,使用RTCP来交互控制命令。整个协议是先用RTSP进行信息交互,再使用RTP/RTCP进行媒体数据传输

1.1、RTSP的控制命令交互格式

客户端的请求格式:

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协议的状态码,表明成功

1.2、RTSP协议方法(method)

OPTIONS:获取服务端提供的可用方法
DESCRIBE:获取对应会话的媒体描述信息
SETUP:向服务器发起建立请求,建立连接会话
PLAY:向服务器发起播放请求
TEARDOWN:向服务器发起关闭连接会话请求

2、RTSP协议流程详解

2.1、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

2.2、C向S发送DESCRIBE,获取媒体描述信息

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应答:

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
...各种属性描述 详见文章第三章《sdp格式说明》

2.3、C发送SETUP

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应答:

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端口

2.4、C收到SETUP应答后,发送PLAY

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应答:

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

S回复完这个数据之后,会向C的RTP端口(50000)发送视频数据

2.5、C关闭连接,发送TEARDOWN

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

S应答:

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

3、sdp格式说明

sdp由多行的key=value组成
完整的sdp包括会话元数据、网络描述、流描述、加密描述、Qos和分组描述,但是一般会话描述、网络描述和流描述(也叫媒体描述)是必须的,其他的可选。
v=以下部分都是会话描述
m=以下部分都是媒体描述
t=以下部分都是时间描述

3.1、会话描述

v表示版本
o=用户 会话id 会话版本 网络类型 地址类型 地址
e.g.:

o=- 12345678901 1 IN IP4 127.0.0.1\r\n
用户名:-
会话id12345678901
会话版本:1
网络类型:IN就是internet的意思
地址类型:IP4,表示ipv4
地址:127.0.0.1 表示服务器的地址

s会话名称
i会话文本信息

i=<No author> <No copyright>

u会话信息地址
e电子邮件地址
p电话信息
c连接类型和地址
c=IN IP4 0.0.0.0
b带宽限制
b=as:150
b=RR:11250
b=RS:3750
z时区信息
k加密密钥

3.2、时间描述

t开始和结束时间
r重复的周期和持续时间

3.3、媒体描述

m=媒体类型 端口号 传输协议 媒体格式

m=video 0 RTP/AVP 96\r\n

注意这里的端口号一般无效,因为真正的端口号在SETUP命令中处理
96代表的是H.264
a=媒体格式,有多个内容

a=rtpmap:96 H264/90000
rtpmap:媒体格式 编码格式/时钟频率
a=framerate:25
framerate表示帧率
a=control:track0
a=Width:integer;320  影片宽度

表示该路视频在这个会话中的编号SETUP命令会用到
i、c、b、k和会话描述一致的含义,但是内容可能不一样

4、RTP协议

二进制协议,最重要的就是内容成分组成(嵌套式)和位宽。
RTP包由一个头部和数据荷载/数据负载组成,头部格式如下,左边是高位,右边是低位:
在这里插入图片描述
V表示版本号,2个bit
P表示填充位,1个bit。为0表示包尾部没有填充附加字节;为1则表示有
X表示扩展位,1个bit。为1表示包头后面还有一个扩展头部
CC是CSRC个数,4bit。表示后面CSRC的个数0~15个
M表示标记位,1个bit。给配置文档来用的
PT表示荷载类型,7个bit。
序列号(SN),16个bit
时间戳,32个bit,记录数据荷载部分采样时刻
同步信源(SSRC)标识符,32个bit。标记RTP的来源,一个RTP会话中不能有两个SSRC值。
特约信源(CSRC)标识符,最多15个,每个都是32个bit,一般不用

数据荷载的格式一般依据音视频本身的格式

  • 21
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值