萤石云视频 iOS SDK接口使用说明

版本:V3.4.0 合作伙伴交流使用

特别说明1:本SDK只包含真机调试的功能,不支持任何模拟器的调试。
特别说明2:本SDK提供的功能都已经在文档上说明,任何不在文档上说明的功能不支持,用户可以向我们提需求来完善功能。
特别说明3:请频繁查看 https://open.ys7.com 的内容更新,特别是FAQ栏目。
特别说明4:WiFi配置的流程请参考论坛说明,注意设备的状态
http://bbs.ys7.com/forum.php?mod=viewthread&tid=18924&highlight=wifi
特别说明5:账户下删除设备重新wifi配置并且添加过程中,请在重置设备等待2分钟以后再调用wifi配置的相关接口可以提高wifi配置的成功率,否则会降低成功率,因为重置设备以后我们平台将在2分钟内得到设备下线的状态,只有平台认为下线了,wifi配置成功率才会高。
特别说明6:尽量多使用FAQ,我们对开发过程中遇到的多次被提问的问题进行汇总,FAQ能解决你90%的问题,请通过关键字进行搜索。
特别说明7:iOS的demo已经移除了开放平台SDK的静态库,请自行按照文档引入文件即可运行代码。

简介

本文档用于说明萤石开放平台SDK iOS版本接口之间的关系以及接口调用顺序,对开放平台SDK iOS版本各接口都有详细的说明。主要分为四个部分,第一部分为名词解释;第二部分为SDK环境配置;第三部阐述了开放SDK的主要调用流程;第四部分对各模块接口进行了详细的说明。

名词解释

名词 注解
appKey AppKey的申请可以参阅: https://open.ys7.com/view/app/app_edit.html
accessToken 访问令牌,由server返回给client用于认证
expire accessToken过期时间
cameraId 摄像头唯一标志
OSD 视频视频当前时间
PTZ 云台控制,可以通过终端控制操作设备

SDK配置

  1. 创建一个新的XCode项目,然后导入SDK库libEZOpenSDK.a和公开的头文件(如图所示);
    file tree

  2. 导入openssl依赖库libssl.a、libcrypto.a以及相关的头文件(如图所示);
    lib folder

  3. 导入系统依赖库libstdc++.6.0.9、CoreMedia、AudioToolbox、VideoToolbox.framework、GLKit.framework、OpenAL.framework、MobileCoreServices、SystemConfiguration、CoreTelephony、libc++(如图所示); list of frameworks

  4. 添加Other Linker Flags -ObjC
    注意区分大小写。
    Other Linker Flags 配置工作完成

功能介绍

SDK现在的功能有:

V3.0: 授权登录、获取摄像头列表、直播预览、查看回放(SD卡、云存储)、设备添加删除、设备的设置功能(h5)、设备控制接口(云台、镜头画面)、WiFi配置、视频本地录像、视频截屏、告警消息等等。
V3.1: 安全验证接口、获取设置设备验证码、数据解密接口相关接口等,主要功能是完成UI版本的开源项目。 V3.2: 留言相关接口(列表、设置已读、删除)、设备相关接口(版本升级,存储介质格式化,修改设备名称、视频图片加密开关,布撤防)、开通云存储服务接口、短信接口、获取消息未读数。
V3.3: 增加或者兼容A系列设备相关的接口:查找和添加(兼容)、查询设备列表接口、查询关联探测器接口;新增加通过设备序列号查询告警列表接口;新增加云存储开通接口。
V3.3.1: 替换私有化取流协议;优化取流速度。
V3.4:新增加通过设备验证码关闭视频加密功能;新增加N1、X2回放功能。

快速接入示范

本节旨在引导开发者进行快速接入,通过介绍几个关键的接口,并给出对应的界面和接口,以及代码范例,让开发者对sdk有个初步了解 首先请下载并安装萤石云app, 登陆以后,进入的是监控列表界面,如下所示 [图中橙色矩形框仅作为标注,并非原生app界面]

1.1 获取摄像头列表

APP 我的设备

+ (NSOperation *)getCameraList:(NSInteger)pageIndex pageSize:(NSInteger)pageSize completion:(void (^)(NSArray *cameraList,NSError *error))completion;

说明:通过调用getCameraList,可以得到一个列表(EZCameraInfo对象数组),列表每一项包含一个摄像头的信息。开发者可以通过UITableView将列表展示。

接口位于EZOpenSDK.h208行

示例Demo代码为EZCameraTableViewController

1.2 添加设备

APP 加设备 APP 二维码扫描 APP 手动输入序列号

说明:需要添加设备时,可以点击界面1中的加号(+), 进入界面2,界面2是一个二维码扫描,用户可以通过扫描二维码获取设备序列号,也可以点击界面右上角的图标(橙色标注),进入界面3,界面3是一个手动输入序列号界面。

界面2(二维码扫描)代码在EZAddByQRCodeViewController

界面3(手动输入)代码在EZInputSerialViewController

用户输入设备序列号,只有当设备没有被其他人添加,并且设备已经在线(注册上平台)时,才能够被添加,因此,必须要查询一下该设备状态,调用的接口是 probeDeviceInfo

+ (NSOperation *)probeDeviceInfo:(NSString *)deviceSerial completion:(void (^)(EZProbeDeviceInfo *deviceInfo, NSError *error))completion;

如果该接口返回成功(error为空时),则说明该设备状态正常,继续调用addDevice接口添加。

+ (NSOperation *)addDevice:(NSString *)deviceSerial deviceCode:(NSString *)deviceCode completion:(void (^)(NSError *error))completion;

如果该接口返回错误,开发者需要处理以下几个错误码,告诉用户该设备不可添加的原因:

20020 设备在线,已经被自己添加 (给出提示)
20022 设备在线,已经被别的用户添加 (给出提示)
20023 设备不在线,未被用户添加 (这里需要调用wifi一键配置)
20024 设备不在线,已经被别的用户添加 (给出提示)
20029 设备不在线,已经被自己添加 (给出提示)

至此,一个简单的设备添加就完成了

接口代码位于EZOpenSDK.h848行和363行
示例Demo代码EZDeviceResultViewController

1.3 Wifi一键配置

在上述调用接口probeDeviceInfo过程中,如果返回的错误码是20023,说明设备还没有联网,这时需要让设备联网,如果是有线设备,需要提示用户插入网线。如果是无线设备,则需要进行wifi配置

APP configWifi APP configWifi 第一步 APP configWifi 第二步 APP configWifi 第三步 1 APP configWifi 第三步 2 APP configWifi 第三步 3 APP configWifi 第三步 4

开始一键配置需要调用startConfigWifi接口

+ (BOOL)startConfigWifi:(NSString *)ssid password:(NSString *)password deviceSerial:(NSString *)deviceSerial deviceStatus:(void (^)(EZWifiConfigStatus status))statusBlock;

结束一键配置需要调用stopConfigWiFi接口

Block回调用于处理WIFI(1)和PLAT(2)事件
WIFI表示设备已经连上WIFI, PLAT表示设备已经注册上平台。
一旦设备注册上平台之后,就可以调用addDevice进行添加

接口代码位于EZOpenSDK.h 348行和373行
示例Demo代码EZWifiTipsViewController、EZDeviceRestartTipsViewController、EZWifiInfoViewController、EZWifiConfigViewController

1.4 设备预览

APP inithhhggggg

预览视频的代码参见EZLivePlayViewController

_player = [EZOpenSDK createPlayerWithCameraId:_cameraId];
_player.delegate = self;
[_player setPlayerView:_playerView];
[_player startRealPlay];

代码说明:
1,创建EZPlayer对象需要一个cameraId,即摄像头的唯一id,这个cameraId可从EZCameraInfo对象中获取
2,需要实现EZPlayerDelegate的方法:

@protocol EZPlayerDelegate <NSObject>

- (void)player:(EZPlayer *)player didPlayFailed:(NSError *)error;

- (void)player:(EZPlayer *)player didReceviedMessage:(NSInteger)messageCode;

@end

至此,预览功能基本上完成了实现。

1.5 设备回放

APP 回放

回放功能的代码请参考EZPlaybackViewController这个文件,主要用到的核心功能有:

//查询设备SD卡录像

[EZOpenSDK searchRecordFileFromDevice:weakSelf.cameraId

beginTime:weakSelf.beginTime

endTime:weakSelf.endTime

completion:^(NSArray *deviceRecords, NSError *error) {

}];

