萤石云视频 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配置
创建一个新的XCode项目,然后导入SDK库libEZOpenSDK.a和公开的头文件(如图所示);
导入openssl依赖库libssl.a、libcrypto.a以及相关的头文件(如图所示);
导入系统依赖库libstdc++.6.0.9、CoreMedia、AudioToolbox、VideoToolbox.framework、GLKit.framework、OpenAL.framework、MobileCoreServices、SystemConfiguration、CoreTelephony、libc++(如图所示);
添加Other Linker Flags -ObjC
注意区分大小写。配置工作完成
功能介绍
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 获取摄像头列表
+ (NSOperation *)getCameraList:(NSInteger)pageIndex pageSize:(NSInteger)pageSize completion:(void (^)(NSArray *cameraList,NSError *error))completion;
说明:通过调用getCameraList,可以得到一个列表(EZCameraInfo对象数组),列表每一项包含一个摄像头的信息。开发者可以通过UITableView将列表展示。
接口位于
EZOpenSDK.h
208行示例Demo代码为
EZCameraTableViewController
1.2 添加设备
说明:需要添加设备时,可以点击界面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.h
848行和363行
示例Demo代码EZDeviceResultViewController
1.3 Wifi一键配置
在上述调用接口probeDeviceInfo
过程中,如果返回的错误码是20023,说明设备还没有联网,这时需要让设备联网,如果是有线设备,需要提示用户插入网线。如果是无线设备,则需要进行wifi配置
开始一键配置需要调用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 设备预览
预览视频的代码参见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 设备回放
回放功能的代码请参考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接入流程
如图所示
- 用户使用SDK初始化后的第一步进行账号对接流程获取accessToken的对象;
- 通过EZOpenSDK的setAccessToken方法向SDK设置AccessToken;
- 然后可以通过设备列表接口获取设备信息;
- 针对设备预览、回放、设备操作(云台控制、设备显示设置)、查看告警列表等功能接口调用;
- 预览成功以后才能抓图、录像、开关声音;
- 语音对讲操作;
- 回放成功以后才能抓图、录像、开关声音;
- WiFi配置之前要先通过设备序列号查询设备是否添加过。
UI版本Demo的接入流程
首先,把Demo工程里的资源文件:
2个Storyboard(AddDevice.storyboard、EZMain.storyboard)、Assets.xcassets的图片资源、还有一个query_loading.gif(注意别忘记引入了)引入到自己的工程下面;接着,把Demo工程里的UIViewControllers文件下的所有ViewController对象文件和CustomCells以及TableViewCells的视图对象文件引入到你的工程,注意重名问题;
然后,把Demo工程里的Global文件下的文件以后Venders(第三方库)引入到自己工程,注意添加第三方库的的依赖文件,Demo工程的Venders里已经包含了EZOpenSDK的静态库和头文件以及依赖的openssl。
编写接入代码:
//获取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是在这里设置:
流程详细说明
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配置流程
/**
* @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;
接口说明:
- 通过获取摄像头列表的接口(支持分页),你可以从萤石云服务器获取当前登录账号的设备列表,你可以根把返回的EZCameraInfo的数组在你的UI展示设备,然后你可以通过cameraId进行预览、设备云存储录像或者SD卡录像列表获取等操作;
- 通过deviceSerial对摄像头列表中的设备进行删除操作、中间页面设置设备。
- 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个必须实现的方法:
消息回调:回调播放器的一些状态;
错误回调:播放器播放失败的错误,用户可以根据错误码判断错误的发生状况
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, //设备操作验证码,比如关闭视频加密操作。
};
设备序列号与验证码(如图所示,位于摄像头机身):