RTSP协议

RTSP协议标准字段详解

1. RTSP协议概述

RTSP(Real Time Streaming Protocol,实时流传输协议)是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学、网景和RealNetworks公司提交的IETF RFC标准RFC2326定义。RTSP协议用于控制具有实时特性的数据(如音视频流)的传输,提供播放、暂停、停止、快进、快退等控制功能。

RTSP协议基于文本,语法和HTTP协议类似,但RTSP是有状态的协议,维护与客户端的会话状态。

RTSP协议设计上遵循了客户端-服务器模型,客户端发送请求,服务器返回响应。与HTTP不同的是,RTSP服务器需要维护会话状态,而HTTP是无状态协议。RTSP通常与RTP(Real-time Transport Protocol)配合使用,RTSP负责控制,RTP负责数据传输。

2. RTSP消息结构

RTSP协议消息分为两类:请求消息(Request)和响应消息(Response)。

2.1 RTSP请求消息格式

Method SP Request-URI SP RTSP-Version CRLF
Header-field:CRLF
...
CRLF
[Message-Body]

其中:

  • Method: RTSP方法名,如OPTIONS、DESCRIBE、SETUP等
  • SP: 空格字符
  • Request-URI: 请求的统一资源标识符
  • RTSP-Version: RTSP协议版本,通常为"RTSP/1.0"
  • CRLF: 回车换行符(\r\n)
  • Header-field: 头字段,格式为"字段名: 字段值"
  • Message-Body: 可选的消息体

2.2 RTSP响应消息格式

RTSP-Version SP Status-Code SP Reason-Phrase CRLF
Header-field:CRLF
...
CRLF
[Message-Body]

其中:

  • RTSP-Version: RTSP协议版本,通常为"RTSP/1.0"
  • Status-Code: 三位数字的状态码
  • Reason-Phrase: 状态码的文本描述

3. RTSP消息结构字段详解

3.1 RTSP请求消息结构字段

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Method Name (Variable Length)    SP                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Request-URI (Variable Length)    SP                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      RTSP-Version (8)         CRLF                          ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~      Header Fields (Variable)        CRLF                    ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                        CRLF                                 ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Message Body (Optional)                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

3.2 RTSP请求消息字段详解表

字节位置字段名称长度说明取值范围
0-nMethod可变请求方法名称OPTIONS, DESCRIBE, SETUP, PLAY, PAUSE, TEARDOWN, GET_PARAMETER, SET_PARAMETER, ANNOUNCE, RECORD, REDIRECT
n+1SP1空格分隔符0x20
n+2-mRequest-URI可变请求资源URI符合RFC 3986的URI格式
m+1SP1空格分隔符0x20
m+2-oRTSP-Version8RTSP协议版本RTSP/1.0
o+1CRLF2行结束符\r\n (0x0D 0x0A)
o+3-pHeader Fields可变头字段格式为"字段名: 字段值"
p+1CRLF2头部结束符\r\n (0x0D 0x0A)
p+3-qMessage Body可变消息体(可选)根据Content-Length确定长度

3.3 RTSP响应消息结构字段

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      RTSP-Version (8)         SP      Status Code (3)       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      SP       Reason Phrase (Variable)        CRLF          ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~      Header Fields (Variable)        CRLF                    ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                        CRLF                                 ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Message Body (Optional)                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

3.4 RTSP响应消息字段详解表

字节位置字段名称长度说明取值范围
0-7RTSP-Version8RTSP协议版本RTSP/1.0
8SP1空格分隔符0x20
9-11Status Code3状态码100-599
12SP1空格分隔符0x20
13-nReason Phrase可变状态码描述文本描述
n+1CRLF2行结束符\r\n (0x0D 0x0A)
n+3-mHeader Fields可变头字段格式为"字段名: 字段值"
m+1CRLF2头部结束符\r\n (0x0D 0x0A)
m+3-pMessage Body可变消息体(可选)根据Content-Length确定长度

4. RTSP标准字段定义

4.1 通用字段分类

RTSP协议中的头字段可以分为以下几类:

字段类型缩写说明
通用头字段g请求和响应中都可以使用的字段
请求头字段R只在请求中使用的字段
响应头字段r只在响应中使用的字段
实体头字段e定义消息体的元信息

