RTSP协议详解
WIRESHARK网络抓包软件:https://www.wireshark.org/download.html
RTSP 协议的工作原理可以简化为如下如所示:
典型的流媒体框架网络体系如下所示:
1.OPTIONS
客户端向服务器端发送OPTIONS,向服务器请求可用的方法。
客户端的请求格式:
<method> <url> <version>\r\n
Cseq: x\r\n
...
\r\n
- method:请求的方法。RTSP中可定义很多方法。
- url:表示主机的RTSP通信网址,格式通常为
rtsp://ip:port/session
,其中IP表示服务器主机IP,port表示端口号,session表示请求会话通道。 - version:表示RTSP的版本,根据信息这里的版本为RTSP/1.0。
- CSeq:表示序列号,每个RTSP请求和响应都对应一个序列号,序列号是递增的。
- ... :这里可以描述额外的信息,如客户端平台的信息等。
服务器回复客户端支持的可用方法。
服务器响应格式:
<version> 200 OK \r\n
CSeq: x\r\n
Date: xxx\r\n
...
\r\n
- version:表示RTSP的版本,根据信息这里的版本为RTSP/1.0。
- CSeq:序列号,这个必须与对应请求的序列号相同
- Date:时间信息,返回服务器当前的时间。
- ... :返回常用方法。
RTSP常用的方法:
方法 | 描述 |
---|---|
OPTIONS | 获取服务端提供的可用方法 |
DESCRIBE | 获取对应会话的媒体描述信息 |
SETUP | 发起建立请求,建立连接会话 |
PLAY | 发起播放请求 |
TEARDOWN | 发起关闭连接会话请求 |
2.DESCRIBE
客户端向服务器请求媒体描述文件。
服务器回复客户端 SDP数据,包括网络类型、媒体类型、媒体属性(编码器信息、帧率等)
SDP数据解析:
V:0
o: - 1867010921 1 IN IP4 192.168.0.170
s:Session streamed by "testH264VideoStreamer"
i: ch1
t:0 0
a:control:*
tool: AW RTSP Streaming v20170726
rtpmap:96 H264/90000
fmtp:97 streamtype=5;profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3
track0
m:video 0 RTP/AVP 96
c:IN IP4 0.0.0.0
b:AS:1048576
- v:表示sdp的版本,当前为0
- o:<用户名> <会话id> <会话版本> <网络类型><地址类型> <地址>
- 用户名:-
- 会话id:1867010921,该ID为rtsp://192.168.0.170:8554/live网址中的live
- 会话版本:1
- 网络类型:IN,表示为互联网Internet
- 地址类型:IP4,表示IPV4
- 地址:192.168.0.170
- s:表示会话的视频流来自哪里
- i:表示视频流通道
- t:时间描述,表示开始的时间和结束的时间,这里0 0 表示永久的,没有特定的开始和结束时间。
- a:会话级别的控制属性
- tool:使用的流媒体工具版本
- rtpmap:96 H264/90000:RTP负载类型映射,表示负载类型96对应H.264视频编码,时钟频率为90000 Hz。
- fmtp:<流类型><配置级别ID><AAC高比特率模式><大小长度><索引长度><索引增量长度>。
- track0:该路适配中会话的编号。
- m:媒体描述字段 <媒体类型><端口号><传输协议><RTP负载类型>
- c:<网络类型><地址类型><特定地址>,表示媒体流的连接地址,这里是0.0.0.0,表示不指定特定地址。
- b:带宽信息,表示会话的带宽限制,这里是1048576 kbps。
3.SETUP
客户端向服务器发起连接请求,以建立会话连接并准备接收音视频数据。请求信息包括期望音视频数据包的传输方式(UDP 或 TCP)、指定的 RTP 和 RTCP 端口、传输模式(单播或组播)。
这里仅对下面的这段信息做解析
Transport: RTP/AVP/TCP;unicast;interleaved=0-1\r\n
- Transport:传输信息,表示后面表示的是传输协议相关的信息
- RTP/AVP/TCP:表示RTP通过TCP发送。
- unicast:表示单播,如果是multicast则表示多播。
- interleaved=0-1:表示RTP和RTCP数据包在TCP流中的交错传输,RTP数据包使用第0个通道,RTCP数据包使用第1个通道
- 单播是指数据包从一个发送者传输到一个接收者的通信方式。每个数据包都是独立发送到每一个接收者。这意味着如果有多个接收者,发送者需要为每个接收者单独发送数据包。
- 多播是指数据包从一个发送者传输到多个接收者的通信方式,但只发送给特定的接收者组。多播使用特殊的IP地址范围(D类地址,范围为224.0.0.0至239.255.255.255),确保数据仅被多播组内的成员接收。相比单播,多播更高效,因为数据包只需发送一次即可被多个接收者接收。
服务器端收到客户端请求后,会根据请求中的端口号来确定用于发送控制数据和音视频数据的端口。
4.PLAY
客户端向服务端请求播放媒体。
服务器回复客户端200 OK!,之后就会通过SETUP中指定的端口开始发送数据!
注意服务器回复前会先发送一段视频流数据,即先发送一个NALU层让客户端先读取码流的PPS和SPS信息!
5.TEARDOWN
客户端结束播放时,会像服务器发起结束请求。
服务器收到请求后,会向客户端发送200 OK,并结束网络连接。
6.总结
通过解包整个RTSP协议的信息,可以发现,重点在于建立链接和播放控制:
- 建立连接:RTSP 协议负责在客户端和服务器之间建立连接,以便控制媒体流的传输。
- 控制媒体流:RTSP 允许客户端发送命令(如播放、暂停、停止等)来控制媒体流的状态。
- 传输参数调整:RTSP 支持调整媒体流的参数,如带宽和传输速率,以适应不同的网络条件。
- 会话管理:RTSP 使用会话标识符(Session ID)来管理和维护客户端与服务器之间的会话。
- 实时传输:RTSP 通常与 RTP 和 RTCP 协议配合使用,以实现实时音视频数据的传输和控制。