RTSP协议介绍

简介: RTSP协议介绍

什么是RTSP

  • RTSP是一个实时传输流协议,是一个应用层的协议
  • 通常说的RTSP包括RTSP协议、RTP协议、RTCP协议
  • 各协议的简单理解
  • RTP(Real-time Transport Protocol):实时传输协议,是用于Internet上针对多媒体数据流的一种传输层协议。RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式。
  • RTCP(Real-time Transport Control Protocol):实时传输控制协议,RTCP本身并不传输数据,但和RTP一起协作将多媒体数据打包和发送。RTCP定期在流多媒体会话参加者之间传输控制数据。RTCP的主要功能是为RTP所提供的服务质量(Quality of Service)提供反馈。 RTCP收集相关媒体连接的统计信息,例如:传输字节数,传输分组数,丢失分组数,jitter,单向和双向网络延迟等等。
  • RTSP(Real Time Streaming Protocol):实时流协议,用来控制声音或影像的多媒体串流协议,服务器端可以自行选择使用TCP或UDP来传送串流内容
  • RTSP和RTP的关系:RTP不象http和ftp可完整的下载整个影视文件,它是以固定的数据率在网络上发送数据,客户端也是按照这种速度观看影视文件,当影视画面播放过后,就不可以再重复播放,除非重新向服务器端要求数据。RTSP与RTP最大的区别在于:RTSP是一种双向实时数据传输协议,它允许客户端向服务器端发送请求,如回放、快进、倒退等操作。当然,RTSP可基于RTP来传送数据,还可以选择TCP、UDP、组播UDP等通道来发送数据,具有很好的扩展性。它时一种类似与http协议的网络应用层协议。

RTSP协议

RTSP数据格式

RTSP协议格式与HTTP协议格式类似

  • RTSP客户端的请求格式
method url vesion\r\n
CSeq: x\r\n
xxx\r\n
...
\r\n
  • method:方法,表明这次请求的方法,rtsp定义了很多方法,后面再详细介绍
  • url:格式一般为rtsp://ip:port/session,ip表主机ip,port表端口好,如果不写那么就是默认端口,rtsp的默认端口为554,session表明请求哪一个会话
  • version:表示rtsp的版本,现在为RTSP/1.0
  • CSeq:序列号,每个RTSP请求和响应都对应一个序列号,序列号是递增的
  • RTSP服务器的响应格式
vesion 200 OK\r\n
CSeq: x\r\n
xxx\r\n
...
\r\n
  • version:表示rtsp的版本,现在为RTSP/1.0
  • CSeq:序列号,这个必须与对应请求的序列号相同

RTSP请求的常用方法

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

RTSP交互过程

  • OPTIONS - 获取服务器提供的可用方法
  • 客户端 -> 服务器
OPTIONS rtsp://192.168.1.141:554 RTSP/1.0\r\n
CSeq: 2\r\n
User-Agent: LibVLC/3.0.16 (LIVE555 Streaming Media v2016.11.28)\r\n
Accept: application/sdp\r\n
\r\n
  • 服务器 -> 客户端
RTSP/1.0 200 OK\r\n
CSeq: 2\r\n
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY\r\n
\r\n
  • 服务器回复客户端,当前可用方法OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY
  • DESCRIBE - 向服务器获取对应会话的媒体描述信息,格式为sdp
  • 客户端 -> 服务器
DESCRIBE rtsp://192.168.1.141:554 RTSP/1.0\r\n
CSeq: 3\r\n
User-Agent: LibVLC/3.0.16 (LIVE555 Streaming Media v2016.11.28)\r\n
Accept: application/sdp\r\n
\r\n
  • 服务器 -> 客户端
RTSP/1.0 200 OK\r\n
CSeq: 3\r\n
Content-Base: rtsp://192.168.1.141:554
Content-type: application/sdp\r\n
Content-length: 129
\r\n
v=0\r\n
o=- 91639218130 1 IN IP4 192.168.1.141\r\n
t=0 0\r\n
a=contol:*\r\n
m=video 0 RTP/AVP 96\r\n
a=rtpmap:96 H264/90000\r\n
a=framerate:25\r\n
a=control:track0\r\n
\r\n
  • 服务器回复了sdp文件,这个文件告诉客户端当前服务器有哪些音视频流,有什么属性,具体稍后介绍。
  • SETUP - 向服务器发起建立请求,建立连接会话
  • 客户端 -> 服务器