4.2 RTSP标准头字段详解

以下表格总结了RTSP协议中定义的标准头字段:

头字段名称类型支持方法必需性详细说明
AcceptRentity可选指定客户端可以接受的媒体描述信息类型,例如"application/sdp"或"application/rtsl"
Accept-EncodingRentity可选指定客户端可以接受的内容编码方式,如gzip等
Accept-LanguageRall可选指定客户端可以接受的自然语言,如"en"、"zh-CN"等
Allowrall可选列出服务器支持的请求方法,如"OPTIONS, DESCRIBE, SETUP, PLAY, PAUSE, TEARDOWN"
AuthorizationRall可选客户端的认证信息,用于访问受保护的资源
BandwidthRall可选描述客户端可用的带宽值,单位为bits/s
BlocksizeRall but OPTIONS, TEARDOWN可选描述客户端希望接收的数据块大小,单位为字节
Cache-ControlgSETUP可选指定请求/响应链上所有缓存机制必须遵守的指令
ConferenceRSETUP可选标识会议信息,用于多方会议场景
Connectiongall必需控制不在转发的连接选项,如"close"表示关闭连接
Content-Baseeentity可选解析实体中相对URL的基础URL
Content-EncodingeSET_PARAMETER, DESCRIBE, ANNOUNCE必需/可选实体的编码方式,如gzip、compress等
Content-LanguageeDESCRIBE, ANNOUNCE必需实体的自然语言,如"en"、"zh-CN"等
Content-LengtheSET_PARAMETER, ANNOUNCE, entity必需实体主体的大小(字节),用于确定消息体长度
Content-Locationeentity可选实体的替代位置,表示实体数据的实际URL
Content-TypeeSET_PARAMETER, ANNOUNCE, entity必需实体的媒体类型,如"application/sdp"、"text/parameters"等
CSeqgall必需请求序列号,用于匹配请求和响应,每个请求的CSeq值必须唯一且递增
Dategall可选消息产生的时间,格式为RFC 1123日期时间格式
ExpireseDESCRIBE, ANNOUNCE可选实体过期时间,格式为RFC 1123日期时间格式
FromRall可选请求用户的邮箱地址,用于标识请求发起者
If-Modified-SinceRDESCRIBE, SETUP可选只有在指定时间之后实体被修改才请求,用于缓存控制
Last-Modifiedeentity可选实体最后一次修改的时间,格式为RFC 1123日期时间格式
Proxy-Authenticate代理服务器的认证质询信息
Proxy-RequireRall必需代理必须支持的扩展标签,如果代理不支持则返回551状态码
Publicrall可选服务器支持的请求方法列表
RangeR,rPLAY, PAUSE, RECORD可选指定播放的时间范围,支持多种时间格式如NPT、SMPTE等
RefererRall可选当前请求URI的引用URI,表示从哪个页面发起的请求
RequireRall必需客户端要求服务器支持的扩展标签,如果服务器不支持则返回551状态码
Retry-Afterrall可选服务不可用时,客户端应该在多久之后重试,可以是时间或日期
RTP-InforPLAY必需RTP流的信息,如序列号和时间戳,用于同步多个流
ScaleR,rPLAY, RECORD可选控制播放速度和方向,正值表示正向播放,负值表示反向播放
SessionR,rall but SETUP, OPTIONS必需标识RTSP会话,由服务器在SETUP响应中生成
Serverrall可选服务器软件信息,如"RTSP Server 1.0"
SpeedR,rPLAY可选控制播放速度,1.0表示正常速度
TransportR,rSETUP必需指定传输层参数,如传输协议、端口号、多播地址等
Unsupportedrall必需服务器不支持的扩展标签,与Require或Proxy-Require对应
User-AgentRall可选客户端程序信息,如"LibVLC/3.0.0"
Viagall可选显示请求链上的代理和网关,用于追踪请求路径
WWW-Authenticaterall可选服务器的认证质询信息,用于401响应

5. 重要字段详解

