setup factory许可协议信息编辑_rtsp协议之报文格式

1.RTSP URL的语法结构

一个终端用户是通过在播放器中输入URL地址开始进行观看流媒体业务的第一步,而对于使用RTSP协议的移动流媒体点播而言,URL的一般写法如下:

一个以“rtsp”或是“rtspu”开始的URL链接用于指定当前使用的是RTSP 协议。RTSP URL的语法结构如下:

rtsp_url = (“rtsp:”| “rtspu:”) “//” host [“:”port”] /[abs_path]/content_name

host:可以是一个有效的域名或是IP地址。

port:端口号,对于RTSP协议来说,缺省的端口号为554。当我们在确认流媒体服务器提供的端口号为554时,此项可以省略 说明:当HMS服务器使用的端口号为554时,我们在写点播链接时,可以不用写明端口号,但当使用非554端口时,在RTSP URL中一定要指定相应的端口。

abs_path: 为RTSPServer中的媒体流资源标识

RTSPURL用来标识RTSPServer的媒体流资源,可以标识单一的媒体流资源,也可以标 识多个媒体流资源的集合。

2.RTSP的报文结构

RTSP是一种基于文本的协议,用CRLF作为一行的结束符。使用基于文本协议的好处在于我们可以随时在使用过程中的增加自定义的参数,也可以随便将协议包抓住很直观的进行分析。

RTSP有两类报文:请求报文和响应报文。请求报文是指从客户向服务器发送请求报文,响应报文是指从服务器到客户的回答。

由于 RTSP 是面向正文的(text-oriented),因此在报文中的每一个字段都是一些 ASCII 码串,因而每个字段的长度都是不确定的。

RTSP报文由三部分组成,即开始行、首部行和实体主体。在请求报文中,开始行就是请求行.

2.1.请求报文

请求报文的结构如下图所示

e54e7140c1787365146361de83c5156c.png

也就是说:

方法 URI RTSP版本 CR LF

消息头 CR LF CR LF

消息体 CR LF

1).请求消息的第一行的语法结构如下:

Request-Line = Method 空格 Request-URI 空格 RTSP-Version CRLF

其中方法包括OPIONS、DESCRIBE、SETUP、PLAY、TEARDOWN等,URI是接受方的地址,例如:rtsp://192.168.0.1/video1.3gp。

RTSP版本一般都是 RTSP/1.0。每行后面的CR LF表示回车换行,需要接受端有相应的解析,

2).在消息头中除了第一行的内容外,还有一些需求提供附加信息。其中有些是一定要的,后续我们会详细介绍经常用到的几个域的含义。

消息头 = Accept

| Accept-Encoding

| Accept-Language

| Authorization

| From

| If-Modified-Since

| Range

| Referer

| User-Agent

3).最后一个消息头需要有两个CR LF。消息体是可选的,有的Request消息并不带消息体。

2.2.响应报文

响应报文的开始行是状态行,RTSP响应报文的结构如下图所示

a48f73205b89101c57ab2fcc082fc9ba.png

也就是说:

RTSP版本状态码解释 CR LF

消息头 CR LF CR LF

消息体 CR LF

1).响应消息的第一行是状态行(status-line),每个元素之间用空格分开。除了最后的CRLF之外,在此行的中间不得有CR或是LF的出现。它的语法格式如下,

Status-Line = RTSP-Version 空格 Status-Code 空格 Reason-Phrase CRLF

状态码(Status-Code) 是一个三位数的整数,用于描述接收方对所收到请求消息的执行结果,

Status-Code的第一位数字指定了这个回复消息的种类,一共有5类:

1XX: Informational – 请求被接收到,继续处理

2XX: Success – 请求被成功的接收,解析并接受

3XX: Redirection – 为完成请求需要更多的操作

4XX: Client Error – 请求消息中包含语法错误或是不能够被有效执行

5XX: Server Error – 服务器响应失败,无法处理正确的有效的请求消息

