跳到主要内容

主叫方

发起呼叫

调用 RongCallClient.startCall 方法发起单人或多人音视频通话,该方法默认打开前置摄像头。多人通话场景所有通话者必须在一个群组内。

  • 参数说明:

    参数类型必填说明
    conversationTypeConversation.ConversationType会话类型
    targetIdString目标会话 ID,单人通话为对方 UserId,群组通话为 GroupId
    userIdsList<String>邀请参与通话的用户 ID 列表,不能为 null,必须包含 observerUserIds 中除发起者ID的所有用户ID
    observerUserIdsList<String>观察者列表,无观察者可传 null,当音视频发起方是观察者时,observerUserIds 需要包含发起方用户 ID
    mediaTypeRongCallCommon.CallMediaType发起的通话媒体类型
    extraString附加信息,透传至对端,对端通过 RongCallSession.getExtra() 获取
  • 示例代码:

    Conversation.ConversationType conversationType = Conversation.ConversationType.PRIVATE;
    String targetId = "001";
    List<String> userIds = new ArrayList<>();
    userIds.add("002");
    List<String> observerUserIds = new ArrayList<>();
    observerUserIds.add("003");
    RongCallCommon.CallMediaType mediaType = RongCallCommon.CallMediaType.VIDEO;
    String extra = "";
    RongCallClient.getInstance().startCall(conversationType, targetId, userIds, observerUserIds, mediaType, extra);

指定摄像头发起呼叫

发起单人或多人音视频通话需要打开指定摄像头,请调用以下方法。

  • 参数说明:
参数类型必填说明
cameraIdint摄像头 ID
mirrorboolean是否镜像视频流,详细说明请查看下方提示
conversationTypeConversation.ConversationType会话类型
targetIdString目标会话 ID,单人通话为对方 UserID,群组通话为 GroupId
userIdsList<String>邀请参与通话的用户 ID 列表,不能为空,必须包含 observerUserIds 中除发起者 ID 的所有用户 ID
observerUserIdsList<String>观察者列表,无观察者可传 null ,当音视频发起方是观察者时,observerUserIds 需要包含发起方用户 ID
mediaTypeRongCallCommon.CallMediaType发起的通话媒体类型
extraString附加信息,透传至对端,对端通过 RongCallSession.getExtra() 获取

注意

mirror 说明

在某些特殊设备上,后置摄像头被安装在设备的前面。为打开后置摄像头时可以正常显示,请使用镜像处理。mirror仅对本地有效(发送出去的数据依然是未处理数据)。

如果本地视频流做了镜像处理,为了对端观看体验可以在 IRongCallListener#onRemoteUserJoined(String, RongCallCommon.CallMediaType, int, SurfaceView) 回调中添加如下设置:

public void onRemoteUserJoined (String userId, RongCallCommon.CallMediaType mediaType,int userType, SurfaceView remoteVideo){
if (null != remoteVideo) {
((RongRTCVideoView) remoteVideo).setMirror(boolean);//观看对方视频流是否镜像处理
}
}
  • 示例代码:

    int cameraId = 1;
    boolean mirror = false;
    Conversation.ConversationType conversationType = Conversation.ConversationType.PRIVATE;
    String targetId = "001";
    List<String> userIds = new ArrayList<>();
    userIds.add("002");
    List<String> observerUserIds = new ArrayList<>();
    observerUserIds.add("003");
    RongCallCommon.CallMediaType mediaType = RongCallCommon.CallMediaType.VIDEO;
    String extra = "";
    RongCallClient.getInstance().startCall(cameraId, mirror, conversationType, targetId, userIds, observerUserIds, mediaType, extra, new StartCameraCallback() {
    @Override
    public void onDone(boolean b) {
    }

    @Override
    public void onError(int i) {
    }
    });

挂断通话

调用 RongCallClient.hangUpCall 方法挂断通话,拒绝和挂断为同一个方法调用,SDK 内部会自动告知对方挂断、拒绝原因。

  • 参数说明:
返回值返回类型说明
callIdString呼叫 ID,可以从 RongCallSession.getCallId() 中获取
  • 示例代码:

    // im未连接或者不在通话中,RongCallClient 和 RongCallSession 为空
    if (RongCallClient.getInstance() != null && RongCallClient.getInstance().getCallSession() != null) {
    RongCallClient.getInstance().hangUpCall(RongCallClient.getInstance().getCallSession().getCallId());
    }

邀请通话

调用 RongCallClient.addParticipants 方法邀请用户加入当前通话(仅限群组),该方法必须在通话已经建立(IRongCallListener.onCallConnected)之后调用有效。

  • 参数说明:
参数类型必填说明
callIdString通话 ID
userIdsArrayList<String>邀请的用户 ID 列表,请一定包含 邀请的观察者列表 中的人员
observerUserIdsArrayList<String>邀请的观察者列表,没有观察者可传 null
  • 示例代码:

    if (RongCallClient.getInstance() != null && RongCallClient.getInstance().getCallSession() != null) {
    String callId = RongCallClient.getInstance().getCallSession().getCallId();
    ArrayList<String> userIds = new ArrayList<>();
    userIds.add("002");
    userIds.add("003");
    ArrayList<String> observerUserIds = new ArrayList<>();
    observerUserIds.add("002");
    observerUserIds.add("003");
    RongCallClient.getInstance().addParticipants(callId, userIds, observerUserIds);
    }