//查询设备云存储录像
[EZOpenSDK searchRecordFileFromCloud:weakSelf.cameraId

beginTime:weakSelf.beginTime

endTime:weakSelf.endTime

completion:^(NSArray *deviceRecords, NSError *error) {

}];

开始播放回放(需要2步走)

1、首先构建EZPlayer对象:

_player = [EZOpenSDK createPlayerWithCameraId:_cameraId];
_player.delegate = self;
[_player setPlayerView:_playerView];

代码说明:构建EZPlayer在EZPlaybackViewController的第95行

2、开始回放播放(设备和云存储):

    if(_isSelectedDevice)
    {
        _deviceRecord = [_records dd_objectAtIndex:0];
        [_player startPlaybackFromDevice:_deviceRecord];
    }
    else
    {
        _cloudRecord = [_records lastObject];
        [_player startPlaybackFromCloud:_cloudRecord];
    }

EZPlayer回放功能接口在EZPlayer.h的110行~148行。

接口

SDK接入流程

如图所示 flowchart

  1. 用户使用SDK初始化后的第一步进行账号对接流程获取accessToken的对象;
  2. 通过EZOpenSDK的setAccessToken方法向SDK设置AccessToken;
  3. 然后可以通过设备列表接口获取设备信息;
  4. 针对设备预览、回放、设备操作(云台控制、设备显示设置)、查看告警列表等功能接口调用;
  5. 预览成功以后才能抓图、录像、开关声音;
  6. 语音对讲操作;
  7. 回放成功以后才能抓图、录像、开关声音;
  8. WiFi配置之前要先通过设备序列号查询设备是否添加过。

UI版本Demo的接入流程

  1. 首先,把Demo工程里的资源文件:
    2个Storyboard(AddDevice.storyboard、EZMain.storyboard)、Assets.xcassets的图片资源、还有一个query_loading.gif(注意别忘记引入了)引入到自己的工程下面;

  2. 接着,把Demo工程里的UIViewControllers文件下的所有ViewController对象文件和CustomCells以及TableViewCells的视图对象文件引入到你的工程,注意重名问题;

  3. 然后,把Demo工程里的Global文件下的文件以后Venders(第三方库)引入到自己工程,注意添加第三方库的的依赖文件,Demo工程的Venders里已经包含了EZOpenSDK的静态库和头文件以及依赖的openssl。

  4. 编写接入代码:

//获取EZMain的stroyboard文件
UIStoryboard *ezMainStoryboard = [UIStoryboard storyboardWithName:@"EZMain" bundle:nil];
//获取EZMain.storyboard的实例ViewController--获取摄像头列表
UIViewController *instanceVC = [ezMainStoryboard instantiateViewControllerWithIdentifier:@"EZCameraList"];
//push摄像头列表的viewController
[self.navigationController pushViewController:instanceVC animated:YES];

注意:

这个instanceVC也是可以调用presentViewController:animated:completion:方法的。 InstanceVC的identifier是在这里设置:

APP StoryboardID

流程详细说明

SDK初始化

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //用户代码
... ...

     //萤石开放平台SDK初始化
[EZOpenSDK initLibWithAppKey:AppKey];

    //用户代码
... ...
    return YES;
}

说明: 程序启动时初始化SDK, 初始化时需要设置AppKey。

登录相关接口

/**
 *  @since 3.0.0
 *  打开授权登录中间页面
 *
 *  @param block 回调block
 */
+ (void)openLoginPage:(void (^)(EZAccessToken *accessToken))block;

/**
 *  @since 3.0.0
 *  授权登录以后给EZOpenSDK设置AccessToken
 *
 *  @param accessToken 授权登录获取的accessToken
 */
+ (void)setAccessToken:(NSString *)accessToken;

/**
 *  @since 3.0.0
 *  登出账号
 *
 *  @param completion 回调block,error为空表示登出成功
 */
+ (void)logout:(void (^)(NSError *error))completion;

接口说明:

第一步,使用+ (void)openLoginPage:(void (^)(EZAccessToken *accessToken))block;方法 获取EZAccessToken对象accessToken;

第二步,把获取的AccessToken字符串通过+ (void)setAccessToken:(NSString *)accessToken;方法对SDK进行accessToken设置;

第三步,用户可以存储accessToken在本地,以便下次启动时直接把accessToek的值设置到SDK。

设备相关接口

WiFi配置流程

configWifi flowchart

/**
 *  @since 3.0.0
 *  获取用户所有的摄像头列表
 *
 *  @param pageIndex  分页当前页码(从0开始)
 *  @param pageSize   分页每页数量(建议20以内)
 *  @param completion 回调block,正常时返回EZCameraInfo的数组,错误时返回错误码
 *  @exception 错误码类型:待补充
 *
 *  @return operation
 */
+ (NSOperation *)getCameraList:(NSInteger)pageIndex
                      pageSize:(NSInteger)pageSize
                    completion:(void (^)(NSArray *cameraList, NSError *error))completion;
/**
 *  @since 3.0.0
 *  根据cameraId获取设备详细信息
 *
 *  @param cameraId    设备摄像头id
 *  @param completion  回调block, 正常时返回EZDeviceInfo的对象信息,错误时返回错误码
 *  @exception 错误码类型:待补充
 *  @see 使用该接口时要注意cameraId必须来自SDK获取cameraInfo以后得到的cameraId。如果是服务端获取的cameraId很有可能收到400500的错误
 */
+ (void)getDeviceInfo:(NSString *)cameraId
           completion:(void (^)(EZDeviceInfo *deviceInfo, NSError *error))completion;

/**
 *  @since 3.0.0
 *  根据设备序列号删除当前账号的设备
 *
 *  @param deviceSerial 设备序列号
 *  @param completion   回调block,error为空时表示删除成功
 *  @exception 错误码类型:106002,具体参考EZOpenSDK头文件中的EZErrorCode错误码注释
 *  @see 该接口与终端绑定功能相关,会遇到删除时报106002的错误,请关闭终端绑定以后再试
 *
 *  @return operation
 */
+ (NSOperation *)deleteDevice:(NSString *)deviceSerial
                   completion:(void (^)(NSError *error))completion;

/**
 *  @since 3.0.0
 *  根据设备序列号查询摄像头信息。
 *
 *  @param deviceSerial 设备序列号
 *  @param completion   回调block,正常时返回EZCameraInfo的对象信息,错误时返回错误码
 *  @exception 错误码类型:待补充
 *  @see 使用场景通常是B模式下获取单个摄像头信息使用。特别说明:原来的添加前查询设备功能请使用`probeDeviceInfo:completion:`接口来完成
 *
 *  @return operation
 */
+ (NSOperation *)getCameraInfo:(NSString *)deviceSerial
completion:(void (^)(EZCameraInfo *cameraInfo, NSError *error))completion;

/**
 *  @since 3.0.0
 *  开始WiFi配置
 *
 *  @param ssid         连接WiFi SSID
 *  @param password     连接WiFi 密码
 *  @param deviceSerial 连接WiFi的设备的设备序列号
 *  @param statusBlock  返回连接设备的WiFi配置状态
 *
 *  @return YES/NO
 */
+ (BOOL)startConfigWifi:(NSString *)ssid
               password:(NSString *)password
           deviceSerial:(NSString *)deviceSerial
           deviceStatus:(void (^)(EZWifiConfigStatus status))statusBlock;

/**
 *  @since 3.0.0
 *  根据设备序列号和设备验证码添加设备
 *
 *  @param deviceSerial 设备序列号
 *  @param deviceCode   设备验证码
 *  @param completion   回调block,error为空时表示添加成功
 *  @exception 错误码类型:120002、120006、120007、120008、120014,具体参考EZOpenSDK头文件中的EZErrorCode错误码注释
 *
 *  @return operation
 */
+ (NSOperation *)addDevice:(NSString *)deviceSerial
                deviceCode:(NSString *)deviceCode
                completion:(void (^)(NSError *error))completion;

/**
 *  @since 3.0.0
 *  停止Wifi配置
 *
 *  @return YES/NO
 */
+ (BOOL)stopConfigWifi;

接口说明:

  1. 通过获取摄像头列表的接口(支持分页),你可以从萤石云服务器获取当前登录账号的设备列表,你可以根把返回的EZCameraInfo的数组在你的UI展示设备,然后你可以通过cameraId进行预览、设备云存储录像或者SD卡录像列表获取等操作;
  2. 通过deviceSerial对摄像头列表中的设备进行删除操作、中间页面设置设备。
  3. WiFi配置注意要点:一台全新的设备,进行序列号查询时查询结果一定是设备不存在。第二次及以后WiFi配置之前一定要重置设备,然后再进行wifi配置。

