跳到主要内容

5.9. Applying a Local Description (应用本地描述)

5.9. Applying a Local Description (应用本地描述)

在媒体引擎层执行以下步骤以应用本地描述 (local description). 若返回错误, 会话必须恢复到执行这些步骤之前的状态.

首先处理 "m=" 段. 对每个 "m=" 段, 必须执行以下步骤; 若有任何参数越界或无法应用, 处理必须停止并必须返回错误.

  • 若此 "m=" 段是新的, 则按 [RFC8445] 第 5.1.1 节中的定义开始为其收集候选, 除非它确定被捆绑 (要么 (1) 这是提议且该 "m=" 段标记为 bundle-only, 要么 (2) 这是应答且该 "m=" 段被捆绑进另一个 "m=" 段).

  • 或者, 若 ICE ufrag 与 password 值已变更, 则按 [RFC8445] 第 9 节所述触发 ICE 代理启动 ICE 重启, 并开始为该 "m=" 段收集新候选. 若此描述为应答, 还要在该媒体段上启动检查.

  • 若该 "m=" 段的 proto 字段值表明使用 RTP:

    • 若没有任何 RtpTransceiver 与此 "m=" 段关联, 则按以下步骤查找一个并将其与该 "m=" 段关联. 注意, 此情况仅在应用提议时才会出现.

      • 使用创建提议时建立的收发器与 "m=" 段索引之间的映射, 找到与此 "m=" 段对应的 RtpTransceiver.

      • 将此 RtpTransceiver 的 mid 属性值设为该 "m=" 段的 MID.

    • 若指示了 RTCP 复用, 则按 [RFC5761] 第 5.1.3 节的规定, 准备从 RTP ICE 组件上对 RTP 与 RTCP 做解复用.

    • 对每个指定的 RTP 头扩展, 按 [RFC5285] 第 6 节所述在扩展 ID 与 URI 之间建立映射.

    • 若支持 MID 头扩展, 则按 [RFC8843] 第 15 节, 准备基于 MID 头扩展对发往此 "m=" 段的 RTP 流进行解复用.

    • 对每个指定的媒体格式, 按 [RFC3264] 第 6.1 节在负载类型与实际媒体格式之间建立映射. 此外, 按 [RFC8843] 第 9.2 节, 准备基于此 "m=" 段支持的媒体格式对发往该段的 RTP 流进行解复用.

    • 对每个指定的 "rtx" 媒体格式, 按 [RFC4588] 第 8.6 与 8.7 节在 RTX 负载类型与其关联的主负载类型之间建立映射.

    • 若 direction 属性为 "sendrecv" 或 "recvonly", 则启用媒体的接收与解码.

最后, 若此描述类型为 "pranswer" 或 "answer", 则继续执行 第 5.11 节 中定义的处理.