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

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

1、準備:

首先在圖鴨官網:http://tucodec.com 進行註冊,得到SDK中所須要的AppKey、AppSecret,註冊登陸後以下圖所示:android

 圖1  註冊後獲取AppKey、AppSecretjson

 

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

圖2  SDK下載展現服務器

 

最後解壓,以下圖所示:session

 

圖3  SDK解壓後內容框架

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

圖4  resource文件夾內容測試

 

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

 

導入」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中操做類

 

2、操做類定義:

一、TYVoipAndroid:提供全部Voip相關方法

二、TYVoipVideoCapture:攝像頭管理類

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

 

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

 

例如,甲和乙之間進行通信,假設甲的UserID爲401,乙的UserID爲402,甲登陸後向乙發送我要和你開視頻,乙登陸後向甲發送我要和你開視頻,甲開始渲染乙的視圖,乙開始渲染甲的視圖 。完成上述全部操做後,甲乙創建通信。

 

3、完整的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>根據具體的業務邏輯重複步驟三、四、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音視頻通訊系統就完成了。

相關文章
相關標籤/搜索