呼出过程

定义

呼出过程是指:
具有 WebRTC 功能的浏览器/客户端通过 LinkRTC 呼叫 SIP 终端/服务器的过程。
呼出过程的参与者有:
  • 具有 WebRTC 功能的浏览器/客户端
  • 用户应用服务程序
  • LinkRTC 服务器
  • 被叫 SIP 电话

状态变化

外呼过程中,呼叫的状态有:
  • pendingLinkRTC 准备进行呼出,但是呼出还没有真正开始的阶段。这是呼叫的开始状态。
  • callingLinkRTC 向目标 SIP 端点发出了 INVITE 指令。
  • ringing:目标 SIP 端点向 LinkRTC 发出了 RINGING 指令。这通常出现在被叫电话振铃的时候。
  • confirmed:目标 SIP 端点向 LinkRTC 发出了 200 OK 状态码。这通常表示被叫电话接听,双方可以建立通话。
  • dropped:呼叫失败或者通话结束。这是呼叫的结束状态。

digraph outgoing_call_state { begin [shape=point] end [shape=doublecircle] begin -> pending [label="准备呼叫"] pending -> calling [label="开始呼叫"] pending -> dropped [label="禁止呼叫"] calling -> ringing [label="回铃"] calling -> confirmed [label="接通"] calling -> dropped [label="呼叫失败"] ringing -> confirmed [label="接通"] ringing -> dropped [label="呼叫失败"] confirmed -> dropped [label="通话结束"] dropped -> end }

步骤说明

以下分步骤说明呼出过程。

在顺序图中:
  • c1 代表:具有 WebRTC 功能的浏览器/客户端 c1
  • appserver 代表:用户应用服务程序
  • linkrtc 代表:LinkRTC 服务器
  • s1 代表:被叫 SIP 端点 s1

1. 请求呼出

1.1. 客户端 c1LinkRTC 提交呼出请求,在这个请求中,他要求以主叫号码 x 、被叫号码 y 的名义,向 SIP 端点 s1 发起呼叫。

1.2. LinkRTC 收到请求后,询问用户应用服务程序是否允许这次呼出。

1.2.1. 如果允许: LinkRTC 继续后续的呼出过程。

1.2.2. 如果拒绝: LinkRTC 结束此次呼出过程,并通知客户端呼出被拒绝。

请求呼出,并被允许

blockdiag c1 appserver linkrtc s1 make_call: from=x, to=y, target=s1 notify: call outgoing command: allowed return: continue wait continue

请求呼出,并被拒绝

blockdiag c1 appserver linkrtc s1 make_call: from=x, to=y notify: call outgoing command: disallowed! return: refused wait break

2. 呼叫 SIP

2.1. LinkRTC 以主叫号码 x 、被叫号码 y 的名义,向 s1 发起 SIP 呼叫。

2.2. LinkRTC 将呼叫状态的变化 同时 通知 客户端 c1 和 用户应用服务程序,直到呼叫建立或者失败。

SIP 呼叫成功

blockdiag c1 appserver linkrtc s1 call state: pending call state: pending INVITE call state: calling call state: calling RINGING call state: ringing call state: ringing OK with SDP call state: confirmed(with S DP) call state: confirmed(with SDP) continue wait wait for answer continue

SIP 呼叫失败

blockdiag c1 appserver linkrtc s1 call state: pending call state: pending INVITE call state: calling call state: calling 486 Busy Here call state: disconnected call state: disconnected continue wait break

3. 媒体连接

如果呼叫成功,客户端 c1 会收到 LinkRTC 转发的对端 SIP 终端的 SDPc1 根据该 SDP ,使用 WebRTC 建立点对点媒体通道。

4. 呼叫结束

SIP 终端 s1LinkRTC 发送 SIP BYE 指令;或者 c1LinkRTC 发结束命令,都会导致呼叫的结束。

s1 主动结束呼叫时, LinkRTC 会将通话状态变化 同时 通知 c1 和 用户应用服务程序。

SIP 一方结束呼叫

blockdiag c1 appserver linkrtc s1 BYE call state: disconnected call state: disconnected ACK continue

WebRTC 一方结束呼叫

blockdiag c1 appserver linkrtc s1 end call BYE call state: disconnected ACK continue