菊风已发布实时音视频2.0升级版(2.0版本说明),当前您正在访问1.0旧版本,点击此处可进入2.0升级版

# 通话管理

# 通话静音

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

# 静音扬声器

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

  1. 调用 JCCallItem (opens new window) 对象中的 getSpeakerMute (opens new window) 方法获取扬声器静音状态。返回 true 表示已静音,false 表示未静音。
  2. 调用 JCCall (opens new window) 中的 muteSpeaker (opens new window) 方法开启/取消扬声器静音功能。

示例代码

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

# 静音麦克风

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

  1. 调用 JCCallItem (opens new window) 对象中的 getMicrophoneMute (opens new window) 方法获取麦克风静音状态。返回 true 表示已静音,false 表示未静音。
  2. 调用 JCCall (opens new window) 中的 muteMicrophone (opens new window) 方法开启/取消麦克风静音功能。

示例代码

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

# 通话录音

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

开启或关闭录音接口如下:

/**
 * 语音通话录音,通过 JCCallItem 对象中的audioRecord状态来决定开启关闭录音
 *
 * @param item      JCCallItem 对象
 * @param enable    开启关闭录音
 * @param filePath  录音文件路径
 * @return          返回 true 表示正常执行调用流程,false 表示调用异常
 */
audioRecord(item: JCCallItem, enable: boolean, filePath: string): boolean;

示例代码

const item = call.getCallItems()[0];
if (item.getAudioRecord()) {
  // 录音结束
  call.audioRecord(item, false, "your filePath");
} else {
  // 创建录音保存文件路径
  const filePath = "your filePath"; // 录音文件的绝对路径,SDK会自动创建录音文件
  if (filePath) {
    // 开始录音
    call.audioRecord(item, true, filePath);
  }
}

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

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

# 开启/关闭呼叫保持

您可以调用下面的方法对通话对象进行呼叫保持或解除呼叫保持,开启或关闭呼叫保持需要根据 JCCallItem (opens new window) 对象中的呼叫保持状态来决定,呼叫保持状态(hold)可通过 getHold (opens new window) 方法获得。

/**
 * 呼叫保持,通过 JCCallItem 对象中的呼叫保持状态来决定开启关闭呼叫保持
 * 只针对音频,如果是视频通话则要上层处理视频逻辑
 *
 * @param item  JCCallItem 对象
 * @return      返回 true 表示正常执行调用流程,false 表示调用异常
 */
getHold(item: JCCallItem): boolean;

# 切换活跃通话

调用 becomeActive (opens new window) 方法对通话中被保持的对象和活跃的通话对象进行切换

/**
 * 切换活跃通话
 *
 * @param item  需要变为活跃状态的 JCCallItem 对象
 * @return      返回 true 表示正常执行调用流程,false 表示调用异常
 */
becomeActive(item: JCCallItem): boolean;

# 通话中发送消息

调用 sendMessage (opens new window) 接口在通话中实现发消息的功能

/**
 * 通过通话建立的通道发送数据
 *
 * @param item      需要发送数据的 JCCallItem 对象
 * @param type      文本消息类型,用户可以自定义,例如text,xml等
 * @param content   文本内容
 * @return          返回 true 表示正常执行调用流程,false 表示调用异常
 */
sendMessage(item: JCCallItem, type: string, content: string): boolean;

当通话中收到消息时,会收到 onMessageReceive (opens new window) 回调

/**
 * 通话中收到消息的回调
 *
 * @param type    消息类型
 * @param content 消息内容
 * @param item    JCCallItem 对象
 */
onMessageReceive(type: string, content: string, item: JCCallItem): void;

示例代码

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

TIP

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

# 相关回调

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

/**
 * 通话状态更新回调(当上层收到此回调时,可以根据 JCCallItem 对象获得该通话的所有信息及状态,从而更新该通话相关UI)
 *
 * @param item           JCCallItem 对象,当 item 为 null 时表示全部更新
 * @param changeParam    更新标识类
 */
onCallItemUpdate(item: JCCallItem, changeParam: JCCallItem.ChangeParam): void;

TIP

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

示例代码

onCallItemUpdate(item: JCCallItem, changeParam: JCCallItem.ChangeParam): void {
  if (item.getMute()) { // 开启静音
    // 处理静音状态更新
  } else if (item.getHold()) { // 挂起通话
    // 处理挂起状态更新
  } else if (item.getHeld()) { // 被挂起
    // 处理被挂起状态更新
  } else if (item.getActive()) { // 激活状态
    // 处理激活状态更新
  } else if (item.getUploadVideoStreamSelf()) { // 本端在上传视频流
    // 处理本端视频流状态更新
  } else if (item.getUploadVideoStreamOther()) { // 远端在上传视频流
    // 处理远端视频流状态更新
  }
}
最后更新时间: 2025-5-13 6:06:58 ├F10: PM┤