告警信息相关接口

/**
 *  @since 3.0.0
 *  根据查询条件获取指定设备的告警信息列表
 *
 *  @param cameraId   设备摄像头id
 *  @param pageIndex  分页当前页码(从0开始)
 *  @param pageSize   分页每页数量(建议20以内)
 *  @param beginTime  搜索时间范围开始时间
 *  @param endTime    搜索时间范围结束时间
 *  @param completion 回调block,正常时返回EZAlarmInfo的对象数组和查询范围内的告警数量总数,错误时返回错误码
 *  @exception 错误码类型:待补充
 *
 *  @return operation
 */
+ (NSOperation *)getAlarmList:(NSString *)cameraId
                    pageIndex:(NSInteger)pageIndex
                     pageSize:(NSInteger)pageSize
                    beginTime:(NSDate *)beginTime
                      endTime:(NSDate *)endTime
                   completion:(void (^)(NSArray *alarmList, NSInteger alarmCount, NSError *error))completion;

/**
 *  @since 3.0.0
 *  根据alarmId删除告警信息
 *
 *  @param alarmIds   告警信息Id数组(可以只有一个Id),最多为10个Id,否则会报错
 *  @param completion 回调block,error为空时表示删除成功
 *  @exception 错误码类型:110004、120202,具体参考EZOpenSDK头文件中的EZErrorCode错误码注释
 *
 *  @return operation
 */
+ (NSOperation *)deleteAlarm:(NSArray *)alarmIds
                  completion:(void (^)(NSError *error))completion;

/**
 *  @since 3.0.0
 *  设置告警信息为已读
 *
 *  @param alarmIds   告警信息Id数组(可以只有一个Id),最多为10个id,否则会报错
 *  @param status     告警消息状态
 *  @param completion 回调block,error为空时表示设置成功
 *  @exception 错误码类型:110004、120202,具体参考EZOpenSDK头文件中的EZErrorCode错误码注释
 *
 *  @return opeartion
 */
+ (NSOperation *)setAlarmStatus:(NSArray *)alarmIds
                    alarmStatus:(EZMessageStatus)status
                     completion:(void (^)(NSError *error))completion;

接口说明: alarmList 是 EZAlarmInfo的数组,alarmCount是查询到的告警总数。

录像相关接口

/**
 *  @since 3.0.0
 *  查询云存储录像信息列表
 *
 *  @param cameraId   设备摄像头id
 *  @param beginTime  查询时间范围开始时间
 *  @param endTime    查询时间范围结束时间
 *  @param completion 回调block,正常时返回EZCloudRecordFile的对象数组,错误时返回错误码
 *  @exception 错误码类型:待补充
 *
 *  @return operation
 */
+ (NSOperation *)searchRecordFileFromCloud:(NSString *)cameraId
                                 beginTime:(NSDate *)beginTime
                                   endTime:(NSDate *)endTime
                                completion:(void (^)(NSArray *couldRecords, NSError *error))completion;

/**
 *  @since 3.0.0
 *  查询远程SD卡存储录像信息列表
 *
 *  @param cameraId   设备摄像头id
 *  @param beginTime  查询时间范围开始时间
 *  @param endTime    查询时间范围结束时间
 *  @param completion 回调block,正常时返回EZDeviceRecrodFile的对象数组,错误时返回错误码
 *  @exception 错误码类型:400404,具体参考EZOpenSDK头文件中的EZErrorCode错误码注释
 *
 *  @return operation
 */
+ (NSOperation *)searchRecordFileFromDevice:(NSString *)cameraId
                                  beginTime:(NSDate *)beginTime
                                    endTime:(NSDate *)endTime
                                 completion:(void (^)(NSArray *deviceRecords, NSError *error))completion;

接口说明:cloudRecords是 EZCloudRecordInfo的数组;deviceRecords是EZDeviceRecordInfo的数组。

设备控制接口

/**
 *  @since 3.0.0
 *  PTZ 控制接口
 *
 *  @param cameraId    设备摄像头id
 *  @param command     ptz控制命令
 *  @param action      控制启动/停止
 *  @param speed       速度 (取值范围:0-7整数值)
 *  @param resultBlock 回调block,正常时result为YES,错误时result为NO并且附带错误码
 *  @exception 错误码类型:待补充
 *
 *  @return YES/NO
 */
+ (BOOL)controlPTZ:(NSString *)cameraId
           command:(EZPTZCommand)command
            action:(EZPTZAction)action
             speed:(NSInteger)speed
            result:(void (^)(BOOL result, NSError *error))resultBlock;

/**
 *  @since 3.0.0
 *  摄像头显示控制接口
 *
 *  @param cameraId    设备摄像头id
 *  @param command     显示控制命令
 *  @param resultBlock 回调block,正常时result为YES,错误时result为NO并且附带错误码
 *  @exception 错误码类型:待补充
 *
 *  @return YES/NO
 */
+ (BOOL)controlDisplay:(NSString *)cameraId
               command:(EZDisplayCommand)command
                result:(void (^)(BOOL result, NSError *error))resultBlock;

接口说明:该接口的主要功能是云台控制和镜头显示功能,属于限制级接口,要优选通过判断设备的能力集来调用,设备能力集请查看EZDeviceInfo对象的属性值来判断。

EZPlayer接口

实时预览

1.6 预览流程

预览流程

1.7 实例接口

/**
 *  根据cameraId构造EZPlayer对象
 *
 *  @param cameraId 摄像头Id
 *
 *  @return EZPlayer对象
 */
+ (EZPlayer *)createPlayerWithCameraId:(NSString *)cameraId;


/**
 *  根据url构造EZPlayer对象 (主要用来处理url视频的播放)
 *
 *  @param url 播放url
 *
 *  @return EZPlayer对象
 */
+ (EZPlayer *)createPlayerWithUrl:(NSString *)url;


/**
 *  释放EZPlayer对象
 *
 *  @param player EZPlayer对象
 *
 *  @return YES/NO
 */
+ (BOOL)releasePlayer:(EZPlayer *)player;

/**
 *  设置播放器的view
 *
 *  @param playerView 播放器view
 */
- (void)setPlayerView:(UIView *)playerView;

接口说明:构造完EZPlayer以后必须设置播放器承载的view对象,否则会没有播放画面。

1.8 预览接口

 /**
 *  开始播放
 *
 *  @return YES/NO
 */
- (BOOL)startRealPlay;

/**
 *  停止播放
 *
 *  @return YES/NO
 */
- (BOOL)stopRealPlay;

注意:当你startRealPlay以后记得stopRealPlay,保证方法的成对出现,否则容易出现问题。

1.9 设置清晰度

/**
 *  设置视频清晰度
 *
 *  @param videoLevel 清晰度 0-流畅,1-均衡,2-高清
 *
 *  @return YES/NO
 */
- (BOOL)setVideoLevel:(EZVideoQuality)videoLevel;

接口说明:

1.10 声音开关

/**
 *  开启声音
 *
 *  @return YES/NO
 */
- (BOOL)openSound;

/**
 *  关闭声音
 *
 *  @return YES/NO
 */
- (BOOL)closeSound;

接口说明:开关声音只在开始播放以后有效。

1.11 语音对讲(目前只支持全双工对讲)

/**
 *  开始对讲
 *
 *  @return YES/NO
 */
- (BOOL)startVoiceTalk;

/**
 *  停止对讲
 *
 *  @return YES/NO
 */
- (BOOL)stopVoiceTalk;

注意:当你startVoiceTalk以后记得stopVoiceTalk,保证方法的成对出现,否则容易出现问题;如果离开页面,releasePlayer时无需调用stopVoiceTalk。

1.12 录像 & 抓图

**
 *  开始本地直播流录像功能
 *
 *  @param recordDataBlock 录像回调数据
 *
 *  @return YES/NO
 */
- (BOOL)startLocalRecord:(void (^)(NSData *data))recordDataBlock;

/**
 *  结束本地直播流录像
 *
 *  @return YES/NO
 */
- (BOOL)stopLocalRecord;

/**
 *  直播画面抓图
 *
 *  @param quality 抓图质量(0~100),数值越大图片质量越好,图片大小越大
 *
 *  @return image
 */
- (UIImage *)capturePicture:(NSInteger)quality;

