蘋果手機帶動了IOS的火熱,一大堆開發人員在搗鼓IOS平臺的開發,相信你們也使用過QQ的語音視頻對話功能,可是不知道你們有沒有試過本身來開發一個基於IOS平臺的音視頻即時通信的應用,這個應用必須可以作到跨平臺。如今介紹兩種方法使用IOS與其餘平臺的音視頻通話。html
首先就是使用一個跨平臺的音視頻通信平臺便可,這是做爲非專業技術人員也能夠作到的,下面就先介紹第一種:只需三個條件:android
一、手機有網絡鏈接;服務器
二、有AnyChat for iOS SDK;網絡
三、對方PC或手機有以上條件。異步
AnyChat音視頻互動開發平臺是一套跨平臺的即時通信解決方案,基於先進的H.264視頻編碼標準、AAC音頻編碼標準與P2P技術,特色是:高質量、寬適應性、分佈式、模塊化。 AnyChatSDK分爲客戶端SDK和服務器SDK兩大部分,其中客戶端SDK用於實現語音、視頻的交互以及其它客戶端相關的功能,而服務器SDK主要實現業務層邏輯控制,以及與第三方平臺的互聯等。客戶端SDK和服務器SDK均支持C++、C#、VB.Net以及Delphi等開發語言。分佈式
AnyChat for iPhone基於iOS 4.3研發,支持iPhone 3G、iPhone 3GS、以及iPhone4等設備,同時也支持iPad、iPad2設備,提供Objective-C接口。AnyChat for iPhone可與其它平臺的AnyChat互聯互通,鏈接同一個服務器程序,有關服務器的SDK可參考AnyChat Platform Core SDK開發包。ide
談及Anychat,跨平臺跟支持高清、P2P等先進技術都是國內領先,上星期更是一舉突破完美解決Android設備上的迴音問題,本月內,Anychat也將發佈新版本。在移動應用方面,Anychat在去年發佈了首款在Web上運行的程序,可與一樣其餘平臺的Anychat的移動設備進行視頻聊天,並體驗移動Web應用中的實時音視頻功能。模塊化
即時視頻通訊日益成爲主流服務,可是移動設備的碎片化問題始終困擾着開發者。可是經過Anychat for iOS SDK,開發者能夠輕鬆地經過開放的API接口調用函數將即時視頻通訊功能快速集成到應用中,大大縮短項目時間,並且無需在測試工做上花費大量成本。函數
第二種就是利用API接口開發屬於本身的音視頻軟件
想要在IOS平臺下實現音視頻通訊,最快捷的方法是尋找開源項目或調用其餘公司封裝好的API,接下來小編介紹一款不錯的SDK包給你們,已經上傳到了51CTO的資源上面去,你們放心使用(iOS平臺上的音頻即時通信應用開發)下面是一些關於如何調用相關API接口的方法,你們能夠相互交流交流。測試
view sourceprint?
01.// 初始化SDK
02.public native int InitSDK(int osver, int flags);
03.// 鏈接服務器
04.public native int Connect(String serverip, int port);
05.// 登陸系統
06.public native int Login(String username, String password);
07.// 進入房間(房間ID)
08.public native int EnterRoom(int roomid, String password);
09.// 進入房間(房間名稱)
10.public native int EnterRoomEx(String roomname, String password);
11.// 退出房間
12.public native int LeaveRoom(int roomid);
13.// 設置視頻顯示位置
14.public native int SetVideoPos(int userid, Surface surface, int lef,
15.int top, int right, int bottom);
16./**
17.* 功能: 設置視頻顯示位置,或是刷新視頻顯示 返回值:0表示成功,不然爲出錯代碼
18.* 參數:
19.* userid 用戶ID
20.* surface 視頻顯示界面,android客戶端只需提供SurfaceView控件,內核自動將視頻顯示在控件上
21.* lef,top,right,bottom視頻顯示位置信息
22.*/
23.// 註銷登陸
24.public native int Logout();
25.// 釋放資源
26.public native int Release();
1、初始化SDK
初始化SDK是首先要完成的,用於設置SDK的一些行爲,包括設置對應的回調函數。代碼以下:
view sourceprint?
01.//初始化SDK
02.private void InitialSDK() {
03.if (anychat == null) {
04.anychat = new AnyChatCoreSDK();
05.//設置基本事件回調函數
06.anychat.SetBaseEvent(this);
07.if (configEntity.useARMv6Lib != 0)
08.anychat.SetSDKOptionInt(AnyChatDefine.
09.BRAC_SO_CORESDK_USEARMV6LIB, 1); //使用ARMv6指令集
10.anychat.InitSDK(android.os.Build.VERSION.SDK_INT, 0); //初始化SDK 的一個參數是android API版本
11.bNeedRelease = true;
12.}
13.}
2、登陸系統
當初始化SDK完成以後,即可以實現鏈接服務器、驗證用戶身份、用戶登陸等。
view sourceprint?
1.//鏈接服務器
2.anychat.Connect("211.155.25.90", 8906);
3.//登陸系統
4.anychat.Login("android","");
鏈接服務器和登陸系統都是一個異步的過程,調用後會當即返回。在回調函數中根據返回代碼判斷服務器是否鏈接成功和登陸成功。
3、進入房間
登陸成功後就可進入相應的房間,只有在相同房間的用戶才能進行音視頻通訊。代碼以下
一、進入房間
view sourceprint?
1.//進入1號房間
2.anychat.EnterRoom(1, "");
進入房間後系統會將該房間在線用戶發送給客戶端,只有在同一個房間用戶才能進行音視頻互交、文字聊天、文件傳輸等。當新用戶進入房間或用戶下線,都會觸發異步消息通知上層應用更改狀態。
二、文字聊天
成功進入房間後,即可調用API接口向指定用戶或房間中全部在線用戶發送文字 聊天消息。
view sourceprint?
1.//發送文字聊天消息
2.String message = messageEditText.getText().toString();
3.anychat.SendTextMessage(-1, 0,message);
其餘用戶收到文字聊天消息會觸發相應的回調函數並將聊天消息顯示在界面上。
三、請求其餘用戶的音視頻
1.// 請求對方的視頻流
2.anychat.UserCameraControl(userID, 1);
3.// 請求對方的音頻流
4.anychat.UserSpeakControl(userID, 1);
四、音視頻的顯示與播放
view sourceprint?
01.//判斷遠程用戶視頻是否已打開
02.if (!bOtherVideoOpened) {
03.if (anychat.GetCameraState(userID) == 2
04.&& anychat.GetUserVideoWidth(userID) != 0) {
05.SurfaceHolder holder = otherView.getHolder(); //得到SurfaceView控件
06.holder.setFormat(PixelFormat.RGB_565); //設置顯示格式
07.holder.setFixedSize(anychat.GetUserVideoWidth(userID),
08.anychat.GetUserVideoHeight(userID)); //設置視頻顯示寬高
09.Surface s = holder.getSurface(); //得到視頻畫面
10.anychat.SetVideoPos(userID, s, 0, 0, 0, 0); //調用API顯示視頻畫面
11.bOtherVideoOpened = true;
12.}
13.}
14.//判斷本地視頻是否已打開
15.if (!bSelfVideoOpened) {
16.if (anychat.GetCameraState(-1) == 2
17.&& anychat.GetUserVideoWidth(-1) != 0) {
18.SurfaceHolder holder = myView.getHolder(); //得到SurfaceView控件
19.holder.setFormat(PixelFormat.RGB_565); //設置顯示格式
20.holder.setFixedSize(anychat.GetUserVideoWidth(-1),
21.anychat.GetUserVideoHeight(-1)); //設置視頻顯示寬高
22.Surface s = holder.getSurface(); //得到視頻畫面
23.anychat.SetVideoPos(-1, s, 0, 0, 0, 0); //調用API顯示視頻畫面
24.bSelfVideoOpened = true;
25.}
26.}
Android程序中,當收到用戶的媒體流數據時,Android客戶端只需提供一個SurfaceView控件,內核自動將視頻媒體流數據顯示在該控件上並播放聲音。
4、釋放資源
與前面講的鏈接服務器、登陸系統、進入房間對應的的是離開房間、註銷系統、釋放資源。代碼以下: www.it165.net
view sourceprint?
1.protected void onDestroy() {
2.//離開房間
3.anychat.LeaveRoom(-1);
4.//註銷登陸
5.anychat.Logout();
6.//釋放資源 關閉SDK 再也不返回登陸界面
7.anychat.Release();
8.}
離開房間後可再進入房間,可是註銷登陸和釋放資源後,SDK將再也不工做。在Activity生命週期結束的時候能夠將佔用資源釋放,程序退出。