您好,登錄后才能下訂單哦!
CallKit
是融云音視頻通話功能的 UI 界面 SDK。包含了單人、多人音視頻通話的界面的各種場景和功能。您可以快速的集成 CallKit
來實現(xiàn)豐富的音視頻通話界面,并進(jìn)行自己的 UI 定制開發(fā)。同時我們開源了 CallKit
,您可以根據(jù)您的需要去使用。
GitHub 項目:CallKit 開源代碼
音視頻服務(wù)開通,請參考音視頻開通方式說明。
由于底層引擎技術(shù)不同,2.6.0 之后的音視頻 SDK 與 2.6.0 之前的 SDK 中的實時音視頻不能互通。
音視頻 SDK 為商用收費功能,之前的 SDK 中的實時音視頻為免費測試功能,如果您還想使用之前的實時音視頻,可以使用 2.5.2 版本,2.6.0 之后的音視頻服務(wù)使用說明如下:
1、 首先請參考官網(wǎng)文檔集成 CallKit SDK 。
2、 src/main/java/io/rong/imkit
下面是 Call 界面的源碼,可以自行修改以滿足自己的需求。
3、 打開 src/main/AndroidManifest.xml
,下面是 Call 相關(guān)的代碼。
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
Call 用到的權(quán)限。
<activity android:name="io.rong.imkit.MultiVideoCallActivity" android:launchMode="singleTop" android:screenOrientation="portrait" android:windowSoftInputMode="stateHidden|adjustResize"> <intent-filter> <action android:name="io.rong.intent.action.voip.MULTIVIDEO" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <activity android:name="io.rong.imkit.SingleCallActivity" android:launchMode="singleTop" android:screenOrientation="portrait" android:windowSoftInputMode="stateHidden|adjustResize"> <intent-filter> <action android:name="io.rong.intent.action.voip.SINGLEVIDEO" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <intent-filter> <action android:name="io.rong.intent.action.voip.SINGLEAUDIO" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <activity android:name="io.rong.imkit.MultiAudioCallActivity" android:launchMode="singleTop" android:screenOrientation="portrait" android:windowSoftInputMode="stateHidden|adjustResize"> <intent-filter> <action android:name="io.rong.intent.action.voip.MULTIAUDIO" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <activity android:name="io.rong.imkit.CallSelectMemberActivity" />
Call 功能中使用到的 activity
和 receiver
。
4、 用戶使用 Call 期間融云保持 connected 狀態(tài)。
5、 在群組中,啟動視頻通話或音頻通話時,需要設(shè)置群組成員信息,通過 getMemberList 方法返回群組成員的 userId 的集合。以確保選擇成員頁面能正確顯示所有群組成員。設(shè)置方法如下:
RongCallKit.setGroupMemberProvider(new RongCallKit.GroupMembersProvider() { @Override public ArrayList<String> getMemberList(String groupId, final RongCallKit.OnGroupMembersResult result) { //返回群組成員userId的集合 } });
在私聊或討論組的會話界面,點擊輸入框右側(cè)的+號,就可以選擇“語音聊天”和“視頻聊天”了。
或者你可以根據(jù)自己的代碼邏輯,在需要的地方調(diào)用下面接口發(fā)起呼叫。
/** * 發(fā)起單人通話。 * * @param context 上下文 * @param targetId 會話 id * @param mediaType 會話媒體類型 */RongCallKit.startSingleCall(Context context, String targetId, CallMediaType mediaType); /** * 發(fā)起多人通話 * * @param context 上下文 * @param conversationType 會話類型 * @param targetId 會話 id * @param mediaType 會話媒體類型 * @param userIds 參與者 id 列表 */ RongCallKit.startMultiCall(Context context, Conversation.ConversationType conversationType, String targetId, CallMediaType mediaType, ArrayList<String> userIds);
CallKit 默認(rèn)音頻通話最大人數(shù)為 20 人,視頻通話最大人數(shù)為 9 人。
如果 App 在前臺或者在后臺且并沒有被系統(tǒng)回收時,當(dāng)收到呼叫,會自動彈出通話界面。如果 App 已經(jīng)被回收,2.6.0 以上的版本需要集成遠(yuǎn)程推送。這樣即使被回收了也能收到 Call 的推送消息,點擊推送消息啟動 App 會自動彈出通話界面。詳細(xì)請參考遠(yuǎn)程推送集成文檔。
IRongCallListener 是通話狀態(tài)的監(jiān)聽類,CallKit 的 RongCallProxy.java
已經(jīng)實現(xiàn)了該監(jiān)聽,并且會回調(diào)到 BaseCallActivity 中的各個方法,您可以繼承 BaseCallActivity,根據(jù)需要復(fù)寫其中的對應(yīng)方法,即可獲取對應(yīng)的通話回調(diào)。
public class MyCallActivity extends BaseCallActivity { @Override public void onCallOutgoing(RongCallSession callProfile, SurfaceView localVideo) { super.onCallOutgoing(callProfile, localVideo); /** * 此處添加你的代碼邏輯。 **/ } @Override public void onCallDisconnected(RongCallSession callProfile, RongCallCommon.CallDisconnectedReason reason) { super.onCallDisconnected(callProfile, reason); /** * 此處添加你的代碼邏輯。 **/ } @Override public void onOutgoingCallRinging() { super.onOutgoingCallRinging(); /** * 此處添加你的代碼邏輯。 **/ } @Override public void onIncomingCallRinging() { super.onIncomingCallRinging(); /** * 此處添加你的代碼邏輯。 **/ } @Override public void onCallConnected(RongCallSession callProfile, SurfaceView localVideo) { super.onCallConnected(callProfile, localVideo); /** * 此處添加你的代碼邏輯。 **/ } @Override public void onError(RongCallCommon.CallErrorCode errorCode) { super.onError(errorCode); /** * 此處添加你的代碼邏輯。 **/ } }
如果上述方法不適合,您還可以通過修改 RongCallProxy.java
的代碼,實現(xiàn)自己應(yīng)用的監(jiān)聽。示例如下:
public class RongCallProxy implements IRongCallListener { private IRongCallListener mCallListener; // 增加一個監(jiān)聽。 /*設(shè)置自己應(yīng)用的監(jiān)聽*/ public void setAppCallListener(IRongCallListener listener) { this.mAppCallListener = listener; } /*修改對應(yīng)的通話狀態(tài)回調(diào)的方法,使其回調(diào)到您設(shè)置的應(yīng)用自身的監(jiān)聽*/ @Override public void onCallOutgoing(RongCallSession callSession, SurfaceView localVideo) { if (mCallListener != null) { mCallListener.onCallOutgoing(callSession, localVideo); } /*增加的代碼,回調(diào)應(yīng)用設(shè)置的監(jiān)聽*/ if(mAppCallListener != null) { mAppCallListener.onCallOutgoing(callSession, localVideo); } } ... // 根據(jù)您的需要,同樣的方式修改其它通話狀態(tài)回調(diào)函數(shù)。 }
修改完上述方法后,在您的應(yīng)用里調(diào)用 setAppCallListener() 設(shè)置您自己的監(jiān)聽。
由于通話界面的需求是多種多樣的,融云設(shè)計了一套通用的 UI 界面,開源供用戶使用。對于普通用戶來說,CallKit
應(yīng)該滿足需求;而對于有特殊需要的用戶,可以自己來修改 CallKit
的源代碼來滿足需求。
需要提醒開發(fā)者的是,如果您在開發(fā)過程中,沒有集成融云 SDK 中的聊天會話界面 (ConversationFragment),您還需將 RongCallModule 中的變量 mViewLoaded 在該類的 onCreate 方法中設(shè)置為 True。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。