5.1 CSeq(Command Sequence)

  • 类型: 通用头字段(g)
  • 必需性: 所有请求和响应都必须包含
  • 作用: 用于匹配请求和响应,每个请求的CSeq值必须唯一且递增
  • 详细说明: CSeq是RTSP协议中最重要的字段之一,它确保了请求和响应的正确匹配。客户端发送每个请求时,都需要包含一个唯一的CSeq值,服务器在响应中必须使用相同的CSeq值。这使得客户端能够正确地将响应与对应的请求匹配起来,即使响应的到达顺序与请求的发送顺序不一致。

5.2 Session

  • 类型: 请求/响应头字段(R/r)
  • 必需性: SETUP和OPTIONS之外的所有方法都必须包含
  • 作用: 标识RTSP会话,由服务器在SETUP响应中生成
  • 详细说明: Session ID是服务器为每个会话生成的唯一标识符,客户端在后续的所有请求中都必须包含该Session ID。Session ID使得服务器能够区分不同客户端的会话,维护每个会话的状态信息。在SETUP响应中,服务器会返回一个Session ID,客户端需要在之后的PLAY、PAUSE等请求中包含该ID。

5.3 Transport

  • 类型: 请求/响应头字段(R/r)
  • 必需性: SETUP方法必需
  • 作用: 指定传输层参数,包括传输协议、端口号、多播地址等
  • 详细说明: Transport字段是SETUP方法中最关键的字段,它定义了媒体数据的传输方式。常见的传输参数包括:
    • 传输协议: 如RTP/AVP(RTP over UDP)、RTP/AVP/TCP(RTP over TCP)
    • 单播/多播: unicast(单播)或multicast(多播)
    • 客户端端口: client_port=端口号-端口号(RTP端口-RTCP端口)
    • 服务器端口: server_port=端口号-端口号(RTP端口-RTCP端口)
    • 多播地址: destination=多播地址
    • SSRC: ssrc=同步源标识符

5.4 Range

  • 类型: 请求/响应头字段(R/r)
  • 必需性: PLAY、PAUSE、RECORD方法可选
  • 作用: 指定播放的时间范围,支持多种时间格式
  • 详细说明: Range字段用于指定播放的时间范围,支持多种时间格式:
    • NPT (Normal Play Time): npt=开始时间-[结束时间],如"npt=10-15"表示播放第10秒到第15秒
    • SMPTE时间格式: smpte=开始时间-[结束时间],如"smpte=0:02:30-"
    • 时间单位: 可以使用秒、毫秒等时间单位
    • 特殊值: "-"表示从开始或到结束

5.5 RTP-Info

  • 类型: 响应头字段(r)
  • 必需性: PLAY方法必需
  • 作用: 提供RTP流的信息,包括URL、序列号、时间戳等
  • 详细说明: RTP-Info字段在PLAY响应中提供RTP流的关键信息,用于客户端同步播放:
    • URL: url=流的URL
    • 序列号: seq= RTP包的序列号
    • 时间戳: rtptime= RTP时间戳
    • 多个流: 可以包含多个流的信息,用逗号分隔

5.6 Content-Type

  • 类型: 实体头字段(e)
  • 必需性: 包含实体主体时必需
  • 作用: 指定实体内容的媒体类型,如"application/sdp"
  • 详细说明: Content-Type字段指定消息体的媒体类型,常见值包括:
    • application/sdp: 会话描述协议,用于DESCRIBE响应
    • text/parameters: 文本参数,用于GET_PARAMETER/SET_PARAMETER
    • application/rtsl: RTSP文本语言

6. Transport字段结构详解

6.1 Transport字段结构

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       Transport Spec (Variable Length)                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       Parameters (Variable)                                   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

6.2 Transport字段详解表

位置参数名称必需性说明示例
0-nTransport Spec必需传输规范RTP/AVP
n-municast/multicast可选单播或多播unicast
m-pdestination多播必需多播地址destination=224.0.1.123
p-qsource可选源地址source=192.168.1.100
q-rlayers可选层数layers=1
r-sappend可选追加模式append
s-tinterleavedTCP可选交织通道interleaved=0-1
t-uTTL多播可选生存时间TTL=16
u-vclient_port单播必需客户端端口client_port=8000-8001
v-wserver_port可选服务器端口server_port=9000-9001
w-xport多播可选端口号port=8050
x-yssrc可选同步源标识符ssrc=1234ABCD

