一对一通话
本页介绍了一对一呼叫的主要功能,包括如何从您的应用程序拨打、接听、处理和结束呼叫。
关键类介绍
-
RCCallPlusClient:
RCCallPlusClient
单例对象是 CallPlus for iOS SDK 的核心类,用于管理客户端呼叫行为,例如发起、接听、挂断通话,操作音视频设备,管理通话记录等。例如,RCCallPlusClient
有以下关键属性:属性名称 类型 说 明 currentSession RCCallPlusSession 代表当前正在进行中的通话。 enableMicrophone BOOL 设置或获取本地用户是否已启用麦克风。默认通话时开启麦克风, 用户通话中设置开关麦克风,对端用户会在 didRemoteMicrophoneStateChanged:disabled:userId:
收到变更音频状态的通知。enableSpeaker BOOL 设置或获取本地用户是否已启用扬声器。默认音频通话时使用听筒,视频通话时使用扬声器。 -
RCCallPlusSession:
RCCallPlusSession
对象代表一则通话的所有信息,具有以下属性。名称 类型 说明 callId NSString 唯一通话标识。 callerUserId NSString 发起者 userId。 inviterUserId NSString 邀请者 userId,呼入有值;呼出时,只为本地用户 userId。 callType RCCallPlusType 通话类型:单呼、群呼。 mediaType RCCallPlusMediaType 媒体类型:音频、音视频。 callUsers NSArray<RCCallPlusUser *>
通话成员列表(不含本端)。 RCCallPlusUser
对象包含用户 Id 以及用户状态。callState RCCallPlusCallState 通话状态。 -
RCCallPlusCallRecord:
RCCallPlusCallRecord
对象代表一则通话记录,其中包含了与RCCallPlusSession
类似的通话信息,还提供了通话开始与结束的时间戳、通话时长、通话结束原因等信息。 -
RCCallPlusEventDelegate:委托协议
RCCallPlusEventDelegate
提供了来电事件(didReceivedCall:extra:)、通话建立成功(didCallConnected:)、收到通话记录(didReceivedCallRecord:)等事件相关回调。 -
RCCallPlusResultDelegate: 委托协议
RCCallPlusResultDelegate
提供了调用 CallPlus API 后的异步执行结果回调。
添加事件代理
CallPlus for iOS SDK 提供以下两个与呼叫事件相关的委托协议:
- RCCallPlusEventDelegate 委托协议用于接收来自远端用户或服务端的事件。
- RCCallPlusResultDelegate 委托协议用于处理与呼叫相关 API 的异步调用结果。
请在应用程序初始化或呼叫模块初始化时设置以下事件代理:
/// 设置事件代理
[[RCCallPlusClient sharedInstance] setCallEventDelegate:self];
/// 响应api代理
[[RCCallPlusClient sharedInstance] setCallResultDelegate:self];
注意
如果未设置
RCCallPlusEventDelegate
代理,则用户无法接收didReceivedCall
回调事件。请在connectWithToken
方法前添加RCCallPlusEventDelegate
代理,否则用户在未连接的情况下,通过离线推送打开应用连接 IM 后无法收到通话。
连接融云服务器
要使用 CallPlus SDK 的通话能力,必须先通过 RongCoreClient
的 connect
方法连接融云服务器,传入用户身份令牌(Token),向融云服务器验证用户身份。
获取 Token 以后,可以调用 connectWithToken
方法连接到融云服务器。
// 连接 IM 服务
[[RCCoreClient sharedCoreClient] connectWithToken:@"从您服务器端获取的 Token"
dbOpened:^(RCDBErrorCode code) {}
success:^(NSString *userId) {}
error:^(RCConnectErrorCode status) {}];
处理本地与远端视频视图
在主叫方发起通话前,被叫方接听通话时需要使用 setVideoView: 方法设置视频视图:
- RCCallPlusVideoView:设置本地视频视图使用
RCCallPlusVideoView
对象。 - RCCallPlusRemoteVideoView:设置远端视图请使用
RCCallPlusRemoteVideoView
对象。
在视频通话期间,呼叫者和被呼叫者可以在需要时使用 setVideoView:
或 removeVideoViewByUserId:
方法设置或移除他们的流视频的图像。需要注意的是,用户需要打开摄像头才可以在设置视图后看到采集的画面,移除视图时也需要主动关闭摄像头。