開通方式
音視頻服務開通,請參考音視頻開通方式說明。
使用說明
由於底層引擎技術不同,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<String> 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<String> 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) { } });