一、开通方式
音视频服务开通,请参考音视频开通方式说明。
二、使用说明
由于底层引擎技术不同,2.6.0 之后的音视频 SDK 与 2.6.0 之前的 SDK 中的实时音视频不能互通。
音视频 SDK 为商用收费功能,之前的 SDK 中的实时音视频为免费测试功能,如果您还想使用之前的实时音视频,可以使用 2.5.2 版本,2.6.0 之后的音视频服务使用说明如下:
三、集成说明
1、 首先请参考官网文档集成 CallLib SDK 。
2、 使用融云通话之前,必须先初始化 SDK 和连接服务器,详细内容可以参考 IMLib 快速集成文档。
四、快速集成
1.发起通话
您可以调用 RongCallClient 下面接口发起通话。
/**
* 发起一个通话
* @paramconversationType 会话类型
* @paramtargetId 目标会话id
* @paramuserIds 邀请参与通话的用户ID列表
* @parammediaType 发起的通话媒体类型
* @paramextra 附加信息
* @return 呼叫id
*/
publicStringstartCall(Conversation.ConversationType conversationType, String targetId, List userIds, RongCallCommon.CallMediaType mediaType, String extra);
2.设置通话来电监听
RongCallClient.setReceivedCallListener(newIRongReceivedCallListener() {
/**
* 来电回调
* @paramcallSession 通话实体
*/
@Override
publicvoidonReceivedCall(RongCallSession callSession) {
//accept or hangup the call
}
/**
* targetSDKVersion>=23时检查权限的回调。当targetSDKVersion<23的时候不需要实现。
* 在这个回调里用户需要使用Android6.0新增的动态权限分配接口requestCallPermissions通知用户授权,
* 然后在onRequestPermissionResult回调里根据用户授权或者不授权分别回调
* RongCallClient.getInstance().onPermissionGranted()和
* RongCallClient.getInstance().onPermissionDenied()来通知CallLib。
* 其中audio call需要获取Manifest.permission.RECORD_AUDIO权限;
* video call需要获取Manifest.permission.RECORD_AUDIO和Manifest.permission.CAMERA两项权限。
* @paramcallSession 通话实体
*/
@OverridepublicvoidonCheckPermission(RongCallSession callSession) {
}
});
3.接听和挂断通话
您可以调用 RongCallClient 下面接口接听和挂断通话。
/**
* 接听通话
* @paramcallId 呼叫id,可以从来电监听的callSession中获取
*/
publicvoidacceptCall(String callId);
/**
* 挂断通话
* @paramcallId 呼叫id,可以从来电监听的callSession中获取
*/
publicvoidhangUpCall(String callId);
4.会话是否支持发起通话--call_conversation--
目前,SDK 支持在单聊中发起单人通话,在讨论组中发起多人通话。
您可以通过 RongCallClient 的下面接口查询当前会话类型的通话能力。
/**
* 当前会话类型是否支持音频通话。
* @paramtype 会话类型
* @returntrue:支持; false:不支持 */publicbooleanisAudioCallEnabled(Conversation.ConversationType type);
/**
* 当前会话类型是否支持视频通话。
* @paramtype 会话类型
* @returntrue:支持; false:不支持
*/
publicbooleanisVideoCallEnabled(Conversation.ConversationType type);
5.获取当前的通话实体
您可以通过RongCallClient的下面接口获取当前的通话实体,通话实体中维护着当前通话的所有信息。
/**
* 获取当前通话实体,通话实体中维护着当前通话的所有信息。
* @return当前通话实体
*/
publicRongCallSessiongetCallSession();
6.邀请用户加入当前通话
您可以通过 RongCallClient 的下面接口邀请用户加入当前通话(仅限讨论组和群组)。
/**
* 邀请用户加入当前通话(仅限讨论组和群组)
* @paramcallId 通话id
* @paramuserIds 邀请的用户id列表
*/
publicvoidaddParticipants(String callId, List userIds);
7.通话过程中的媒体接口
您可以通过 RongCallClient 的下面接口进行媒体类的操作。
/**
* 切换 audio,video 通话
* @parammediaType 要切换的媒体类型:audio、video
*/
publicvoidchangeCallMediaType(RongCallCommon.CallMediaType mediaType);
/**
* 前后摄像头切换
*/
publicvoidswitchCamera();
/**
* 设置是否打开本地摄像头
* @paramenabled true:打开摄像头;false:关闭摄像头。
*/
publicvoidsetEnableLocalVideo(booleanenabled);
/**
* 设置是否打开本地音频
* @paramenabled true:打开本地音频 false:关闭本地音频
*/
publicvoidsetEnableLocalAudio(booleanenabled);
/**
* 设置是否打开免提
* @paramenabled true:打开免提 false:关闭免提
*/
publicvoidsetEnableSpeakerphone(booleanenabled);
8.设置通话状态的回调
您需要设置通话状态的回调,来监听通话状态的变化。
RongCallClient.getInstance().setVoIPCallListener(newIRongCallListener() {
/**
* 电话已拨出。
* 主叫端拨出电话后,通过回调 onCallOutgoing 通知当前 call 的详细信息。
*
* @paramcallSession 通话实体。
* @paramlocalVideo 本地 camera 信息。
*/
@Override
publicvoidonCallOutgoing(RongCallSession callSession, SurfaceView localVideo) {
}
/**
* 已建立通话。
* 通话接通时,通过回调 onCallConnected 通知当前 call 的详细信息。
*
* @paramcallSession 通话实体。
* @paramlocalVideo 本地 camera 信息。
*/
@Override
publicvoidonCallConnected(RongCallSession callSession, SurfaceView localVideo) {
}
/**
* 通话结束。
* 通话中,对方挂断,己方挂断,或者通话过程网络异常造成的通话中断,都会回调 onCallDisconnected。
*
* @paramcallSession 通话实体。
* @paramreason 通话中断原因。
*/
@Override
publicvoidonCallDisconnected(RongCallSession callSession, RongCallCommon.CallDisconnectedReason reason) {
}
/**
* 被叫端正在振铃。
* 主叫端拨出电话,被叫端收到请求,发出振铃响应时,回调 onRemoteUserRinging。
*
* @paramuserId 振铃端用户 id。
*/
@Override
publicvoidonRemoteUserRinging(String userId) {
}
/**
* 被叫端加入通话。
* 主叫端拨出电话,被叫端收到请求后,加入通话,回调 onRemoteUserJoined。
*
* @paramuserId 加入用户的 id。
* @parammediaType 加入用户的媒体类型,audio or video。
* @paramremoteVideo 加入用户者的 camera 信息。 */
@Override
publicvoidonRemoteUserJoined(String userId, RongCallCommon.CallMediaType mediaType, SurfaceView remoteVideo) {
}
/**
* 通话中的某一个参与者,邀请好友加入通话,发出邀请请求后,回调 onRemoteUserInvited。
*
* @paramuserId 被邀请者的 id。
* @parammediaType 被邀请者的 id。
*/
@Override
publicvoidonRemoteUserInvited(String userId, RongCallCommon.CallMediaType mediaType) {
}
/**
* 通话中的远端参与者离开。
* 回调 onRemoteUserLeft 通知状态更新。
*
* @paramuserId 远端参与者的 id。
* @paramreason 远端参与者离开原因。
*/
@Override
publicvoidonRemoteUserLeft(String userId, RongCallCommon.CallDisconnectedReason reason) {
}
/**
* 当通话中的某一个参与者切换通话类型,例如由 audio 切换至 video,回调 onMediaTypeChanged。
*
* @paramuserId 切换者的 userId。
* @parammediaType 切换者,切换后的媒体类型。
* @paramvideo 切换着,切换后的 camera 信息,如果由 video 切换至 audio,则为 null。
*/
@Override
publicvoidonMediaTypeChanged(String userId, RongCallCommon.CallMediaType mediaType, SurfaceView video) {
}
/**
* 通话过程中,发生异常。
*
* @paramerrorCode 异常原因。
*/
@Override
publicvoidonError(RongCallCommon.CallErrorCode errorCode) {
}
/**
* 远端参与者 camera 状态发生变化时,回调 onRemoteCameraDisabled 通知状态变化。
*
* @paramuserId 远端参与者 id。
* @paramdisabled 远端参与者 camera 是否可用。
*/
@Override
publicvoidonRemoteCameraDisabled(String userId,booleandisabled) {
}
});