通话状态更新¶
通话过程中,如果通话状态发生了改变,如开启关闭静音、开启关闭通话保持、活跃状态切换、开启关闭视频流发送等,将会收到通话状态更新的回调
/// <summary>
/// 通话状态更新回调
/// 当上层收到此回调时,可以根据JCCallItem对象获得该通话所有信息及状态,从而更新通话相关UI
/// </summary>
/// <param name="item">JCCallItem对象</param>
// <param name="changeParam">更新标识类</param>
void onCallItemUpdate(JCCallItem item, JCCallItem.ChangeParam changeParam);
Note
静音状态、通话保持状态、活跃状态、视频流发送状态可通过 JCCallItem 对象获得。
示例代码:
public void onCallItemUpdate(JCCallItem item, JCCallItem.ChangeParam changeParam) {
if (item.mute) { // 开启静音
...
} else if (item.hold) { // 挂起通话
...
} else if (item.held) { // 被挂起
...
} else if (item.active) { // 激活状态
...
} else if (item.uploadVideoStreamSelf) { // 本端在上传视频流
...
} else if (item.uploadVideoStreamOther) { // 远端在上传视频流
...
}
}
通话过程控制¶
通话静音
您可以通过下面的方法开启或关闭静音,开启关闭静音需要根据 JCCallItem 中的静音状态(mute)来决定,静音开启后,对方将听不到您的声音
/// <summary>
/// 静音,通过JCCallItem中的静音状态来决定开启关闭
/// </summary>
/// <param name="item">JCCallItem对象</param>
/// <returns>返回true表示正常执行调用流程,false表示调用异常</returns>
public bool mute(JCCallItem item)
开启关闭呼叫保持
您可以调用下面的方法对通话对象进行呼叫保持或解除呼叫保持,开启或关闭呼叫保持需要根据 JCCallItem 对象中(hold)的呼叫保持状态来决定
/// <summary>
/// 呼叫保持,通过JCCallItem对象中的呼叫保持状态来决定开启关闭
/// </summary>
/// <param name="item">JCCallItem对象</param>
/// <returns>返回true表示正常执行调用流程,false表示调用异常</returns>
public bool hold(JCCallItem item)
开启关闭视频流发送
您可以调用下面的方法开启或关闭视频流发送,调用后对端会 收到 onCallItemUpdate 回调
/// <summary>
/// 开启关闭视频流发送,用于视频通话中
/// </summary>
/// <param name="item">JCCallItem对象</param>
/// <returns>返回true表示正常执行调用流程,false表示调用异常</returns>
public bool enableUploadVideoStream(JCCallItem item)
该接口的具体作用机制如下图所示:
- 如果 A 开启发送视频流,则 A 的 uploadVideoStreamSelf 属性值为 true,B 则通过 uploadVideoStreamOther 属性值(此处为true)判断 A 的视频流发送状态。
- 如果 A 关闭发送视频流,则 A 的 uploadVideoStreamSelf 属性值为 false,B 则通过 uploadVideoStreamOther 属性值(此处为false)判断 A 的视频流发送状态。此时 B 将看不到 A 的画面。
示例代码:
// 初始化各模块,因为这些模块实例将被频繁使用,建议声明在单例中
JCClient client = JCClient.create(app, "your appkey", this, null);
JCMediaDevice mediaDevice = JCMediaDevice.create(client, this);
JCCall call = JCCall.create(client, mediaDevice, this);
JCCallItem item = call.callItems[0];
call.mute(item);
call.hold(item);
call.enableUploadVideoStream(item);
获取网络状态¶
当网络状态发生变化时,会收到 onNetChange 回调
/// <summary>
/// 网络变化
/// </summary>
/// <param name="newNetType">当前网络类型</param>
/// <param name="oldNetType">之前网络类型</param>
void onNetChange(int newNetType, int oldNetType);
可以通过下面的方法获取网络状态
public static String genNetStatus(JCCallItem item)
{
if (item != null)
{
if (item.state != JCCallState.Talking)
{
return "";
}
switch (item.netStatus)
{
case JCCallNetState.NET_STATUS_DISCONNECTED:
return "无网络";
case JCCallNetState.NET_STATUS_VERY_BAD:
return "很差";
case JCCallNetState.NET_STATUS_BAD:
return "差";
case JCCallNetState.NET_STATUS_NORMAL:
return "一般";
case JCCallNetState.NET_STATUS_GOOD:
return "好";
case JCCallNetState.NET_STATUS_VERY_GOOD:
return "非常好";
default:
return "";
}
}
return "";
}