跳到主要内容

8. Modifying the Session (修改会话)

8. Modifying the Session (修改会话)

在会话期间的任何时候, 任一方参与者都可以发出新的 Offer 以修改会话特性。对 Offer/Answer (提议/应答) 模型的运作而言, 根本的一点是: 修改既有会话的参数时, 必须使用与上文定义的完全相同的 Offer/Answer 流程。

Offer 可以与提供给对方的上一份 SDP 相同 (该份 SDP 可能出现在 Offer 或 Answer 中), 也可以不同。我们将最后提供的那份 SDP 称为 "previous SDP (上一份 SDP)"。若 Offer 与上一份相同, 则 Answer 可以与 Answerer 的上一份 SDP 相同, 也可以不同。若所提供的 SDP 与上一份 SDP 不同, 则对其构造会施加若干约束, 见下文。

会话的几乎所有方面都可以修改。可以新增媒体流, 可以删除既有流, 也可以更改既有流的参数。在发出用于修改会话的 Offer 时, 新 SDP 中的 o= 行必须与上一份 SDP 中的 o= 行相同, 但 origin (源) 字段中的 version (版本号) 必须比上一份 SDP 递增 1。若 origin 行中的版本号未递增, 则该 SDP 必须与具有该版本号的那份 SDP 完全相同。Answerer 必须做好接收这样一种 Offer 的准备: 其中 SDP 的版本号并未改变, 这在效果上是一次空操作 (no-op)。然而, Answerer 必须按照第 6 节定义的流程生成一份有效的 Answer (可以与 Answerer 的上一份 SDP 相同, 也可以不同)。

若所提供的 SDP 与上一份 SDP 不同, 则新 SDP 必须为上一份 SDP 中的每一条媒体流都提供一条匹配的媒体流。换言之, 若上一份 SDP 有 N 条 m= 行, 则新 SDP 必须至少有 N 条 m= 行。从顶部起计, 上一份 SDP 中的第 i 条媒体流与新 SDP 中从顶部起计的第 i 条媒体流相对应。这一匹配是必要的, 以便 Answerer 能够确定新 SDP 中的哪一条流对应于上一份 SDP 中的哪一条流。由于这些要求, m= 行的数量绝不会减少, 只会保持不变或增加。不得在新 SDP 中移除上一份 SDP 中已删除的媒体流, 然而, 这些流可以不再携带属性。