從0開始,搭建一個完整的Android音視頻通信系統 頂 原

昨天,圖鴨君給大家介紹瞭如何在iOS端搭建音視頻通信系統,今天我就給大家介紹一下如何搭建一個完整的Android音視頻通信系統。

一、準備:

首先在圖鴨官網:http://tucodec.com 進行註冊,獲得SDK中所需要的AppKey、AppSecret,註冊登錄後如下圖所示:

 圖1  註冊後獲取AppKey、AppSecret

 

其次到開發者裏選擇下載android中所需SDK。

圖2  SDK下載展示

 

最後解壓,如下圖所示:

 

圖3  SDK解壓後內容

voip_android_demo1.0是用於演示的demo,圖鴨君也將要按照這個demo以及SDK開發文檔進行講解,打開resource資源文件,如圖4所示:

圖4  resource文件夾內容

 

將voip_android.aar提取出來導入到工程,裏面包含了提供相關操作的java類以及so庫,配置相關的環境。

 

導入”voip_android.aar”文件(如圖5)

在“libs”文件夾下添加aar包,在build文件夾下添加:

repositories {
    flatDir {
         dirs 'libs'
    }
}

在dependencies下添加:

compile(name: 'voip_android', ext: 'aar')

 

配置其他三方庫(如圖5)

在gradle文件裏面的dependencies 下添加下面三方庫:

api "com.alibaba:fastjson:1.1.63.android"

 

加入權限

AndroidManifest.xml加入以下權限:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_LOGS"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>

      

   圖5  gradle文件內容

 

完成上述操作後,我們的音視頻通訊App所需的大體框架已經完成啦,之後就是碼代碼,完成系統UI界面繪製和用戶之間通訊的邏輯操作。

在圖鴨科技提供的SDK中,我們可以看到只需要調用三個類進行操作,可見快速集成音視頻通信並不是那麼複雜。如圖6所示:

                        

圖6  SDK中操作類

 

二、操作類定義:

1、TYVoipAndroid:提供所有Voip相關方法

2、TYVoipVideoCapture:攝像頭管理類

3、TYVoipVideoRender:Voip客戶端視頻渲染視圖.,渲染在此視圖上進行

 

瞭解上述主要接口文件及其定義後,我們來了解SDK中的通信原理:SDK中,所有用戶都以通訊節點的形式存在,作爲節點的用戶都擁有自己唯一的表示—— UserID ,整個SDK會根據每個用戶的UserID來進行通訊。

 

例如,甲和乙之間進行通訊,假設甲的UserID爲401,乙的UserID爲402,甲登錄後向乙發送我要和你開視頻,乙登錄後向甲發送我要和你開視頻,甲開始渲染乙的視圖,乙開始渲染甲的視圖 。完成上述所有操作後,甲乙建立通訊。

 

三、完整的SDK使用步驟簡介:

 

<1>初始化TYVoipAndroid、TYVoipVideoCapture類:

mTYVoipAndroid = new TYVoipAndroid(new Handler(), Context,null);

mVideoCapture = TYVoipVideoCapture(mTYVoipAndroid ,
           TYVoipVideoCapture.CaptureParam(mTYVoipAndroid.config.videoWidth,  

  mTYVoipAndroid.config.videoHeight));

 

<2>登錄轉發服務器(建議寫成單例,一次登錄,多次調用):

loginRelayServer(String ip, short port, int userId, int sessionId, int AppKey, int AppSecret);

 

<3>開啓相機,註冊音視頻回調,初始化Voip客戶端,開啓傳輸

mVideoCapture.start(false, mTYVoipAndroid.config, mMainRender.parent    as   ViewGroup);

    mTYVoipAndroid.registerVideoCallback(mVideoCallback);

mTYVoipAndroid.registerAudioCallback(mAudioCallback);

mTYVoipAndroid.initVoip(mVideoCapture);

mTYVoipAndroid.startVoip(int videoBitRate, int audioBitRate, int userId);

 

<4>根據邏輯,添加(刪除)需要通話的節點:

mTYVoipAndroid.addClientNode(int userId);

//mTYVoipAndroid.removeClientNode(int userId);

 

<5>不需要通話時,停止voip:

mTYVoipAndroid.stopCall()

//清空現有的連接節點(不再接收節點的數據)

mTYVoipAndroid.clearClientNodeList();

 

<6>根據具體的業務邏輯重複步驟3、4、5

 

<7>在程序結束時銷燬voip

mTYVoipAndroid.release()

 

部分代碼解釋:(從用戶甲的實現代碼來解釋)

 

private TYVoipVideoRender preView;    //渲染甲的視圖

private TYVoipVideoRender otherView;  //渲染乙的視圖

 

<1>登錄操作:

   甲(UserID:401)登錄操作,返回值爲是否登錄成功(非0即爲成功):

 

/**

*連接轉發服務器

*@param ip @param 端口號@param userId @param sessionId

*@param AppKey @param AppSecret @return !0即爲成功

*/

mTYVoipAndroid.loginRelayServer(ip, port, 401, sessionId, AppKey,  AppSecret);

 

<2>連接操作

甲連接乙操作:

...一系列操作/

//甲自己加入到通訊中

mTYVoipAndroid.startVoip(512, 16000, 401);

//添加節點(添加乙的USerID)

mTYVoipAndroid.addClientNode(402);

 

//在videoCallBack上進行視圖渲染

 

private TYVoipAndroid.VideoCallback mVideoCallback = new TYVoipAndroid.VideoCallback() {
    @Override
    public void renderVoipVideoData(VoipImage voipImage) {
        if (voipImage.isLocal){
        //本地視頻渲染(甲的數據流)
        preView.pushVideoFrame(voipImage);
        }else {

//非本地視頻渲染(乙的數據流)
          otherView.pushVideoFrame(voipImage);
        }
    }
};

//在audioCallBack回調方法目前還未用到,忽視此回調

 

<3>斷開操作

甲進行斷開通信操作

//停止相機視頻捕捉

mVideoCapture.stop()

//清空現有的連接節點(不再接收節點的數據)

mTYVoipAndroid.clearClientNodeList();

//結束Voip通話
mTYVoipAndroid.stopCall()

//釋放資源
mTYVoipAndroid.release()

項目中最重要的代碼介紹完啦,那測試一下,看看我們的成果吧。

 

圖7  測試效果圖

 

達到上圖所示結果,一套完整的android音視頻通信系統就完成了。

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