標籤:ios視頻開發 移動視頻開發 手機視頻技術 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也將發布新版本。在行動裝置 App方面,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生命週期結束的時候可以將佔用資源釋放,程式退出。
iOS平台如何?跨平台通訊