通话过程管理
1. 通话状态更新
通话过程中,如果通话状态发生了改变,如开启关闭静音、开启关闭通话保持、活跃状态切换、开启关闭视频流发送等,将会收到通话状态更新的回调
/**
* @brief 通话状态更新回调(当上层收到此回调时,可以根据 JCCallItem 对象获得该通话的所有信息及状态,从而更新该通话相关UI)
* @param item JCCallItem 对象
* @param changeParam 更新标识类
*/
-(void)onCallItemUpdate:(JCCallItem* __nonnull)item changeParam:(JCCallChangeParam * __nullable)changeParam;
<关于 JCCallChangeParam 的说明请参考 JCCallItem.h 文件。
静音状态、通话保持状态、活跃状态、视频流发送状态可通过 JCCallItem 对象获得。
示例代码
-(void)onCallItemUpdate:(JCCallItem* __nonnull)item changeParam:(JCCallChangeParam * __nullable)changeParam {
JCCallItem* callItem = item;
if (changeParam.mute) { // 开启静音
...
} else if (changeParam.sate) { // 通话状态变化
...
} else if (changeParam.held) { // 被挂起变化
...
} else if (changeParam.active) { // 活跃状态变化
...
} else if (changeParam.netStatus) { // 网络状态变化
...
}
...
}
2. 通话过程控制
2.1 通话静音
您可以通过下面的方法开启或关闭静音,开启关闭静音需要根据 JCCallItem 中的静音状态(mute)来决定,静音开启后,对方将听不到您的声音
/**
* @brief 静音,通过 JCCallItem 对象中的静音状态来决定开启关闭静音
* @param item JCCallItem 对象
* @return 返回 true 表示正常执行调用流程,false 表示调用异常
*/
-(bool)mute:(JCCallItem* __nonnull)item;
2.2 开启/关闭呼叫保持
您可以调用下面的方法对通话对象进行呼叫保持或解除呼叫保持,开启或关闭呼叫保持需要根据 JCCallItem 对象中(hold)的呼叫保持状态来决定
/**
* @brief 呼叫保持,通过 JCCallItem 对象中的呼叫保持状态来决定开启关闭呼叫保持
* @param item JCCallItem 对象
* @return 返回 true 表示正常执行调用流程,false 表示调用异常
*/
-(bool)hold:(JCCallItem* __nonnull)item;
2.3 切换活跃通话
调用下面的方法对通话中被保持的对象和活跃的通话对象进行切换
/**
* @brief 切换活跃通话
* @param item 需要变为活跃状态的 JCCallItem 对象
* @return 返回 true 表示正常执行调用流程,false 表示调用异常
*/
-(bool)becomeActive:(JCCallItem* __nonnull)item;
2.4 开启/关闭视频流发送
您可以调用下面的方法开启或关闭视频流发送,调用后对端会 收到 onCallItemUpdate 回调
/**
* @brief 开启关闭视频流发送,用于视频通话中
* @param item JCCallItem 对象
* @return 返回 true 表示正常执行调用流程,false 表示调用异常
*/
-(bool)enableUploadVideoStream:(JCCallItem* __nonnull)item;
该接口的具体作用机制如下图所示

如果 A 开启发送视频流,则 A 的 uploadVideoStreamSelf 属性值为 true,B 则通过 uploadVideoStreamOther 属性值(此处为true)判断 A 的视频流发送状态。
如果 A 关闭发送视频流,则 A 的 uploadVideoStreamSelf 属性值为 false,B 则通过 uploadVideoStreamOther 属性值(此处为false)判断 A 的视频流发送状态。此时 B 将看不到 A 的画面。
示例代码
//获取活跃通话对象
JCCallItem *item = [call getActiveCallItem];
//开启或关闭静音
[call mute:item];
//开启关闭呼叫保持
[call hold:item];
//切换活跃通话
[call becomeActive:item];
// 开启关闭视频流发送
[call enableUploadVideoStream:item];