跳到主要内容

主叫方

发起呼叫

调用 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() 获取

示例代码

Java
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) 回调中添加如下设置:

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

示例代码

Java
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() 中获取

示例代码

Java
// 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

示例代码

Java
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);
}