rtsp(Real Time Streaming Protocol), 实时流传输协议,
它是TCP/IP协议体系中的一个应用层协议
它是对流媒体进行控制 的网络控制协议,可以对流媒体提供诸如播放、暂停、快进、停止等操作,它负责定义具体的控制消息、操作方法、状态码等,此外还描述了与RTP间的交互操作。
但是,实时流的传输并不是它负责,而是交给RTP、RTCP协议。
RTSP发送的指令一般通过TCP进行传输,以保证服务端会收到。
而在RTP/RTCP协议下实时流的传输 通过UDP传输,以保证数据的实时性。在实际情况下,是允许实时流少量的丢帧。
RTSP通用字段解释
1、请求头字段
下面是所有命令都接受的头字段类型,一些命令接受或者必须用到一些附加的特别的头字段。
Authorization 客户端的认证信息.
CSeq 请求序列号.
Session 会话 ID (返回自服务端的 SETUP 应答).
Content-Length 内容的长度.
Content-Type 内容的媒体类型.
User-Agent 关于创建这个请求的客户端的信息.
Require 查询是否支持指定的选项,不支持的选项会在 Unsupported 头中列出.
2、请求回复字段
RTSP/1.0 < Status Code> < Reason Phrase> < CRLF>
Headerfield3: val3< CRLF>
Headerfield4: val4< CRLF>
…
< CRLF>
[Body]
应答的第一行包含了表示请求是否成功或者失败的状态码和原因短语,在 RFC 2326 有对状态码的详细描述,如下:
”100” ; Continue (all 100 range)
“200” ; OK
”201” ; Created
”250” ; Low on Storage Space
”300” ; Multiple Choices
”301” ; Moved Permanently
”302” ; Moved Temporarily
”303” ; See Other
”304” ; Not Modified
”305” ; Use Proxy
”350” ; Going Away
”351” ; Load Balancing
”400” ; Bad request
”401” ; Unauthorized
”402” ; Payment Required
”403” ; Forbidden
”404” ; Not Found
”405” ; Method Not Allowed
”406” ; Not Acceptable
”407” ; Proxy Authentication Required
”408” ; Request Time-out
”410” ; Gone
”411” ; Length Required
”412” ; Precondition Failed
”413” ; Request Entity Too Large
”414” ; Request-URI Too Large
”415” ; Unsupported Media Type
”451” ; Parameter Not Understood
”452” ; reserved
”453” ; Not Enough Bandwidth
”454” ; Session Not Found
”455” ; Method Not Valid in This State
”456” ; Header Field Not Valid for Resource
”457” ; Invalid Range
”458” ; Parameter Is Read-Only
”459” ; aggregate operation not allowed
”460” ; Only aggregate operation allowed
”461” ; Unsupported transport
”462” ; Destination unreachable
”500” ; Internal Server Error
”501” ; Not Implemented
”502” ; Bad Gateway
”503” ; Service Unavailable
”504” ; Gateway Time-out
”505” ; RTSP Version not supported
”551” ; Option not supported
下面的头字段可以在所有的 RTSP 应答消息中包含。
CSeq :应答序列号 (和请求序列匹配).
Session :会话 ID.
WWW-Authenticate :客户端的认证信息.
Date :应答的日期和时间.
Unsupported :服务端不支持的特性和功能.
RTSP请求
RTSP请求指令有DESCRIBE, SETUP, OPTIONS, PLAY, PAUSE, TEARDOWN 或 SET_PARAMETER 等。
【相关资料,免费分享】资料包括《Andoird音视频开发必备手册 音视频学习视频 学习文档资料包 大厂面试真题 2022最新学习路线图》等,有需要的可以点击下方链接自取~
FFmpegWebRTCRTMPRTSPHLSRTP播放器-音视频流媒体高级开发
1、RTSP DESCRIBE
DESCRIBE 命令用于请求指定的媒体流的 SDP ( Session Description Protocol,会话描述协议) 描述信息。
DESCRIBE 请求消息接受如下附加的头字段:
Accept :列出客户支持的内容类型 (application/sdp is the only supported type).
DESCRIBE 命令的应答消息包含如下附加的头字段:
Content-Type :内容类型 (application/sdp).
Content-Length :SDP 描述串的长度.
Content-Base :如果 SDP 描述串中使用了相对 URL, 这里是相关的基本 URL.
例如:
请求
DESCRIBE rtsp://myserver/live.mp4 RTSP/1.0
CSeq: 0
User-Agent: Vision MC
Accept: application/sdp
Authorization: Basic cm9vdDpwYXNz
回复
RTSP/1.0 200 OK
CSeq: 0
Content-Type: application/sdp
Content-Base: rtsp://myserver/live.mp4
Date: Wed, 16 Jul 2008 12:48:47 GMT
Content-Length: 847
v=0//以下都是SDP信息
o=- 1216212527554872 1216212527554872 IN IP4 myserver
s=Media Presentation
e=NONE
c=IN IP4 0.0.0.0
b=AS:50064
t=0 0
a=control:rtsp://myserver/live.mp4
&resolution=640x480
a=range:npt=0.000000-
m=video 0 RTP/AVP 96 //m表示媒体描述, 下面是对会话中视频通道的媒体描述
b=AS:50000
a=framerate:30.0
a=control:rtsp://myserver/live.mp4?trackID=1//trackID=1表示视频流用的是通道1
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1; profile-level-id=420029; sprop-parameter-sets=Z0IAKeKQFAe2AtwEBAaQeJEV,aM48gA==
m=audio 0 RTP/AVP 97//m表示媒体描述, 下面是对会话中音频通道的媒体描述
b=AS:64
a=control:rtsp://myserver/live.mp4?trackID=2//trackID=2表示视频流用的是通道2
a=rtpmap:97 mpeg4-generic/16000/1
a=fmtp:97 profile-level-id=15; mode=AAC-hbr;config=1408; SizeLength=13; IndexLength=3;IndexDeltaLength=3; Profile=1; bitrate=64000;
OPTIONS 请求用于返回服务端支持的 RTSP 命令列表 。也可以定时发送这个请求来保护相关的 RTSP 会话 请求
OPTIONS * RTSP/1.0
CSeq: 1
User-Agent: Vision MC
Session: 12345678
Authorization: Basic cm9vdDpwYXNz
应答
RTSP/1.0 200 OK
CSeq: 1
Session: 12345678
Public: DESCRIBE, GET_PARAMETER, PAUSE, PLAY, SETUP, SET_PARAMETER, TEARDOWN
Date: Wed, 16 Jul 2008 12:48:48 GMT
回复字段中Public字段列出了支持的 RTSP 命令。
3、RTSP SETUP
SETUP 命令用于配置数据传输的方法,比如Transport字段指定了客户端支持的传输方式RTP协议,以及指定了客户端RTP和RTCP的端口,并创建会话session,这个Session ID在以后的请求中都会使用。
请求
SETUP rtsp://myserver/live.mp4?trackID=1 RTSP/1.0
CSeq: 2
User-Agent: Vision MC
Transport: RTP/AVP;unicast;client_port=20000-20001
Authorization: Basic cm9vdDpwYXNz
//uri中 带有trackID=0, 表示对该通道进行设置.
//Transport参数设置了传输模式, 客户端端口.
这里指定了服务器的rtsp路径,CSeq表示当前请求的的序号,Transport指定了使用RTP协议进行实时流的传输;unicast表示单播传输,一对一;client_port表示RTP/RTCP协议在客户端的端口号。分别支持 RTP/AVP;
unicast;
client_port=port1-port2 RTP/AVP;
multicast;
client_port=port1-port2 RTP/AVP/TCP;
unicast
等不同的传输方式
RTP/AVP/TCP表示通过TCP传输RTP包,RTP/AVP/UDP表示使用UDP传输RTP包。
应答
RTSP/1.0 200 OK
CSeq: 2
Session: 12345678; timeout=60
Transport: RTP/AVP;unicast;client_port=20000-20001;
server_port=50000-50001;ssrc=B0BA7855;mode="PLAY"
Date: Wed, 16 Jul 2008 12:48:47 GMT
服务端返回的数据中server_port表示RTP/RTCP协议在服务端的端口号,客户端可以去绑定这两个端口,从而可以进行通信。
在以后的请求中,都需要带上这个Session,以表示在同一个会话中
请求
SETUP rtsp://myserver/live.mp4
trackID=2 RTSP/1.0
CSeq: 3
User-Agent: Vision MC
Transport: RTP/AVP;unicast;client_port=20002-20003
Session: 12345678
Authorization: Basic cm9vdDpwYXNz
应答
RTSP/1.0 200 OK
CSeq: 3
Session: 12345678; timeout=60
Transport: RTP/AVP;unicast;client_port=20002-20003;server_port=50002-50003;ssrc=D7EB59C0;mode="PLAY"
Date: Wed, 16 Jul 2008 12:48:48 GMT
如果这个 Session 头字段包含了 timemout 参数, 除非有保活,否则会话会在超时时间后被关闭。
会话可以通过发送包含 Session ID 的 RTSP 请求 (如 OPTIONS,GET_PARAMETER) 给服务端来保活。 或者使用 RTCP 消息。
4、RTSP PLAY
这个 PLAY 用于启动 (当暂停时重启) 传输实时流数据给客户端.
例如:
请求
PLAY rtsp://myserver/live.mp4 RTSP/1.0
CSeq: 4
User-Agent: Vision MC
Range: npt=0.000- //设置播放时间的范围
Session: 12345678
Authorization: Basic cm9vdDpwYXNz
应答
RTSP/1.0 200 OK
CSeq: 4
Session: 12345678
Range: npt=0.645272-//设置播放时间的范围
RTP-Info: url=rtsp://myserver/live.mp4? trackID=1;seq=46932;rtptime=1027887748, url=rtsp://myserver/live.mp4?trackID=2;seq=3322;rtptime=611053482
Date: Wed, 16 Jul 2008 12:48:48 GMT
例如: 还可以指定相应ID的资源文件,Play back the recording “myrecording”.
请求
PLAY rtsp://myserver/live.mp4?recordingid=”myrecording” RTSP/1.0
CSeq: 4
User-Agent: Vision MC
Session: 12345678
Authorization: Basic cm9vdDpwYXNz
Range :播放时间段. RTP-Info :关于 RTP 流的信息。包含相关的流的第一个包的序列号。
5、RTSP PAUSEPAUSE 请求用于临时停止服务端的数据的传输。使用 PLAY 来重新启动数据传输。 例如: 请求
PAUSE rtsp://myserver/live.mp4 RTSP/1.0
CSeq: 5
User-Agent: Vision MC
Session: 12345678
Authorization: Basic cm9vdDpwYXNz
应答
RTSP/1.0 200 OK
CSeq: 5
Session: 12345678
Date: Wed, 16 Jul 2008 12:48:49 GMT
这里的RTSP/1.0表示RTSP协议的版本;
6、RTSP TEARDOWNTEARDOWN 请求用于终止来自服务端的数据的传输。 例如: 请求
TEARDOWN rtsp://myserver/live.mp4 RTSP/1.0
CSeq: 6
User-Agent: Vision MC
Session: 12345678
Authorization: Basic cm9vdDpwYXNz
应答
RTSP/1.0 200 OK
CSeq: 6
Session: 12345678
Date: Wed, 16 Jul 2008 12:49:01 GMT
SET_PARAMETER 命令用于请求尽快生成一个 I 帧。例如当开始录像的时候。必须包含 X-Request-Key-Frame: 1 的头字段。 请求
SET_PARAMETER rtsp://myserver/live.mp4 RTSP/1.0
CSeq: 7
Session: 12345678
Authorization: Basic cm9vdDpwYXNz
X-Request-Key-Frame: 1
Content-Type: text/parameters
Content-Length: 19
Renew-Stream: yes
应答
RTSP/1.0 200 OK
CSeq: 8
Session: 12345678
Date: Wed, 16 Jul 2008 13:01:25 GMT
标准协议中 GET_PARAMETER 可以用于查询参数状态, 目前设备主要通过 GET 命令来查询设备参数, 所以 GET_PARAMETER 用处不大, 目前主要用来用做会话保活请求. 请求
GET_PARAMETER rtsp://myserver/live.mp4 RTSP/1.0
CSeq: 7
Session: 12345678
Authorization: Basic cm9vdDpwYXNz
应答
RTSP/1.0 200 OK
CSeq: 8
Session: 12345678
Date: Wed, 16 Jul 2008 13:01:25 GMT
9、RTSP REDIRECT
当 流媒体服务器有上百台, 需要动态的选择一台均衡负载最小的服务器, 或者选择一台离客户端机器最近的一台服务器提供流服务的时候,我们可以利用 rtsp协议的redirect 机制进行重定向。
实现原理很简单:
client -> server 发出 rtsp请求
服务器收到请求后, 取出 客户端的 IP 地址, 根据客户端的IP地址, 判断客户端所在的地区, 在客户端所在地的服务器中选择一台负载最小的服务器。通过 redirect 协议 的Location , 指定重定向的新地址即可完成任务。
RTSP/1.0 301 Moved
CSeq : 2
Location: rtsp://192.168.2.33/mp4/f1.ts
Range:Clock=20180101T123456Z-
客户端收到该协议描述, 既会连接新的服务器进行流请求。
Range字段规定了客户端在2018年1月1日12点34分56秒进行重定向。
10、RTSP RECORD
用于请求服务器录一段内容,包括音视频。时间戳表示录制的开始/结束时间,格式为UTC时间。
11、RTSP ANNOUNCE
该方法方法有两个目的:
当从客户端发往服务器端,ANNOUNCE向服务器端上传请求URL所标识的表示或媒体对象的描述。
当从服务器端发往客户端,ANNOUNCE实时更新会话描述。
当一个新的媒体流加入Session时(比如之前只有视频流,现在加入音频流),需要通知客户端,让客户端做出是否接入音频流的选择。
RTSP基本请求流程
C表示rtsp客户端, S表示rtsp服务端
1. C->S:OPTION request //询问S有哪些方法可用
1. S->C:OPTION response //S回应信息中包括提供的所有可用方法
2. C->S:DESCRIBE request //要求得到S提供的媒体初始化描述信息
2. S->C:DESCRIBE response //S回应媒体初始化描述信息, 主要是sdp
3. C->S:SETUP request //设置会话的属性, 以及传输模式, 提醒S建立会话
3. S->C:SETUP response //S建立会话, 返回会话标识符, 以及会话相关信息
4. C->S:PLAY request //C请求播放
4. S->C:PLAY response //S回应该请求的信息
S->C:发送流媒体数据
5. C->S:TEARDOWN request //C请求关闭会话
5. S->C:TEARDOWN response //S回应该请求
会话描述协议(SDP)为会话通知、会话邀请和其它形式的多媒体会话初始化等目的提供了多媒体会话描述。
* v = (协议版本)
* o = (所有者/创建者和会话标识符)
* s = (会话名称)
* i = * (会话信息)
* u = * (URI 描述)
* e = * (Email 地址)
* p = * (电话号码)
* c = * (连接信息 ― 如果包含在所有媒体中,则不需要该字段)
* b = * (带宽信息)
一个或更多时间描述(如下所示):
* z = * (时间区域调整)
* k = * (加密密钥)
* a = * (0 个或多个会话属性行)
* 0个或多个媒体描述(如下所示)
时间描述
* t = (会话活动时间)
* r = * (0或多次重复次数)
媒体描述
* m = (媒体名称和传输地址)
* i = * (媒体标题)
* c = * (连接信息 — 如果包含在会话层则该字段可选)
* b = * (带宽信息)
* k = * (加密密钥)
* a = * (0 个或多个会话属性行
【免费】FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发-学习视频教程-腾讯课堂
,