接口说明:录像接口启动以后会一直回调录像数据,SDK没有处理本地文件存储,需要开发者自己处理回调回来的录像数据。具体文件存储方式可以参考demo。
代码范例:

//结束本地录像
    if(recordButton.selected)
    {
        [_player stopLocalRecord];
        fclose(_localRecord);
        EZAVPlayerViewController *avPlayerVC = [[EZAVPlayerViewController alloc] initWithNibName:@"EZAVPlayerViewController" bundle:nil];
        avPlayerVC.filePath = _filePath;
        [self.navigationController pushViewController:avPlayerVC animated:YES];
    }
    else
    {
        //开始本地录像
        NSString *path = @"/OpenSDK/EzvizLoaclRecord";

        NSArray * docdirs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString * docdir = [docdirs objectAtIndex:0];

        NSString * configFilePath = [docdir stringByAppendingPathComponent:path];
        if(![[NSFileManager defaultManager] fileExistsAtPath:configFilePath]){
            NSError *error = nil;
            [[NSFileManager defaultManager] createDirectoryAtPath:configFilePath
                                      withIntermediateDirectories:YES
                                                       attributes:nil
                                                            error:&error];
        }
        NSDateFormatter *dateformatter = [[NSDateFormatter alloc] init];
        dateformatter.dateFormat = @"yyyyMMddHHmmssSSS";
        _filePath = [NSString stringWithFormat:@"%@/%@.mov",configFilePath,[dateformatter stringFromDate:[NSDate date]]];
        _localRecord = fopen([_filePath UTF8String], "wb+");
        [_player startLocalRecord:^(NSData *data) {
            if(!_localRecord ||
               !data)
                return;
            if ([data length] != fwrite([data bytes], 1, [data length], _localRecord))
            {
                NSLog(@"local record file write error");
                return;
            }
            fflush(_localRecord);
        }];
    }
    recordButton.selected = !recordButton.selected;

图片接口直接获取UIImage对象。

   //抓图以后直接返回UIImage对象
    UIImage *image = [_player capturePicture:100];
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        EZAVPlayerViewController *avPlayerVC = [[EZAVPlayerViewController alloc] initWithNibName:@"EZAVPlayerViewController" bundle:nil];
        avPlayerVC.image = image;
        [self.navigationController pushViewController:avPlayerVC animated:YES];
    });

录像回放

1.13 回放流程

回放流程

1.14 实例接口(参考实时预览的实例接口 - 1.8)

1.15 录像列表接口(参考录像相关接口)

1.16 回放接口

 /**
 *  开始云存储远程回放
 *  @param cloudFile 云存储文件信息
 *
 *  @return YES/NO
 */
- (BOOL)startPlaybackFromCloud:(EZCloudRecordFile *)cloudFile;

/**
 *  开始远程SD卡回放
 *
 *  @param deviceFile SD卡文件信息
 *
 *  @return YES/NO
 */
- (BOOL)startPlaybackFromDevice:(EZDeviceRecordFile *)deviceFile;

/**
 *  停止远程回放
 */
- (BOOL)stopPlayback;

/**
 *  暂停远程回放播放
 */
- (BOOL)pausePlayback;

/**
 *  继续远程回放播放
 */
- (BOOL)resumePlayback;

/**
 *  根据偏移时间播放
 *
 *  @param offsetTime 录像偏移时间
 */
- (void)seekPlayback:(NSDate *)offsetTime;

/**
 *  获取当前播放时间进度 OSD名词解释
 *
 *  @return 播放进度的NSDate数据
 */
- (NSDate *)getOSDTime;

接口说明:
注意:该录像回放属于远程回放,需要连接网络,与本地录像功能是2个功能。
回放可以暂停/继续,也可以拖动时间轴;
回放可以通过getOSDTime方法处理当前的播放进度。

1.17 声音开关 (同实时预览 - 1.10)

1.18 录像 & 抓图 (同实时预览 - 1.12)

EZPlayerDelegate相关接口

/// 萤石播放器delegate方法
@protocol EZPlayerDelegate <NSObject>

/**
 *  播放器播放失败错误回调
 *
 *  @param player 播放器对象
 *  @param error  播放器错误,错误码请对照EZOpenSDK头文件中的EZErrorCode使用
 */
- (void)player:(EZPlayer *)player didPlayFailed:(NSError *)error;

/**
 *  播放器消息回调
 *
 *  @param player      播放器对象
 *  @param messageCode 播放器消息码,请对照EZOpenSDK头文件中的EZMessageCode使用
 */
- (void)player:(EZPlayer *)player didReceviedMessage:(NSInteger)messageCode;

@end

接口说明:
EZPlayerDelegate有2个必须实现的方法:

  1. 消息回调:回调播放器的一些状态;

  2. 错误回调:播放器播放失败的错误,用户可以根据错误码判断错误的发生状况

V3.2新增加接口

/**
 *  @since 3.2.0
 *  根据设备序列号控制设备的活动检测开关接口,该接口只支持IPC设备,非IPC设备请使用`setDeviceDefence:deviceSerial:completion`接口设置布撤防
 *
 *  @param isDefence    YES为开,NO为关
 *  @param deviceSerial 设备序列号
 *  @param completion   回调block,error为空表示设置成功
 *  @exception 错误码类型:110004、120002、120014、120018,具体参考EZOpenSDK头文件中的EZErrorCode错误码注释
 *
 *  @return operation
 */
+ (NSOperation *)setDefence:(BOOL)isDefence
               deviceSerial:(NSString *)deviceSerial
                 completion:(void (^)(NSError *error))completion;

/**
 *  @since 3.2.0
 *  获取开通萤石云服务的短信验证码接口
 *
 *  @param mobileNumber 手机号码
 *  @param completion   回调block,error为空表示发送短信成功
 *  @exception 错误码类型:101041,具体参考EZOpenSDK头文件中的EZErrorCode错误码注释
 *
 *  @return operation
 */
+ (NSOperation *)getOpenEzvizServiceSMSCode:(NSString *)mobileNumber
                                 completion:(void (^)(NSError *error))completion;

/**
 *  @since 3.2.0
 *  开通萤石云服务接口
 *
 *  @param mobileNumber 手机号码
 *  @param smsCode      收到的开通服务的短信验证码
 *  @param completion   回调block,error为空表示操作成功
 *  @exception 错误码类型:110004、110012,具体参考EZOpenSDK头文件中的EZErrorCode错误码注释
 *
 *  @return operation
 */
+ (NSOperation *)openEzvizService:(NSString *)mobileNumber
                          smsCode:(NSString *)smsCode
                       completion:(void (^)(NSError *error))completion;

/**
 *  @since 3.2.0
 *  获取抓取摄像头图片的url接口
 *
 *  @param deviceSerial 设备序列号
 *  @param channelNo    通道号
 *  @param completion   回调block,正常时返回url地址信息,错误时返回错误码
 *  @exception 错误码类型:120001、120002、120006、120008,具体参考EZOpenSDK头文件中的EZErrorCode错误码注释
 *  @see 该接口比较耗时,不建议进行批量设备抓图,SDK内部只支持6个http请求并发,该接口会持续占用http请求资源,如果遇到http请求延时巨大问题,优先考虑抓图接口并发造成的问题
 *
 *  @return operation
 */
+ (NSOperation *)capturePicture:(NSString *)deviceSerial
                      channelNo:(NSInteger)channelNo
                     completion:(void (^)(NSString *url, NSError *error))completion;

/**
 *  @since 3.2.0
 *  获取设备的版本信息接口
 *
 *  @param deviceSerial 设备序列号
 *  @param completion   回调block,正常时返回EZDeviceVersion的对象信息,错误时返回错误码
 *  @exception 错误码类型:110004、120002、120014、120018,具体参考EZOpenSDK头文件中的EZErrorCode错误码注释
 *
 *  @return operation
 */
+ (NSOperation *)getDeviceVersion:(NSString *)deviceSerial
                       completion:(void (^)(EZDeviceVersion *version, NSError *error))completion;

/**
 *  @since 3.2.0
 *  设备视频图片加密开关接口(短信方式)
 *
 *  @param isEncrypt    是否加密
 *  @param deviceSerial 设备序列号
 *  @param smsCode      绑定手机号收到的设备操作短信验证码,关闭视频加密的时候smsCode才是必填
 *  @param completion   回调block,error为空时表示操作成功
 *  @exception 错误码类型:110004、120002、120006、120007、120008、120014、120018,具体参考EZOpenSDK头文件中的EZErrorCode错误码注释
 *  @see 该接口不推荐使用,如果是B模式情况下,短信验证数每天有上限(10条)
 *
 *  @return operation
 */
