1.8 统一计划与Plan B

统一计划(Unified Plan)是用于在会话描述协议(SDP)中发送多个媒体源的IETF草案。谷歌在2013年于Chrome浏览器中实施了Plan B。Plan B实际上是Unified Plan的一个变种。谷歌后续又在Chrome浏览器中提供了对Unified Plan的支持。作为过渡方案,目前Chrome浏览器同时支持Plan B和Unified Plan,将来Chrome可能会取消对Plan B的支持。

在Plan B中,SDP协议为同一类的媒体使用一个“m =”字段。如果同一类媒体包括多个不同的媒体轨道,比如同时包含摄像头和屏幕共享的媒体轨道,则在“m =”字段中列出多个“a = ssrc”信息,以示区分。

而使用Unified Plan时,每个媒体轨道都分配单独的“m =”字段。如果使用多个媒体轨道,则会创建多个“m =”字段。

由于处理多个媒体轨道的方式不同,如果使用同一媒体类型的多个媒体轨道,则Unified Plan和Plan B是不兼容的,对于同一媒体类型只有一个轨道的情况,则会保持兼容。

如果Unified Plan客户端收到Plan B客户端生成的提案(offer),则Unified Plan客户端在调用setRemoteDescription()时报错。同样,如果Plan B客户端收到Unified Plan客户端生成的提案,则它只能在第一个媒体轨道触发ontrack事件,并丢弃其他相同类型的媒体轨道。

Chrome M69版本开始支持Unified Plan,但是默认支持的仍然是Plan B。Chrome在WebRTC的媒体管理接口RTCPeerConnection中添加了一项新的枚举类型SdpSemantics,用于在两种计划之间进行切换。

enum SdpSemantics { "plan-b", "unified-plan" };
partial dictionary RTCConfiguration { SdpSemantics sdpSemantics; }

在创建对等连接时,使用如下命令启用unified-plan。

let peer = new RTCPeerConnection ({ sdpSemantics : "unified-plan" });

Chrome从M72版本开始改为默认支持Unified Plan。在上述代码中,将unified-plan改为plan-b则可以切换回对Plan B的支持。