iOS音視頻項目開發(跨平臺)

蘋果手機帶動了IOS的火熱,一大堆開發人員在搗鼓IOS平臺的開發,相信大家也使用過QQ的語音視頻對話功能,但是不知道大家有沒有試過自己來開發一個基於IOS平臺的音視頻即時通訊的應用,這個應用必須能夠做到跨平臺。現在介紹兩種方法使用IOS與其他平臺的音視頻通話。

首先就是使用一個跨平臺的音視頻通訊平臺即可,這是作爲非專業技術人員也可以做到的,下面就先介紹第一種:只需三個條件:

1、手機有網絡連接;

2、有AnyChat for iOS SDK;

3、對方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開發包。

        談及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();

一、初始化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.}

二、登錄系統
當初始化SDK完成之後,便可以實現連接服務器、驗證用戶身份、用戶登錄等。
 

view sourceprint?

1.//連接服務器 

2.anychat.Connect("211.155.25.90", 8906); 

3.//登錄系統 

4.anychat.Login("android","");

連接服務器和登錄系統都是一個異步的過程,調用後會立即返回。在回調函數中根據返回代碼判斷服務器是否連接成功和登錄成功。
三、進入房間
登錄成功後就可進入相應的房間,只有在相同房間的用戶才能進行音視頻通信。代碼如下
1、進入房間
 

view sourceprint?

1.//進入1號房間 

2.anychat.EnterRoom(1, "");   

進入房間後系統會將該房間在線用戶發送給客戶端,只有在同一個房間用戶才能進行音視頻互交、文字聊天、文件傳輸等。當新用戶進入房間或用戶下線,都會觸發異步消息通知上層應用更改狀態。
2、文字聊天
成功進入房間後,便可調用API接口向指定用戶或房間中所有在線用戶發送文字 聊天消息。
 

view sourceprint?

1.//發送文字聊天消息 

2.String message = messageEditText.getText().toString(); 

3.anychat.SendTextMessage(-1, 0,message);

其他用戶收到文字聊天消息會觸發相應的回調函數並將聊天消息顯示在界面上。
3、請求其他用戶的音視頻
 

view sourceprint?

1.// 請求對方的視頻流  

2.anychat.UserCameraControl(userID, 1); 

3.// 請求對方的音頻流  

4.anychat.UserSpeakControl(userID, 1);

4、音視頻的顯示與播放
 

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控件,內核自動將視頻媒體流數據顯示在該控件上並播放聲音。
四、釋放資源
與前面講的連接服務器、登錄系統、進入房間對應的的是離開房間、註銷系統、釋放資源。代碼如下: 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生命週期結束的時候可以將佔用資源釋放,程序退出。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章