標籤:手機視頻開發包 音視頻解決方案 音視頻技術 音視頻 sdk android視頻開發技術
相容Google、HTC、小米、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生命週期結束的時候可以將佔用資源釋放,程式退出。
安卓平台的音視頻互動開發平台