iOS VoIP SDK使用文档

,概述:

1. Voip iOS SDK主要接口定义”TYVoipDarwinManager.h”文件中,该文件文件定义了对外类和协议,因为该文件和C++混编,所以使用该类的文件的”.m”文件请改成”.mm”,

(1).TYVoipDarwinManager:VOIP主要功能以及管理类

(2).TYVoipVideoData:接收以及发送的视频数据模型

(3).TYVoipDelegate:voip的代理

2.该SDK需要服务端配置转发服务器,转发服务器配置地址:https://gitee.com/tucodec/relay_server

 

,API介绍

2.1快速使用

2.1.1需要引入的库文件和工程配置详见第四节

2.1.2快速发起Voip需要如下4个步骤:

    (1)登录:登录接口最好放在程序启动时调用(登录接口会阻塞当前线程,直到登录结果返回)

            /**

             登录转发服务器

            @param ip

            @param 端口号

            @param userId

            @param sessionId  校验userId合法性字段

            @return !0即为成功

            */

            [[TYVoipDarwinManager sharedVoip] loginRelayServer:@“192.169.1.1”

                                                                serverPort:12345

                                                                       sessionId:0

                                                                                     userId:connectID

                                                           AppKey:appkey

                                                                          AppSecret:appsecret];

 

         注1:sessionid用于服务器做权限校验,客户端带着sessionid登录转发服务器后,转发服务器会

              将userId和sessionid传给逻辑服务器(如果是http服务器,需要配置http_hook地址,如果

              是c++服务器,需要继承鉴权类。具体配置参阅服务器文档。)来判断权限是否合法。另外

               sessionid也影响集群分配,相同sessionid的用户在集群分配时无特殊情况都会分配到同一

              台转发服务器以保住他们之间通信节省流量。即如果有A,B两个客户端需要通信,在有集

              群的时候他们最好拥有相同的sessionid登录。

         注2:AppKey和AppSecret是开发者在图鸭科技开发者网站(http://www.tucodec.com/)注册账号

               后获取的AppKey和 AppSecret

 

    (2)开始Voip( 配置voip,详见2.2);

             /**

              @param userName  用户名(自定义)

              @param userId        userId

               */

              [[TYVoipDarwinManager sharedVoip] startCallWithUserId:1];

    (3)增加或删除进行Voip通话的节点,详见2.3;

             /**

              @param  userid  需要添加的节点Id

             */

             [[TYVoipDarwinManager sharedVoip] addClientNode:2];

 

    (4)显示视频图像:需执行TYVoipDarwinCocoavideo回调,拿到视频数据并渲染,详见2.4

               1.执行回调

              //预览视频图像,即摄像头图片

            - (void)localVideoImage:(TYVoipVideoData *)image;

             //收到其他节点的视频图像

            - (void)remoteVideoImage:(TYVoipVideoData *)image;

              2.渲染

              TYRenderView * renderView = [[TYRenderView alloc] initWithFrame:self.bounds  

                                                                                                              andIsMirror:YES];

 

              [self addSubview:renderView];

              [renderView startRendering];

              [renderView renderVoipVideoData:image];

 

2.1.3使用示例

使用时,TYVoipDarwinManager通过单例调用,在程序启动时调用配置方法

   //程序启动时调用该方法,配置voip

   [[TYVoipDarwinManager sharedVoip]  configVoip];

   //通过该方法可以获得单例

   [TYVoipDarwinManager sharedVoip]

 

2.2配置voip(可在程序启动时执行)  

     //通过该方法可以获得单例,配置voip

    [[TYVoipDarwinManager sharedVoip]  configVoip];

 

    //连接转发服务器,返回!0即连接成功

    [[TYVoipDarwinManager sharedVoip] loginRelayServer:@“192.169.1.1”

                                                                serverPort:12345

                                                                    sessionId:0

                                                                userId:1 

                                                      AppKey:appkey

                                                                           AppSecret:appsecret];

 

2.3开始Voip

    //设置voip的回调

    [[TYVoipDarwinManager sharedVoip] setDelegate:self];

    [[TYVoipDarwinManager sharedVoip] startCallWithUserId:1];

  

2.3.1增加voip节点

    当需要和另一个用户进行voip通话时,需要增加一个voip节点,需要知道对方登录发服务器的ID

     /**

       @param  userid   节点连接转发服务器的id(Voip节点的唯一标识)

     */

     -(void)addClientNode:(uint32_t) userId;

 

     [[TYVoipDarwinManager sharedVoip] addClientNode:1];

 

2.3.2删除voip节点

    对方下线或者退出Voip时,删除对方节点

    /**

      @param  userid   节点连接转发服务器的id

    */

    -(void)removeClientNode:(uint32_t) userId;

 

    [[TYVoipDarwinManager sharedVoip] removeClientNode:111];

 

 2.3.3清空voip节点

     清空所有的voip节点

     -(void)clearClientNodeList;

 

     [[TYVoipDarwinManager sharedVoip] clearClientNodeList];

 

2.4渲染视频图像

2.4.1执行视频回调方法

设置voip的回调:[[TYVoipDarwinManager sharedVoip] setDelegate:self];

当收到voip发来的数据之后将会执行回调方法:

   //预览视频图像,即摄像头图片

  - (void)localVideoImage:(TYVoipVideoData *)image;

    //收到其他节点的视频图像

  - (void)remoteVideoImage:(TYVoipVideoData *)image;

 

2.4.2在回调中渲染接收的数据:TYVoipImage

TYVoipImage中定义了视频数据的属性(列举部分):

@property (nonatomic, retain) NSData *data;//图像数据(yuv420格式)

@property (nonatomic, assign) NSUInteger width;//图像宽

@property (nonatomic, assign) NSUInteger height;//图像高

@property (nonatomic, assign) VideoAngle rotation;//图像旋转角度

@property (nonatomic, assign) uint32_t userId;//图像的所属Voip节点id

获取到TYVoipImage,有两种渲染方式:

      1.使用SDK中的TYRenderView进行渲染:

         TYRenderView * renderView = [[TYRenderView alloc]  initWithFrame:self.bounds

                                                                         andIsMirror:YES];

 

        [self addSubview:renderView];

        [renderView startRendering];

        [renderView renderVoipVideoData:image];

      2.自定义view渲染TYVoipImage:根据data属性获取图像数据之后,自定义渲染

 

2.5结束Voip

    [[TYVoipDarwinManager sharedVoip] clearClientNodeList];

    [[TYVoipDarwinManager sharedVoip] stopCall];

 

,其他常用API参考

3.1 TYVoipDarwinManager

 

/**

 *开启摄像头

  *isFront:是否是前置摄像头

 */

-(void)starCameraPosition:(BOOL)isFront;

 

/**

 *关闭摄像头

 */

-(void)stopCamera;

/**

 *关闭麦克风

 */

- (void)muteMicrophone;

 

/**

 * 开启麦克风

 */

-     (void)unmuteMicrophone;

 

/**

 * 销毁voip(和结束voip不是同一个接口,作用不同)

 */

- (void)destroy;

 

 

3.2 TYRenderView

/**

 * 开始渲染

 */

- (void)startRendering;

 

/**

 * 结束渲染

 */

- (void)stopRendering;

 

/**

 *是否镜像渲染

 */

- (void)setMirror:(BOOL)enable;

 

/**

 *渲染一个TYVoipImage

 */

-     (void)renderVoipVideoData:(TYVoipVideoData *)videoImage;

 

/**

 *是否正在渲染

 */

-     (BOOL)isRenderring;

 

 

,工程配置和添加库文件

4.1工程配置

    4.1.1 info.plist增加相机和麦克风权限:

           Privacy - Camera Usage Description          相机使用说明

           Privacy - Microphone Usage Description    麦克风使用说明

 

     4.1.2申请app后台权限

          工程target —> Capabilities —> Background  Modes —> Audio,AirPlay,and Picture in Picture

 

     4.1.3关闭Bite Code

            工程target —> Build Settings —> Build Options—> Enable Bitecode 置为NO

 

4.2添加和引入库

   将SDK的示例工程中”lib”和”include”文件夹加入工程,其中”voip”文件下是SDK提供的.a库,”third”文件夹下是需要引入的三方库,”include”是SDK的头文件,此外还需要添加系统依赖库:

GLKit.framework

AudioToolbox.framework

CoreAudio.framework

AudioUnit.framework

CoreMotion.framework

CoreMedia.framework

OpenGLES.framework

AVFoundation.framework

libz.dylib

libc++.dylib

libiconv.dylib

libstdc++.dyli