1. Introduction (简介)
1.1. Terminology (术语)
本文档使用 [RFC8825] 中的术语. 此外, 下列术语按如下含义使用:
RTP stream (RTP 流): 承载媒体数据的 RTP 分组流 [RFC7656].
MediaStream: MediaStreamTrack 的集合 [W3C.CR-mediacapture-streams]. 一个 MediaStream 可以包含多个 MediaStreamTrack, 类型可以相同或不同.
MediaStreamTrack: 在 [W3C.CR-mediacapture-streams] 中定义为单向的媒体数据流 (音频或视频之一, 不能两者兼有). 对应 [RFC7656] 中的术语「源流 (source stream)」. 一个 MediaStreamTrack 可以出现在零个, 一个或多个 MediaStream 中.
Media description (媒体描述): 在 [RFC4566] 中定义为从 m= 字段开始, 到下一个 m= 字段或会话描述结束为止的一组字段.
本文档中的关键词「必须 (MUST)」, 「绝对不能 (MUST NOT)」, 「要求 (REQUIRED)」, 「应 (SHALL)」, 「不应 (SHALL NOT)」, 「应该 (SHOULD)」, 「不应该 (SHOULD NOT)」, 「建议 (RECOMMENDED)」, 「不建议 (NOT RECOMMENDED)」, 「可以 (MAY)」与「可选 (OPTIONAL)」应按照 BCP 14 [RFC2119] [RFC8174] 中所述的方式解释, 且仅当它们以全大写形式出现时方适用.
1.2. Structure of This Document (本文档结构)
本文档在会话描述协议 (SDP) [RFC4566] 中新增一种机制, 可为 RTP 流附加标识符, 并为其形成的分组附加标识符. 该机制设计用于与 WebRTC [RFC8825] 一起使用.
第 1.3 节说明为何需要新机制的背景.
第 2 节给出新机制的定义.
第 3 节给出使用 msid 属性标明 MediaStreamTrack 与 MediaStream 关联所需的语义信息与规程, 以支持 WebRTC API [W3C-WebRTC].
1.3. Why a New Mechanism Is Needed (为何需要新机制)
当媒体由 RTP [RFC3550] 承载时, 每个 RTP 流在 RTP 会话内由其同步源 (Synchronization Source, SSRC) 区分; 每个 RTP 会话与其他所有 RTP 会话的区别在于其位于不同的传输关联上 (严格来说, 是两个传输关联, 一个用于 RTP, 一个用于 RTP 控制协议 (RTP Control Protocol, RTCP), 除非使用 RTP/RTCP 复用 [RFC5761]).
SDP [RFC4566] 提供了一种描述可包含多个媒体描述的 SDP 会话的格式. 根据 [RFC8829] 中使用的模型, 每个媒体描述恰好描述一个媒体源. 若在单个 RTP 会话中承载多个媒体源, 则使用 BUNDLE [RFC8843] 进行信令; 若不使用 BUNDLE, 则每个媒体源在其自身的 RTP 会话中承载.
SDP 分组框架 (SDP Grouping Framework) [RFC5888] 可用于对媒体描述分组. 然而, 对于 WebRTC 用例, 应用需要指明媒体描述与分组之间关联的某些应用层信息. 使用 SDP 分组框架无法做到这一点.
1.4. The WebRTC MediaStream (WebRTC MediaStream)
W3C WebRTC API 规范 [W3C-WebRTC] 规定, WebRTC 实体之间的通信通过包含 MediaStreamTrack 的 MediaStream 进行. MediaStreamTrack 通常在 RTP 会话中通过单个 SSRC 承载, 从而形成 RTP 流. 术语上的重叠令人遗憾. 可能还会有额外的 SSRC, 也可能位于额外的 RTP 会话中, 以支持如前向纠错 (forward error correction) 或联播 (simulcast) 等功能. 这些额外的 SSRC 不受本规范影响.
MediaStreamTrack 是单向的, 仅沿一个方向承载媒体.
在 RTP 规范中, RTP 流使用 SSRC 字段标识. 流被分组到 RTP 会话中, 并携带 CNAME. CNAME 与 RTP 会话都不对应于 MediaStream. 因此, RTP 流与 MediaStream 的关联必须显式信令.
WebRTC 定义了一种映射 (在 [RFC8829] 中记录), 其中每个 SDP 媒体描述用于描述每个 MediaStreamTrack, 并使用 BUNDLE 机制 [RFC8843] 将 MediaStreamTrack 分组到 RTP 会话中. 因此, 需要为每个媒体描述指明 MediaStreamTrack 及其关联 MediaStream 的标识符 (ID), 这可以通过媒体级 SDP 属性实现.
该用法在第 3 节中描述.