+ (NSOperation *)setDeviceEnryptStatus:(BOOL)isEncrypt
                          deviceSerial:(NSString *)deviceSerial
                               smsCode:(NSString *)smsCode
                            completion:(void (^)(NSError *error))completion __deprecated_msg("该接口不推荐使用,请使用通过设备验证码开关视频图片加密接口");


/**
 *  @since 3.2.0
 *  根据设备序列号修改设备名称接口
 *
 *  @param deviceSerial 设备序列号
 *  @param deviceName   设备名称
 *  @param completion   回调block,error为空时表示修改成功
 *  @exception 错误码类型:110004、120002、120014、120018,具体参考EZOpenSDK头文件中的EZErrorCode错误码注释
 *
 *  @return operation
 */
+ (NSOperation *)setDeviceName:(NSString *)deviceName
                  deviceSerial:(NSString *)deviceSerial
                    completion:(void (^)(NSError *error))completion;

/**
 *  @since 3.2.0
 *  获取用户基本信息的接口
 *
 *  @param completion 回调block, 正常时返回EZUserInfo的对象,错误时返回错误码
 *  @exception 错误码类型:110004,具体参考EZOpenSDK头文件中的EZErrorCode错误码注释
 *
 *  @return operation
 */
+ (NSOperation *)getUserInfo:(void (^)(EZUserInfo *userInfo, NSError *error))completion;

/**
 *  @since 3.2.0
 *  根据设备序列号获取未读消息数,设备序列号为空时获取所有设备的未读消息数
 *
 *  @param deviceSerial 需要获取的设备序列号,为空时返回账户下所有设备的未读消息数
 *  @param type         消息类型:EZMessageTypeAlarm 告警消息(1),EZMessageTypeLeave 留言消息(2)
 *  @param completion   回调block,正常时返回未读数量,错误时返回错误码
 *  @exception 错误码类型:110004、120002、120014、120018、120202,具体参考EZOpenSDK头文件中的EZErrorCode错误码注释
 *
 *  @return operation
 */
+ (NSOperation *)getUnreadMessageCount:(NSString *)deviceSerial
                           messageType:(EZMessageType)type
                            completion:(void (^)(NSInteger count, NSError *error))completion;

/**
 *  @since 3.2.0
 *  根据设备序列号获取设备的留言消息列表
 *
 *  @param deviceSerial 需要获取的设备序列号
 *  @param beginTime    开始时间
 *  @param endTime      结束时间
 *  @param pageIndex    分页页码
 *  @param pageSize     分页单页数量
 *  @param completion   回调block,正常时返回EZLeaveMessage的对象数组,错误时返回错误码
 *  @exception 错误码类型:110004、120002、120014、120018、120202,具体参考EZOpenSDK头文件中的EZErrorCode错误码注释
 *
 *  @return operation
 */
+ (NSOperation *)getLeaveMessageList:(NSString *)deviceSerial
                           pageIndex:(NSInteger)pageIndex
                            pageSize:(NSInteger)pageSize
                           beginTime:(NSDate *)beginTime
                             endTime:(NSDate *)endTime
                          completion:(void (^)(NSArray *leaveMessageList, NSInteger totalCount, NSError *error))completion;

/**
 *  @since 3.2.0
 *  根据leaveId设置留言消息状态
 *
 *  @param leaveIds   留言消息Id数组(最大数量为10,允许只有1个),多个ID以半角逗号隔开,如:1234565,124344
 *  @param status     需要设置的留言状态,目前只支持 EZMessageStatusRead(已读);
 *  @param completion 回调block,error为空表示设置成功
 *  @exception 错误码类型:110004、120202,具体参考EZOpenSDK头文件中的EZErrorCode错误码注释
 *
 *  @return operation
 */
+ (NSOperation *)setLeaveMessageStatus:(NSArray *)leaveIds
                         messageStatus:(EZMessageStatus)status
                            completion:(void (^)(NSError *error))completion;

/**
 *  @since 3.2.0
 *  根据leaveId删除留言消息
 *
 *  @param leaveIds   留言消息Id数组(最大数量为10,允许只有1个),多个ID以半角逗号隔开,如:1234565,124344
 *  @param completion 回调block,error为空表示删除成功
 *  @exception 错误码类型:110004、120202,具体参考EZOpenSDK头文件中的EZErrorCode错误码注释
 *
 *  @return operation
 */
+ (NSOperation *)deleteLeaveMessage:(NSArray *)leaveIds
                         completion:(void (^)(NSError *error))completion;

/**
 *  @since 3.2.0
 *  根据设备序列号获取存储介质状态(如是否初始化,格式化进度等)
 *
 *  @param deviceSerial 设备序列号
 *  @param completion   回调block,正常时返回EZStorageStauts的对象数组,错误时返回错误码
 *  @exception 错误码类型:110004、120002、120006、120007、120008、120014、120018,具体参考EZOpenSDK头文件中的EZErrorCode错误码注释
 *
 *  @return operation
 */
+ (NSOperation *)getStorageStatus:(NSString *)deviceSerial
                       completion:(void (^)(NSArray *storageStatus, NSError *error))completion;

/**
 *  @since 3.2.0
 *  根据设备序列号和分区编号格式化分区(SD卡)
 *
 *  @param deviceSerial 设备序列号
 *  @param storageIndex 查询返回的分区号,0表示全部格式化,可能会有几块硬盘的情况
 *  @param completion   回调block,error为空表示设置成功
 *  @exception 错误码类型:110004、120002、120006、120007、120008、120014、120016、120018,具体参考EZOpenSDK头文件中的EZErrorCode错误码注释
 *
 *  @return operation
 */
+ (NSOperation *)formatStorage:(NSString *)deviceSerial
                  storageIndex:(NSInteger)storageIndex
                    completion:(void (^)(NSError *error))completion;
/**
 *  @since 3.2.0
 *  尝试查询设备信息,设备Wifi配置前查询一次设备的信息
 *
 *  @param deviceSerial 设备序列号
 *  @param completion   回调block,正常时返回EZProbeDeviceInfo对象,错误码返回错误码
 *  @exception 错误码类型:110004、120002、120014、120020、120021、120022、120023、120024、120029,具体参考EZOpenSDK头文件中的EZErrorCode错误码注释
 *  @see 全新的设备是没有注册到平台的,所以会出现设备不存在的情况,设备wifi配置成功以后会上报数据到萤石云平台,以后每次查询就不会出现设备不存在的情况了。
 *
 *  @return operation
 */
+ (NSOperation *)probeDeviceInfo:(NSString *)deviceSerial
                      completion:(void (^)(EZProbeDeviceInfo *deviceInfo, NSError *error))completion;

/**
 *  @since 3.2.0
 *  根据设备序列号获取设备升级时的进度状态
 *
 *  @param deviceSerial 设备序列号
 *  @param completion   回调block,正常时返回EZDeviceUpgradeStatus对象,错误时返回错误码
 *  @exception 错误码类型:120002、120006、120007、120008、120014,具体参考EZOpenSDK头文件中的EZErrorCode错误码注释
 *
 *  @return operation
 */
+ (NSOperation *)getDeviceUpgradeStatus:(NSString *)deviceSerial
                             completion:(void (^)(EZDeviceUpgradeStatus *status, NSError *error))completion;

/**
 *  @since 3.2.0
 *  通过设备序列号对设备进行升级操作,前提是该设备有更新软件的提示
 *
 *  @param deviceSerial 设备序列号
 *  @param completion   回调block,error为空表示操作成功
 *  @exception 错误码类型:120002、120006、120007、120008、120014,具体参考EZOpenSDK头文件中的EZErrorCode错误码注释
 *
 *  @return operation
 */
+ (NSOperation *)upgradeDevice:(NSString *)deviceSerial
                    completion:(void (^)(NSError *error))completion;

/**
 *  @since 3.2.0
 *  通过设备序列号获取设备基本信息
 *
 *  @param deviceSerial 设备序列号
 *  @param completion   回调block,正常时返回EZDeviceInfo的基本信息,错误时返回错误码
 *  @exception 错误码类型:110004、120002、120014、120018,具体参考EZOpenSDK头文件中的EZErrorCode错误码注释
 *
 *  @return operation
 */
