5.3.2. Subsequent Answers (后续应答)
5.3.2. Subsequent Answers (后续应答)
当第二次 (或更晚) 调用 createAnswer, 或在已安装本地描述之后调用 createAnswer 时, 其处理与初始应答略有不同。
若先前的应答未通过 setLocalDescription 应用, 即 PeerConnection 仍处于 "have-remote-offer" 状态, 则必须遵循生成初始应答的步骤, 但须受以下限制:
- "o=" 行的各字段必须保持不变, 但 <session-version> 字段除外;若会话描述相对先前生成的应答有任何变化, 则 <session-version> 必须递增。
若此前曾向 setLocalDescription 提供过任何会话描述, 则通过遵循上述 "have-remote-offer" 状态下的步骤生成应答, 并附加以下例外:
-
"s=" 与 "t=" 行必须保持不变。
-
每个 "m=" 与 "c=" 行必须用该 "m=" 段的默认候选的端口与地址填写, 如 [RFC8839] 第 4.2.1.2 节所述。请注意, 在某些情况下, "m=" 行中的协议可能与默认候选的不一致, 因为 "m=" 行的协议值必须与报价中提供的相符, 如上所述。
-
每个 "a=ice-ufrag" 与 "a=ice-pwd" 行必须保持不变, 除非该 "m=" 段正在重启, 此时必须按 [RFC8839] 第 4.4.1.1.1 节的规定创建新的 ICE 凭证。若该 "m=" 段被捆绑进另一 "m=" 段, 则仍不得包含任何 ICE 凭证。
-
每个 "a=tls-id" 行必须保持不变, 除非报价方的 "a=tls-id" 行已更改, 此时必须按 [RFC8842] 第 5.2 节的规定创建新的 tls-id 值。
-
若报价方正在延续现有 DTLS 关联, 则每个 "a=setup" 行必须使用与现有 DTLS 关联一致的 "active" 或 "passive" 角色值。
-
必须使用 RTCP 复用, 且当且仅当该 "m=" 段先前使用了 RTCP 复用时, 才插入 "a=rtcp-mux" 行。
-
若该 "m=" 段未捆绑进另一 "m=" 段且 RTCP 复用未激活, 则必须用默认 RTCP 候选的端口与地址填写 "a=rtcp" 属性行。若尚未收集任何 RTCP 候选, 必须使用默认值, 如上第 5.3.1 节所述。
-
若该 "m=" 段未捆绑进另一 "m=" 段, 对于在最近一次收集阶段 (见第 3.5.1 节) 已收集的每个候选, 必须按 [RFC8839] 第 5.1 节的定义添加 "a=candidate" 行。若该段的候选收集已完成, 必须按 [RFC8840] 第 8.2 节的描述添加 "a=end-of-candidates" 属性。若该 "m=" 段被捆绑进另一 "m=" 段, 则必须省略 "a=candidate" 与 "a=end-of-candidates"。
-
对于未停止的 RtpTransceiver, "a=msid" 行必须保持不变, 无论收发器方向或轨道如何变化。若当前描述中不存在 "a=msid" 行, 必须按照与初始应答相同的规则生成 "a=msid" 行。