我们在处理问题时经常会遇到的状态码有如下:

| | |

---|---|---|---|--- Status-Code | = |“200”| : OK . || | “400”| : Bad Request . || | “404”| : Not Found . || | “500”| : Internal Server Error

2).在响应消息的域中存放的是无法放在Status-Line中,而又需要传送给请求者的一些附加信息。

消息头 = Location

| Proxy-Authenticate

| Public

| Retry-After

| Server

| Vary

| WWW-Authenticate

3.RTSP的主要方法

方法

方向

对象

要求

含义

DESCRIBE

C->S

P,S

推荐

检查演示或媒体对象的描述,也允许使用接收头指定用户理解的描述格式。DESCRIBE的答复-响应组成媒体RTSP初始阶段

ANNOUNCE

C->S S->C

P,S

可选

当从用户发往服务器时,ANNOUNCE将请求URL识别的演示或媒体对象描述发送给服务器;反之,ANNOUNCE实时更新连接描述。如新媒体流加入演示,整个演示描述再次发送,而不仅仅是附加组件,使组件能被删除

GET_PARAMETER

C->S S->C

P,S

可选

GET_PARAMETER请求检查RUL指定的演示与媒体的参数值。没有实体体时,GET_PARAMETER也许能用来测试用户与服务器的连通情况

OPTIONS

C->S S->C

P,S

要求

可在任意时刻发出OPTIONS请求,如用户打算尝试非标准请求,并不影响服务器状态

PAUSE

C->S

P,S

推荐

PAUSE请求引起流发送临时中断。如请求URL命名一个流,仅回放和记录被停止;如请求URL命名一个演示或流组,演示或组中所有当前活动的流发送都停止。恢复回放或记录后,必须维持同步。在SETUP消息中连接头超时参数所指定时段期间被暂停后,尽管服务器可能关闭连接并释放资源,但服务器资源会被预订

PLAY

C->S

P,S

要求

PLAY告诉服务器以SETUP指定的机制开始发送数据;直到一些SETUP请求被成功响应,客户端才可发布PLAY请求。PLAY请求将正常播放时间设置在所指定范围的起始处,发送流数据直到范围的结束处。PLAY请求可排成队列,服务器将PLAY请求排成队列,顺序执行

RECORD

C->S

P,S

可选

该方法根据演示描述初始化媒体数据记录范围,时标反映开始和结束时间;如没有给出时间范围,使用演示描述提供的开始和结束时间。如连接已经启动,立即开始记录,服务器数据请求URL或其他URL决定是否存储记录的数据;如服务器没有使用URL请求,响应应为201(创建),并包含描述请求状态和参考新资源的实体与位置头。支持现场演示记录的媒体服务器必须支持时钟范围格式,smpte格式没有意义

REDIRECT

S->C

P,S

可选

重定向请求通知客户端连接到另一服务器地址。它包含强制头地址,指示客户端发布URL请求;也可能包括参数范围,以指明重定向何时生效。若客户端要继续发送或接收URL媒体,客户端必须对当前连接发送TEARDOWN请求,而对指定主执新连接发送SETUP请求

SETUP

C->S

S

要求

对URL的SETUP请求指定用于流媒体的传输机制。客户端对正播放的流发布一个SETUP请求,以改变服务器允许的传输参数。如不允许这样做,响应错误为"455 Method Not Valid In This State”。为了透过防火墙,客户端必须指明传输参数,即使对这些参数没有影响

SET_PARAMETER

C->S S->C

P,S

可选

请求设置演示或URL指定流的参数值。请求仅应包含单个参数,允许客户端决定某个特殊请求为何失败。如请求包含多个参数,所有参数可成功设置,服务器必须只对该请求起作用。服务器必须允许参数可重复设置成同一值,但不让改变参数值。注意:媒体流传输参数必须用SETUP命令设置。将设置传输参数限制为SETUP有利于防火墙。将参数划分成规则排列形式,结果有更多有意义的错误指示

