可视对讲移动端SDK接口说明-[iOS]

更新时间:

1. 概述

1.1 编写目的

本文是可视对讲设备云对讲和呼手机功能SDK接口说明。

1.2 名词解释

名词

解释

IoT

物联网

2. 介绍

通过集成对接SDK可以使门禁设备快速实现包括门禁机呼叫APP、APP调看门禁机、门禁机呼叫⼿机号等对讲功能。本⽂旨在描述该SDK的集成⽅式及主要业务代码。

限制条件:

推荐使用Xcode版本:V12.5.1及以上

iOS版本:iOS9.0及以上

3. SDK集成方法

3.1 导入所需文件

  1. 新建或打开已有工程

  2. 导入EVVideoVoipSDK.framework和EVVideoVoipSDK.bundle

  1. 将工程配置->TARGETS->Build Settings中的bitcode设置为NO

image

  1. 在需要用到的类中导入头文件EVideoVoipSDK.h,调用各接口,使用SDK相关功能

#import <EVideoVoipSDK/EVideoVoipSDK.h>

3.2 权限要求

麦克风权限

相册权限(抓拍使用)

4. 类及接口列表

4.1 类说明

类名

说明

EVVoipManager

负责登录SIP

EVVoipAccount

SIP会话

EVVoipCall

负责SIP通话

EVVideoView

负责视频显示

EVVoipCallParams

通话参数

4.2 接口说明

4.2.1流程关键接口

名称

类名

方法名

初始化

EVVoipManager

- (void)setupWithCompletion:(void(^)())completion;

反初始化

EVVoipManager

- (void)teardown;

登录SIP服务器

EVVoipManager

- (EVVoipAccount *)loginWithSipNumber:(NSString* )sipnum

displayName:(NSString* )displayName

password:(NSString* )password

domain:(NSString* )domain

port:(NSInteger)port;

设置调看视频view

EVVoipManager

- (void)setVideoView:(UIView *)videoView;

安静模式,不响铃

EVVoipManager

- (void)enableSilentMode:(BOOL)silent;

呼叫APP

EVVoipManager

- (EVVoipCall *)callWithSipNumber:(NSString* )sipnum

videoView:(UIView* )videoView

error:(EVVoipError** )error;

来电监听

EVVoipManager

@property (nonatomic,copy) void (^onCallDidIncoming)(EVVoipCall *call);

账号状态监听

EVVoipAccount

@property (nonatomic,copy) void (^onStateDidChanged)(EVVoipAccountState state);

退出登录

EVVoipAccount

- (BOOL)logout;

移除账号

EVVoipAccount

- (void)remove;

消息通知

EVVoipManager

onMessageDidReceived

接听并挂断其它

EVVoipCall

- (EVVoipError *)acceptWithVideoView:(UIView* )videoView;

接听并暂停其它

EVVoipCall

- (EVVoipError* )acceptAndPauseOhterWithVideoView:(UIView* )videoView;

视频接听

EVVoipCall

- (EVVoipError *)acceptVideo;

接听并挂断其它通话

EVVoipCall

- (EVVoipError *)acceptWithVideoView:(UIView* )videoView;

接听并暂停其它通话

EVVoipCall

- (EVVoipError* )acceptAndPauseOhterWithVideoView:(UIView* )videoView;

设置媒体视图

EVVoipCall

- (void)setNativeVideoView:(UIView *)videoView;

(和acceptWithVideoView的videoView有什么区别)

音频接听

EVVoipCall

- (EVVoipError *)acceptAudio;

暂停

EVVoipCall

- (void)pause;

恢复

EVVoipCall

- (void)resume;

挂断

EVVoipCall

- (EVVoipError* )hangup;

呼叫状态监听

EVVoipCall

@property (nonatomic, copy) void (^onStateDidChanged)(EVVoipCallState state, EVVoipCallEndReason reason);

视频状态改变

EVVoipCall

@property (nonatomic, copy) void (^onVideoStateDidChanged)(EVVoipVideoState state);

开锁结果回调

EVVoipCall

@property (nonatomic, copy) void (^onUnlockStateDidChanged)(EVVoipError *error, NSInteger unlockCode);

开锁

EVVoipCall

- (int)unlock;

截图

EVVoipCall

- (void)snapshot:(void(^)(UIImage* image, EVVoipError* error))completion;

抢麦

EVVoipCall

- (void)applyRemoteMicrophone:(void(^)(BOOL successed))completion;

抢麦,当有多端监视时,默认第一个监视可以说话,其他若要说话需要进行抢麦

释放抢麦

EVVoipCall

- (BOOL)cancelRemoteMicrophone;

是否静麦

EVVoipCall

- (BOOL)microphoneEnabled;

是否支持扬声器

EVVoipCall