+ (NSOperation *)getDeviceInfoBySerial:(NSString *)deviceSerial
                            completion:(void (^)(EZDeviceInfo *deviceInfo, NSError *error))completion;

/**
 *  @since 3.2.0
 *  根据EZLeaveMessage对象信息获取语音留言消息数据接口
 *  @param message    留言消息对象
 *  @param completion 回调block (resultCode = 1 表示语音下载成功,-1表示下载失败)
 *
 *  @return operation
 */
+ (NSOperation *)getLeaveMessageData:(EZLeaveMessage *)message
                          completion:(void (^)(NSData *data, NSInteger resultCode))completion;

/**
 *  @since 3.2.0
 *  打开云存储中间页
 *
 *  @param deviceSerial 设备序列号
 */
+ (void)openCloudPage:(NSString *)deviceSerial;

V3.3新增加接口

/**
 *  @since 3.3.0
 *  获取用户所有的设备列表
 *
 *  @param pageIndex  分页当前页码(从0开始)
 *  @param pageSize   分页每页数量(建议20以内)
 *  @param completion 回调block,正常时返回EZDeviceInfo(非完整对象)的对象数组和设备总数,错误时返回错误码
 *  @exception 错误码类型:110004,具体参考EZOpenSDK头文件中的EZErrorCode错误码注释
 *
 *  @return operation
 */
+ (NSOperation *)getDeviceList:(NSInteger)pageIndex
                      pageSize:(NSInteger)pageSize
                    completion:(void (^)(NSArray *deviceList, NSInteger totalCount, NSError *error))completion;

/**
 *  @since 3.3.0
 *  根据设备序列号获取设备关联的探测器列表
 *
 *  @param deviceSerial 设备序列号
 *  @param completion   回调block,正常时返回EZDetectorInfo的对象数组,错误时返回错误码
 *  @exception 错误码类型:110004、120002、120014、120018,具体参考EZOpenSDK头文件中的EZErrorCode错误码注释
 *
 *  @return operation
 */
+ (NSOperation *)getDetectorList:(NSString *)deviceSerial
                      completion:(void (^)(NSArray *detectorList, NSError *error))completion;


/**
 *  @since 3.3.0
 *  根据设备序列号获取告警信息列表,设备序列号为nil时查询整个账户下的告警信息列表
 *
 *  @param deviceSerial 设备序列号
 *  @param pageIndex    分页当前页码(从0开始)
 *  @param pageSize     分页每页数量(建议20以内)
 *  @param beginTime    搜索时间范围开始时间(可以为空,nil代表为空)
 *  @param endTime      搜索时间范围结束时间(可以为空,nil代表为空)
 *  @param completion   回调block,正常时返回EZAlarmInfo的对象数据和查询时间范围内的告警个数的总数,错误时返回错误码
 *  @exception 错误码类型:110004、120002、120014、120018,具体参考EZOpenSDK头文件中的EZErrorCode错误码注释
 *
 *  @return operation
 */
+ (NSOperation *)getAlarmListBySerial:(NSString *)deviceSerial
                            pageIndex:(NSInteger)pageIndex
                             pageSize:(NSInteger)pageSize
                            beginTime:(NSDate *)beginTime
                              endTime:(NSDate *)endTime
                           completion:(void (^)(NSArray *alarmList, NSInteger totalCount, NSError *error))completion;

/**
 *  @since 3.3.0
 *  设备设置布防状态,兼容A1和IPC设备的布防
 *
 *  @param defence      布防状态, IPC布防状态只有0和1,A1有0:睡眠 8:在家 16:外出
 *  @param deviceSerial 设备序列号
 *  @param completion   回调block,error为空表示设置成功
 *  @exception 错误码类型:110004、120002、120014、120018,具体参考EZOpenSDK头文件中的EZErrorCode错误码注释
 *
 *  @return operation
 */
+ (NSOperation *)setDeviceDefence:(NSInteger)defence
                     deviceSerial:(NSString *)deviceSerial
                       completion:(void (^)(NSError *error))completion;

/**
 *  @since 3.3.0
 *  打开修改密码中间页
 *
 *  @param completion 回调block resultCode为0时表示修改密码成功
 */
+ (void)openChangePasswordPage:(void (^)(NSInteger resultCode))completion;

V3.4新增加接口

/**
 *  @since 3.4.0
 *  通过设备验证码开关视频图片加密接口
 *
 *  @param isEncrypt    是否加密,只有NO(关闭)的时候需要设备验证码的相关参数(vaildateCode)
 *  @param deviceSerial 设备序列号
 *  @param validateCode 设备验证码
 *  @param completion   回调block,error为空时表示操作成功
 *  @exception 错误码类型:110004、120002、120006、120007、120008、120014、120018,具体参考EZOpenSDK头文件中的EZErrorCode错误码注释
 *
 *  @return operation
 */
+ (NSOperation *)setDeviceEnryptStatusEx:(BOOL)isEncrypt
                            deviceSerial:(NSString *)deviceSerial
                            validateCode:(NSString *)validateCode
                              completion:(void (^)(NSError *))completion;

实体类

EZCameraInfo(设备摄像头信息对象)

/// 此类为摄像头信息对象
@interface EZCameraInfo : NSObject

/// 摄像头Id,设备每次删除添加以后此属性会变化,不建议缓存
@property (nonatomic, copy) NSString *cameraId;
/// 摄像头名称
@property (nonatomic, copy) NSString *cameraName;
/// 通道号
@property (nonatomic) NSInteger channelNo;
/// 设备Id,暂时无特别用处,注意与cameraId区分,很多用户会把它们搞混而造成错误
@property (nonatomic, copy) NSString *deviceId;
/// 设备名称
@property (nonatomic, copy) NSString *deviceName;
/// 设备序列号
@property (nonatomic, copy) NSString *deviceSerial;
/// 设备是否加密
@property (nonatomic) BOOL isEncrypt;
/// 分享状态:0、未分享,1、分享所有者,2、分享接受者(表示此摄像头是别人分享给我的)
@property (nonatomic) NSInteger isShared;
/// 设备在PC端设置的封面地址
@property (nonatomic, copy) NSString *picUrl;
/// 设备在线状态
@property (nonatomic) BOOL isOnline;
/// 设备是否开启活动检测
@property (nonatomic) BOOL isDefence;
/// 视频清晰度:0、流畅,1、均衡,2、高清
@property (nonatomic) NSInteger videoLevel;

@end

EZDeviceInfo(设备添加之后获取设备信息对象,包括获取设备的能力集)

/// 此类为设备信息对象,有完整对象与非完整对象2种情况,非完整对象某些字段为空
@interface EZDeviceInfo : NSObject

/// 设备Id(索引)
@property (nonatomic, copy) NSString *deviceId;
/// 设备序列号
@property (nonatomic, copy) NSString *deviceSerial;
/// 设备全序列号
@property (nonatomic, copy) NSString *fullSerial;
/// 设备名称
@property (nonatomic, copy) NSString *deviceName;
/// v3.3版本中该类型发生改变,请注意:IPC设备的含义是--是否开启活动检测,只有0和1;A1设备中含义--是布防状态,0:睡眠 8:在家 16:外出
@property (nonatomic) NSInteger isDefence;
/// 是否开启加密,获取设备列表(getDeviceList接口)获取的对象没有该字段,只有获取单个设备信息的时候才有该字段
@property (nonatomic) BOOL isEncrypt;
/// 设备状态
@property (nonatomic) NSInteger status;
/// 设备图片
@property (nonatomic, copy) NSString *picUrl;
/// 设备类型
@property (nonatomic, copy) NSString *model;
/// 设备版本号
@property (nonatomic, copy) NSString *deviceVersion;
/// 是否支持布撤防
@property (nonatomic, readonly) BOOL isSupportDefence;
/// 是否支持布撤防计划
@property (nonatomic, readonly) BOOL isSupportDefencePlan;
/// 是否支持对讲
@property (nonatomic, readonly) BOOL isSupportTalk;
/// 是否支持云台控制
@property (nonatomic, readonly) BOOL isSupportPTZ;
/// 是否支持放大
@property (nonatomic, readonly) BOOL isSupportZoom;
/// 是否支持升级
@property (nonatomic, readonly) BOOL isSupportUpgrade;
/// 设备能力集协议,该字段普通用户不需要关心,不必去理解
@property (nonatomic, copy) NSString *supportExtShort;

@end

EZAlarmInfo (设备告警信息对象)