TEARDOWN

C->S

P,S

要求

TEARDOWN请求停止给定URL流发送,释放相关资源。如URL是此演示URL,任何RTSP连接标识不再有效。除非全部传输参数是连接描述定义的,SETUP请求必须在连接可再次播放前发布

注:P---演示,C---客户端,S---服务器, S(对象栏)---流

信令指的是在Request-URI中指定的需要被接收者完成的操作。信令(The method)大小写敏感,不能以字符”$”开始,并且一定要是一个标记符。

4.RTSP重要头字段参数

Accept: 用于指定客户端可以接受的媒体描述信息类型。比如: Accept: application/rtsl, application/sdp;level=2

Bandwidth: 用于描述客户端可用的带宽值。

CSeq: 指定了RTSP请求回应对的序列号,在每个请求或回应中都必须包括这个头字段。对每个包含一个给定序列号的请求消息,都会有一个相同序列号的回应消息。 命令的序列号,逐1增加。 所有的请求和应答都用得到。

Rang: 用于指定一个时间范围,可以使用SMPTE、NTP或clock时间单元。

Session: Session头字段标识了一个RTSP会话。Session ID 是由服务器在SETUP的回应中选择的,客户端一旦得到Session ID后,在以后的对Session 的操作请求消息中都要包含Session ID.

Transport: Transport头字段包含客户端可以接受的传输选项列表,包括传输协议,地址端口,TTL等。服务器端也通过这个头字段返回实际选择的具体选项。如: Transport: RTP/AVP;multicast;ttl=127;mode="PLAY", RTP/AVP;unicast;client_port=3456-3457;mode="PLAY"

Content-Length: 这个标记的存在说明后面有实体数据,而且给出了这个数据块的大小,单位是byte

X-Playlist-Gen-Id: 用来检查播放列表是否有效。这个标记最初在客户端发送DESCRIBE命令后使用。 客户端在发送“SETUP”命令给服务器时必须回 应一样的值

X-Playlist-Seek-Id: 值必须和X-Playlist-Gen-Id 域的值相同,在PLAY请求命令中使用.

Blocksize: 媒体包的总长度,单位是byte

Session: Session ID是用作客户端和服务器之间是否是正确的连接。在客户端发送SETUP命令,服务器会在应答消息头里面发送这个值给 客 户端。 We only see the Session value on the first stream selected (usually this is the audio stream)。Session 值相当的长,一 共有20个阿拉伯数字。紧跟着Session值, 你可以看到一个值:“timeout= xxxx”。. 这是服务器需要得到回应或者ACK回应(为了保 持连接)的时间。客户端必须在这个时段内发送一个ACK ,要不然连接就要被强制中断。一个ACK就是发送一条 GET_PARAMETER命令到服务器。

X-Accept-Authentication: 允许的authentication 方法 NTLM, Digest 和 Basic 是标准的

X-Broadcast-Id: 是否是实况或者是先期录制的流。0 表示先期录制,其他的值表示是实况。

Range: Range is the offset and end time positions to stream the media. For a zero start and full file stream, this value is set to:npt=0.000-where 0.000 is the offset and –0.000 (optional) is the ending time. Values are stated in seconds.

Speed: 用来调整传输到客户端的流得速度。假如你的带宽可以接受更高速的数据传送,这个域的值可以设置大于1来加速下载数 据普通情况 Speed: 1.0 i.e. x1 rate Media player 使用 : Speed: 1.294 这个主要取决于你的网络连接速度。

Server: 服务器类型和软件版本

EOF: 文件结束标记,也是流的结束标记

Date: 日期时间,下面举个例子:Tue, 18 Nov 2003 15:57:07 GMT

Bandwidth: 流需要的最大带宽,bits/秒

Transport: 使用什么协议来传输数据,比如TCP或者UDP等

Etag: 实体标记Entity tag,是一个分配给会话的值,就像"23180160"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值