生活随笔
收集整理的這篇文章主要介紹了
安卓平台下的音视频即时通讯应用的开发
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?? ? 現在安卓很是火熱,一大堆開發人員在搗鼓安卓平臺的開發,相信大家也使用過QQ的語音視頻對話功能,但是不知道大家有沒有試過自己來開發一個基于安卓平臺的音視頻即時通訊的應用,這個應用必須能夠做到跨平臺
- 兼容Google、HTC、Moto、Samsung等主流硬件設備
- 支持iOS、Web、PC等設備和Android之間的互聯互通
- 視頻會話時,默認打開前置攝像頭;
- 能夠有Java音視頻采集、顯示驅動,兼容更多Android設備;
- 想要在Android平臺下實現音視頻通信,最快捷的方法是尋找開源項目或調用其他公司封裝好的API,接下來小編介紹一款不錯的SDK包給大家,(安卓平臺的音視頻互動開發平臺)下面是一些關于如何調用相關API接口的方法,大家可以相互交流交流。
?
Android通信平臺相關API方法
?????public?native?int?InitSDK(int?osver,?int?flags); ??????????public?native?int?Connect(String?serverip,?int?port); ??????????public?native?int?Login(String?username,?String?password); ??????????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); ?????????????????????public?native?int?Logout(); ??????????public?native?int?Release();? 一、初始化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);?????????????????????????anychat.InitSDK(android.os.Build.VERSION.SDK_INT,?0);????????????????bNeedRelease?=?true; ?????????} ?????}? 二、登錄系統
當初始化SDK完成之后,便可以實現連接服務器、驗證用戶身份、用戶登錄等。
?????????anychat.Connect("211.155.25.90",?8906); ??????????????????anychat.Login("android","");? 連接服務器和登錄系統都是一個異步的過程,調用后會立即返回。在回調函數中根據返回代碼判斷服務器是否連接成功和登錄成功。
三、進入房間
登錄成功后就可進入相應的房間,只有在相同房間的用戶才能進行音視頻通信。代碼如下
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();????????????????????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);??????????????????????bOtherVideoOpened?=?true; ?????????????} ?????????} ??????????????????if?(!bSelfVideoOpened)?{ ?????????????if?(anychat.GetCameraState(-1)?==?2?????????????????????&&?anychat.GetUserVideoWidth(-1)?!=?0)?{ ?????????????????SurfaceHolder?holder?=?myView.getHolder();???????????????????????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);??????????????????????????bSelfVideoOpened?=?true; ?????????????} ?????????}? Android程序中,當收到用戶的媒體流數據時,Android客戶端只需提供一個SurfaceView控件,內核自動將視頻媒體流數據顯示在該控件上并播放聲音。
四、釋放資源
與前面講的連接服務器、登錄系統、進入房間對應的的是離開房間、注銷系統、釋放資源。代碼如下:
protected?void?onDestroy()?{ ??????????anychat.LeaveRoom(-1); ??????????anychat.Logout(); ??????????anychat.Release();?} 離開房間后可再進入房間,但是注銷登錄和釋放資源后,SDK將不再工作。在Activity生命周期結束的時候可以將占用資源釋放,程序退出。
轉載于:https://blog.51cto.com/6359515/1165339
總結
以上是生活随笔為你收集整理的安卓平台下的音视频即时通讯应用的开发的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。