音视频呼叫
本章小节:
发起音视频呼叫

图 1. 发起音视频呼叫过程
1 |
GUI 调用 Mtc_SessCall 发起呼叫
注意:pcUri 要确保是正确的 SIP URI 或 TEL URI。当用户在拨叫窗口中输入对方电话号码是,要先完成 SIP URI/TEL URI 的组装。
dwCookie 是用于实现会话与 GUI 会话窗口的绑定(比如句柄),此值可用可不用。如果想使用 dwCookie 映射会话, GUI 可在后续会话状态通知中使用 Mtc_SessGetCookie 获取 dwCookie。无论是否使用 dwCookie,GUI 应该提供根据 dwSessId 找到 GUI 会话窗口的方法, 使得收到会话状态的回调通知时(比如在 Mtc_CallCbSetAlerted 中设置的回调)时能够找到已经存在的 GUI 会话窗口,更新界面显示。 输出参数 pdwSessId, 一般是保存在 GUI 会话窗口中,用于后续会话操作。 |
2 |
SDK 向服务器发送 INVITE 请求。 |
3 |
服务器响应 100 Trying。 |
4 |
服务器响应 180 Ringing。 |
5 |
SDK 通过 Mtc_CallCbSetAlerted 设置的回调通知界面振铃事件。 |
6 |
UI 更新界面,显示对方已经振铃。 |
7 |
服务器响应 200 OK。 |
8 |
SDK 响应 ACK。 |
9 |
SDK 和服务器开始发送、接收 RTP/SRTP 流。 |
10 |
SDK 通过 Mtc_CallCbSetTalking 上报呼叫已接通事件,界面在收到该事件后应该调用 Mtc_SessHasVideo 接口确认当前会话协商的结果是否有视频流,若存在视频流应该调用 ZMF 接口启动摄像头。 |
11 |
UI 更新界面,显示通话中。 |
表 1. 发起音视频呼叫过程说明
接听音视频呼叫

图 2. 接听音视频呼叫过程
1 |
SDK 收到服务器发来的 INVITE 请求。 |
2 |
SDK 通过 Mtc_CallCbSetIncoming 回调上报收到通话邀请,界面可以通过 Mtc_SessGetPeerUri 获取对方的名称和 URI 地址, 同时可以通过 Mtc_SessPeerOfferVideo 判断是否是视频呼叫。 |
3 |
UI 更新界面,显示收到通话邀请。 |
4 |
SDK 向服务器发送 100 Trying。 |
5 |
SDK 向服务器发送 180 Ringing。 |
6 |
UI 调用 Mtc_SessAnswer 接口,应答通话邀请。
|
7 |
SDK 向服务器发送 200 OK。 |
8 |
服务器向 SDK 发送 ACK。 |
9 |
SDK 和服务器开始发送、接收 RTP/SRTP 流。 |
10 |
SDK 通过 Mtc_CallCbSetTalking 回调上报通话已经接通,界面在收到该事件后应该调用 Mtc_SessHasVideo 接口 确认当前会话协商的结果是否有视频流,若存在视频流应该调用 ZMF 接口启动摄像头。 |
11 |
UI 更新界面,显示通话中。 |
表 2. 接听音视频呼叫过程说明
取消音视频呼叫

图 3. 取消音视频呼叫过程
1 |
UI 调用 Mtc_SessCall 接口,发起一个音视频呼叫。
注意: pcUri 要确保是正确的 SIP URI 或 TEL URI。当用户在拨叫窗口中输入对方电话号码是,要先完成 SIP URI/TEL URI 的组装。
dwCookie 是用于实现会话与 GUI 会话窗口的绑定(比如句柄),此值可用可不用。如果想使用 dwCookie 映射会话, GUI 可在后续会话状态通知中使用 Mtc_SessGetCookie 获取 dwCookie。无论是否使用 dwCookie,GUI 应该提供根据 dwSessId 找到 GUI 会话窗口的方法, 使得收到会话状态的回调通知时(比如在 Mtc_CallCbSetAlerted 中设置的回调)时能够找到已经存在的 GUI 会话窗口,更新界面显示。 输出参数 pdwSessId, 一般是保存在 GUI 会话窗口中,用户后续会话操作。 |
2 |
SDK 向服务器发送 INVITE 请求。 |
3 |
服务器响应 100 Trying。 |
4 |
服务器响应 180 Ringing。 |
5 |
SDK 通过 Mtc_CallCbSetAlerted 设置的回调通知界面振铃事件。 |
6 |
UI 更新界面,显示对方已经振铃。 |
7 |
UI 调用Mtc_SessTerm 接口,取消音视频通话。
|
8 |
SDK 向服务器发送 CANCEL 请求。 |
9 |
服务器响应 200 OK。 |
10 |
服务器向 SDK 发送 487 Request Terminated。 |
11 |
SDK 响应 ACK, 结束通话。 |
表 3. 取消音视频呼叫过程说明
拒绝音视频呼叫

图 4. 拒绝音视频呼叫过程
1 |
SDK 收到服务器发来的 INVITE 请求。 |
2 |
SDK 通过 Mtc_CallCbSetIncoming 回调上报收到通话邀请,界面可以通过 Mtc_SessGetPeerUri 获取对方的名称和 URI 地址, 同时可以通过 Mtc_SessHasVideo 判断是否是视频呼叫。 |
3 |
UI 更新界面,显示收到通话邀请。 |
4 |
SDK 向服务器发送 100 Trying。 |
5 |
SDK 向服务器发送 180 Ringing。 |
6 |
UI 调用 Mtc_SessTerm 接口,取消音视频通话。
|
7 |
SDK 向服务器发送 603 Decline 请求。 |
8 |
服务器响应 200 OK,结束通话。 |
表 4. 拒绝音视频呼叫过程说明
主动终止音视频呼叫

图 5. 主动终止音视频呼叫过程
1 |
UI 调用 Mtc_SessTerm 接口,主动发起终止呼叫。
|
2 |
SDK 向服务器发送 BYE 请求。 |
3 |
服务器响应 200 OK,通话结束。 |
表 5. 主动终止音视频呼叫过程说明
被动终止音视频呼叫

图 6. 被动终止音视频呼叫过程
1 |
服务器向 SDK 发送 BYE 请求。 |
2 |
SDK 通过 Mtc_CallCbSetTermed 回调上报通话被终止事件。 |
3 |
UI更新界面,显示通话被终止。 |
4 |
SDK 响应 200 OK,通话结束。 |
表 6. 被动终止音视频呼叫过程说明