可視對講移動端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) {
}