😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
🤣本文内容🤣:🍭介绍 🍭
😎金句分享😎:🍭你不能选择最好的,但最好的会来选择你——泰戈尔🍭
⏰发布时间⏰:
本文未经允许,不得转发!!!
目录
- 🎄一、概述
- 🎄二、RTSP 方法
- 🎄三、RTSP的请求与响应
- 3.1 、RTSP 的 请求报文
- 3.2 、RTSP 的 响应报文
- 🎄四
- 🎄五
- 🎄六、
🎄一、概述
RTSP,全称时 Real Time Streaming Protocol
,实时流媒体协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学、网景和RealNetworks公司提交的 IETF RFC 标准。
关于 RTSP 协议的官方文档是 RFC2326,文档链接 :RFC2326-Real Time Streaming Protocol (RTSP)。
RTSP 协议的语法和操作参考了 HTTP/1.1
,基于文本的协议,采用ISO10646字符集,使用UTF-8编码;承载RTSP的传输层协议为TCP
,默认端口554
;如果是RTSP-over-HTTP tunneling,则默认TCP端口为8080;一般与RTP/RTCP协议搭配使用,由RTP协议传输实时流数据,RTCP协议完成数据流和控制命令的传输。
RTP协议:全称
Real-time Transport Protocol
,实时传输协议,由IETF的多媒体传输工作小组1996年在RFC 1889中公布的。RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式。它是创建在UDP协议上的。
RTCP协议:全称
Real-time Transport Control Protocol
,实时传输控制协议,与RTP配合使用。RTP 使用一个偶数的 UDP 端口;而RTCP 则使用 RTP 的下一个端口,也就是一个奇数端口。RTCP与RTP联合工作,RTP实施实际数据的传输,RTCP则负责将控制包送至会话中的每个人。其主要功能是就RTP正在提供的服务质量做出反馈。
RTSP协议 与 HTTP协议 的区别:
RTSP是有状态的,其命令总是按照顺序来发送,其中某个命令可能需要总在另外一个命令之前要发送。而 HTTP 则是无状态,协议在发送一个命令以后,连接就会断开,且命令之间是没有依赖性的。
rtsp协议使用554端口,http使用80端口。
RTSP的请求服务器和客户端都可以发送,而HTTP请求则只能由客户端发送
🎄二、RTSP 方法
RTSP常用的方法包括:OPTIONS、DESCRIBE、SETUP、PLAY、PAUSE、TEARDOWN、ANNOUNCE、GET_PARAMETER和SET_PARAMETER等。详细使用介绍如下:
OPTIONS
:客户端向服务器获取服务器支持的方法。它不影响服务器的状态;DESCRIBE
:客户端向服务器获取URL指定的媒体对象的描述,其中Accept
字段指定了描述格式;SETUP
:客户端向服务器请求建立会话并准备传输。请求信息主要包括传输协议和客户端的端口号;PLAY
:客户端主动通知服务器以SETUP指定的机制开始发送数据。其中Range
字段指定了播放的起止时间,当多个PLAY请求到达时,服务器会将PLAY请求排成队列,顺序执行,即必须等待第一个PLAY的时间完成后,才会继续处理第二个PLAY消息。PAUSE
:客户端请求服务器的媒体流传输临时暂停。可以通过Range
参数在指定时间点暂停,也可以指定某股流暂停,例如,如果指定音频流暂停,则播放将是无音状态RECORD
:RECORD通知服务器,客户端将会根据之前的描述开始记录媒体数据。 其中timestamp
字段反映开始和结束时间 (UTC)。如果该字段不存在,则会使用媒体描述中的开始或结束时间。 如果会话已经开始,则立即开始录制。
服务器决定是将记录的数据存储在request-URI
下还是另一个 URI 下。 如果服务器不使用 request-URI,则响应应该是 201(已创建)并包含描述请求状态并引用新资源的实体和 Location 标头。TEARDOWN
:客户端请求停止指定URL流发送,释放相关资源。REDIRECT
:重定向请求,服务端通知客户端它必须连接到另一个服务器位置。 它包含强制标头 Location,它指示客户端应该发出对该 URL 的请求。 它可能包含参数Range,表示重定向何时生效。 如果客户端想要继续发送或接收此 URI 的媒体,客户端必须为当前会话发出 TEARDOWN 请求,并在指定主机上为新会话发出 SETUP。ANNOUNCE
:当客户端向服务器发送时,表示的是将通过请求 URL 识别的表示描述或者媒体对象提交给服务器
当服务器向客户端发送时,表示的是通知客户端更新会话信息GET_PARAMETER
:GET_PARAMETER 请求检索 URI 中指定的表示或流的参数值。 回复和响应的内容留给实现。 没有实体主体的 GET_PARAMETER 可用于测试客户端或服务器的活跃度(“ping”)。SET_PARAMETER
:这个方法请求设置演示或URL指定流的参数值。请求仅应包含单个参数,允许客户端决定某个特殊请求为何失败。如请求包含多个参数,所有参数可成功设置,服务器必须只对该请求起作用。服务器必须允许参数可重复设置成同一值,但不让改变参数值。注意:媒体流传输参数必须用SETUP命令设置。将设置传输参数限制为SETUP有利于防火墙。
上面总共介绍了 11 个RTSP方法,其中,SETUP
、PLAY
、TEARDOWN
三个命令是 RTSP 流程中必须的,其他方法非必须。而ANNOUNCE
、GET_PARAMETER
、SET_PARAMETER
三个命令既可以是客户端发给服务端,也可以是服务端发给客户端,其他命令都是客户端发给服务端的。
🎄三、RTSP的请求与响应
RTSP有两类报文:请求报文和响应报文。请求报文是指从客户向服务器发送请求报文,响应报文是指从服务器到客户的应答。
3.1 、RTSP 的 请求报文
RTSP请求报文由请求行、请求头部和请求体三个部分组成。其中,请求行是必须的,而请求头部和请求体则根据具体情况可选。
- 请求行:请求行包含一个方法、一个请求URI和一个协议版本,它们之间以空格分隔,并以CRLF(即:
\r\n
)结束。
方法
:就是上面介绍的RTSP方法。包括OPTIONS、DESCRIBE、SETUP、PLAY、PAUSE、TEARDOWN等。
请求URI
:标识要操作的媒体资源,格式通常为rtsp://example.com/path/to/stream。
协议版本
:表示请求遵循的RTSP协议版本,一般为RTSP/1.0
或RTSP/2.0
。
下面是一个完整的请求行的示例:OPTIONS rtsp://192.168.2.88:8554/3840x2160_8bit.264 RTSP/1.0
- 请求头部:请求头部包含一些附加信息,比如:CSeq(用于标识请求的序列号)、Session ID(会话标识符)、Transport(传输协议)等。每个头部字段由字段名、冒号和字段值组成,各头部字段之间以CRLF分隔。
下面是一个完整的请求头部的示例:CSeq: 2 User-Agent: LibVLC/3.0.19 (LIVE555 Streaming Media v2016.11.28)
- 请求体:某些RTSP(比如:DESCRIBE)请求可能包含请求体,用于传输额外的数据。请求体的具体内容,取决于请求行中所使用的RTSP方法。注意:在请求头部之后,需要插入一个空行(CRLF),用于区分请求头部与请求体。
3.2 、RTSP 的 响应报文
RTSP请求报文由状态行、响应头部和响应体三个部分组成。其中,状态行是必须的,而响应头部和响应体则根据具体情况可选。
- 状态行:状态行包含一个协议版本、一个状态码和一个状态文本,它们之间由空格分隔,并以CRLF(即:“\r\n”)结束。
协议版本
:表示响应遵循的RTSP协议版本,一般为RTSP/1.0或RTSP/2.0。
状态码
:三位数字,比如:200、401、500等,用于指示请求的处理结果。第一位数字代表响应类别:2xx表示成功,4xx表示客户端错误,5xx表示服务器错误。
状态文本
:简短的文字描述,解释对应状态码的具体含义,比如:OK、Unauthorized等。
下面是响应行例子:RTSP/1.0 200 OK
- 响应头部:响应头部包含与请求头部类似的信息,比如:CSeq(用于标识请求的序列号)、Session ID(会话标识符)、Transport(传输协议)等。每个响应头部字段的格式与请求头部相同,故这里不再赘述。
CSeq: 2 Date: Wed, Feb 04 1970 03:25:10 GMT Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER
- 响应体:某些RTSP响应(比如:DESCRIBE)可能包含响应体,用于传输额外的数据。注意:在响应头部之后,需要插入一个空行(CRLF),用于区分响应头部与响应体。
下面是一个完整的响应体的示例。v=0 o=- 8913478 1 IN IP4 192.168.3.91 s=LIVE555 Streaming Media v2016.07.19 i=1080 t=0 0 a=tool:LIVE555 Streaming Media v2016.07.19 a=type:broadcast a=control:* a=range:npt=0- a=x-qt-text-nam:LIVE555 Streaming Media v2016.07.19 a=x-qt-text-inf:1080 m=video 0 RTP/AVP 96 c=IN IP4 0.0.0.0 b=AS:5000 a=rtpmap:96 H264/90000 a=fmtp:96 packetization-mode=1;profile-level-id=64002A;sprop-parameter-sets=Z2QAKq2EAQwgCGEAQwgCGEAQwgCEO1A8ARPyoA==,aO48sA== a=control:track1 m=audio 0 RTP/AVP 97 c=IN IP4 0.0.0.0 b=AS:768 a=rtpmap:97 PCMA/48000/2 a=control:track2
🎄四
🎄五
🎄六、
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁
参考:
实时流协议—RTSP【详解】
从零开始精通RTSP之请求与响应详解1