热门IT资讯网

【音视频】Android CallLib 开发指南

发表于:2024-11-24 作者:热门IT资讯网编辑
编辑最后更新 2024年11月24日,开通方式音视频服务开通,请参考音视频开通方式说明。使用说明由于底层引擎技术不同,2.6.0 之后的音视频 SDK 与 2.6.0 之前的 SDK 中的实时音视频不能互通。音视频 SDK 为商用收费功能

开通方式

音视频服务开通,请参考音视频开通方式说明。

使用说明

由于底层引擎技术不同,2.6.0 之后的音视频 SDK 与 2.6.0 之前的 SDK 中的实时音视频不能互通。

音视频 SDK 为商用收费功能,之前的 SDK 中的实时音视频为免费测试功能,如果您还想使用之前的实时音视频,可以使用 2.5.2 版本,2.6.0 之后的音视频服务使用说明如下:

集成说明

1、 首先请参考官网文档集成 CallLib SDK 。

2、 使用融云通话之前,必须先初始化 SDK 和连接服务器,详细内容可以参考 IMLib 快速集成文档。

快速集成

发起通话

您可以调用 RongCallClient 下面接口发起通话。

/** * 发起一个通话 * @param conversationType  会话类型 * @param targetId          目标会话id * @param userIds           邀请参与通话的用户ID列表 * @param mediaType         发起的通话媒体类型 * @param extra             附加信息 * @return                  呼叫id */ public String startCall(Conversation.ConversationType conversationType, String targetId, List userIds, RongCallCommon.CallMediaType mediaType, String extra);

设置通话来电监听

RongCallClient.setReceivedCallListener(new IRongReceivedCallListener() {        /**     * 来电回调     * @param callSession 通话实体     */    @Override    public void onReceivedCall(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两项权限。     * @param callSession 通话实体     */    @Override    public void onCheckPermission(RongCallSession callSession) {    }});

接听和挂断通话

您可以调用 RongCallClient 下面接口接听和挂断通话。

/** * 接听通话 * @param callId 呼叫id,可以从来电监听的callSession中获取 */public void acceptCall(String callId);
/** * 挂断通话 * @param callId 呼叫id,可以从来电监听的callSession中获取 */public void hangUpCall(String callId);
会话是否支持发起通话--call_conversation--

目前,SDK 支持在单聊中发起单人通话,在讨论组中发起多人通话。

您可以通过 RongCallClient 的下面接口查询当前会话类型的通话能力。

/** * 当前会话类型是否支持音频通话。 * @param type  会话类型 * @return      true:支持; false:不支持 */ public boolean isAudioCallEnabled(Conversation.ConversationType type); /** * 当前会话类型是否支持视频通话。 * @param type  会话类型 * @return      true:支持; false:不支持 */ public boolean isVideoCallEnabled(Conversation.ConversationType type);

获取当前的通话实体

您可以通过RongCallClient的下面接口获取当前的通话实体,通话实体中维护着当前通话的所有信息。

/** * 获取当前通话实体,通话实体中维护着当前通话的所有信息。 * @return 当前通话实体 */ public RongCallSession getCallSession();

邀请用户加入当前通话

您可以通过 RongCallClient 的下面接口邀请用户加入当前通话(仅限讨论组和群组)。

/** * 邀请用户加入当前通话(仅限讨论组和群组) * @param callId    通话id * @param userIds   邀请的用户id列表 */ public void addParticipants(String callId, List userIds);

通话过程中的媒体接口

您可以通过 RongCallClient 的下面接口进行媒体类的操作。

/** * 切换 audio,video 通话 * @param mediaType 要切换的媒体类型:audio、video */ public void changeCallMediaType(RongCallCommon.CallMediaType mediaType); /** * 前后摄像头切换 */ public void switchCamera(); /** * 设置是否打开本地摄像头 * @param enabled true:打开摄像头;false:关闭摄像头。 */ public void setEnableLocalVideo(boolean enabled); /** * 设置是否打开本地音频 * @param enabled true:打开本地音频 false:关闭本地音频 */ public void setEnableLocalAudio(boolean enabled); /** * 设置是否打开免提 * @param enabled true:打开免提 false:关闭免提 */ public void setEnableSpeakerphone(boolean enabled);

设置通话状态的回调

您需要设置通话状态的回调,来监听通话状态的变化。

RongCallClient.getInstance().setVoIPCallListener(new IRongCallListener() {        /**     * 电话已拨出。     * 主叫端拨出电话后,通过回调 onCallOutgoing 通知当前 call 的详细信息。     *     * @param callSession 通话实体。     * @param localVideo  本地 camera 信息。     */    @Override    public void onCallOutgoing(RongCallSession callSession, SurfaceView localVideo) {    }            /**     * 已建立通话。     * 通话接通时,通过回调 onCallConnected 通知当前 call 的详细信息。     *     * @param callSession 通话实体。     * @param localVideo  本地 camera 信息。     */    @Override    public void onCallConnected(RongCallSession callSession, SurfaceView localVideo) {    }            /**     * 通话结束。     * 通话中,对方挂断,己方挂断,或者通话过程网络异常造成的通话中断,都会回调 onCallDisconnected。     *     * @param callSession 通话实体。     * @param reason      通话中断原因。     */    @Override    public void onCallDisconnected(RongCallSession callSession, RongCallCommon.CallDisconnectedReason reason) {    }            /**     * 被叫端正在振铃。     * 主叫端拨出电话,被叫端收到请求,发出振铃响应时,回调 onRemoteUserRinging。     *     * @param userId 振铃端用户 id。     */    @Override    public void onRemoteUserRinging(String userId) {    }            /**     * 被叫端加入通话。     * 主叫端拨出电话,被叫端收到请求后,加入通话,回调 onRemoteUserJoined。     *     * @param userId      加入用户的 id。     * @param mediaType   加入用户的媒体类型,audio or video。     * @param remoteVideo 加入用户者的 camera 信息。     */    @Override    public void onRemoteUserJoined(String userId, RongCallCommon.CallMediaType mediaType, SurfaceView remoteVideo) {    }            /**     * 通话中的某一个参与者,邀请好友加入通话,发出邀请请求后,回调 onRemoteUserInvited。     *     * @param userId    被邀请者的 id。     * @param mediaType 被邀请者的 id。     */    @Override    public void onRemoteUserInvited(String userId, RongCallCommon.CallMediaType mediaType) {    }            /**     * 通话中的远端参与者离开。     * 回调 onRemoteUserLeft 通知状态更新。     *     * @param userId 远端参与者的 id。     * @param reason 远端参与者离开原因。     */    @Override    public void onRemoteUserLeft(String userId, RongCallCommon.CallDisconnectedReason reason) {    }            /**     * 当通话中的某一个参与者切换通话类型,例如由 audio 切换至 video,回调 onMediaTypeChanged。     *     * @param userId    切换者的 userId。     * @param mediaType 切换者,切换后的媒体类型。     * @param video     切换着,切换后的 camera 信息,如果由 video 切换至 audio,则为 null。     */    @Override    public void onMediaTypeChanged(String userId, RongCallCommon.CallMediaType mediaType, SurfaceView video) {    }            /**     * 通话过程中,发生异常。     *     * @param errorCode 异常原因。     */    @Override    public void onError(RongCallCommon.CallErrorCode errorCode) {    }            /**     * 远端参与者 camera 状态发生变化时,回调 onRemoteCameraDisabled 通知状态变化。     *     * @param userId   远端参与者 id。     * @param disabled 远端参与者 camera 是否可用。     */    @Override    public void onRemoteCameraDisabled(String userId, boolean disabled) {    }});


0