/// 此类为告警信息对象
@interface EZAlarmInfo : NSObject

/// 告警ID
@property (nonatomic, copy) NSString *alarmId;
/// 设备序列号
@property (nonatomic, copy) NSString *deviceSerial;
/// 通道号
@property (nonatomic) NSInteger channelNo;
/// 告警名称
@property (nonatomic, copy) NSString *alarmName;
/// 告警图片
@property (nonatomic, copy) NSString *alarmPicUrl;
/// 告警开始时间
@property (nonatomic, strong) NSDate *alarmStartTime;
/// 告警类型
@property (nonatomic) NSInteger alarmType;
/// 是否已读
@property (nonatomic) BOOL isRead;
/// 告警录像结束时间时间延后偏移量,通过alarmStartTime加上延后偏移量获得告警录像的具体结束时间
@property (nonatomic) NSInteger delayTime;
/// 告警录像开始时间提前偏移量,通过alarmStartTime减去提前偏移量获得告警录像的具体开始时间
@property (nonatomic) NSInteger preTime;

/// 4530 扩展字段
@property (nonatomic, copy) NSString *customerType;
/// 4530 扩展字段
@property (nonatomic, copy) NSString *customerInfo;

@end

EZCloudRecordFile (设备云存储录像文件信息对象)

/// 此类为云存储录像文件对象
@interface EZCloudRecordFile : NSObject

/// 云存储录像文件Id
@property (nonatomic, copy) NSString *fileId;
/// 云存储录像文件开始时间
@property (nonatomic, strong) NSDate *startTime;
/// 云存储录像文件结束时间
@property (nonatomic, strong) NSDate *stopTime;
/// 云存储录像截图地址
@property (nonatomic, copy) NSString *coverPic;
/// 云存储录像下载地址
@property (nonatomic, copy) NSString *downloadPath;
/// 云存储图片加密密码,如果是[NSNull null]或者nil指针则图片不加密
@property (nonatomic, copy) NSString *encryption;

@end

EZDeviceRecordFile(设备SD卡录像文件信息对象)

/// 此类为设备录像文件信息(包含SD卡、后端关联设备的录像)
@interface EZDeviceRecordFile : NSObject

/// 设备录像文件的开始时间
@property (nonatomic, strong) NSDate *startTime;
/// 设备录像文件的结束时间
@property (nonatomic, strong) NSDate *stopTime;

@end

EZAccessToken(授权登录对象)

/// 此类为萤石开放平台授权登录以后的凭证信息
@interface EZAccessToken : NSObject

/// accessToken 登录凭证
@property (nonatomic, copy) NSString *accessToken;
/// accessToken距离过期的秒数,用当前时间加上expire的秒数为过期时间
@property (nonatomic, assign) NSInteger expire;

@end

其他接口(放到设备相关接口中)

/**
 *  透传接口(已经过期,不推荐使用)
 *
 *  @param transferInfo 透传接口信息(JSON字符串)
 *  @param completion   回调block
 *
 *  @return operation
 */
+ (NSOperation *)transferAPI:(NSString *)transferInfo
                  completion:(void (^)(id responseObject, NSError *error))completion;

/**
 *  销毁EZOpenSDK方法
 *
 *  @return YES/NO
 */
+ (BOOL)destoryLib;

/**
 *  获取SDK版本号
 *
 *  @return 版本号
 */
+ (NSString *)getVersion;

接口说明:透传接口主要用来处理一些新的业务,具体使用请参考透传接口文档;
destoryLib是用来销毁EZOpenSDK的对象;
getVersion接口可以获取SDK的版本。

V3.2增加对象

EZLeaveMessage(留言对象)

/// 此类为留言消息对象
@interface EZLeaveMessage : NSObject

/// 消息Id
@property (nonatomic, copy) NSString *id;
/// 设备序列号
@property (nonatomic, copy) NSString *deviceSerial;
/// 设备名称
@property (nonatomic, copy) NSString *deviceName;
/// 留言时长(单位:秒)
@property (nonatomic) NSInteger duration;
/// 留言消息类型:1-语音留言 2-视频留言
@property (nonatomic) NSInteger contentType;
/// 接收or回复:1-用户接收(设备发送)2-用户回复(客户端发送)
@property (nonatomic) NSInteger messageDirection;
/// 发送端类型:1–F1设备 2–Web客户端 3–iPhone客户端 4–iPad客户端 5–android客户端 6–androidPad客户端
@property (nonatomic) NSInteger senderType;
/// 发送端别名
@property (nonatomic, copy) NSString *senderName;
/// 留言封面截图地址
@property (nonatomic, copy) NSString *messagePicUrl;
/// 消息状态:0-未读 1-已读 2-删除
@property (nonatomic) NSInteger status;
/// 云存储服务器地址,目前默认为武汉云存储,格式为:{域名:端口}
@property (nonatomic, copy) NSString *cloudServerUrl;
/// 创建时间
@property (nonatomic, strong) NSDate *createTime;
/// 修改时间
@property (nonatomic, strong) NSDate *updateTIme;

@end

EZProbeDeviceInfo(添加前获取设备信息对象)

/// 此类为查询设备信息对象(设备添加前使用)
@interface EZProbeDeviceInfo : NSObject

/// 展示名称
@property (nonatomic, copy) NSString *displayName;
/// 设备短序列号
@property (nonatomic, copy) NSString *subSerial;
/// 设备长序列号
@property (nonatomic, copy) NSString *fullSerial;
/// 设备在线状态,1-在线,其他-不在线
@property (nonatomic) NSInteger status;
/// 设备图片
@property (nonatomic, copy) NSString *defaultPicPath;
/// 是否支持wifi,0-不支持,1-支持,2-支持带userId的新的wifi配置方式,3-支持smartwifi
@property (nonatomic) NSInteger supportWifi;
/// 设备协议版本
@property (nonatomic, copy) NSString *releaseVersion;
/// 可用于添加的通道数
@property (nonatomic) NSInteger availiableChannelCount;
/// N1,R1,A1等设备关联的设备数
@property (nonatomic) NSInteger relatedDeviceCount;
/// 能力集
@property (nonatomic, copy) NSString *supportExt;

@end

EZDeviceUpgradeStatus(设备升级状态对象)

/// 此类为设备升级状态对象
@interface EZDeviceUpgradeStatus : NSObject

/// 升级进度,仅status_type为升级状态时有效,取值范围为1-100
@property (nonatomic) NSInteger upgradeProgress;
/// 升级状态: 0:正在升级 1:设备重启 2:升级成功 3:升级失败
@property (nonatomic) NSInteger upgradeStatus;

@end

EZDeviceVersion(设备版本信息对象)

/// 此类为设备版本信息对象
@interface EZDeviceVersion : NSObject

/// 当前版本
@property (nonatomic, copy) NSString *currentVersion;
/// 最新版本
@property (nonatomic, copy) NSString *latestVersion;
/// 是否可以更新,注:0-不需要升级 1-需要升级 3-需要升级1.7版本以上
@property (nonatomic) NSInteger isNeedUpgrade;
/// 固件下载地址,只有可以更新时才会有值
@property (nonatomic, copy) NSString *downloadUrl;
/// 更新内容描述
@property (nonatomic, copy) NSString *upgradeDesc;

@end

EZStorageInfo(设备存储介质信息对象)

/// 此类为设备存储信息对象
@interface EZStorageInfo : NSObject

/// 存储介质索引
@property (nonatomic) NSInteger index;
/// 存储介质名称
@property (nonatomic, copy) NSString *name;
/// 存储介质状态,0正常、1存储介质错、2未格式化、3正在格式化
@property (nonatomic) NSInteger status;
/// 存储介质格式化进度
@property (nonatomic) NSInteger formatRate;

@end

EZUserInfo(登录用户信息对象)

/// 此类为用户信息对象
@interface EZUserInfo : NSObject

/// 用户名
@property (nonatomic, copy) NSString *username;
/// 昵称
@property (nonatomic, copy) NSString *nickname;
/// 用户头像地址
@property (nonatomic, copy) NSString *avatarUrl;

@end

V3.3增加对象

EZDetectorInfo(A1关联的探测器对象)

/// 此类为探测器信息对象
@interface EZDetectorInfo : NSObject

