【音視頻】Android CallKit 開發指南

簡介

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的集合

    }
});

發起通話

在私聊或討論組的會話界面,點擊輸入框右側的+號,就可以選擇“語音聊天”和“視頻聊天”了。

image

或者你可以根據自己的代碼邏輯,在需要的地方調用下面接口發起呼叫。

/**
 * 發起單人通話。
 *
 * @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。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章