- (BOOL)speakerEnabled;

是否关闭视频

EVVoipCall

- (BOOL)videoEnabled;

切换到扬声器

EVVoipCall

- (void)switchToSpeaker;

切换到听筒

EVVoipCall

- (void)switchToReceiver;

5. 主要业务流程

5.1 初始化

在进⾏对讲业务之前,需要先初始化该SDK,才能保证后续业务正常,后续的所有API调⽤都必须在SDK初始化成功的情况下执⾏。在应⽤的⽣命周期内,⼀般只进⾏⼀次初始化。

[[EVVoipManager defaultManager] setupWithCompletion:^{
 NSLog(@"初始化完成");
}];

当不再使⽤对讲业务时,可以调⽤deInit进⾏SDK反初始化。

// 反初始化对讲SDK
[[EVVoipManager defaultManager] teardown]

5.2 登入SIP服务器

在对讲SDK初始化成功之后,需要进⾏SIP服务器登入,登入成功后可以得到EVVoipAccount对象。

EVVoipAccount *account = [[EVVoipManager defaultManager] 
         loginWithSipNumber:@"SIP账号" 
            displayName:@"显示名" 
            password:@"密码" 
               domain:@"域名" 
                 port:80//端口
               transport:@"传输方式,默认UDP"];

为了能够实时显示账号状态,本SDK提供 onStateDidChanged 接⼝实时监听当前账号状态。

account.onStateDidChanged = ^(EVVoipAccountState state){
    ...
    EVVoipAccountStateUnknown = 0,  /** 未知 */
    EVVoipAccountStateLogging,      /** 登入中 */
    EVVoipAccountStateLogouting,    /** 登出中 */
    EVVoipAccountStateOnline,       /** 在线 */
    EVVoipAccountStateOffline,      /** 离线 */
    EVVoipAccountStateLoggedout,    /** 已登出 */
    ...
};

当不再使⽤对讲业务,可以通过以下接⼝进⾏登出操作。

[account logout];

5.3 呼叫监听

为了使APP能够响应设备通话请求,需要注册⼀个来电回调监听接⼝。

[EVVoipManager defaultManager].onCallDidIncoming = ^(EVVoipCall * _Nonnull call) {
 // 新来电
 }

为了能够实时获取当前的通话状态,可以在EVVoipCall对象上设置⼀个通话状态回调接⼝。

call.onStateDidChanged = ^(EVVoipCallState state, EVVoipCallEndReason reason) {

}

/** 呼叫状态 */
typedef NS_ENUM(NSUInteger, EVVoipCallState) {
    EVVoipCallStateUnknown = 0,     /** 未知 */
    EVVoipCallStateIncoming,        /** 呼入中 */
    EVVoipCallStateOutgoing,        /** 呼出中 */
    EVVoipCallStateConnected,       /** 已接通 */
    EVVoipCallStatePaused,          /** 已挂起 */
    EVVoipCallStateEnd,             /** 结束 */
};

/** 电话结束原因 */
typedef NS_ENUM(NSUInteger, EVVoipCallEndReason) {
    EVVoipCallEndReasonNone         = 3000, /** 无 */
    EVVoipCallEndReasonHangupByUser = 3003, /** 挂断 */
    EVVoipCallEndReasonNotFound     = 3004, /** 未找到对方账号 */
    EVVoipCallEndReasonNotAnswered  = 3005, /** 未接听 */
    EVVoipCallEndReasonBusy         = 3006, /** 对方忙 */
};

5.4 通话接听

为了显示设备的对讲画面,需要提供⼀个UIView作为视频容器,如果不提供则为⾳频通话。

视频接听

[call acceptWithVideoView:self.playView];

音频接听

[call acceptWithVideoView:nil];

5.5 通话挂断

[call hangup];

5.6 开门

通话中可以发送开门指令,在发送开门指令前先设置监听器,通过监听获取开门指令执行结果。

[call unlock];

5.7 开关视频

打开视频

call.videoEnabled = YES;
[call setNativeVideoView:self.playView];

关闭视频

call.videoEnabled = NO;
[call setNativeVideoView:nil];

5.8 APP调看门禁机

设置调看UIView

[[EVVoipManager defaultManager] setVideoView:self.playView];

开始调看,可通过EVVoipError对象查看调看失败原因

self.currentCall =
[[EVVoipManager defaultManager] callWithSipNumber:self.sipNumber videoView:nil error:&error];
if (error) {
 [self showToastWithMsg:[NSString stringWithFormat:@"errorCode = %d",error.errorCode]];
    [self.navigationController popViewControllerAnimated:YES];
    return;
}

设置调看状态监听

self.currentCall.onStateDidChanged = ^(EVVoipCallState state, EVVoipCallEndReason reason) {

}