您好,登錄后才能下訂單哦!
CallKit
是融云音視頻通話功能的 UI 界面 SDK。包含了單人、多人音視頻通話的界面的各種場景和功能。您可以快速的集成 CallKit
來實現豐富的音視頻通話界面,并進行自己的 UI 定制開發。同時我們開源了 CallKit
,您可以根據您的需要去使用。
GitHub 項目:CallKit 開源代碼
音視頻服務開通,請參考音視頻開通方式說明。
由于底層引擎技術不同,2.6.0 之后的音視頻 SDK 與 2.6.0 之前的 SDK 中的實時音視頻不能互通。
音視頻 SDK 為商用收費功能,之前的 SDK 中的實時音視頻為免費測試功能,如果您還想使用之前的實時音視頻,可以使用 2.5.2 版本,2.6.0 之后的音視頻服務使用說明如下:
1、 首先請參考官網文檔集成 CallKit SDK 。
2、 src/main/java/io/rong/imkit
下面是 Call 界面的源碼,可以自行修改以滿足自己的需求。
3、 打開 src/main/AndroidManifest.xml
,下面是 Call 相關的代碼。
<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 用到的權限。
<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 狀態。
5、 在群組中,啟動視頻通話或音頻通話時,需要設置群組成員信息,通過 getMemberList 方法返回群組成員的 userId 的集合。以確保選擇成員頁面能正確顯示所有群組成員。設置方法如下:
RongCallKit.setGroupMemberProvider(new RongCallKit.GroupMembersProvider() { @Override public ArrayList<String> getMemberList(String groupId, final RongCallKit.OnGroupMembersResult result) { //返回群組成員userId的集合 } });
在私聊或討論組的會話界面,點擊輸入框右側的+號,就可以選擇“語音聊天”和“視頻聊天”了。
或者你可以根據自己的代碼邏輯,在需要的地方調用下面接口發起呼叫。
/** * 發起單人通話。 * * @param context 上下文 * @param targetId 會話 id * @param mediaType 會話媒體類型 */RongCallKit.startSingleCall(Context context, String targetId, CallMediaType mediaType); /** * 發起多人通話 * * @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 默認音頻通話最大人數為 20 人,視頻通話最大人數為 9 人。
如果 App 在前臺或者在后臺且并沒有被系統回收時,當收到呼叫,會自動彈出通話界面。如果 App 已經被回收,2.6.0 以上的版本需要集成遠程推送。這樣即使被回收了也能收到 Call 的推送消息,點擊推送消息啟動 App 會自動彈出通話界面。詳細請參考遠程推送集成文檔。
IRongCallListener 是通話狀態的監聽類,CallKit 的 RongCallProxy.java
已經實現了該監聽,并且會回調到 BaseCallActivity 中的各個方法,您可以繼承 BaseCallActivity,根據需要復寫其中的對應方法,即可獲取對應的通話回調。
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
的代碼,實現自己應用的監聽。示例如下:
public class RongCallProxy implements IRongCallListener { private IRongCallListener mCallListener; // 增加一個監聽。 /*設置自己應用的監聽*/ public void setAppCallListener(IRongCallListener listener) { this.mAppCallListener = listener; } /*修改對應的通話狀態回調的方法,使其回調到您設置的應用自身的監聽*/ @Override public void onCallOutgoing(RongCallSession callSession, SurfaceView localVideo) { if (mCallListener != null) { mCallListener.onCallOutgoing(callSession, localVideo); } /*增加的代碼,回調應用設置的監聽*/ if(mAppCallListener != null) { mAppCallListener.onCallOutgoing(callSession, localVideo); } } ... // 根據您的需要,同樣的方式修改其它通話狀態回調函數。 }
修改完上述方法后,在您的應用里調用 setAppCallListener() 設置您自己的監聽。
由于通話界面的需求是多種多樣的,融云設計了一套通用的 UI 界面,開源供用戶使用。對于普通用戶來說,CallKit
應該滿足需求;而對于有特殊需要的用戶,可以自己來修改 CallKit
的源代碼來滿足需求。
需要提醒開發者的是,如果您在開發過程中,沒有集成融云 SDK 中的聊天會話界面 (ConversationFragment),您還需將 RongCallModule 中的變量 mViewLoaded 在該類的 onCreate 方法中設置為 True。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。