SETUP rtsp://192.168.1.141:554/track0 RTSP/1.0\r\n
CSeq: 4\r\n
User-Agent: LibVLC/3.0.16 (LIVE555 Streaming Media v2016.11.28)\r\n
Transport: RTP/AVP;unicast;client_port=50692-50693\r\n
\r\n
  • 客户端发送建立请求,请求建立连接会话,准备接收音视频数据
  • RTP/AVP:表示RTP通过UDP发送,如果是RTP/AVP/TCP则表示RTP通过TCP发送
  • unicast:表示单播,如果是multicast则表示多播
  • client_port=50692-50693:由于这里希望采用的是RTP OVER UDP,所以客户端发送了两个用于传输数据的端口,客户端已经将这两个端口绑定到两个udp套接字上,54492表示是RTP端口,54493表示RTCP端口(RTP端口为某个偶数,RTCP端口为RTP端口+1)
  • 服务器 -> 客户端
RTSP/1.0 200 OK\r\n
CSeq: 4\r\n
Transport: RTP/AVP;unicast;client_port=50692-50693;server_port=56400-56401\r\n
Session: 66334873\r\n
\r\n
  • 服务器接收到请求之后,得知客户端要求采用RTP OVER UDP发送数据,单播,客户端用于传输RTP数据的端口为54492,RTCP的端口为54493
  • 服务器也有两个udp套接字,绑定好两个端口,一个用于传输RTP,一个用于传输RTCP,这里的端口号为56400-56401
  • 客户端会使用50692-50693这两端口和服务器通过udp传输数据,服务器会使用56400-56401这两端口和这个客户端传输数据
  • PLAY - 向服务器发起播放请求
  • 客户端 -> 服务器
PLAY rtsp://192.168.1.141:554 RTSP/1.0\r\n
CSeq: 5\r\n
Session: 66334873\r\n
Range: =0.000-\r\n
\r\n
  • 服务器 -> 客户端
RTSP/1.0 200 OK\r\n
CSeq: 5\r\n
Range: npt=0.000-\r\n
Session: 66334873; timeout=60\r\n
\r\n
  • 服务器回复之后,会开始使用RTP通过udp向客户端的54492端口发送数据
  • TEARDOWN - 向服务器发起关闭连接会话请求
  • 客户端 -> 服务器
TEARDOWN rtsp://192.168.1.141:554 RTSP/1.0\r\n
CSeq: 6\r\n
Session: 66334873\r\n
\r\n
  • 客户端请求断开会话
  • 服务器 -> 客户端
RTSP/1.0 200 OK\r\n
CSeq: 6\r\n
\r\n

sdp格式

  • sdp格式由多行的type=value组成
  • sdp会话描述由一个会话级描述和多个媒体级描述组成。会话级描述的作用域是整个会话,媒体级描述描述的是一个视频流或者音频流
  • 会话级描述由"v="开始到第一个媒体级描述结束
  • 媒体级描述由"m="开始到下一个媒体级描述结束
  • 下面是上面示例的sdp文件
v=0\r\n
o=- 91565340853 1 IN IP4 192.168.1.141\r\n
t=0 0\r\n
a=contol:*\r\n
m=video 0 RTP/AVP 96\r\n
a=rtpmap:96 H264/90000\r\n
a=framerate:25\r\n
a=control:track0\r\n
  • v=0,表示sdp的版本
  • o=- 91565340853 1 IN IP4 192.168.1.141
  • 格式:o=<用户名> <会话id> <会话版本> <网络类型><地址类型> <地址>
  • 用户名:-
  • 会话id:91565340853,表示rtsp://192.168.1.141:554请求中的live这个会话
  • 会话版本:1
  • 网络类型:IN,表示internet
  • 地址类型:IP4,表示ipv4
  • 地址:192.168.1.141,表示服务器的地址
  • m=video 0 RTP/AVP 96
  • 格式: m=<媒体类型> <端口号> <传输协议> <媒体格式 >
  • 媒体类型:video
  • 端口号:0,为什么是0?因为上面在SETUP过程会告知端口号,所以这里就不需要了
  • 传输协议:RTP/AVP,表示RTP OVER UDP,如果是RTP/AVP/TCP,表示RTP OVER TCP
  • 媒体格式:表示负载类型(payload type),一般使用96表示H.264
  • a=rtpmap:96 H264/90000
  • 格式:a=rtpmap:<媒体格式><编码格式>/<时钟频率>
  • a=framerate:25
  • 表示帧率
  • a=control:track0
  • 表示这路视频流在这个会话中的编号

