跳到主要内容

Appendix A: RTSP Protocol State Machines (RTSP 协议状态机)

Appendix A: RTSP Protocol State Machines (RTSP 协议状态机)

RTSP client (客户端) 与 server (服务器) 状态机描述从 RTSP 会话初始化到终止的协议行为。

状态按 per object (每对象) 定义。对象由 stream URL (流 URL) 与 RTSP session identifier (会话标识符) 唯一确定。使用表示多流 RTSP presentation (演示) 的 aggregate URLs (聚合 URL) 的任何请求/应答会影响各流的独立状态。例如, 若演示 /movie 含 /movie/audio 与 /movie/video 两条流, 则命令:

PLAY rtsp://foo.com/movie RTSP/1.0 CSeq: 559 Session: 12345678

会影响 movie/audio 与 movie/video 的状态。

本例不暗示 URL 中表示流的标准方式或与文件系统的关系。见第 3.2 节。

OPTIONS, ANNOUNCE, DESCRIBE, GET_PARAMETER, SET_PARAMETER 请求不改变客户端或服务器状态, 因此不出现在状态表中。

A.1 Client State Machine (客户端状态机)

客户端可处于以下状态:

Init: 已发送 SETUP, 等待应答。

Ready: 已收到 SETUP 应答, 或在 Playing 状态下收到 PAUSE 应答。

Playing: 已收到 PLAY 应答。

Recording: 已收到 RECORD 应答。

一般地, 客户端在收到对请求的应答时改变状态。注意部分请求在将来时刻或位置生效 (如 PAUSE), 状态也相应变化。若对象无需显式 SETUP (例如经 multicast group (组播组) 可用), 状态从 Ready 开始。此时仅有 Ready 与 Playing。客户端在到达所请求范围末尾时也从 Playing/Recording 回到 Ready。

「下一状态」列表示收到成功响应 (2xx) 后的状态。若请求产生 3xx 状态码, 状态变为 Init; 4xx 不改变状态。各状态下未列出的消息 MUST NOT 由客户端发出, 上文列出的不改变状态的消息除外。收到服务器的 REDIRECT 等同于收到 3xx 重定向状态。

state message sent next state after response Init SETUP Ready TEARDOWN Init Ready PLAY Playing RECORD Recording TEARDOWN Init SETUP Ready Playing PAUSE Ready TEARDOWN Init PLAY Playing SETUP Playing (changed transport) Recording PAUSE Ready TEARDOWN Init RECORD Recording SETUP Recording (changed transport)

A.2 Server State Machine (服务器状态机)

服务器可处于以下状态:

Init: 初始状态, 尚未收到有效 SETUP。

Ready: 最后一次成功的 SETUP 已收到并已发送应答, 或播放后最后一次成功的 PAUSE 已收到并已发送应答。

Playing: 最后一次 PLAY 已成功, 已发送应答, 正在发送数据。

Recording: 服务器正在录制媒体数据。

一般地, 服务器在收到请求时改变状态。若服务器处于 Playing 或 Recording 且为 unicast mode (单播模式), 若在定义的时间间隔内 (默认一分钟) 未从客户端收到 "wellness" 信息 (如 RTCP 报告或 RTSP 命令), MAY 回到 Init 并拆除 RTSP 会话。服务器可在 Session 响应头 (第 12.37 节) 声明另一超时值。若处于 Ready, MAY 在超过一分钟未收到 RTSP 请求时回到 Init。注意部分请求 (如 PAUSE) 可能在将来时刻或位置生效, 服务器在适当时刻改变状态。在客户端请求的范围结束时, 服务器从 Playing 或 Recording 回到 Ready。

发送 REDIRECT 时除非带有指定重定向生效时刻的 Range 头, 否则立即生效; 该情况下服务器状态也在适当时刻改变。

若对象无需显式 SETUP, 状态从 Ready 开始, 仅存在 Ready 与 Playing。

「下一状态」列表示发送成功响应 (2xx) 后的状态。3xx 导致 Init; 4xx 不改变。

state message received next state Init SETUP Ready TEARDOWN Init Ready PLAY Playing SETUP Ready TEARDOWN Init RECORD Recording Playing PLAY Playing PAUSE Ready TEARDOWN Init SETUP Playing Recording RECORD Recording PAUSE Ready TEARDOWN Init SETUP Recording