編輯:關於Android編程
現在安卓很是火熱,一大堆開發人員在搗鼓安卓平台的開發,相信大家也使用過QQ的語音視頻對話功能,但是不知道大家有沒有試過自己來開發一個基於安卓平台的音視頻即時通訊的應用,這個應用必須能夠做到跨平台
兼容Google、HTC、Moto、Samsung等主流硬件設備
支持iOS、Web、PC等設備和Android之間的互聯互通
視頻會話時,默認打開前置攝像頭;
能夠有Java音視頻采集、顯示驅動,兼容更多Android設備;
想要在Android平台下實現音視頻通信,最快捷的方法是尋找開源項目或調用其他公司封裝好的API,接下來小編介紹一款不錯的SDK包給大家,(安卓平台的音視頻互動開發平台)下面是一些關於如何調用相關API接口的方法,大家可以相互交流交流。
Android通信平台相關API方法
// 初始化SDK
public native int InitSDK(int osver, int flags);
// 連接服務器 public native int Connect(String serverip, int port);
// 登錄系統 public native int Login(String username, String password);
// 進入房間(房間ID) public native int EnterRoom(int roomid, String password);
// 進入房間(房間名稱) public native int EnterRoomEx(String roomname, String password);
// 退出房間 public native int LeaveRoom(int roomid);
// 設置視頻顯示位置 public native int SetVideoPos(int userid, Surface surface, int lef, int top, int right, int bottom);
/** * 功能: 設置視頻顯示位置,或是刷新視頻顯示 返回值:0表示成功,否則為出錯代碼
* 參數:
* userid 用戶ID
* surface 視頻顯示界面,android客戶端只需提供SurfaceView控件,內核自動將視頻顯示在控件上
* lef,top,right,bottom視頻顯示位置信息
*/ // 注銷登錄 public native int Logout();
// 釋放資源 public native int Release(); 一、初始化SDK
初始化SDK是首先要完成的,用於設置SDK的一些行為,包括設置對應的回調函數。代碼如下:
//初始化SDK
private void InitialSDK() {
if (anychat == null) {
anychat = new AnyChatCoreSDK();
//設置基本事件回調函數
anychat.SetBaseEvent(this);
if (configEntity.useARMv6Lib != 0)
anychat.SetSDKOptionInt(AnyChatDefine.
BRAC_SO_CORESDK_USEARMV6LIB, 1);
//使用ARMv6指令集
anychat.InitSDK(android.os.Build.VERSION.SDK_INT, 0);
//初始化SDK 的一個參數是android API版本
bNeedRelease = true;
} } 二、登錄系統
當初始化SDK完成之後,便可以實現連接服務器、驗證用戶身份、用戶登錄等。
//連接服務器 anychat.Connect("211.155.25.90", 8906); //登錄系統 anychat.Login("android",""); 連接服務器和登錄系統都是一個異步的過程,調用後會立即返回。在回調函數中根據返回代碼判斷服務器是否連接成功和登錄成功。
三、進入房間
登錄成功後就可進入相應的房間,只有在相同房間的用戶才能進行音視頻通信。代碼如下
1、進入房間
//進入1號房間 anychat.EnterRoom(1, ""); 進入房間後系統會將該房間在線用戶發送給客戶端,只有在同一個房間用戶才能進行音視頻互交、文字聊天、文件傳輸等。當新用戶進入房間或用戶下線,都會觸發異步消息通知上層應用更改狀態。
2、文字聊天
成功進入房間後,便可調用API接口向指定用戶或房間中所有在線用戶發送文字 聊天消息。
//發送文字聊天消息 String message = messageEditText.getText().toString(); anychat.SendTextMessage(-1, 0,message); 其他用戶收到文字聊天消息會觸發相應的回調函數並將聊天消息顯示在界面上。
3、請求其他用戶的音視頻
// 請求對方的視頻流 anychat.UserCameraControl(userID, 1); // 請求對方的音頻流 anychat.UserSpeakControl(userID, 1); 4、音視頻的顯示與播放
//判斷遠程用戶視頻是否已打開
if (!bOtherVideoOpened) {
if (anychat.GetCameraState(userID) == 2
&& anychat.GetUserVideoWidth(userID) != 0) {
SurfaceHolder holder = otherView.getHolder();
//獲得SurfaceView控件
holder.setFormat(PixelFormat.RGB_565);
//設置顯示格式
holder.setFixedSize(anychat.GetUserVideoWidth(userID),
anychat.GetUserVideoHeight(userID));
//設置視頻顯示寬高
Surface s = holder.getSurface();
//獲得視頻畫面
anychat.SetVideoPos(userID, s, 0, 0, 0, 0);
//調用API顯示視頻畫面
bOtherVideoOpened = true; } }
//判斷本地視頻是否已打開
if (!bSelfVideoOpened) {
if (anychat.GetCameraState(-1) == 2
&& anychat.GetUserVideoWidth(-1) != 0) {
SurfaceHolder holder = myView.getHolder();
//獲得SurfaceView控件
holder.setFormat(PixelFormat.RGB_565);
//設置顯示格式
holder.setFixedSize(anychat.GetUserVideoWidth(-1),
anychat.GetUserVideoHeight(-1));
//設置視頻顯示寬高
Surface s = holder.getSurface();
//獲得視頻畫面
anychat.SetVideoPos(-1, s, 0, 0, 0, 0);
//調用API顯示視頻畫面
bSelfVideoOpened = true;
} } Android程序中,當收到用戶的媒體流數據時,Android客戶端只需提供一個SurfaceView控件,內核自動將視頻媒體流數據顯示在該控件上並播放聲音。
四、釋放資源
與前面講的連接服務器、登錄系統、進入房間對應的的是離開房間、注銷系統、釋放資源。代碼如下:
protected void onDestroy() { //離開房間
anychat.LeaveRoom(-1); //注銷登錄
anychat.Logout(); //釋放資源 關閉SDK 不再返回登錄界面
anychat.Release(); }
離開房間後可再進入房間,但是注銷登錄和釋放資源後,SDK將不再工作。在Activity生命周期結束的時候可以將占用資源釋放,程序退出。
在前面一篇文章淺談Service Manager成為Android進程間通信(IPC
京東淘寶有那麼一種效果就是,上拉可以查看寶貝的詳情,這裡我也實現了一個類似的效果,也可以移植到商業項目上:先看看簡單的效果圖實現原理其實是利用了ScrollView的滾動
上一篇博文說到了Shader的五個子類 - BitmapShader - LinearGradient - RadialGradient - SweepGradient
本來這篇文章是要寫寫我在設計高級跑馬燈程序的心得的,但是編寫過程中花了近一天多的時間搞明白canvas.drawText中的第三個參數[float y]代表的真實含義。學
問題背景:app在上傳圖片時,同時傳遞參數,支持傳遞多個圖片。本文中的環