一对一通话
本文介绍了 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];