音视频通话

呼叫

功能介绍

实现两个用户之间的呼叫功能,流程是:A用户先创建一个房间,然后呼叫B用户,如果B用户接受呼叫,AB进入房间进行通讯。
如果有邀请多方通话需求,请使用邀请功能。

使用场景:

  • 点对点外呼:双方均未在房间,主叫创建房间后呼叫对方,对方接听后共同入会。
  • 排队系统:客户排队后,系统将客户分配给空闲坐席,坐席创建房间并发起呼叫通知客户进入房间,队列相关流程参见 队列功能

使用注意点:

  • 接受呼叫后,call session 会一直保持,直到任一方调用 hangupCall 挂断(参见下文 挂断)。这与 邀请 不同:邀请在被接受或拒绝后即结束,不维持 invite session。
  • 呼叫发起后直到呼叫取消或呼叫挂断,双方都将进入忙状态,此时双方无法再做被叫(主叫端将收到对方忙的错误原因)。
  • 队列功能,涉及出队列、通话中状态等,依赖 call 接口,所以只能与 call 配合使用, 不能使用 invite 相关接口。

主叫

1.创建房间

  • 调用接口:
//创建房间
crVideoSDKMain->createMeeting();
  • 回调通知:
//创建房间成功
void createMeetingSuccess(const CRMeetInfo& meetObj, const char* cookie)
{
    //创建成功后可获得房间信息meetObj
}
//创建房间失败
void createMeetingFail(CRVSDK_ERR_DEF sdkErr, const char* cookie)
{
    //创建失败,可以弹出错误提示
}

相关API请参考:

2.发起呼叫

注意:
  1. 当用户A呼叫用户B时,只有B成功登录了,才可以收到被呼叫通知,否则被呼叫者是无法收到被呼叫的消息的。
  • 调用接口:
//A呼叫普通用户B进入房间。
//strMeetInfoObj为createMeeting返回的房间信息
crVideoSDKMain->getSDKCall().call("userIDB", strMeetInfoObj);
  • 回调通知:
//呼叫操作成功响应
void callRslt(const char* callID, CRVSDK_ERR_DEF sdkErr, const char* cookie)
{
	//sdkErr==CRVSDKERR_NOERR代表成功, 否则代表失败的具体原因
}

  • 呼叫SIP/H323设备

请参考 SIP/H.323设备支持 呼叫部分

呼叫他人相关API请参考:

3.呼叫被接受/拒绝

  • 回调通知:

//通知呼叫被接受
void notifyCallAccepted(const char* callID, const CRMeetInfo& meetObj, const char* usrExtDat)
{
  //呼叫被接受,等待被呼叫方进入房间等处理
  //此后 call session 持续存在,直至 hangupCall
}

//通知呼叫被拒绝
void notifyCallRejected(const char* callID, CRVSDK_ERR_DEF reason, const char* usrExtDat)
{
  //呼叫被拒绝,弹出提示框等处理
}

相关API请参考:

4.挂断

  • 调用接口:
//挂断呼叫
crVideoSDKMain->getSDKCall().hangupCall(callID);
  • 回调通知:
//挂断呼叫结果
void hangupCallRslt(const char* callID, CRVSDK_ERR_DEF sdkErr, const char* cookie)
{
	//sdkErr==CRVSDKERR_NOERR代表成功, 否则代表失败的具体原因
}

//通知被他人挂断
void notifyCallHungup(const char* callID, const char* usrExtDat)
{
    //1. 退出房间,关闭会话窗口
    //2.清理工作
}

相关API请参考:

被叫

1.被呼叫

  • 回调通知:
// 通知有呼叫到来
void notifyCallIn(const char* callID, const CRMeetInfo& meetObj, const char* callerID, const char* usrExtDat)
{
    //主叫为callerID
}

相关API请参考:

2.接受/拒绝呼叫

  • 调用接口:
//接受呼叫
crVideoSDKMain->getSDKCall().acceptCall(callID, meetInfo);
//拒绝呼叫
crVideoSDKMain->getSDKCall().rejectCall(callID);
  • 回调通知:
 
// 接受呼叫结果
void acceptCallRslt(const char* callID, CRVSDK_ERR_DEF sdkErr, const char* cookie)
{
	//sdkErr==CRVSDKERR_NOERR代表成功, 否则代表失败的具体原因
}

// 拒绝呼叫结果
void rejectCallRslt(const char* callID, CRVSDK_ERR_DEF sdkErr, const char* cookie)
{
	//sdkErr==CRVSDKERR_NOERR代表成功, 否则代表失败的具体原因
}


被呼叫者相关API请参考:

3.免打扰

如果用户当前不希望被呼叫,可以把自己的状态设置为免打扰,注意在免打扰状态下不会被呼叫,但是可以主动发起呼叫。

  • 调用接口:

//开启免打扰
crVideoSDKMain->setDNDStatus(1);

//关闭免打扰
crVideoSDKMain->setDNDStatus(0);

  • 回调通知:

//设置免打扰状态响应
void setDNDStatusRslt(CRVSDK_ERR_DEF sdkErr, const char* cookie)
{
}

相关API请参考: