跳到主要内容

一对一通话

本文介绍了 CallPlus SDK 一对一呼叫的主要功能,包括如何从您的应用程序拨打、接听、处理和结束呼叫。

关键类介绍

  • RCCallPlusClientRCCallPlusClient 单例对象是 CallPlus SDK 的核心类,用于管理客户端呼叫行为,例如发起、接听、挂断通话,操作音视频设备,管理通话记录等。RCCallPlusClient 有以下关键属性:

    属性名称类型说明
    currentSessionRCCallPlusSession代表当前正在进行中的通话。
    enableMicrophoneBOOL设置或获取本地用户是否已启用麦克风。默认通话时开启麦克风, 用户通话中设置开关麦克风,对端用户会在 didRemoteMicrophoneStateChanged:disabled:userId: 收到变更音频状态的通知。
    enableSpeakerBOOL设置或获取本地用户是否已启用扬声器。默认音频通话时使用听筒,视频通话时使用扬声器。
  • RCCallPlusSessionRCCallPlusSession 对象代表一则通话的所有信息,具有以下属性。

    名称类型说明
    callIdNSString唯一通话标识。
    callerUserIdNSString发起者 userId。
    inviterUserIdNSString邀请者 userId,呼入有值;呼出时,只为本地用户 userId。
    callTypeRCCallPlusType通话类型:单呼、群呼。
    mediaTypeRCCallPlusMediaType媒体类型:音频、音视频。
    callUsersNSArray\<RCCallPlusUser \*\>通话成员列表(不含本端)。RCCallPlusUser 对象包含用户 Id 以及用户状态。
    callStateRCCallPlusCallState通话状态。
  • RCCallPlusCallRecordRCCallPlusCallRecord 对象代表一则通话记录,其中包含了与 RCCallPlusSession 类似的通话信息,还提供了通话开始与结束的时间戳、通话时长、通话结束原因等信息。

  • RCCallPlusEventDelegate:委托协议 RCCallPlusEventDelegate 提供了来电事件(didReceivedCall:extra:)、通话建立成功(didCallConnected:)、收到通话记录(didReceivedCallRecord:)等事件相关回调。

  • RCCallPlusResultDelegate: 委托协议RCCallPlusResultDelegate 提供了调用 CallPlus API 后的异步执行结果回调。

添加事件代理

CallPlus SDK 提供以下两个与呼叫事件相关的委托协议:

接口原型

Objective C
/// 设置通话事件监听
- (void)setCallEventDelegate:(id<RCCallPlusEventDelegate>)delegate NS_SWIFT_NAME(setCallEventDelegate(_:));

/// 设置通话 API 结果回调监听
- (void)setCallResultDelegate:(id<RCCallPlusResultDelegate>)delegate NS_SWIFT_NAME(setCallResultDelegate(_:));

参数说明

参数名类型必填说明
delegateid<RCCallPlusEventDelegate>事件代理对象
delegateid<RCCallPlusResultDelegate>结果代理对象

示例代码

提示

请在调用 IM SDK 的 connectWithToken 方法前添加 RCCallPlusEventDelegate 代理,否则用户在连接 IM 后无法收到离线的通话申请。

Objective C
// 设置通话事件监听
[[RCCallPlusClient sharedInstance] setCallEventDelegate:self];
// 设置通话 API 结果回调监听
[[RCCallPlusClient sharedInstance] setCallResultDelegate:self];

处理本地与远端视频视图

在主叫方发起通话前以及被叫方接听通话时需要使用 setVideoView: 方法设置视频视图:

在视频通话期间,呼叫者和被呼叫者可以在需要时使用 setVideoView:removeVideoViewByUserId: 方法设置或移除他们的流视频的图像。

提示

用户需要打开摄像头才可以在设置视图后看到采集的画面,移除视图时也需要主动关闭摄像头。

本地视频视图

您可以在发起通话前跟接听通话前设置本地视频视图,用于本地预览摄像头采集的视频。

接口原型

Objective C
/// 设置渲染视图
- (BOOL)setVideoView:(RCCallPlusVideoView *)view;

参数说明

参数名类型必填说明
viewRCCallPlusVideoView本地视频视图对象。userId 必填,用于指定需要显示视频视图的本地用户 id;renderMode 用于设置渲染模式,默认使用 RCCallPlusRenderMode.RCCallPlusRenderModeAspectFit 完整显示,填充黑边,等比例填充,直到一个维度到达区域边界。

示例代码

