音視頻服務(wù)開通,請(qǐng)參考音視頻開通方式說明。
創(chuàng)新互聯(lián)是專業(yè)的網(wǎng)站建設(shè)公司,提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)站設(shè)計(jì)等網(wǎng)站開發(fā)一體化解決方案;包括H5頁面制作,成都小程序開發(fā),網(wǎng)站定制,企業(yè)網(wǎng)站建設(shè),商城網(wǎng)站制作,成都響應(yīng)式網(wǎng)站建設(shè)公司,建網(wǎng)站,PHP網(wǎng)站建設(shè),軟件開發(fā),軟文發(fā)稿,網(wǎng)站營銷。歡迎做網(wǎng)站的企業(yè)前來合作洽談,創(chuàng)新互聯(lián)將竭誠為您服務(wù)!
由于底層引擎技術(shù)不同,2.6.0 之后的音視頻 SDK 與 2.6.0 之前的 SDK 中的實(shí)時(shí)音視頻不能互通。
音視頻 SDK 為商用收費(fèi)功能,之前的 SDK 中的實(shí)時(shí)音視頻為免費(fèi)測試功能,如果您還想使用之前的實(shí)時(shí)音視頻,可以使用 2.5.2 版本,2.6.0 之后的音視頻服務(wù)使用說明如下:
1、 首先請(qǐng)參考官網(wǎng)文檔集成 CallLib SDK 。
2、 使用融云通話之前,必須先初始化 SDK 和連接服務(wù)器,詳細(xì)內(nèi)容可以參考 IMLib 快速集成文檔。
您可以調(diào)用 RongCallClient
下面接口發(fā)起通話。
/** * 發(fā)起一個(gè)通話 * @param conversationType 會(huì)話類型 * @param targetId 目標(biāo)會(huì)話id * @param userIds 邀請(qǐng)參與通話的用戶ID列表 * @param mediaType 發(fā)起的通話媒體類型 * @param extra 附加信息 * @return 呼叫id */ public String startCall(Conversation.ConversationType conversationType, String targetId, ListuserIds, RongCallCommon.CallMediaType mediaType, String extra);
RongCallClient.setReceivedCallListener(new IRongReceivedCallListener() { /** * 來電回調(diào) * @param callSession 通話實(shí)體 */ @Override public void onReceivedCall(RongCallSession callSession) { //accept or hangup the call } /** * targetSDKVersion>=23時(shí)檢查權(quán)限的回調(diào)。當(dāng)targetSDKVersion<23的時(shí)候不需要實(shí)現(xiàn)。 * 在這個(gè)回調(diào)里用戶需要使用Android6.0新增的動(dòng)態(tài)權(quán)限分配接口requestCallPermissions通知用戶授權(quán), * 然后在onRequestPermissionResult回調(diào)里根據(jù)用戶授權(quán)或者不授權(quán)分別回調(diào) * RongCallClient.getInstance().onPermissionGranted()和 * RongCallClient.getInstance().onPermissionDenied()來通知CallLib。 * 其中audio call需要獲取Manifest.permission.RECORD_AUDIO權(quán)限; * video call需要獲取Manifest.permission.RECORD_AUDIO和Manifest.permission.CAMERA兩項(xiàng)權(quán)限。 * @param callSession 通話實(shí)體 */ @Override public void onCheckPermission(RongCallSession callSession) { } });
您可以調(diào)用 RongCallClient 下面接口接聽和掛斷通話。
/** * 接聽通話 * @param callId 呼叫id,可以從來電監(jiān)聽的callSession中獲取 */public void acceptCall(String callId);
/** * 掛斷通話 * @param callId 呼叫id,可以從來電監(jiān)聽的callSession中獲取 */public void hangUpCall(String callId);
目前,SDK 支持在單聊中發(fā)起單人通話,在討論組中發(fā)起多人通話。
您可以通過 RongCallClient
的下面接口查詢當(dāng)前會(huì)話類型的通話能力。
/** * 當(dāng)前會(huì)話類型是否支持音頻通話。 * @param type 會(huì)話類型 * @return true:支持; false:不支持 */ public boolean isAudioCallEnabled(Conversation.ConversationType type); /** * 當(dāng)前會(huì)話類型是否支持視頻通話。 * @param type 會(huì)話類型 * @return true:支持; false:不支持 */ public boolean isVideoCallEnabled(Conversation.ConversationType type);
您可以通過RongCallClient的下面接口獲取當(dāng)前的通話實(shí)體,通話實(shí)體中維護(hù)著當(dāng)前通話的所有信息。
/** * 獲取當(dāng)前通話實(shí)體,通話實(shí)體中維護(hù)著當(dāng)前通話的所有信息。 * @return 當(dāng)前通話實(shí)體 */ public RongCallSession getCallSession();
您可以通過 RongCallClient 的下面接口邀請(qǐng)用戶加入當(dāng)前通話(僅限討論組和群組)。
/** * 邀請(qǐng)用戶加入當(dāng)前通話(僅限討論組和群組) * @param callId 通話id * @param userIds 邀請(qǐng)的用戶id列表 */ public void addParticipants(String callId, ListuserIds);
您可以通過 RongCallClient
的下面接口進(jìn)行媒體類的操作。
/** * 切換 audio,video 通話 * @param mediaType 要切換的媒體類型:audio、video */ public void changeCallMediaType(RongCallCommon.CallMediaType mediaType); /** * 前后攝像頭切換 */ public void switchCamera(); /** * 設(shè)置是否打開本地?cái)z像頭 * @param enabled true:打開攝像頭;false:關(guān)閉攝像頭。 */ public void setEnableLocalVideo(boolean enabled); /** * 設(shè)置是否打開本地音頻 * @param enabled true:打開本地音頻 false:關(guān)閉本地音頻 */ public void setEnableLocalAudio(boolean enabled); /** * 設(shè)置是否打開免提 * @param enabled true:打開免提 false:關(guān)閉免提 */ public void setEnableSpeakerphone(boolean enabled);
您需要設(shè)置通話狀態(tài)的回調(diào),來監(jiān)聽通話狀態(tài)的變化。
RongCallClient.getInstance().setVoIPCallListener(new IRongCallListener() { /** * 電話已撥出。 * 主叫端撥出電話后,通過回調(diào) onCallOutgoing 通知當(dāng)前 call 的詳細(xì)信息。 * * @param callSession 通話實(shí)體。 * @param localVideo 本地 camera 信息。 */ @Override public void onCallOutgoing(RongCallSession callSession, SurfaceView localVideo) { } /** * 已建立通話。 * 通話接通時(shí),通過回調(diào) onCallConnected 通知當(dāng)前 call 的詳細(xì)信息。 * * @param callSession 通話實(shí)體。 * @param localVideo 本地 camera 信息。 */ @Override public void onCallConnected(RongCallSession callSession, SurfaceView localVideo) { } /** * 通話結(jié)束。 * 通話中,對(duì)方掛斷,己方掛斷,或者通話過程網(wǎng)絡(luò)異常造成的通話中斷,都會(huì)回調(diào) onCallDisconnected。 * * @param callSession 通話實(shí)體。 * @param reason 通話中斷原因。 */ @Override public void onCallDisconnected(RongCallSession callSession, RongCallCommon.CallDisconnectedReason reason) { } /** * 被叫端正在振鈴。 * 主叫端撥出電話,被叫端收到請(qǐng)求,發(fā)出振鈴響應(yīng)時(shí),回調(diào) onRemoteUserRinging。 * * @param userId 振鈴端用戶 id。 */ @Override public void onRemoteUserRinging(String userId) { } /** * 被叫端加入通話。 * 主叫端撥出電話,被叫端收到請(qǐng)求后,加入通話,回調(diào) onRemoteUserJoined。 * * @param userId 加入用戶的 id。 * @param mediaType 加入用戶的媒體類型,audio or video。 * @param remoteVideo 加入用戶者的 camera 信息。 */ @Override public void onRemoteUserJoined(String userId, RongCallCommon.CallMediaType mediaType, SurfaceView remoteVideo) { } /** * 通話中的某一個(gè)參與者,邀請(qǐng)好友加入通話,發(fā)出邀請(qǐng)請(qǐng)求后,回調(diào) onRemoteUserInvited。 * * @param userId 被邀請(qǐng)者的 id。 * @param mediaType 被邀請(qǐng)者的 id。 */ @Override public void onRemoteUserInvited(String userId, RongCallCommon.CallMediaType mediaType) { } /** * 通話中的遠(yuǎn)端參與者離開。 * 回調(diào) onRemoteUserLeft 通知狀態(tài)更新。 * * @param userId 遠(yuǎn)端參與者的 id。 * @param reason 遠(yuǎn)端參與者離開原因。 */ @Override public void onRemoteUserLeft(String userId, RongCallCommon.CallDisconnectedReason reason) { } /** * 當(dāng)通話中的某一個(gè)參與者切換通話類型,例如由 audio 切換至 video,回調(diào) onMediaTypeChanged。 * * @param userId 切換者的 userId。 * @param mediaType 切換者,切換后的媒體類型。 * @param video 切換著,切換后的 camera 信息,如果由 video 切換至 audio,則為 null。 */ @Override public void onMediaTypeChanged(String userId, RongCallCommon.CallMediaType mediaType, SurfaceView video) { } /** * 通話過程中,發(fā)生異常。 * * @param errorCode 異常原因。 */ @Override public void onError(RongCallCommon.CallErrorCode errorCode) { } /** * 遠(yuǎn)端參與者 camera 狀態(tài)發(fā)生變化時(shí),回調(diào) onRemoteCameraDisabled 通知狀態(tài)變化。 * * @param userId 遠(yuǎn)端參與者 id。 * @param disabled 遠(yuǎn)端參與者 camera 是否可用。 */ @Override public void onRemoteCameraDisabled(String userId, boolean disabled) { } });