Appendix C: Use of SDP for RTSP Session Descriptions (SDP 用于 RTSP 会话描述)
Appendix C: Use of SDP for RTSP Session Descriptions (SDP 用于 RTSP 会话描述)
Session Description Protocol (SDP, RFC 2327 [6]) 可用于在 RTSP 中描述流或演示。此类用途仅限于指明访问手段与编码:
aggregate control (聚合控制): 演示由一台或多台服务器上的流组成, 且这些流不可聚合控制。此类描述通常经 HTTP 或其他非 RTSP 手段获取, 也可能随 ANNOUNCE 方法收到。
non-aggregate control (非聚合控制): 演示由单台服务器上可聚合控制的多条流组成。此类描述通常在 URL 上 DESCRIBE 请求的应答中返回, 或在 ANNOUNCE 方法中收到。
本附录说明经 HTTP 等获取的 SDP 文件如何决定 RTSP 会话操作, 以及客户端应如何解释 DESCRIBE 应答中的 SDP 内容。SDP 无法让客户端在没有人工指导的情况下区分「需同时渲染的多条媒体流」与「一组备选流 (如两种语言的音频)」。
C.1 Definitions (定义)
本附录中的 "session-level", "media-level" 及其他键名与值均按 SDP (RFC 2327 [6]) 中的定义使用:
C.1.1 Control URL (控制 URL)
属性 a=control: 用于传达 control URL (控制 URL)。会话级与媒体级描述均可使用。用于各媒体时, 指明控制该媒体流的 URL。若在会话级出现, 指明 aggregate control (聚合控制) 的 URL。
示例: a=control:rtsp://example.com/foo
该属性可为相对或绝对 URL, 遵循 RFC 1808 [25] 的规则与惯例。实现应按以下顺序查找 base URL (基 URL):
- RTSP Content-Base 字段
- RTSP Content-Location 字段
- RTSP 请求 URL
若属性仅为星号 (*), 则视为空嵌入 URL, 继承整个基 URL。
C.1.2 Media streams (媒体流)
m= 字段用于枚举流。预期所有指定流将适当同步渲染。若为 unicast (单播), 端口号为服务器对客户端的建议; 客户端仍须在 SETUP 中包含并可忽略此建议。若服务器无偏好, SHOULD 将端口置零。
示例: m=audio 0 RTP/AVP 31
C.1.3 Payload type(s) (负载类型)
负载类型在 m= 字段中指定。若为 RFC 1890 [1] 的 static payload type (静态负载类型), 无需其他信息。若为 dynamic payload type (动态负载类型), 用媒体属性 rtpmap 指明媒体内容。rtpmap 中的 "encoding name" 可为 RFC 1890 (第 5、6 节) 所列之一, 或 SDP (RFC 2327 [6]) 规定的带 "X-" 前缀的实验编码。编解码器专用参数不在此字段而在下文 fmtp 属性中说明。若需注册新编码, 应遵循 RFC 1890 [1] 的流程。若媒体类型不适合 RTP AV profile, 建议新建 profile 并在 m= 中用相应 profile 名替代 "RTP/AVP"。
C.1.4 Format-specific parameters (格式专用参数)
格式专用参数用 fmtp 媒体属性传达。fmtp 语法取决于所指编码。分包间隔用 ptime 属性传达。
C.1.5 Range of presentation (演示范围)
a=range 属性定义已存储会话的总时间范围。(实况会话长度可由 t 与 r 参数推断。) 除非演示中各媒体流时长不同, range 属性为会话级属性。先写单位, 再写取值范围; 单位与取值见第 3.5、3.6、3.7 节。
示例: a=range:npt=0-34.4368
a=range:clock=19971113T2115-19971113T2203
C.1.6 Time of availability (可用时间)
t= 字段 MUST 为聚合与非聚合流控制均包含合适的起止时间。聚合控制时, 服务器 SHOULD 给出保证描述有效的 stop time (结束时间), 以及等于或早于收到 DESCRIBE 时刻的 start time (开始时间)。MAY 也可使用 0 起止表示始终可用。非聚合控制时, 取值应反映会话实际可用时段并符合 SDP 语义, 而不应依赖其他手段 (如含描述的网页寿命)。
C.1.7 Connection Information (连接信息)
SDP 中 c= 字段含媒体流的目的地址。但对点播单播及部分组播流, 目的地址由客户端通过 SETUP 指定。除非媒体内容有固定目的地址, c= 应设为合适的空值。对 "IP4" 类型地址, 该值为 0.0.0.0。
C.1.8 Entity Tag (实体标签)
可选属性 a=etag 标识会话描述的版本。对客户端不透明。SETUP 请求可在 If-Match 字段 (见第 12.22 节) 中包含该标识符, 以仅当属性值仍与当前描述一致时才允许建立会话。属性值不透明, 可含 SDP 属性值允许的任何字符。
示例: a=etag:158bb3e7c7fd62ce67f12b533f06b83a
可以说 o= 字段提供相同功能, 但会以需要为同一媒体内容支持 SDP 以外多种会话描述类型的服务器施加约束。
C.2 Aggregate Control Not Available (不可用聚合控制)
若演示不支持聚合控制且指定了多个媒体段, 每段 MUST 通过 a=control: 指定控制 URL。
示例: v=0 o=- 2890844256 2890842807 IN IP4 204.34.34.32 s=I came from a web page t=0 0 c=IN IP4 0.0.0.0 m=video 8002 RTP/AVP 31 a=control:rtsp://audio.com/movie.aud m=audio 8004 RTP/AVP 3 a=control:rtsp://video.com/movie.vid
描述中控制 URL 的位置表明客户端需分别与服务器 audio.com 与 video.com 建立独立 RTSP 控制会话。
建议 SDP 文件包含完整媒体初始化信息, 即使通过非 RTSP 方式送达客户端。否则无法指示客户端应经 DESCRIBE 请求更详细的流信息。
C.3 Aggregate Control Available (可用聚合控制)
此场景中服务器有多条可作为整体控制的流。既有媒体级 a=control: (指定各流 URL), 也有会话级 a=control: (作为聚合控制的请求 URL)。若媒体级 URL 为相对 URL, 按上文 C.1.1 解析为绝对 URL。
若演示仅含单条流, 可完全省略媒体级 a=control:。但若包含多于一条流, 每个媒体段 MUST 含各自的 a=control 属性。
示例: v=0 o=- 2890844256 2890842807 IN IP4 204.34.34.32 s=I contain i=
本例中客户端需与服务器建立单一 RTSP 会话, 使用 rtsp://example.com/movie/trackID=1 与 rtsp://example.com/movie/trackID=2 分别建立视频与音频流, rtsp://example.com/movie/ 控制整部影片。