8.3.2 Changing the Set of Media Formats (更改媒体格式集合)
8.3.2 Changing the Set of Media Formats (更改媒体格式集合)
会话所使用的媒体格式列表可以更改。为此, 提议方创建新的媒体描述, 使其 m= 行中的格式列表与上一份 SDP 中对应媒体流不同。该列表可以包含新格式, 也可以去掉上一份 SDP 中存在的格式。然而, 在 RTP 的情况下, 在会话持续期间, 不得更改某一动态 payload type (负载类型) 编号到该媒体流内某一特定编解码器的映射。例如, 若 A 在 Offer 中将 G.711 指派给动态负载类型编号 46, 则在该会话内该媒体流的任何后续 Offer 或 Answer 中, 负载类型编号 46 必须始终指代 G.711。不过, 允许多个负载类型编号映射到同一编解码器, 因此更新后的 Offer 也可以再使用负载类型编号 72 表示 G.711。
映射必须在整个会话期间保持固定, 因为 SDP 的信令交换与媒体流之间的同步较为松散。
Answer 中对应的媒体流按第 6 节所述方式构成, 也可能导致媒体格式发生变化。同样, 如第 6 节所述, Answerer 一旦发出 Answer, 就必须开始使用 Offer 中与 Answer 中同时列出的任意格式发送媒体, 并且应该使用 Offer 中列在 Answer 中的最优先格式 (假设该流允许发送), 不得使用不在 Offer 中的任何格式发送, 即使对等方上一份 SDP 中曾列出这些格式。类似地, 当提议方收到 Answer 后, 其必须开始使用 Answer 中的任意格式发送, 并且应该使用最优先的一种 (假设该流允许发送), 不得使用不在 Answer 中的任何格式发送, 即使对等方上一份 SDP 中曾列出这些格式。
当某实现停止使用某一媒体格式时 (即在 Offer 或 Answer 中不再列出该格式, 尽管上一份 SDP 中曾有), 其仍须在短暂时间内做好以该格式接收媒体的准备。它如何知道何时可以停止为该格式接收做准备? 若需要知道, 可采用三种技术。第一, 在更改格式之外同时更改端口。当新媒体到达新端口时, 即知对等方已停止用旧格式发送, 于是可以停止为旧格式接收做准备。该方法的优点是与具体媒体格式无关。然而, 端口变更可能导致资源预留变更或安全协议重密钥。第二种做法是, 在丢弃某一编解码器时为所有编解码器换用一套全新的动态负载类型。当收到带有某一新负载类型的媒体时, 即知对等方已停止用旧格式发送。该方法不影响预留或安全上下文, 但仅适用于 RTP, 且会浪费本就有限的少量负载类型空间。第三种做法是使用定时器。收到对等方的 SDP 后启动定时器; 定时器到期后, 即可停止为旧格式接收做准备。一分钟通常已足够。某些情况下, 实现可能并不关心, 从而持续准备好接收旧格式, 此时无需做任何事。
当然, 若所提供的流被拒绝, 提议方一收到拒绝即可停止为使用任何新格式做准备。