可视对讲移动端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 导入所需文件
新建或打开已有工程
导入EVVideoVoipSDK.framework和EVVideoVoipSDK.bundle
将工程配置->TARGETS->Build Settings中的bitcode设置为NO
在需要用到的类中导入头文件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) {
}