編輯:關於Android編程
作為獨立開發者或想縮短音視頻開發周期的公司來說,想要在Android平台下實現音視頻通信,最快捷的方法是尋找開源項目或調用其他公司API。之所以這麼說是因為音視頻通信技術涉及到底層音視頻采集、解碼、 FFmpeg(音視頻處理解決方案)、媒體流傳輸協議等太多太多相關技術知識點。試了 幾個開源項目,視頻差強人意,語音與視頻不同步等不穩定因素。因此我把目光放到其他公司的API上(案例為AnyChat音視頻解決方案,可以去其官方網站免費下載demo進行測試)。demo程序API提供了一系列純Java語言的調用接口,通過JNI即可調用內核共享庫(.so 類似win32 的dll),根據官方開發文檔我很快就實現音視頻通信,下面是我在調用其API的經驗總結。視頻效果圖如下:
Android通信平台相關API方法
當初始化SDK完成之後,便可以實現連接服務器、驗證用戶身份、用戶登錄等。
登錄成功後就可進入相應的房間,只有在相同房間的用戶才能進行音視頻通信。代碼如下
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生命周期結束的時候可以將占用資源釋放,程序退出。
總結:還有其他諸如發送文件、P2P連接、對Android設備設置、獲取在線用戶等非常實用功能等待你們去挖掘。用java我們也能快速實現音視頻通信。如有不懂可以聯系我QQ:2921533637 討論或到官網下載demo程序參考。
本文實例講述了Android實現兩個ScrollView互相聯動的同步滾動效果代碼。分享給大家供大家參考,具體如下:最近在做一個項目,用到了兩個ScrollView互相聯
一、新建個項目, 然後創建一個module名叫processor新建module的時候一定要選擇 Java Library 否則在後面會找不到AbstractProces
1、 概述DialogFragment在android 3.0時被引入。是一種特殊的Fragment,用於在Activity的內容之上展示一個模態的對話框。典型的用於:
有人說Android 的調試是最坑的,那我只能說是你不會用而已,我可以說Android Studio的調試是我見過最棒的。 好了開始寫一個簡單的調試程序,我們先來一個f