昨天,圖鴨君給你們介紹瞭如何在iOS端搭建音視頻通訊系統,今天我就給你們介紹一下如何搭建一個完整的Android音視頻通訊系統。java
首先在圖鴨官網: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中操做類
一、TYVoipAndroid:提供全部Voip相關方法
二、TYVoipVideoCapture:攝像頭管理類
三、TYVoipVideoRender:Voip客戶端視頻渲染視圖.,渲染在此視圖上進行
瞭解上述主要接口文件及其定義後,咱們來了解SDK中的通訊原理:在SDK中,全部用戶都以通信節點的形式存在,做爲節點的用戶都擁有本身惟一的表示—— UserID ,整個SDK會根據每一個用戶的UserID來進行通信。
例如,甲和乙之間進行通信,假設甲的UserID爲401,乙的UserID爲402,甲登陸後向乙發送我要和你開視頻,乙登陸後向甲發送我要和你開視頻,甲開始渲染乙的視圖,乙開始渲染甲的視圖 。完成上述全部操做後,甲乙創建通信。
mTYVoipAndroid = new TYVoipAndroid(new Handler(), Context,null);
mVideoCapture = TYVoipVideoCapture(mTYVoipAndroid ,
TYVoipVideoCapture.CaptureParam(mTYVoipAndroid.config.videoWidth,
mTYVoipAndroid.config.videoHeight));
loginRelayServer(String ip, short port, int userId, int sessionId, int AppKey, int AppSecret);
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);
mTYVoipAndroid.addClientNode(int userId);
//mTYVoipAndroid.removeClientNode(int userId);
mTYVoipAndroid.stopCall()
//清空現有的鏈接節點(再也不接收節點的數據)
mTYVoipAndroid.clearClientNodeList();
mTYVoipAndroid.release()
private TYVoipVideoRender preView; //渲染甲的視圖
private TYVoipVideoRender otherView; //渲染乙的視圖
甲(UserID:401)登陸操做,返回值爲是否登陸成功(非0即爲成功):
/**
*鏈接轉發服務器
*@param ip @param 端口號@param userId @param sessionId
*@param AppKey @param AppSecret @return !0即爲成功
*/
mTYVoipAndroid.loginRelayServer(ip, port, 401, sessionId, AppKey, AppSecret);
甲鏈接乙操做:
...一系列操做/
//甲本身加入到通信中
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回調方法目前還未用到,忽視此回調
甲進行斷開通訊操做
//中止相機視頻捕捉
mVideoCapture.stop()
//清空現有的鏈接節點(再也不接收節點的數據)
mTYVoipAndroid.clearClientNodeList();
//結束Voip通話
mTYVoipAndroid.stopCall()
//釋放資源
mTYVoipAndroid.release()
項目中最重要的代碼介紹完啦,那測試一下,看看咱們的成果吧。
圖7 測試效果圖
達到上圖所示結果,一套完整的android音視頻通訊系統就完成了。