# 通话管理

# 通话静音

JCSDK 提供了两种静音方式,分别用于静音扬声器和静音麦克风。静音扬声器则听不到对方的声音,静音麦克风则对方听不到本端的声音。

# 静音扬声器

按照以下步骤实现静音扬声器功能:

  1. 通过 JCCallItem 对象中的 speakerMute 属性获取扬声器静音状态。返回 true 表示已静音,false 表示未静音。
  2. 调用 JCCall 中的 muteSpeaker 方法开启/取消扬声器静音功能。

示例代码

JCCallItem item = call.getActiveCallItem();
if(item != null){
  if(item.speakerMute){
    // 取消扬声器静音
    call.muteSpeaker(item, false);
  }else{
    // 开启扬声器静音
    call.muteSpeaker(item, true);
  }
}

# 静音麦克风

按照以下步骤实现静音麦克风功能:

  1. 通过 JCCallItem 对象中的 microphoneMute 属性获取麦克风静音状态。返回 true 表示已静音,false 表示未静音。
  2. 调用 JCCall 中的 muteMicrophone 方法开启/取消麦克风静音功能。

示例代码

JCCallItem item = call.getActiveCallItem();
if(item != null){
  if(item. microphoneMute){
    // 取消麦克风静音
    call.muteSpeaker(item, false);
  }else{
    // 开启麦克风静音
    call.muteSpeaker(item, true);
  }
}

# 通话录音

可以在通话中进行录音,开启或关闭录音需要根据当前的录音状态来决定。如果正在录制或者通话被挂起或者挂起的情况下,不能进行音频录制。录音状态可通过 JCCallItem (opens new window) 对象中的 audioRecord (opens new window) 获取。

开启或关闭录音接口如下

/// <summary>
/// 通话录音,通过JCCallItem对象中的呼叫保持状态来决定开启关闭呼叫保持
/// </summary>
/// <param name="item">JCCallItem对象</param>
/// <param name="enable">开启关闭录音</param>
/// <param name="filePath">录音文件路径</param>
/// <returns>返回true表示正常执行调用流程,false表示调用异常</returns>
public bool audioRecord(JCCallItem item, bool enable, string filePath)

示例代码

JCCallItem item = call.getActiveCallItem();
if (item.audioRecord)
{
    // 录音结束
    call.audioRecord(item, false, "your filePath");
} else {
    // 创建录音文件保存路径
    String filePath; // 录音文件的绝对路径,SDK会自动创建录音文件
    if (filtPath.Length > 0)
    {
        // 开始录音
        call.audioRecord(item, true, filePath);
    }
}
}

开启或关闭录音时,录音状态会发生改变,并通过 onCallItemUpdate 回调上报

/// <summary>
/// 通话状态更新回调
/// 当上层收到此回调时,可以根据JCCallItem对象获得该通话所有信息及状态,从而更新通话相关UI
/// </summary>
/// <param name="item">JCCallItem对象</param>
/// <param name="changeParam">更新标识类</param>
void onCallItemUpdate(JCCallItem item, JCCallItem.ChangeParam changeParam);

# 视频通话录制

处于视频通话状态时可以对当前视频通话进行视频录制。调用 videoRecord (opens new window) 开启/关闭视频通话录制。

在开启视频录制前确保以下几点:

  1. 当前没有在录音。

  2. 确保远端/本地正在上传视频流。

  3. 当前处在非录制状态下。

示例代码

JCCallItem item = call.getActiveCallItem();
if(item != null){
    if(item.localVideoRecord){
        // 如果本地视频录制已开启,则关闭本地录制
        call.videoRecord(item, false, false, 0, 0, "", false);
    }else if(item.remoteVideoRecord){
        // 如果远端视频录制已开启,则关闭远端录制
        call.videoRecord(item, false, true, 0, 0, "", false);
    }else{
        String localFilePath = "自定义文件存储路径";
        String remoteFilePath = "自定义文件存储路径";
        if (call.videoRecord(item, true, false, 600, 360, localFilePath, true)) {
            // 开始录制本地视频
        } else {
            // 调用失败
        }
        if (call.videoRecord(item, true, true, 600, 360, remoteFilePath, true)) {
            // 开始录制远端视频
        } else {
            // 调用失败
        }
    }
}

# 开启/关闭呼叫保持

调用下面的方法对通话对象进行呼叫保持或解除呼叫保持(当通话对象处于被保持状态(即状态为held)时不可以进行此操作),开启或关闭呼叫保持需要根据 JCCallItem 对象中(hold (opens new window))的呼叫保持状态来决定

/// <summary>
/// 呼叫保持,通过JCCallItem对象中的呼叫保持状态来决定开启关闭
/// </summary>
/// <param name="item">JCCallItem对象</param>
/// <returns>返回true表示正常执行调用流程,false表示调用异常</returns>
public bool hold(JCCallItem item)

# 切换活跃通话

调用下面的方法对通话中被保持的对象和活跃的通话对象进行切换

/// <summary>
/// 切换活跃通话
/// </summary>
/// <param name="item">需要变活跃的JCCallItem对象</param>
/// <returns>返回true表示正常执行调用流程,false表示调用异常</returns>
public bool becomeActive(JCCallItem item)

示例代码

//获取活跃通话对象
JCCallItem item = call.getActiveCallItem();
call.mute(item);
call.hold(item);
call.becomeActive(item);

# 通话中发送消息

调用下面的接口在通话中实现发消息的功能

/// <summary>
/// 通过通话建立后的通道发送数据
/// </summary>
/// <param name="item">需要发送数据的JCCallItem对象</param>
/// <param name="type">文本消息类型,用户可以自定义,例如text,xml等</param>
/// <param name="content">文本内容</param>
/// <returns>返回 true 表示正常执行调用流程,false 表示调用异常</returns>
public bool sendMessage(JCCallItem item, string type, string content)

当通话中收到消息时,会收到 onMessageReceive 回调


 /// <summary>
 /// 通话中收到消息的回调
 /// </summary>
 /// <param name="type">消息类型</param>
 /// <param name="content">消息内容</param>
 /// <param name="item">JCCallItem对象</param>
void onMessageReceive(string type, string content, JCCallItem item);

示例代码

JCCallItem item = call.getActiveCallItem();
call.sendMessage(item, "text", "消息内容");

TIP

不建议在通话中发送图片类型的消息

# 相关回调

通话过程中,如果通话状态发生了改变,如开启关闭静音、开启关闭通话保持、活跃状态切换、开启关闭视频流发送、网络变化等,将会收到通话状态更新的回调

/// <summary>
/// 通话状态更新回调
/// 当上层收到此回调时,可以根据JCCallItem对象获得该通话所有信息及状态,从而更新通话相关UI
/// </summary>
/// <param name="item">JCCallItem对象</param>
/// <param name="changeParam">更新标识类</param>
void onCallItemUpdate(JCCallItem item, JCCallItem.ChangeParam changeParam);

关于 ChangeParam 的说明请参考 JCCallItem.cs 文件。

TIP

静音状态、通话保持状态、活跃状态可通过 JCCallItem (opens new window) 对象获得。

示例代码

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.netStatus) { // 网络状态变化
        ...
    }
}
最后更新时间: 2021/6/17 15:27:55