7. RTSP状态码

RTSP协议使用类似HTTP的状态码:

状态码含义说明
200OK请求成功,操作已完成
250Low on Storage Space存储空间不足,但仍在记录
301Moved Permanently资源永久移动到新位置
302Moved Temporarily资源临时移动到新位置
304Not Modified资源未修改,可使用缓存版本
400Bad Request请求语法错误,服务器无法理解
401Unauthorized未授权,需要认证信息
403Forbidden禁止访问,服务器拒绝请求
404Not Found资源不存在
405Method Not Allowed方法不允许,服务器不支持该方法
406Not Acceptable不可接受,无法满足Accept字段要求
408Request Timeout请求超时
412Precondition Failed先决条件失败
414Request-URI Too Long请求URI过长
415Unsupported Media Type不支持的媒体类型
451Parameter Not Understood参数不理解
452Conference Not Found会议未找到
453Not Enough Bandwidth带宽不足
454Session Not Found会话未找到
455Method Not Valid in This State方法在当前状态下无效
456Header Field Not Valid for Resource头字段对资源无效
457Invalid Range无效范围
458Parameter Is Read-Only参数只读
459Aggregate Operation Not Allowed不允许聚合操作
460Only Aggregate Operation Allowed只允许聚合操作
461Unsupported Transport不支持的传输
462Destination Unreachable目标不可达
500Internal Server Error服务器内部错误
501Not Implemented未实现,服务器不支持该功能
502Bad Gateway网关错误
503Service Unavailable服务不可用
504Gateway Timeout网关超时
505RTSP Version Not SupportedRTSP版本不支持
551Option not supported选项不支持

8. RTSP方法

RTSP协议定义了以下标准方法:

方法方向请求对象描述
OPTIONSC->SP,S查询服务器能力,获取支持的方法列表
DESCRIBEC->SP获取媒体描述信息,通常返回SDP格式的描述
ANNOUNCEC->S, S->CP发布会话描述,用于客户端或服务器发布描述信息
SETUPC->SS为传输建立参数,分配服务器端口和资源
PLAYC->SS开始发送数据,开始播放媒体流
PAUSEC->SS暂停数据发送,暂停播放
TEARDOWNC->SS结束会话,释放资源
GET_PARAMETERC->SS获取参数值,用于查询服务器状态
SET_PARAMETERC->SS设置参数值,用于控制服务器参数
REDIRECTS->CP重定向流,服务器通知客户端连接到新位置
RECORDC->SS开始录制,开始录制媒体流

其中:

  • C->S:客户端到服务器
  • S->C:服务器到客户端
  • P:演示(Presentation)
  • S:流(Stream)

9. 实际应用示例

9.1 SETUP请求示例

SETUP rtsp://example.com/media.mp4/streamid=0 RTSP/1.0
CSeq: 1
Transport: RTP/AVP;unicast;client_port=8000-8001

详细解释:

  • 客户端请求为媒体流(streamid=0)建立传输连接
  • CSeq为1,用于匹配响应
  • Transport指定使用RTP/AVP协议,单播方式,客户端端口为8000(RTP)和8001(RTCP)

9.2 SETUP响应示例

RTSP/1.0 200 OK
CSeq: 1
Transport: RTP/AVP;unicast;client_port=8000-8001;server_port=9000-9001;ssrc=1234ABCD
Session: 12345678

详细解释:

  • 服务器返回200 OK状态码表示成功
  • CSeq为1,与请求匹配
  • Transport字段返回服务器分配的端口信息和SSRC
  • Session字段返回会话ID,后续请求需要包含此ID

9.3 PLAY请求示例

PLAY rtsp://example.com/media.mp4 RTSP/1.0
CSeq: 2
Session: 12345678
Range: npt=0-

详细解释:

  • 客户端请求开始播放媒体
  • CSeq为2,递增
  • Session为之前SETUP返回的会话ID
  • Range指定播放范围,npt=0-表示从头开始播放到结束

9.4 PLAY响应示例

RTSP/1.0 200 OK
CSeq: 2
Session: 12345678
RTP-Info: url=rtsp://example.com/media.mp4/streamid=0;seq=12345;rtptime=789012345
Range: npt=0-300.5

