【RTSP协议】


前言

RTSP协议用于客户端和服务端传输音视频


一、RTSP的组成

RTSP协议是基于RTP和RTCP之上

  1. RTSP使用RTP传输媒体数据
  2. 使用RTCP来交互控制命令、

客户端的请求顺序

  1. 先用RTCP进行信息交互
  2. 然后再使用RTP进行媒体数据传输

二、RTCP的交互过程

1.客户端的请求格式:

格式如下:

  1. method表示方法
  2. Url就是请求地址,一般为rtsp://ip:port/session 默认554端口
  3. Version 表示版本,我们这里取RTSP/1.0
  4. CSeq序列号,递增的整数
Method url version\r\n
CSeq: x\r\n
xxx\r\n
...
\r\n

2.服务器的响应格式

格式如下:

  1. 200遵循http协议的状态码 200表明成功
Version 200 OK\r\n
CSeq: x\r\n
Xxx\r\n
...
\r\n

3.Method 分类

  1. OPTIONS:获取服务端提供的可用方法

客户端想创建连接,首先先向服务器发送OPTIONS方法,发送以后服务器就会提供我这里有哪些方法,服务器的协议是什么。

  1. DESCRIBE:获取对应会话的媒体描述信息

上面的东西客户端接收到后, 客户端就可以发送DESCRIBE方法,告诉服务器描述一下播放的媒体的内容。

  1. SETUP:向服务器发起建立请求,建立连接会话

上面的数据拿到之后,客户端就可以发送SETUP方法,建立会话请求;服务器会返回会话的信息,包括RTP的端口,地址就不用了

  1. PLAY:向服务器发起播放请求

有了上面的数据后,就可以发送PLAY方法了,服务器就会把数据封装成RTP协议通过UDP发送给客户端

  1. TEARDOWN:向服务器发起关闭连接会话请求

接收完后,客户但就可以发送TEARDOWN方法,服务端就会数据发送给终止掉,然后这次播放内容就结束了!

注意:这些方法只是基本的五个方法,它还有其他的一些方法,具体的可以查看RTSP协议文档。


4.协议流程

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

RTSP/1.0 200 OK\r\n
CSeq: 1\r\n
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY\r\n
\r\n
DESCRIBE rtsp://127.0.0.1:554/live RTSP/1.0\r\n
CSeq: 2\r\n
Accept: application/sdp\r\n
\r\n

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 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套接字

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 rtsp://127.0.0.1:554/live RTSP/1.0\r\n
CSeq: 4\r\n
Session: 12345678\r\n 【std::string m_session;】
Range: npt=0.000-\r\n
\r\n

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方法,会一直保持连接,只不过没有数据而已

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

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

5.sdp格式

  • 组成:由多行的key=value组成
  • 内容:会话元数据(必须要有)、网络描述(必须要有)、流描述(必须要有)、加密描述、Qos和分组描述
v=开始都是会话描述
m=开始都是媒体描述
t=开始时时间描述

会话描述:
v表示版本
o表示用户、会话id、会话版本、网络类型、地址类型、地址
一个典型的例子是
o=- 12345678901 1 IN IP4 127.0.0.1\r\n
这个表示
用户名:-
会话id:12345678901
会话版本: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加密密钥

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

媒体描述:
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和会话描述一致的含义(但是内容可能不一样)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值