3.8.2. Parallel Forking (并行分叉)
3.8.2. Parallel Forking (并行分叉)
并行分叉涉及将呼叫分派给多个远程被叫方, 其中每个被叫方都可以接受呼叫, 并且可以建立多个同时活动的信令会话。如果多个被叫方同时发送媒体, [RFC3960] 第 3.1 节描述了处理此问题的可能性。今天的大多数 SIP 设备仅支持一次与单个设备交换媒体, 并且不尝试混合多个早期媒体音频源, 因为这可能导致混乱的情况。例如, 考虑将欧洲回铃音与北美回铃音混合在一起 -- 产生的声音不会像任何一个音调, 会使用户感到困惑。如果信令应用程序希望一次仅与一个远程端点交换媒体, 那么从媒体引擎的角度来看, 这与顺序分叉情况完全相同。
在 JavaScript 应用程序希望同时与多个对等端交换媒体的并行分叉情况下, 流程稍微复杂一些, 但 JavaScript 应用程序可以遵循 [RFC3960] 描述的策略, 使用 UPDATE。UPDATE 方法允许信令为它希望与之交换媒体的每个对等端设置单独的媒体流。在 JSEP 中, UPDATE 中使用的此 offer 将通过简单地创建新的 PeerConnection (参见第 4.1 节) 并确保将相同的本地媒体流添加到此新 PeerConnection 中来形成。然后, 新的 PeerConnection 对象将产生一个 SDP offer, 信令可以使用该 offer 执行 [RFC3960] 中讨论的 UPDATE 策略。
由于共享媒体流, 应用程序最终将拥有 N 个并行的 PeerConnection 会话, 每个会话都有本地和远程描述以及它们自己的本地和远程地址。可以使用 setDirection (参见第 4.2.3 节) 管理这些会话的媒体流, 或者应用程序可以选择将所有会话的媒体混合在一起播放。当然, 如果应用程序只想保留单个会话, 它可以简单地终止不再需要的会话。