RTP协议

RTP协议封装示意图

RTP包格式

  • rtp包由rtp首部和rtp载荷(数据)构成
  • rtp首部
  • 版本号(V):2Bit,用来标志使用RTP版本
  • 填充位(P):1Bit,如果该位置位,则该RTP包的尾部就包含填充的附加字节
  • 扩展位(X):1Bit,如果该位置位,则该RTP包的固定头部后面就跟着一个扩展头部
  • 参与源数(CSRC计数(CC))4Bit,CSRC计数包括紧接在固定头后CSRC标识符个数。
  • 标记位(M):1Bit,该位的解释由配置文档来承担
  • 载荷类型(PT):7Bit,标识了RTP载荷的类型
  • 序列号(SN):16Bit,发送方在每发送完一个RTP包后就将该域的值增加1,可以由该域检测包的丢失及恢复
  • 包的序列。序列号的初始值是随机的
  • 时间戳:32比特,记录了该包中数据的第一个字节的采样时刻
  • 同步源标识符(SSRC):32比特,同步源就是RTP包源的来源。在同一个RTP会话中不能有两个相同的SSRC值
  • 贡献源列表(CSRC List):0-15项,每项32比特,这个不常用
  • rtp荷载
  • rtp载荷为音频或者视频数据
  • RTP默认是采用UDP发送的,格式为RTP头+RTP载荷,如果是使用TCP,那么需要在RTP头之前再加上四个字节
  • 第一个字节:$,辨识符
  • 第二个字节:通道,在SETUP的过程中获取
  • 第三第四个字节: RTP包的大小,最多只能12位,第三个字节保存高4位,第四个字节保存低8位

RTCP协议

  • RTCP用于在RTP传输过程中提供传输信息,可以报道RTP传输情况,还可以用来音视频同步
目录
相关文章
|
6月前
|
存储 网络协议 网络安全
RTSP协议抓包及讲解(三)
RTSP协议抓包及讲解
99 1
|
网络协议 网络安全 流计算
【流媒体】RTMP、RTSP、HLS、HTTP协议的介绍与对比
【流媒体】RTMP、RTSP、HLS、HTTP协议的介绍与对比
427 0
|
6月前
|
移动开发 网络协议 Windows
RTSP协议抓包及讲解(二)
RTSP协议抓包及讲解
141 1
|
6月前
|
存储 编解码 移动开发
RTSP协议抓包及讲解(一)
RTSP协议抓包及讲解
186 0
|
6月前
|
Linux C语言
RTSP协议的实现
RTSP协议的实现
80 0
|
编解码 应用服务中间件 nginx
RTSP协议转换RTMP直播协议
RTSP协议转换RTMP直播协议
551 1
|
缓存 网络协议 算法
|
网络协议 网络性能优化 流计算
RTSP协议、RTMP协议、HTTP协议的区别
理论上RTSP RTMPHTTP都可以做直播和点播,但一般做直播用RTSP RTMP,做点播用HTTP。做视频会议的时候原来用SIP协议,现在基本上被RTMP协议取代了。 RTSP、 RTMP、HTTP的共同点、区别 共同点: 1:RTSP RTMP HTTP都是在应用应用层。
3193 0
RTSP服务器之————rtsp-server(轻量级RTSP / RTP流媒体服务器)
github:https://github.com/revmischa/rtsp-server 轻量级RTSP / RTP流媒体服务器
8668 0
|
网络协议 安全 流计算
RTSP 协议分析 (一)
RTSP 协议分析1.概述: RTSP(Real Time Streaming Protocol),实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学、网景和RealNetworks公司提交的IETF RFC标准。
1129 0