Objective C
// 打开摄像头
[[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];

远程视频视图

在通话接通前,主叫和被叫方可以设置远端视频视图,用于显示对方画面。

接口原型

Objective C
/// 设置渲染视图
- (BOOL)setVideoView:(RCCallPlusVideoView *)view;

参数说明

参数名类型必填说明
viewRCCallPlusRemoteVideoView远端视频视图对象。属性:userId 必填,用于指定需要显示视频视图的远端用户 id;renderMode 用于设置渲染模式,默认使用 RCCallPlusRenderMode.RCCallPlusRenderModeAspectFit 完整显示, 填充黑边, 等比例填充, 直到一个维度到达区域边界; isTiny 用于设置是否显示小流,默认值 NO 显示是大流。

示例代码

Objective C
// 创建远端视图
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: 接收调用通话方法的异步回调结果。
  • 发起呼叫时需要保证当前没有正在进行的通话。

接口原型

Objective C
/// 发起呼叫
- (void)startCallWithUserIds:(NSArray<NSString *> *)userIds
callType:(RCCallPlusType)callType
mediaType:(RCCallPlusMediaType)mediaType
pushConfig:(nullable RCCallPlusPushConfig *)pushConfig
extra:(nullable NSString *)extra;

参数说明

参数名类型必填说明
userIdsNSArray<NSString *>被叫用户 ID 列表,单人呼叫仅需在数组中放置对方一人的用户 ID
callTypeRCCallPlusType通话类型,单人呼叫或多人呼叫;单人呼叫时 userIds 长度只能为 1
mediaTypeRCCallPlusMediaType媒体类型(音频、视频)
pushConfigRCCallPlusPushConfig推送配置
extraNSString附加信息,透传给被呼叫方

示例代码

Objective C
// 开始呼叫,并携带推送配置
RCCallPlusPushConfig *pushConfig = [[RCCallPlusPushConfig alloc] init];
pushConfig.disablePushTitle = NO;
[[RCCallPlusClient sharedInstance] startCallWithUserIds:@[@"remoteUserId"]
callType:RCCallPlusSingleType
mediaType:RCCallPlusAudioVideoMediaType
pushConfig:pushConfig
extra:@"extraString"];

// 开始通话回调
- (void)didStartCallResultCode:(RCCallPlusCode)code
callId:(nullable NSString *)callId
busylineUsers:(nullable NSArray<RCCallPlusUser *> *)busylineUsers {
}

接听通话

被叫方必须先注册 RCCallPlusEventDelegate 事件委托,实现 didReceivedCall:extra 方法获取通话呼入事件。之后通过使用 acceptWithCallId:pushConfig: 方法接听通话。如果呼叫被接受,CallPlus SDK 将自动建立通话,并通过 didCallConnected: 方法告知双方用户通话已经建立。

非兼容性变更

从 CallPlus 2.X 开始,不再提供 CallPlus 1.X 的 didReceivedCall: 回调方法。请改为使用携带 extra 字段的 didReceivedCall:extra: 方法。

接口原型

Objective C
/// 接听通话
- (void)acceptWithCallId:(NSString *)callId
pushConfig:(nullable RCCallPlusPushConfig *)pushConfig;

参数说明

参数名类型必填说明
callIdNSString通话 ID
pushConfigRCCallPlusPushConfig推送配置

示例代码

Objective C
// 接收到呼入会话通知
- (void)didReceivedCall:(RCCallPlusSession *)session extra:(nullable NSString *)extra {
[[RCCallPlusClient sharedInstance] acceptWithCallId:session.callId pushConfig:nil];
}
/// 通话建立成功通知
- (void)didCallConnected:(RCCallPlusSession *)session {
}

处理当前通话

音频控制

在通话过程中,主叫方和被叫方的音频都可以通过 enableMicrophone 属性或 muteAllRemoteAudio: 方法改变麦克风状态或者静音远端音频。如果一方更改麦克风状态,另一方会通过 RCCallPlusEventDelegate 代理对象的方法 didRemoteMicrophoneStateChanged:disabled:userId: 接收事件回调。

接口原型

Objective C
/// 开启/关闭麦克风、获取麦克风开关状态
@property (nonatomic, assign) BOOL enableMicrophone;
/// 设置是否静音所有远端用户音频流
- (void)muteAllRemoteAudio:(BOOL)mute;

参数说明

参数名类型必填说明
enableMicrophoneBOOL开启/关闭麦克风、获取麦克风开关状态; 通话建立后默认开启。
muteBOOL是否静音所有远端用户音频流,YES: 静音,NO: 非静音。静音操作为不播放远端用户音频流,媒体通道还在收音频数据

示例代码

Objective C
// 关闭麦克风
[RCCallPlusClient sharedInstance].enableMicrophone = NO;

// 静音所有远端流
[[RCCallPlusClient sharedInstance] muteAllRemoteAudio:YES];

// 远端用户音频静默改变通知
- (void)didRemoteMicrophoneStateChanged:(NSString *)callId
disabled:(BOOL)disabled
userId:(NSString *)userId {
}

摄像头控制

在通话过程中,主叫方和被叫方的摄像头都可以通过 startCamerastopCamera 方法启用或禁用。如果一方更改摄像头开关状态,另一方会通过 RCCallPlusEventDelegate 代理对象的方法 didRemoteCameraStateChanged:disabled:userId: 接收事件回调。

提示

CallPlus SDK 视频通话需要用户主动打开或关闭摄像头。

接口原型

Objective C
/// 开启摄像头
- (BOOL)startCamera;

/// 关闭摄像头
- (BOOL)stopCamera;

示例代码

Objective C
// 关闭摄像头
[[RCCallPlusClient sharedInstance] stopCamera];

// 远端用户视频静默改变通知
- (void)didRemoteCameraStateChanged:(NSString *)callId
disabled:(BOOL)disabled
userId:(NSString *)userId {
}

切换前后摄像头

用户在视频通话中可以切换前后摄像头。

接口原型

Objective C
/// 切换前后摄像头
- (void)switchCamera;

示例代码

Objective C
[[RCCallPlusClient sharedInstance] switchCamera];

配置视频设置

在视频开始之前或通话过程中可以调整本端发送视频流的分辨率、码率、帧率等配置信息。

接口原型

Objective C
/// 设置视频配置
- (void)setVideoConfig:(RCCallPlusVideoConfig *)config;

参数说明

参数名类型必填说明
configRCCallPlusVideoConfig视频配置对象,分辨率、最大/最小码率、帧率等信息,需要通话建立前设置

示例代码

Objective C
RCCallPlusVideoConfig *videoConfig = [[RCCallPlusVideoConfig alloc]init];
// 配置视频分辨率 默认分辨率 640X480
videoConfig.videoResolution = RC_VIDEO_PROFILE_720P;
// 配置视频最大码率 默认 900
videoConfig.maxVideoBitrate = 1000;
// 配置视频帧率 默认 15Fps
videoConfig.frameRate = RCCallPlusVideoFps15;
[[RCCallPlusClient sharedInstance] setVideoConfig:videoConfig];

切换媒体类型

CallPlus SDK 仅在一对一通话过程中,支持切换通话媒体类型。

提示
  • 由音频切换到音视频,业务层收到媒体类型切换结果通知后,不需要调用接口打开摄像头,SDK 内部会打开摄像头
  • 由音视频切换到音频,业务层收到媒体类型切换结果通知后,不需要调用接口关闭摄像头,SDK 内部会关闭摄像头
  • 该接口有重试逻辑,如果由于网络原因导致接口调用失败,会在网络可用时候进行重试,最大重试时间为 60s

发起切换媒体类型请求

主叫方和被叫方都可以通过 requestChangeMediaType: 方法发起切换媒体类型请求。SDK 内部以异步方式执行该方法,请求的发起方可通过 RCCallPlusResultDelegate 代理对象的 didRequestChangeMediaType:code:transactionId:callId: 方法判断请求是否发起成功。

接口原型
Objective C
/// 通话中请求媒体类型切换请求
- (void)requestChangeMediaType:(RCCallPlusMediaType)mediaType;
参数说明
参数名类型必填说明
mediaTypeRCCallPlusMediaType目标媒体类型
示例代码
Objective C
// 请求切换媒体类型
[[RCCallPlusClient sharedInstance] requestChangeMediaType:RCCallPlusAudioVideoMediaType];

/// 通话中请求媒体类型切换结果回调
- (void)didRequestChangeMediaType:(RCCallPlusMediaType)mediaType
code:(RCCallPlusCode)code
transactionId:(nullable NSString *)transactionId
callId:(NSString *)callId {
}

接收并响应切换媒体类型请求

远端用户会通过 RCCallPlusEventDelegate 代理对象的方法 didReceivedChangeMediaTypeRequest:transactionId:userId: 收到切换媒体类型请求,通过 replyChangeMediaType:isAgreed: 方法同意或拒绝请求。调用结果通过 RCCallPlusResultDelegate 代理对象的 didReplyChangeMediaType:transactionId:callId:isAgreed: 方法返回是否成功地回复了该请求。

在请求被成功回复后(或者超时未回复),媒体类型变更最终的结果会通过 RCCallPlusEventDelegate 代理对象的方法 didReceivedChangeMediaTypeRequest:transactionId:userId: 回调给请求方与确认方。

接口原型
Objective C
/// 响应通话中媒体类型切换请求
- (void)replyChangeMediaType:(NSString *)transactionId
isAgreed:(BOOL)isAgreed;
参数说明
参数名类型必填说明
transactionIdNSString事务 ID,为通话事件监听 didReceivedChangeMediaTypeRequest 中返回的 transactionId
isAgreedBOOL是否同意切换,YES: 同意,NO: 拒绝
示例代码
Objective C
// 收到媒体类型变更请求(仅单聊)
- (void)didReceivedChangeMediaTypeRequest:(RCCallPlusMediaType)mediaType transactionId:(NSString *)transactionId userId:(NSString *)userId {
// 同意变更媒体类型请求
[[RCCallPlusClient sharedInstance] replyChangeMediaType:transactionId isAgreed:YES];
}

/// 响应通话中媒体类型切换请求结果回调
/// - Parameter code: 操作结果
/// - Parameter transactionId: 事务 ID
/// - Parameter isAgreed: 是否同意,YES: 同意,NO: 不同意
/// - Parameter callId: 通话 ID
- (void)didReplyChangeMediaType:(RCCallPlusCode)code
transactionId:(nullable NSString *)transactionId
callId:(NSString *)callId
isAgreed:(BOOL)isAgreed {
}

/// 通话中收到切换媒体类型结果通知
/// - Parameter transactionId: 事务 ID,本次请求和应答的唯一标识
/// - Parameter userId: 发起切换媒体类型用户 ID
/// - Parameter mediaType: 切换后媒体类型
/// - Parameter code: 切换结果,具体值见 RCCallPlusMediaTypeChangeResult
/// - Note 该通知为单聊场景使用
- (void)didReceivedChangeMediaTypeResult:(RCCallPlusMediaType)mediaType
transactionId:(NSString *)transactionId
userId:(NSString *)userId
code:(RCCallPlusMediaTypeChangeResult)code {
}

取消切换媒体类型请求

在远端用户响应之前可以取消请求。发起请求变更媒体类型的一方,可以通过 cancelChangeMediaType: 方法向服务端申请取消媒体切换的请求。取消结果可在 RCCallPlusResultDelegate 代理对象的 didCancelChangeMediaType:transactionId:callId: 方法返回的状态码获取。

接口原型
Objective C
/// 取消已经发起的媒体类型切换请求
- (void)cancelChangeMediaType:(NSString *)transactionId;
参数说明
参数名类型必填说明
transactionIdNSString事务 ID,为调用 replyChangeMediaType 接口后,通过回调 didRequestChangeMediaType 返回的 transactionId
示例代码
Objective C
// 取消请求切换媒体类型
[[RCCallPlusClient sharedInstance] cancelChangeMediaType:transactionId];

/// 取消已经发起的媒体类型切换请求结果回调
- (void)didCancelChangeMediaType:(RCCallPlusCode)code
transactionId:(nullable NSString *)transactionId
callId:(NSString *)callId {
}

通话中精准计时

CallPlus 服务端可统一下发通话开始时间,确保各端计时准确、一致,具体支持以下两种方案:

CallPlus 会在通话连接成功后将两个时间戳都回调给 SDK 端(可能会因校准行为导致多次回调),应用程序可以通过计算回调的时间戳与本地时间之间的差值得到精确的通话时长。

接口原型

Objective C
/// 通话开始时间通知
- (void)didCallStartTimeFromServer:(NSInteger)callStartTime;

/// 收到首帧时间通知
- (void)didCallFirstFrameTimeFromServer:(NSInteger)callFirstFrameTime;

参数说明

参数名类型必填说明
callStartTimeNSInteger服务端统一的通话开始时间戳为通话对应的房间首次被加入时的时间
callFirstFrameTimeNSInteger首帧到达时间戳,收到首帧时间戳为所有通话用户中最早收到首帧时间戳

示例代码

Objective C
// 当前通话开始时间
- (void)didCallStartTimeFromServer:(NSInteger)callStartTime {

}

- (void)didCallFirstFrameTimeFromServer:(NSInteger)callFirstFrameTime {

}
提示

为减小误差,CallPlus SDK 会根据用户的网络情况以及本地时间的差异,对通话开始的时间戳进行校准,因此可能存在同一个通话多次回调该方法的情况。建议您在使用时注意及时更新。

结束通话

提示

从 CallPlus 2.X 开始,新增 hangupWithCallId:pushConfig: 方法,支持在挂断时通过配置推送属性自定义远程推送标题等属性。如不需要配置推送属性,可以使用 hangup

挂断与拒绝接听动作均使用 hangup 方法。应用程序可使用 hangup 方法结束当前正在进行中的通话,或者使用 hangupWithCallId: 方法结束指定 callId 的通话。

接口原型

Objective C
/// 挂断当前通话
- (void)hangup;

/// 挂断通话
- (void)hangupWithCallId:(NSString *)callId;

/// 挂断通话
- (void)hangupWithCallId:(NSString *)callId
pushConfig:(nullable RCCallPlusPushConfig *)pushConfig;

参数说明

参数名类型必填说明
callIdNSString通话唯一标识
pushConfigRCCallPlusPushConfig推送配置

示例代码

应用程序可通过 RCCallPlusResultDelegate 代理对象的 didHangupCallResultCode:callId: 方法接收挂断通话 API 的执行结果。

Objective C
// 挂断指定 callId 通话,并携带推送配置
RCCallPlusPushConfig *pushConfig = [[RCCallPlusPushConfig alloc] init];
pushConfig.disablePushTitle = NO;
[[RCCallPlusClient sharedInstance] hangupWithCallId:@"callId"
pushConfig:pushConfig];

/// 挂断通话结果回调
- (void)didHangupCallResultCode:(RCCallPlusCode)code
callId:(nullable NSString *)callId {
}
提示

如果通话为一对一类型,一方挂断则双方同时挂断,融云将停止对通话计时计费。

通话中接听来电

CallPlus SDK 允许在通话过程中接听新的来电。因为一次只能有一个在进行中的通话,所以正在进行的通话需要先挂断,才能接听新来电。

您也可以使用 acceptWithCallId:pushConfig: 接受新来电,SDK 内部自动挂断正在进行的通话,新来电将变为当前通话。也可以直接使用 hangupWithCallId: 拒绝新来电。callId 为新来电的的唯一通话标识 。

接口原型

Objective C
/// 接听通话
/// - Parameter callId: 通话 ID
/// - Parameter pushConfig: 推送配置
/// - Note 该接口有重试逻辑,如果由于网络原因导致接口调用失败,会在网络可用时候进行重试,最大重试时间为 60s
- (void)acceptWithCallId:(NSString *)callId
pushConfig:(nullable RCCallPlusPushConfig *)pushConfig;

/// 挂断通话
/// - Parameter callId: 通话 ID
/// - Parameter pushConfig: 推送配置
/// - Note 如果传入的 callId 不是当前通话,不影响当前通话
- (void)hangupWithCallId:(NSString *)callId
pushConfig:(nullable RCCallPlusPushConfig *)pushConfig;

参数说明

参数名类型必填说明
callIdNSString通话 ID
pushConfigRCCallPlusPushConfig推送配置
extraNSString附加信息,透传给当前通话中的用户

示例代码

Objective C
// 接听新来电
[[RCCallPlusClient sharedInstance] acceptWithCallId:callId pushConfig:nil];

// 拒绝新来电
[[RCCallPlusClient sharedInstance] hangupWithCallId:callId pushConfig:nil];
提示

CallPlus SDK 不支持在通话过程中保持和恢复通话。

管理通话记录

CallPlus 提供服务端通话记录管理能力,包括查询用户通话记录列表、删除通话记录等功能。一则通话记录对应一个 RCCallPlusCallRecord 对象,其中包含通话 ID、参与用户 ID、通话开始与结束的时间戳、通话时长等信息。

提示

CallPlus SDK 不提供本地通话记录。

通话结束后获取通话记录

通话结束(或拒接来电)后可以通过 RCCallPlusEventDelegate 代理对象的方法 didReceivedCallRecord: 立即获取通话记录。

接口原型

Objective C
- (void)didReceivedCallRecord:(RCCallPlusCallRecord *)callRecord;

参数说明

参数名类型必填说明
callRecordRCCallPlusCallRecord通话记录对象

示例代码

Objective C
- (void)didReceivedCallRecord:(RCCallPlusCallRecord *)callRecord {

}

检索服务端通话记录

您可以通过 getRemoteCallRecordsWithTime:count:order: 从融云服务端获取用户的通话历史记录,获取结果可以从 RCCallPlusResultDelegate 代理对象中获取服务端返回的通话对象列表。建议使用 2.1.0 版本新增的代理方法 didGetRemoteCallRecords:hasMore:syncTime:code:

接口原型

Objective C
/// 获取当前用户通话记录
- (void)getRemoteCallRecordsWithTime:(NSTimeInterval)syncTime
count:(NSInteger)count
order:(NSInteger)order;
提示
  • 从 2.1.0 版本,RCCallPlusClient 新增 getRemoteCallRecordsWithTime:count:order: 方法,支持倒序查询通话记录。例如,分页获取最近的通话记录。首次可以将 syncTime 设置为 -1。如果需要继续查询,可以使用回调方法中返回的 syncTime 作为下一次查询的 syncTime 值。
  • 如果采用正序查询(order0),可以从最早的记录或指定时间戳开始查询。

参数说明

参数名类型必填说明
syncTimeNSTimeInterval同步时间戳(单位:ms)首次获取可传 -1,倒序时,返回最新的通话记录,正序时,返回最早的通话记录
countNSInteger每次获取的通话记录数量,默认值: 30
orderNSInteger排序方式,0:正序,1:倒序

示例代码

Objective C
// 获取远端通话记录,count 最大为 100
[[RCCallPlusClient sharedInstance] getRemoteCallRecordsWithTime:-1 count:30 order:1];

/// 获取当前用户通话记录结果回调
/// - Parameter records: 获取到的通话记录实例列表
/// - Parameter hasMore: 是否还有未拉取的通话记录
/// - Parameter syncTime: 下一次的同步时间点(单位:ms)
/// - Parameter code: 操作结果
/// - Note 该回调与 didGetRemoteCallRecords:hasMore:maxTime:code: 可以二选一实现
- (void)didGetRemoteCallRecords:(nullable NSArray <RCCallPlusCallRecord *>*)records
hasMore:(BOOL)hasMore
syncTime:(NSTimeInterval)syncTime
code:(RCCallPlusCode)code {
}

删除通话记录

CallPlus SDK 不提供本地通话记录。如果使用以下方法删除通话记录,那么会从服务端删除属于当前用户的通话记录。批量删除通话记录只需要传入通话 callId,不区分通话类型。

接口原型

Objective C
/// 批量删除当前用户通话记录
/// - Parameter callIds:通话 ID 列表
- (void)deleteCallRecordsFromServerByCallIds:(NSArray<NSString *> *)callIds;

/// 删除当前用户所有通话记录
- (void)deleteAllCallRecordsFromServer;

参数说明

参数名类型必填说明
callIdsNSArray<NSString *>通话 CallId 数组

示例代码

Objective C
// 批量删除通话记录
[[RCCallPlusClient sharedInstance] deleteCallRecordsFromServerByCallIds:@[@"callId"]];

// 删除所有通话记录
[[RCCallPlusClient sharedInstance] deleteAllCallRecordsFromServer];

管理通话质量

您可以通过设置 RCCallPlusStatusReportDelegate 代理监听有关通话质量的变化。

设置 RCCallPlusStatusReportDelegate

要检测通话质量的变化,需要设置 RCCallPlusStatusReportDelegate 并实现对应的代理方法,对应的方法每 1 秒回调一次。

接口原型

Objective C
/// 设置通话质量数据监听
- (void)setStatusReportDelegate:(id<RCCallPlusStatusReportDelegate>)delegate NS_SWIFT_NAME(setStatusReportDelegate(_:));

参数说明

参数名类型必填说明
delegateid<RCCallPlusStatusReportDelegate>状态报告代理对象

示例代码

Objective C
// 设置通话质量数据监听
[[RCCallPlusClient sharedInstance] setStatusReportDelegate:self];

代理方法说明

RCCallPlusStatusReportDelegate 有以下方法:

方法说明
- (void)didReceivePacketLoss:(NSDictionary\<NSString \*, RCCallPlusPacketLossStats \*\>\*)stats;接收丢包率信息回调。stats 对象中: key 表示用户 Id;RCCallPlusPacketLossStats 携带 丟包率(0-100),码率(kbps)。
- (void)didSendPacketLoss:(float)lossRate delay:(int)delay;发送丢包率信息回调。 lossRate 表示丢包率(0-100),delay 表示发送端的网络延迟(ms)。