详细解释:

  • 服务器返回200 OK状态码表示播放开始
  • CSeq为2,与请求匹配
  • Session为会话ID
  • RTP-Info提供RTP流的初始序列号和时间戳信息
  • Range表示实际播放的时间范围

10. RTSP协议工作流程

RTSP协议的典型工作流程包括以下几个步骤:

  1. OPTIONS: 客户端查询服务器支持的方法
  2. DESCRIBE: 客户端获取媒体描述信息(SDP)
  3. SETUP: 客户端为每个媒体流建立传输连接
  4. PLAY: 客户端开始播放媒体流
  5. PAUSE: 客户端可选择暂停播放
  6. TEARDOWN: 客户端结束会话,释放资源

10.1 完整会话示例

C->S: OPTIONS rtsp://example.com/media.mp4 RTSP/1.0
C->S: CSeq: 1

S->C: RTSP/1.0 200 OK
S->C: CSeq: 1
S->C: Public: OPTIONS, DESCRIBE, SETUP, PLAY, PAUSE, TEARDOWN

C->S: DESCRIBE rtsp://example.com/media.mp4 RTSP/1.0
C->S: CSeq: 2
C->S: Accept: application/sdp

S->C: RTSP/1.0 200 OK
S->C: CSeq: 2
S->C: Content-Type: application/sdp
S->C: Content-Length: 444

S->C: v=0
S->C: o=- 1234567890 1234567890 IN IP4 192.168.1.1
S->C: s=RTSP Session
S->C: i=An Example
S->C: t=0 0
S->C: a=control:*
S->C: m=video 0 RTP/AVP 96
S->C: a=control:trackID=1
S->C: a=rtpmap:96 H264/90000

C->S: SETUP rtsp://example.com/media.mp4/trackID=1 RTSP/1.0
C->S: CSeq: 3
C->S: Transport: RTP/AVP;unicast;client_port=8000-8001

S->C: RTSP/1.0 200 OK
S->C: CSeq: 3
S->C: Transport: RTP/AVP;unicast;client_port=8000-8001;server_port=9000-9001
S->C: Session: 12345678

C->S: PLAY rtsp://example.com/media.mp4 RTSP/1.0
C->S: CSeq: 4
C->S: Session: 12345678
C->S: Range: npt=0-

S->C: RTSP/1.0 200 OK
S->C: CSeq: 4
S->C: Session: 12345678
S->C: RTP-Info: url=rtsp://example.com/media.mp4/trackID=1;seq=12345;rtptime=789012345

C->S: TEARDOWN rtsp://example.com/media.mp4 RTSP/1.0
C->S: CSeq: 5
C->S: Session: 12345678

S->C: RTSP/1.0 200 OK
S->C: CSeq: 5

11. RTSP与相关协议的关系

11.1 RTSP与RTP

  • RTSP负责控制,RTP负责数据传输
  • RTSP SETUP阶段协商RTP传输参数
  • RTP-Info头字段提供RTP流的同步信息

11.2 RTSP与SDP

  • DESCRIBE方法返回SDP格式的媒体描述
  • SDP描述媒体流的编码格式、传输参数等信息
  • SETUP方法使用SDP中的trackID标识媒体流

11.3 RTSP与HTTP

  • 语法相似,都基于文本
  • RTSP是有状态协议,HTTP是无状态协议
  • RTSP支持双向通信,HTTP主要是客户端到服务器

12. 总结

RTSP协议作为一个应用层控制协议,提供了丰富的头字段来控制实时流媒体的传输。理解这些标准字段对于开发RTSP客户端和服务器都非常重要。RTSP协议与HTTP协议在语法上相似,但功能上更专注于流媒体的控制,通过与RTP/RTCP协议配合,实现了完整的流媒体传输解决方案。

RTSP协议的关键特性包括:

  1. 基于文本的协议,易于调试和分析
  2. 有状态协议,维护会话状态
  3. 支持多种控制方法,提供完整的播放控制
  4. 与RTP协议配合,实现高效的媒体传输
  5. 支持单播和多播传输
  6. 支持多种时间格式和播放范围控制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值