主叫方
发起呼叫
调用 RongCallClient.startCall
方法发起单人或多人音视频通话,该方法默认打开前置摄像头。多人通话场景所有通话者必须在一个群组内。
-
参数说明:
参数 类型 必填 说明 conversationType Conversation.ConversationType 是 会话类型 targetId String 是 目标会话 ID,单人通话为对方 UserId,群组通话为 GroupId userIds List<String>
是 邀请参与通话的用户 ID 列表,不能为 null
,必须包含 observerUserIds 中除发起者ID的所有用户IDobserverUserIds List<String>
是 观察者列表,无观察者可传 null
,当音视频发起方是观察者时,observerUserIds 需要包含发起方用户 IDmediaType RongCallCommon.CallMediaType 是 发起的通话媒体类型 extra String 是 附加信息,透传至对端,对端通过 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);
指定摄像头发起呼叫
发起单人或多人音视频通话需要打开指定摄像头,请调用以下方法。
- 参数说明:
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
cameraId | int | 是 | 摄像头 ID |
mirror | boolean | 是 | 是否镜像视频流,详细说明请查看下方提示 |
conversationType | Conversation.ConversationType | 是 | 会话类型 |
targetId | String | 是 | 目标会话 ID,单人通话为对方 UserID,群组通话为 GroupId |
userIds | List<String> | 是 | 邀请参与通话的用户 ID 列表,不能为空,必须包含 observerUserIds 中除发起者 ID 的所有用户 ID |
observerUserIds | List<String> | 是 | 观察者列表,无观察者可传 null ,当音视频发起方是观察者时,observerUserIds 需要包含发起方用户 ID |
mediaType | RongCallCommon.CallMediaType | 是 | 发起的通话媒体类型 |
extra | String | 是 | 附加信息,透传至对端,对端通过 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 内部会自动告知对方挂断、拒绝原因。
- 参数说明:
返回值 | 返回类型 | 说明 |
---|---|---|
callId | String | 呼叫 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
)之后调用有效。
- 参数说明:
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
callId | String | 是 | 通话 ID |
userIds | ArrayList<String> | 是 | 邀请的用户 ID 列表,请一定包含 邀请的观察者列表 中的人员 |
observerUserIds | ArrayList<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);
}