溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

【音視頻】Android CallKit 開發(fā)指南

發(fā)布時間:2020-05-28 05:37:19 來源:網(wǎng)絡(luò) 閱讀:1644 作者:晨會看看 欄目:移動開發(fā)

簡介

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

    }
});

發(fā)起通話

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

【音視頻】Android CallKit 開發(fā)指南

或者你可以根據(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)程推送集成文檔。

通話回調(diào)接口

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。


向AI問一下細(xì)節(jié)

免責(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)容。

AI