生活随笔
收集整理的這篇文章主要介紹了
安卓平台下的音视频即时通讯应用的开发
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?? ? 現(xiàn)在安卓很是火熱,一大堆開發(fā)人員在搗鼓安卓平臺(tái)的開發(fā),相信大家也使用過QQ的語(yǔ)音視頻對(duì)話功能,但是不知道大家有沒有試過自己來開發(fā)一個(gè)基于安卓平臺(tái)的音視頻即時(shí)通訊的應(yīng)用,這個(gè)應(yīng)用必須能夠做到跨平臺(tái)
- 兼容Google、HTC、Moto、Samsung等主流硬件設(shè)備
- 支持iOS、Web、PC等設(shè)備和Android之間的互聯(lián)互通
- 視頻會(huì)話時(shí),默認(rèn)打開前置攝像頭;
- 能夠有Java音視頻采集、顯示驅(qū)動(dòng),兼容更多Android設(shè)備;
- 想要在Android平臺(tái)下實(shí)現(xiàn)音視頻通信,最快捷的方法是尋找開源項(xiàng)目或調(diào)用其他公司封裝好的API,接下來小編介紹一款不錯(cuò)的SDK包給大家,(安卓平臺(tái)的音視頻互動(dòng)開發(fā)平臺(tái))下面是一些關(guān)于如何調(diào)用相關(guān)API接口的方法,大家可以相互交流交流。
?
Android通信平臺(tái)相關(guān)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是首先要完成的,用于設(shè)置SDK的一些行為,包括設(shè)置對(duì)應(yīng)的回調(diào)函數(shù)。代碼如下:
?????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; ?????????} ?????}? 二、登錄系統(tǒng)
當(dāng)初始化SDK完成之后,便可以實(shí)現(xiàn)連接服務(wù)器、驗(yàn)證用戶身份、用戶登錄等。
?????????anychat.Connect("211.155.25.90",?8906); ??????????????????anychat.Login("android","");? 連接服務(wù)器和登錄系統(tǒng)都是一個(gè)異步的過程,調(diào)用后會(huì)立即返回。在回調(diào)函數(shù)中根據(jù)返回代碼判斷服務(wù)器是否連接成功和登錄成功。
三、進(jìn)入房間
登錄成功后就可進(jìn)入相應(yīng)的房間,只有在相同房間的用戶才能進(jìn)行音視頻通信。代碼如下
1、進(jìn)入房間
?anychat.EnterRoom(1,?"");???? 進(jìn)入房間后系統(tǒng)會(huì)將該房間在線用戶發(fā)送給客戶端,只有在同一個(gè)房間用戶才能進(jìn)行音視頻互交、文字聊天、文件傳輸?shù)取.?dāng)新用戶進(jìn)入房間或用戶下線,都會(huì)觸發(fā)異步消息通知上層應(yīng)用更改狀態(tài)。
2、文字聊天
成功進(jìn)入房間后,便可調(diào)用API接口向指定用戶或房間中所有在線用戶發(fā)送文字 聊天消息。
?????????String?message?=?messageEditText.getText().toString(); ?????????anychat.SendTextMessage(-1,?0,message);? 其他用戶收到文字聊天消息會(huì)觸發(fā)相應(yīng)的回調(diào)函數(shù)并將聊天消息顯示在界面上。
3、請(qǐng)求其他用戶的音視頻
?????????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程序中,當(dāng)收到用戶的媒體流數(shù)據(jù)時(shí),Android客戶端只需提供一個(gè)SurfaceView控件,內(nèi)核自動(dòng)將視頻媒體流數(shù)據(jù)顯示在該控件上并播放聲音。
四、釋放資源
與前面講的連接服務(wù)器、登錄系統(tǒng)、進(jìn)入房間對(duì)應(yīng)的的是離開房間、注銷系統(tǒng)、釋放資源。代碼如下:
protected?void?onDestroy()?{ ??????????anychat.LeaveRoom(-1); ??????????anychat.Logout(); ??????????anychat.Release();?} 離開房間后可再進(jìn)入房間,但是注銷登錄和釋放資源后,SDK將不再工作。在Activity生命周期結(jié)束的時(shí)候可以將占用資源釋放,程序退出。
轉(zhuǎn)載于:https://blog.51cto.com/6359515/1165339
總結(jié)
以上是生活随笔為你收集整理的安卓平台下的音视频即时通讯应用的开发的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。