/// 探测器序列号
@property (nonatomic, copy) NSString *detectorSerial;
/// 探测器类型
@property (nonatomic, copy) NSString *type;
/// 探测器名称
@property (nonatomic, copy) NSString *typeName;
/// 防区故障状态,0恢复,1产生
@property (nonatomic) NSInteger faultZoneStatus;
/// 电池欠压状态,0恢复,1产生
@property (nonatomic) NSInteger underVoltageStatus;
/// 无线干扰状态,0恢复,1产生
@property (nonatomic) NSInteger wirelessInterferenceStatus;
/// 设备离线状态,0恢复,1产生
@property (nonatomic) NSInteger offlineStatus;

@end

EZOpenSDK枚举值

/* EZOpenSDK的错误定义 */
typedef NS_ENUM(NSInteger, EZErrorCode) {
    EZ_DEVICE_CONNECT_COUNT_LARGEST = 340410, //设备取流连接数量超过最大值
    EZ_DEVICE_TTS_TALKING_TIMEOUT = 360002,   //对讲发起超时
    EZ_DEVICE_QUERY_RECORD_FAILED = 380005,   //远程SD卡搜索录像失败
    EZ_DEVICE_TTS_TALKING = 360010,           //设备正在对讲中
    EZ_DEVICE_IS_PRIVACY_PROTECTING = 380011, //设备隐私保护中
    EZ_DEVICE_CONNECT_COUNT_LIMIT = 380045,   //设备直连取流连接数量过大
    EZ_DEVICE_COMMAND_NOT_SUPPORT = 380047,   //设备不支持该命令
    EZ_DEVICE_CAS_TALKING = 380077,           //设备正在对讲中
    EZ_DEVICE_OFFLINE = 380121,               //设备不在线
    EZ_PLAY_TIMEOUT = 380209,                 //网络连接超时
    EZ_DEVICE_TIMEOUT = 380212,               //设备端网络连接超时
    EZ_DEVICE_BUNDEL_STATUS_ON = 380128,      //设备开启了终端绑定,请到萤石云客户端关闭终端绑定
    EZ_DEVICE_STREAM_LIMIT = 395546,          //设备取流受到限制
    EZ_CLINET_TIMEOUT = 390025,               //同时`390026`手机网络引起的取流超时
    /**
     *  HTTP 错误码
     */
    EZ_HTTPS_SMS_FREQUENTLY = 101041,            //短信发送太频繁,60s一次
    EZ_HTTPS_PARAM_ERROR = 110001,               //请求参数错误
    EZ_HTTPS_ACCESS_TOKEN_INVALID = 110002,      //AccessToken无效
    EZ_HTTPS_REGIST_USER_NOT_EXSIT = 110004,     //注册用户不存在
    EZ_HTTPS_USER_BINDED = 110012,               //第三方账户与萤石账号已经绑定
    EZ_HTTPS_CAMERA_NOT_EXISTS = 120001,         //通道不存在,请检查摄像头设备是否重新添加过
    EZ_HTTPS_DEVICE_NOT_EXISTS = 120002,         //设备不存在
    EZ_HTTPS_DEVICE_NETWORK_ANOMALY = 120006,    //网络异常
    EZ_HTTPS_DEVICE_OFFLINE = 120007,            //设备不在线
    EZ_HTTPS_DEIVCE_RESPONSE_TIMEOUT = 120008,   //设备请求响应超时异常
    EZ_HTTPS_ILLEGAL_DEVICE_SERIAL = 120014,     //不合法的序列号
    EZ_HTTPS_USER_NOT_OWN_THIS_DEVICE = 120018,  //该用户不拥有该设备
    EZ_HTTPS_DEVICE_ADDED_MYSELF = 120017,       //同时`120020`设备已经被自己添加
    EZ_HTTPS_DEVICE_ONLINE_NOT_ADDED = 120021,   //设备在线,未被用户添加
    EZ_HTTPS_DEVICE_ONLINE_IS_ADDED = 120022,    //设备在线,已经被别的用户添加
    EZ_HTTPS_DEVICE_OFFLINE_NOT_ADDED = 120023,  //设备不在线,未被用户添加
    EZ_HTTPS_DEVICE_OFFLINE_IS_ADDED = 120024,   //设备不在线,已经被别的用户添加
    EZ_HTTPS_DEVICE_OFFLINE_IS_ADDED_MYSELF = 120029, //设备不在线,但是已经被自己添加
    EZ_HTTPS_OPERATE_LEAVE_MSG_FAIL = 120202,    //操作留言消息失败
    EZ_HTTPS_DEVICE_BUNDEL_STATUS_ON = 120031,   //同时`106002`错误码也是,设备开启了终端绑定,请到萤石云客户端关闭终端绑定
    EZ_HTTPS_SERVER_DATA_ERROR = 149999,         //数据异常
    EZ_HTTPS_SERVER_ERROR = 150000,              //服务器异常
    /**
     *  接口 错误码(SDK本地校验)
     */
    EZ_SDK_TALK_DOING = 400077,        //对讲进行中,请稍候再试
    EZ_SDK_CAMERAID_NOTEXIST = 400404, //cameraId不存在,请重新获取设备信息
    EZ_SDK_TIMEOUT = 400409,           //取流超时,请检查手机的网络状态
    EZ_SDK_PARAM_ERROR = 400500,       //接口参数错误
    EZ_SDK_STREAM_TIMEOUT = 401011,    //取流连接超时,请检查摄像头的网络状态
};

/* 播放器EZPlayer的状态消息定义 */
typedef NS_ENUM(NSInteger, EZMessageCode) {
    PLAYER_VALIDATE_CODE_CANCEL = -2, //视频加密验证码输入被取消
    PLAYER_NEED_VALIDATE_CODE = -1,   //播放需要安全验证
    PLAYER_REALPLAY_START = 1,        //直播开始
    PLAYER_VIDEOLEVEL_CHANGE = 2,     //直播流清晰度切换中
    PLAYER_STREAM_RECONNECT = 3,      //直播流取流正在重连
    PLAYER_VOICE_TALK_START = 4,      //对讲开始
    PLAYER_VOICE_TALK_END = 5,        //对讲结束
    PLAYER_PLAYBACK_START = 11,       //录像回放开始播放
    PLAYER_PLAYBACK_STOP = 12         //录像回放结束播放
};

/* WiFi配置设备状态 */
typedef NS_ENUM(NSInteger, EZWifiConfigStatus)
{
    DEVICE_WIFI_CONNECTING = 1, //设备正在连接WiFi
    DEVICE_WIFI_CONNECTED = 2, //设备连接WiFi成功
    DEVICE_PLATFORM_REGISTED = 3, //设备注册平台成功
    DEVICE_ACCOUNT_BINDED = 4 //设备已经绑定账户
};

/* 设备ptz命令 */
typedef NS_OPTIONS(NSUInteger, EZPTZCommand) {
    EZPTZCommandLeft            = 1 << 0, //向左旋转
    EZPtzCommandRight           = 1 << 1, //向右旋转
    EZPTZCommandUp              = 1 << 2, //向上旋转
    EZPTZCommandDown            = 1 << 3, //向下旋转
};

/*
 * 设备显示命令
 */
typedef NS_OPTIONS(NSUInteger, EZDisplayCommand)
{
    EZDisplayCommandCenter          = 1 << 0, //显示中间
    EZDisplayCommandLeftRight       = 1 << 1, //左右翻转
    EZDisplayCommandUpDown          = 1 << 2  //上下翻转
};

/**
 *  设备ptz动作命令
 */
typedef NS_ENUM(NSInteger, EZPTZAction){

    EZPTZActionStart = 1, //ptz开始
    EZPTZActionStop = 2  //ptz停止
};

/* 消息状态 */
typedef NS_ENUM(NSInteger, EZMessageStatus)
{
    EZMessageStatusRead = 1,    //已读
};

/* 消息类型 */
typedef NS_ENUM(NSInteger, EZMessageType)
{
    EZMessageTypeAlarm = 1,   //告警类型
    EZMessageTypeLeave,       //留言类型
};

/* 留言消息类型 */
typedef NS_ENUM(NSInteger, EZLeaveMessageType)
{
    EZLeaveMessageTypeAll,    //全部
    EZLeaveMessageTypeVoice,  //语音类
    EZLeaveMessageTypeVideo,  //视频类
};

/* 短信类型 */
typedef NS_ENUM(NSInteger, EZSMSType) {
    EZSMSTypeSecure = 1,     //安全验证
    EZSMSTypeOperate = 2,    //设备操作验证码,比如关闭视频加密操作。
};

设备序列号与验证码(如图所示,位于摄像头机身):

序列号与验证码

results matching ""

    No results matching ""