首页 > 代码库 > 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也将发布新版本。在移动应用方面,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平台如何实现跨平台通讯