1、移动端音视频解决方案因为工作需要制作一个带即时音视频通话功能的 iOS项目APP,借此机会和大家分享心得。早前忙于工作都没时间去研究音视频通话这方面的技术,对音视频通话技术一无所知,不知道从何入手。然后我就上网搜索了一番,网上的信息真是“海量”啊,我要花很大的力气去查看和要去试用它,看它的功能和实用性是否适合我这类菜鸟型用户。经过网上搜索筛选了有几种音视频通话品牌,例如ArrowIM 的,奇普嘉的,AnyChat 的,JST 即时通讯的等等。我查看很多他们相关的信息,觉得选用 AnyChat 品牌的比较好,我选择他是因为我对音视频方面知识不懂,AnyChat 公司独有的一个技术论坛,解答用户使
2、用的一些技术问题,回复又快又专业,最适合我这种对音视频没基础的,据说技术论坛版主就是AnyChat的高管技术很牛,什么平台技术都精通能及时回应你问题,真是个活字典,不信?试过就知晓。AnyChat能轻松地将音视频通话功能嵌入到自己的应用中。此外,开发时在自己的应用中嵌入该音视频通话引擎时无需像嵌入某 XXQ通话一样必须首先拥有XXQ账号。做到了通话功能与账号认证的分离,因此该音视频引擎可以与开发者自有的用户账号体系集成,而不依赖于任何第三方账号。说这么多,就是简单易用支持多平台,最重要是有我想要的 iOS 平台,而且相关教程 API 解说等等都很齐全,数数手指头就那么几个简单API使用,就能创
3、造呈现出复杂的功能,这使我更加坚信选择它是对的。废话不多说,马上贴上我在使用AnyChat SDK For iOS 的步骤和方法。在 iOS 上,用AnyChat SDK 开发音视频功能,只需要准备一个 Mac 系统和 xcode开发软件就可以了,那事情当然要先下载好 AnyChat SDK 开发包。开发包里面提供了几个简单的工程案例 Demo 模板在src 目录下面,bin 目录下是演示程序APP的安装包, API 开发接口说明文档在 doc 里,最后开发引用到的库文件和协议文件都在sdk 文件夹。了解AnyChat SDK 开发包结构后就开始搭建开发环境和配置。一、 环境搭建配置1) 首先
4、在工程里面添加用到的系统框架,如下:AVFoundation.frameworkAudioToolbox.frameworkQuartzCore.frameworkCoreMedia.frameworkCoreVideo.frameworkCoreAudio.framework(不懂那添加库的,可以在Xcode软件菜单的PROJECTGeneralLink Frameworks and Libraries 里面,点击“+”号增加系统框架)2) 然后在同一个地方(添加系统框架的地方)下面有个“Add other”选项 添加 AnyChat 开发的库,库文件在之前说得 AnyChatSDK 开发包
5、的 /sdk / libs 目录下。全部都添加进去,见下图:3) AnyChat SDK 底层是 c+ 所以还需要添加 libstdc+.dylib 和 libstdc+.6.dylib 的支持库,和配置C+编译环境: Build SettingsApple LLVM 5.1 - Language - C+ C+ Standard Library 为:libstdc+(GNU C+ standard library) 见下图:4) 为了兼容不同设备的内核,最后配置调试器环境,具体有两个方法:a) 修改Build Active Architecture Only选项为 Yesb) 或者修改Val
6、id Architectures选项为 armv7见下图:5) 开发需要用到的 API 引用头文件,在 AnyChatSDK 包的 /sdk/include 目录里面,分别是:AnyChatPlatform.hAnyChatDefine.hAnyChatErrorCode.h在工程的头文件代码中记得添加他们:#import “AnyChatPlatform.h“#import “AnyChatDefine.h“#import “AnyChatErrorCode.h“个别需要显示获取本地视频图像的界面,还需要在头文件中添加引用 #import “AVFoundation.h“ 。按照这几步配置,
7、基本环境就搭建好,可以打开 AnyChatSDK 包里面的 演示工程Demo,运行下,仿照他们的 Demo代码,把 AnyChat 音视频实现功能嵌入到自己的项目中。二、 HelloWorld模式简易流程现在对照这官方 helloAnyChat 工程,简单介绍下实现音视频功能的业务逻辑与当中使用到的主要的API接口。1) 设置通知中心监听回调事件:NSNotificationCenter defaultCenter addObserver:self selector:selector(AnyChatNotifyHandler:) name:“ANYCHATNOTIFY“ object:nil;
8、实现方法:- (void)AnyChatNotifyHandler:(NSNotification*)notifyNSDictionary* dict = notify.userInfo;AnyChat OnRecvAnyChatNotify:dict;2) 初始化 AnyChat SDK 进行与服务器链接,实现的API:AnyChatPlatform InitSDK:0;3) 在登陆 AnyChat 服务器大厅前需要用到协议API。协议里有7 个方法都必须实现的,分别是:- (void) OnAnyChatConnect:(BOOL) bSuccess;- (void) OnAnyChatL
9、ogin:(int) dwUserId : (int) dwErrorCode;- (void) OnAnyChatEnterRoom:(int) dwRoomId : (int) dwErrorCode;- (void) OnAnyChatOnlineUser:(int) dwUserNum : (int) dwRoomId;- (void) OnAnyChatUserEnterRoom:(int) dwUserId;- (void) OnAnyChatUserLeaveRoom:(int) dwUserId;- (void) OnAnyChatLinkClose:(int) dwError
10、Code;4) 正式登陆 AnyChat 音视频大厅,实现 API:AnyChatPlatform Connect: ServerIP : ServerPort;AnyChatPlatform Login:serName : “;(ServerIP变量:官方测试服务器IP是demo.AnyC,也可以用自己部署的服务器IP 。ServerPort变量:官方测试服务器端口是8906serName变量:登陆的用户名。 )5) 进入大厅里的房间,实现 API:AnyChatPlatform EnterRoom:roomNO :“;(roomNO变量:官方测试房间分配了有 4个,直接设置roomNO=1
11、的房间就可以了)6) 获取房间里的用户列表,实现API:AnyChatPlatform GetOnlineUser;7) 选择用户进行音视频会话,实现 API:AnyChatPlatform UserSpeakControl: userid:YES;AnyChatPlatform SetVideoPos:userid:theUIImageView:0:0:0:0;AnyChatPlatform UserCameraControl:userid : YES;(userid变量:用户列表中的,被选择获取音视频对象的用户 ID,theUIImageView对象:获取视频图像显示的载体)经过以上几个重要 API 就能简单实现复杂的音视频会话功能。效果和官网所示的一样,使用一点都不复杂。