一对一通话
本文介绍了 CallPlus SDK 一对一呼叫的主要功能,包括如何从您的应用程序拨打、接听、处理和结束呼叫。
关键类介绍
-
RCCallPlusClient:
RCCallPlusClient单例对象是 CallPlus 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 SDK 提供以下两个与呼叫事件相关的委托协议:
- RCCallPlusEventDelegate 委托协议用于接收来 自远端用户或服务端的事件。
- RCCallPlusResultDelegate 委托协议用于处理与呼叫相关 API 的异步调用结果。
接口原型
/// 设置通话事件监听
- (void)setCallEventDelegate:(id<RCCallPlusEventDelegate>)delegate NS_SWIFT_NAME(setCallEventDelegate(_:));
/// 设置通话 API 结果回调监听
- (void)setCallResultDelegate:(id<RCCallPlusResultDelegate>)delegate NS_SWIFT_NAME(setCallResultDelegate(_:));
参数说明
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| delegate | id<RCCallPlusEventDelegate> | 是 | 事件代理对象 |
| delegate | id<RCCallPlusResultDelegate> | 是 | 结果代理对象 |
示例代码
请在调用 IM SDK 的 connectWithToken 方法前添加 RCCallPlusEventDelegate 代理,否则用户在连接 IM 后无法收到离线的通话申请。
// 设置通话事件监听
[[RCCallPlusClient sharedInstance] setCallEventDelegate:self];
// 设置通话 API 结果回调监听
[[RCCallPlusClient sharedInstance] setCallResultDelegate:self];
处理本地与远端视频视图
在主叫方发起通话前以及被叫方接听通话时需要使用 setVideoView: 方法设置视频视图:
- RCCallPlusVideoView:设置本地视频视图使用
RCCallPlusVideoView对象。 - RCCallPlusRemoteVideoView:设置远端视图请使用
RCCallPlusRemoteVideoView对象。
在视频通话期间,呼叫者和被呼叫者可以在需要时使用 setVideoView: 或 removeVideoViewByUserId: 方法设置或移除他们的流视频的图像。
用户需要打开摄像头才可以在设置视图后看到采集的画面,移除视图时也需要主动关闭摄像头。
本地视频视图
您可以在发起通话前跟接听通话前设置本地视频视图,用于本地预览摄像头采集的视频。
接口原型
/// 设置渲染视图
- (BOOL)setVideoView:(RCCallPlusVideoView *)view;
参数说明
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| view | RCCallPlusVideoView | 是 | 本地视频视图对象。userId 必填,用于指定需要显示视频视图的本地用户 id;renderMode 用于设置渲染模式,默认使用 RCCallPlusRenderMode.RCCallPlusRenderModeAspectFit 完整显示,填充黑边,等比例填充,直到一个维度到达区域边界。 |
示例代码
// 打开摄像头
[[RCCallPlusClient sharedInstance] startCamera];
// 创建本地视图
RCCallPlusVideoView *localView = [RCCallPlusVideoView new];
// 设置本地视图需要显示的本地用户 id
localView.userId = @"localUserId";
// 指定本地视图尺寸
localView.frame = CGRectMake(100, 100, 100, 100);
[self.view addSubview:localView];
[[RCCallPlusClient sharedInstance] setVideoView:localView];
远程视频视图
在通话接通前,主叫和被叫方可以设置远端视频视图,用于显示对方画面。
接口原型
/// 设置渲染视图
- (BOOL)setVideoView:(RCCallPlusVideoView *)view;
参数说明
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| view | RCCallPlusRemoteVideoView | 是 | 远端视频视图对象。属性:userId 必填,用于指定需要显示视频视图的远端用户 id;renderMode 用于设置渲染模式,默认使用 RCCallPlusRenderMode.RCCallPlusRenderModeAspectFit 完整显示, 填充黑边, 等比例填充, 直到一个维度到达区域边界; isTiny 用于设置是否显示小流,默认值 NO 显示是大流。 |
示例代码
// 创建远端视图
RCCallPlusRemoteVideoView *remoteView = [RCCallPlusRemoteVideoView new];
// 设置本地视图需要显示的本地用户 id
remoteView.userId = @"remoteUserId";
// 指定本地视图显示大流
remoteView.isTiny = NO;
// 指定本地视图尺寸
remoteView.frame = CGRectMake(200, 100, 100, 100);
[self.view addSubview:remoteView];
[[RCCallPlusClient sharedInstance] setVideoView:remoteView];
发起呼叫
- 从 CallPlus 2.X 开始,新增 startCallWithUserIds:callType:mediaType:pushConfig:extra: 方法,支持在发起呼叫时通过配置推送属性自定义远程推送标题等属性。支持携带自定义数据。如不需要配置推送属性,可以使用 startCallWithUserIds:callType:mediaType:。
- 发起呼叫时,主叫方必须先注册
RCCallPlusResultDelegate事件委托。该委托使主叫用户可以通过其委托方法didStartCallResultCode:callId:busylineUsers:接收调用通话方法的异步回调结果。 - 发起呼叫时需要保证当前没有正在进行的通话。
接口原型
/// 发起呼叫
- (void)startCallWithUserIds:(NSArray<NSString *> *)userIds
callType:(RCCallPlusType)callType
mediaType:(RCCallPlusMediaType)mediaType
pushConfig:(nullable RCCallPlusPushConfig *)pushConfig
extra:(nullable NSString *)extra;
参数说明
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| userIds | NSArray<NSString *> | 是 | 被叫用户 ID 列表,单人呼叫仅需在数组中放置对方一人的用户 ID |
| callType | RCCallPlusType | 是 | 通话类型,单人呼叫或多人呼叫;单人呼叫时 userIds 长度只能为 1 |
| mediaType | RCCallPlusMediaType | 是 | 媒体类型(音频、视频) |
| pushConfig | RCCallPlusPushConfig | 否 | 推送配置 |
| extra | NSString | 否 | 附加信息,透传给被呼叫方 |