依托云优势,接入你的智能产品
汇云iOS开发文档
1. 用户账号管理
汇云 App SDK 支持手机号码、邮箱、三方平台等多种用户账号类型。
账号类型
手机账号支持密码登录。
邮箱账号支持密码登录。
三方平台登录支持常见的平台账号授权登录,比如微信、QQ、苹果、谷歌、Twitter。
功能说明
在该模块中,您将频繁地调用对象 ZJViewerUser。它是一个单例,存储了当前用户的所有信息及相关的登录注册方法。其数据模型如下表所示:
用户账户信息
字段 | 类型 | 说明 |
userId | NSString | 用户注册账号以后生成的用户id |
phoneNumber | NSString | 用户用手机注册以后使用的手机号 |
NSString | 用户用邮箱注册以后使用的邮箱号 | |
thirdType | Int | 三方平台登录类型 |
thirdId | NSString | 三方平台登录以后产生的id |
thirdToken; | NSString | 三方平台登录以后产生的token |
用户公开信息: | ||
字段 | 类型 | 说明 |
isMarried | BooL | 是否已婚 |
sex | Int | 性别 |
phoneNumber | NSString | 手机号 |
NSString | 邮箱 | |
address | NSString | 地址 |
birthday | NSString | 生日 |
city | NSString | 城市 |
country | NSString | 国家 |
VMid | NSString | |
nickName | NSString | 昵称 |
provice | NSString | 省份 |
photoProfile | NSString | 照片档案 |
2. 设备管理
设备管理主要提供设备相关的操作,包含设备状态变化监听、设备重命名、设备固件升级、设备移除、设备网络设置等操作。
功能说明
设备管理相关类:
类名 | 说明 |
ZJViewerDevice | 设备信息配置管理 |
ZJViewerGroup | 组内设备的管理 |
ZJViewerGroupManager | 组信息管理 |
ZJ_DeviceDesc | 设备数据类型 |
初始化设备
根据设备ID去初始化设备控制类,错误的设备 ID 可能会导致初始化失败,此时设备的实例返回 nil。
接口说明
/**
* 初始化对象
*
* @param deviceId 设备id
*/
- (instancetype)initWithDeviceId:(NSString *)deviceId;
示例代码
ZJViewerDevice *viwerDevice = [[ZJViewerDevice alloc] initWithDeviceId:did];
代理注册
ZJViewerSDK* viewer = [ZJViewerSDK defaultViewer];
viewer.deviceDelegate = self;
代理监听
实现 ZJViewerDeviceDelegate代理协议后,您可以在设备状态更变的回调中进行处理,刷新 App 设备控制面板的 UI。
示例代码
- (void)onDeviceCfgChange:(NSString *)deviceId DevCfgItem:(EN_ZJ_VIEWER_DEVCFG_ITEM)devCfgItem; {
// 设备配置信息更新,比如 设备名称修改、网络设置等
}
- (void)onDeviceStatusGroupId:(NSString *)groupId DeviceId:(NSString *)deviceId StateChange:(EN_ZJ_VIEWER_DEVICE_STATUS)state {
// 设备在线状态发生变化回调
}
初始化组
根据组ID去初始化组控制类,错误的组 ID 可能会导致初始化失败,此时组的实例返回 nil。组 ID 是通过ZJViewerGroupManager单例获取组列表遍历获取或者直接从ZJ_DeviceInfo模型下的groupId获取。
接口说明
/**
* 初始化对象
*
* @param groupId 组id
*/
- (instancetype)initWithGroupId:(NSString *)groupId;
示例代码
ZJViewerGroup *viewerGroup = [[ZJViewerGroup alloc] initWithGroupId:groupId];
查询设备信息
查询设备的配置信息,- (ZJ_DeviceInfo *)getDeviceInfo;
示例代码
ZJ_DeviceInfo *deviceInfo = [viwerDevice getDeviceInfo];
修改设备名称
/**
* 设置设备名称
*
* @param name 设备名称
*
* @return ZJTask *
*/
- (ZJTask *)setDeviceName:(NSString*)name
success:(ZJSuccessHandler)success
failure:(ZJFailureError)failure;
参数说明
参数 | 说明 |
name | 设备名称 |
success | 成功回调 |
failure | 失败回调 |
示例代码
[viwerDevice setDeviceName:name success:^{
NSLog(@"updateName success");
} failure:^(NSError *error) {
NSLog(@"updateName failure: %@", error);
}];
移除设备
设备被移除后,会是无主状态,在设备同一局域网下,可以通过局域网搜索添加。
接口说明
/**
* 删除设备
*
* @param deviceId 设备Id
*
* @return 请求Id
*/
- (ZJTask *)removeDevice:(NSString*)deviceId
success:(ZJSuccessHandler)success
failure:(ZJFailureError)failure;
参数说明
参数 | 说明 |
deviceId | 设备ID |
success | 成功回调 |
failure | 失败回调 |
示例代码
[viewerGroup removeDevice:did success:^{
NSLog(@"removeDevice success");
} failure:^(NSError *error) {
NSLog(@"removeDevice failure: %@", error);
}];
获取设备网络信息
查询设备当前配置的网络信息,回调返回ZJ_NetworkInfo模型
接口说明
/**
* 获取设备当前网络信息
*
* @return ZJTask *
*/
- (ZJTask *)getCurNetworkInfo:(ZJCurNetworkInfoSuccess)success
failure:(ZJFailureError)failure;
参数说明
参数 | 说明 |
success | 成功回调,返回ZJ_NetworkInfo模型,为当前网络信息 |
failure | 失败回调 |
示例代码
[viwerDevice getCurNetworkInfo:^(ZJ_NetworkInfo * _Nonnull networkInfo) {
NSLog(@"getCurNetworkInfo success");
} failure:^(NSError * _Nonnull errorCode) {
NSLog(@"getCurNetworkInfo failure: %@", error);
}];
3. 设备配网
汇云 App SDK 提供了把摄像机设备配置上路由器或网关的能力。以常见的 Wi-Fi直连配网为例,SDK 从云端获取配网 Token,再经由 App 来广播配网信息(路由 ID、密码、配网 Token)。智能设备接收到后,开始快速激活,同时连接到 App 和云端,开启设备上云的第一步。
配网方式
设备配网支撑的具体能力包括:
Wi-Fi设备配网:
Wi-Fi直连配网
AP热点配网
摄像头扫二维码配网
有线设备配网
名词解释
名词 | 说明 |
Wi-Fi设备 | 采用Wi-Fi 模组连接路由器,和 App 以及云端进行数据交互的智能设备。 |
Wi-Fi直连配网 | APP通过直连AP热点,然后下发ssid和密码给设备进行配网。 |
AP热点配网 | APP先连接设备AP热点,建立一个socket连接,然后APP给设备下发Wi-Fi数据进行配网。 |
摄像头扫二维码配网 | 摄像头设备通过扫描 App 上的二维码,来获取配网数据信息进行配网。 |
有线配网 | 通过有线网络连接路由器的设备。 |
功能说明
类名 | 说明 |
ZJAPActivator | 提供Wi-Fi直连配网 |
ZJAPDirectActivator | 提供AP热点配网 |
ZJQRActivator | 提供摄像头扫二维码配网 |
iOS 14 版本适配
从 iOS 14 版本开始,在设备配网、局域网本地控制时会触发 本地网络 权限弹窗。
如果用户点击了允许,App 才能够向本地局域网发送数据。
如果用户点击了拒绝,将无法使用相关功能。
目前苹果没有提供任何 API 对此权限进行判断,建议您在相关功能无法正常使用时提示、引导用户检查 系统设置 中的 app设置,确认是否开启了 本地网络 权限。
iOS 13 版本适配
从 iOS 13 版本开始,如果用户没有开启地理位置权限,在已开启 Wi-Fi 权限的前提下,将获取不到有效的 Wi-Fi SSID 或 BSSID。请确认 App 是否添加地理位置权限并开启。
4. 视频管理
视频管理主要是通过ZJ_MediaRenderView类来实现视频的操作管理,包括实时视频、录像回放、视频下载等。
功能说明
类名 | 说明 |
ZJ_MediaRenderView | 播放器类,主要负责视频播放的相关管理 |
播放器初始化
根据设备ID、放置播放器的视图、镜头校正模式去初始化设备控制类,错误的设备 ID可能会导致初始化失败,此时播放器的实例返回 nil。
接口说明
/**
* 初始化一路视频流
*
* @param deviceId 设备ID
* @param targetView 展示view
* @param mode 鱼眼镜头矫正模式
*
* @return ZJ_MediaRenderView *
*/
- (id)initStreamWithDevice:(NSString*)deviceId
TargetView:(UIView *)targetView
VRMode:(ZJ_VRMode)mode;
参数说明
参数 | 说明 |
deviceId | 设备ID |
targetView | 展示播放器的view |
mode | 校正模式,普通摄像机用ZJ_VRModeNone |
示例代码
ZJ_MediaRenderView *renderView = [[ZJ_MediaRenderView alloc] initStreamWithDevice:deviceId TargetView:renderView VRMode: ZJ_VRModeNone];
打开实时视频
在初始化播放器完成以后,就可以通过启动流接口打开播放器来观看实时视频。
接口说明
/**
* 启动实时视频流
*
* @param streamIndex 流的index
* @param streamChannelCreatedBlock 流通到创建成功回调
* @param firstVideoFrameShowBlock 第一帧视频显示回调
* @param playEndedBlock 播放结束回调
*/
- (void)startRealTimeStreamOnStreamIndex:(int)streamIndex
StreamChannelCreated:(ZJ_RenderCompletionBlock)streamChannelCreatedBlock
FirstVideoFrameShow:(ZJ_RenderCompletionBlock)firstVideoFrameShowBlock
PlayEnded:(ZJ_RenderFinishedBlock)playEndedBlock;
参数说明
参数 | 说明 |
streamIndex | 当前播放的的流id (0 超清、 1 高清) |
streamChannelCreatedBlock | 视频连接,流通道创建成功回调,一般不在内部做操作 |
firstVideoFrameShowBlock | 获取到视频第一帧画面的时候回调,一些操作可在该回调执行 |
playEndedBlock | 视频播放完成/出错会执行此回调 |
示例代码
[renderView startRealTimeStreamOnStreamIndex:streamIndex StreamChannelCreated:^{
// 创建流通到成功
} FirstVideoFrameShow:^{
// 获取第一帧视频成功
} PlayEnded:^(NSError * _Nonnull error) {
// 播放结束/播放失败
}];
打开录像视频
录像视频分为本地录像视频和云端录像视频。
接口说明
/**
* 启动设备端录像视频流
*
* @param startTime 录像的开始时间点 yyyy-MM-dd HH:mm:ss
* @param streamChannelCreatedBlock 流通到创建成功回调
* @param firstVideoFrameShowBlock 第一帧视频显示回调
* @param playEndedBlock 播放结束回调
* @param timeStampChangedBlock 播放录像时时间戳变化回调
*/
-(void)startRecordStreamOnStartTime:(NSString *)startTime
StreamChannelCreated:(ZJ_RenderCompletionBlock)streamChannelCreatedBlock
FirstVideoFrameShow:(ZJ_RenderCompletionBlock)firstVideoFrameShowBlock
PlayEnded:(ZJ_RenderFinishedBlock)playEndedBlock
TimeStampChanged:(ZJ_RenderTimeStampChangedBlock)timeStampChangedBlock;
参数说明
参数 | 说明 |
startTime | 录像的开始时间点 yyyy-MM-dd |
streamChannelCreatedBlock | 视频连接,流通道创建成功回调,一般不在内部做操作 |
firstVideoFrameShowBlock | 获取到视频第一帧画面的时候回调,一些操作可在该回调执行 |
playEndedBlock | 视频播放完成/出错会执行此回调 |
timeStampChangedBlock | 录像视频时间戳变化的回调 |
示例代码
[renderView startRecordStreamOnStartTime:(NSString *)startTime
StreamChannelCreated::streamIndex StreamChannelCreated:^{
// 创建流通到成功
} FirstVideoFrameShow:^{
// 获取第一帧视频成功
} PlayEnded:^(NSError * _Nonnull error) {
// 播放结束/播放失败
}];
接口说明
/**
* 启动云端录像视频流
*
* @param startTime 录像的开始时间点 yyyy-MM-dd
* @param streamChannelCreatedBlock 流通到创建成功回调
* @param firstVideoFrameShowBlock 第一帧视频显示回调
* @param playEndedBlock 播放结束回调
* @param timeStampChangedBlock 播放录像时时间戳变化回调
*/
-(void)startCloudStreamOnStartTime:(NSString *)startTime
StreamChannelCreated:(ZJ_RenderCompletionBlock)streamChannelCreatedBlock
FirstVideoFrameShow:(ZJ_RenderCompletionBlock)firstVideoFrameShowBlock
PlayEnded:(ZJ_RenderFinishedBlock)playEndedBlock
TimeStampChanged:(ZJ_RenderTimeStampChangedBlock)timeStampChangedBlock;
参数说明
参数 | 说明 |
startTime | 录像的开始时间点 yyyy-MM-dd |
streamChannelCreatedBlock | 视频连接,流通道创建成功回调,一般不在内部做操作 |
firstVideoFrameShowBlock | 获取到视频第一帧画面的时候回调,一些操作可在该回调执行 |
playEndedBlock | 视频播放完成/出错会执行此回调 |
timeStampChangedBlock | 录像视频时间戳变化的回调 |
示例代码
[renderView startCloudStreamOnStartTime:(NSString *)startTime
StreamChannelCreated::streamIndex StreamChannelCreated:^{
// 创建流通到成功
} FirstVideoFrameShow:^{
// 获取第一帧视频成功
} PlayEnded:^(NSError * _Nonnull error) {
// 播放结束/播放失败
}];
切换视频流
在观看实时视频的时候进行视频分辨率的切换(0 超清 1 高清)。
接口说明
/**
* 切换流
*
* @param deviceId 设备ID
* @param streamIndex 流的id(0 超清 1 高清)
* @param streamChannelCreatedBlock 流通到创建成功回调
* @param firstVideoFrameShowBlock 第一帧视频显示回调
* @param playEndedBlock 播放结束回调
*/
- (void)switchStreamWithDevice:(NSString*)deviceId
StreamIndex:(int)streamIndex
OnStreamChannelCreated:(ZJ_RenderCompletionBlock)streamChannelCreatedBlock
FirstVideoFrameShow:(ZJ_RenderCompletionBlock)firstVideoFrameShowBlock
PlayEnded:(ZJ_RenderFinishedBlock)playEndedBlock;
参数说明
参数 | 说明 |
deviceId | 录像的开始时间点 yyyy-MM-dd |
streamIndex | 流id(0 超清 1 高清) |
streamChannelCreatedBlock | 视频连接,流通道创建成功回调,一般不在内部做操作 |
firstVideoFrameShowBlock | 获取到视频第一帧画面的时候回调,一些操作可在该回调执行 |
playEndedBlock | 视频播放完成/出错会执行此回调 |
示例代码
[renderView switchStreamWithDevice:_deviceId StreamIndex:streamId OnStreamChannelCreated:^{
// 流通道创建成功
} FirstVideoFrameShow:^{
// 获取第一帧视频成功
} PlayEnded:^(NSError * _Nonnull error) {
// 播放结束/播放失败
}];
停止视频播放
对视频流进行关闭操作,停止视频播放。
接口说明
/**
* 停止视频播放
*/
- (void)stopStream;
示例代码
[renderView stopStream];
5. 快速集成
本主题介绍如何手动将汇云 iOS App SDK快速集成到您的项目中。汇云SDK 要求 iOS 版本不低于 9.0。
集成SDK
创建新工程,将ZJ_Viewer.framework拖入项目工程中,并确保在General->frameworks,Libraries,and Embedded Content下添加库,设置APP权限(相机、相册、麦克风、定位)
初始化SDK
打开AppDelegate.m文件,在[AppDelegate application:didFinishLaunchingWithOptions:]方法中初始化SDK并启动SDK:
初始化调用接口
接口1:默认正式环境
/**
* 初始化 SDK 工作环境
*
* @param configPath SDK 工作配置路径
* @param cachePath SDK 缓存路径
* @param companyID 企业ID
* @param appID AppID
*
* @return 0 代表成功,非0代表失败
*/
- (NSInteger)initViewerWithConfigPath:(NSString*)configPath CachePath:(NSString*)cachePath CompanyID:(NSString*)companyID AppID:(NSString*)appID;
接口2:可切换SDK环境
/**
* 初始化 SDK 工作环境
*
* @param configPath SDK 工作配置路径
* @param cachePath SDK 缓存路径
* @param companyID 企业ID
* @param appID AppID
* @param environment 设置SDK 服务器环境类型
*
* @return 0 代表成功,非0代表失败
*/
- (NSInteger)initViewerWithConfigPath:(NSString *)configPath CachePath:(NSString *)cachePath CompanyID:(NSString *)companyID AppID:(NSString *)appID environment:(EN_ZJ_VIEWER_ENVIRONMENT)environment;
注意事项】
configPath:SDK工作配置路径
cachePath:SDK 缓存路径
companyID和appID在智周云管理后台注册申请:http://console.smartcloudcon.com/login/login.htm
environment :服务器环境切换
实例代码:
[[ZJViewerSDK defaultViewer] initViewerWithConfigPath:[HYPCommonUtility getSDKWorkPath] CachePath:[HYPCommonUtility getSDKCachePath] CompanyID:KCompanyID AppID:KAppID environment:envi];
打开Debug模式
在开发的过程中可以开启 Debug 模式,打印一些日志用于分析问题。
#if defined(DEBUG)
[[ZJViewerSDK defaultViewer] setLogEnabled:YES];
#endif
启动SDK
调用接口
/**
* SDK启动
*
* @return 0 代表成功,非0代表失败
*/
- (NSInteger)start;
实例代码:
[[ZJViewerSDK defaultViewer] start];
控制台日志获取
/**
* 打印log
*
* @param logLevel 日志级别
* @param format 日志格式化字符串
*/
- (void)logWithLogLevel:(EN_ZJ_LOG_LEVEL)logLevel LogFormat:(NSString *)format, ...;
6. 集成Push
基于 汇云 SDK 开发的 App,汇云 平台支持 Push 功能,支持给用户发送运营 Push 和产品的告警 Push。
Xcode配置
点击 Xcode 项目 - TARGETS - Signing & Capabilities, 添加 Push Notifications 选项。
设置推送
除了在AppDelegate实现原生推送的相关操作外,还要在didRegisterForRemoteNotificationsWithDeviceToken方法中调用汇云 APP SDK的设置推送接口。
推送相关的类
类名
说明
ZJViewerUser
用户管理的类,通过单例管理
接口说明
/**
* 设置推送,例如客户端接收网络摄像机的报警推送
*
* @param token 推送token
* @param pushPlatForm 推送平台
* @param language 语言
*
* @return ZJTask *
*/
- (ZJTask *)setPushToken:(NSString*)token
PushPlatForm:(ZJ_VIEWER_PUSH_PLATFORM)pushPlatForm
Language:(EN_ZJ_VIEWER_LANGUAGE)language
success:(ZJSuccessHandler)success
failure:(ZJFailureError)failure;
参数说明
参数
说明
token
AppDelegate中的代理回调的token
pushPlatForm
推送平台(2 是iOS的)
language
推送语言类型
success
成功回调
failure
失败回调
示例代码
ZJViewerUser * viwerUser = [ZJViewerUser defaultUser];
[viwerUser setPushToken:token PushPlatForm:ZJ_VIEWER_PUSH_PLATFORM_IOS Language:[HYPCommonUtility getLanuageCode] success:^{
// 设置推送成功
} failure:^(NSError * _Nonnull errorCode) {
// 设置推送失败
}];
7. 错误码
宏定义 | 错误码 | 描述 |
EN_ZJ_VIEWER_ERROR | -1 | |
EN_ZJ_VIEWER_ERR_PARAM | -2 | |
EN_ZJ_VIEWER_ERR_NOMEM | -3 | |
EN_ZJ_VIEWER_ERR_NOINIT | -4 | |
EN_ZJ_VIEWER_ERR_NORES | -5 | |
EN_ZJ_VIEWER_ERR_OVERFLOW | -6 | |
EN_ZJ_VIEWER_ERR_MAGIC_N | -7 | |
EN_ZJ_VIEWER_ERR_KEY_UNEXIST | -8 | |
EN_ZJ_VIEWER_ERR_FILE_EXIST | -9 | |
EN_ZJ_VIEWER_ERR_AUTHORITY | -10 | |
EN_ZJ_VIEWER_ERR_CLOSE | -11 | |
EN_ZJ_VIEWER_ERR_SUPPORT | -12 | |
EN_ZJ_VIEWER_ERR_NOADDR | -13 | |
EN_ZJ_VIEWER_ERR_FREQUENTLY | -14 | |
EN_ZJ_VIEWER_ERR_TRYAGAIN | -15 | |
EN_ZJ_VIEWER_ERR_FULL | -16 | |
EN_ZJ_VIEWER_ERR_NET | -80 | |
EN_ZJ_VIEWER_ERR_TIMEOUT | -83 | |
EN_ZJ_VIEWER_DES_CHANGE | -100 | |
EN_ZJ_VIEWER_ERR_FILEEND | -101 | |
EN_ZJ_VIEWER_ERR_FILEWAIT | -102 | |
EN_ZJ_VIEWER_ERR_EXIST | -110 | 已存在 |
EN_ZJ_VIEWER_SUCESS | 0 | 请求成功 |
EN_ZJ_VIEWER_ERR_SDK_CHARACTER | 1001 | 配置WiFi时,传入SSID有无效字符 |
EN_ZJ_VIEWER_ERR_SDK_NO_WIFI_MODULE | 1002 | 查询WiFi列表,设备没有WiFi模块 |
EN_ZJ_VIEWER_ERR_SDK_WIFI_ISCLOSE | 1003 | 查询WiFi列表,WiFi模块关闭 |
EN_ZJ_VIEWER_ERR_SVR_SIGN_NO_SVR_DISTRI | 1101 | SIGN分配服务时,没有可分配服务 |
EN_ZJ_VIEWER_ERR_SVR_FREQUENT_OPERATION | 1103 | 访问频繁 |
EN_ZJ_VIEWER_ERR_SVR_COMPANYID_INVALID | 1111 | 鉴权的企业ID不存在 |
EN_ZJ_VIEWER_ERR_SVR_COMPANY_NO_PRIVILEGE | 1112 | 鉴权的企业ID对应的企业被平台禁用 |
EN_ZJ_VIEWER_ERR_SVR_APPID_INVALID | 1113 | 鉴权传入的AppID在企业下不存在 |
EN_ZJ_VIEWER_ERR_SVR_APPID_NO_PRIVILEGE | 1114 | 鉴权传入的AppID被企业/平台禁用 |
EN_ZJ_VIEWER_ERR_SVR_LICENSENOTEXIST | 1115 | 传入授权的CTEI码没有找到 |
EN_ZJ_VIEWER_ERR_SVR_LICENSEEXPIRE | 1116 | 传入授权的CTEI码已经过期 |
EN_ZJ_VIEWER_ERR_SVR_LICENSEDISABLE | 1117 | 授权用的CTEI码被平台禁用 |
EN_ZJ_VIEWER_ERR_SVR_APPHAVENOLICENSECOUNT | 1118 | 按量授权的AppID下无可用的授权数量 |
EN_ZJ_VIEWER_ERR_SVR_DEVICENOTHERE | 1121 | 设备登陆传入的设备ID无效,设备收到该错误码,重新注册新的ID |
EN_ZJ_VIEWER_ERR_SVR_DEVICEDISABLE | 1122 | 该设备被平台禁用,设备无法上云 |
EN_ZJ_VIEWER_ERR_SVR_DEVICE_VERSION_DISABLE | 1123 | 设备版本太旧,系统不再兼容。设备此时需要进行升级 |
EN_ZJ_VIEWER_ERR_SVR_DEVICESVR_CALL_FAILED | 1131 | 设备配置管理系统访问报错 |
EN_ZJ_VIEWER_ERR_SDK_DEVICE_NO_BUSI_CONFIG | 1141 | 设备尚未上传业务配置 |
EN_ZJ_VIEWER_ERR_SDK_RESOLUTION_ABILITY_NOT_SUPPORT | 1142 | 设置的设备分辨率,当前设备不支持 |
EN_ZJ_VIEWER_ERR_SDK_RESOLUTION_BUSI_NOT_SUPPORT | 1143 | 设置的设备分辨率,可能因业务限制不支持(授权限制) |
EN_ZJ_VIEWER_ERR_SDK_PTZ_ISMAX | 1144 | 设备执行PTZ已经转到最大值 |
EN_ZJ_VIEWER_ERR_SDK_EXITGROUP_ERR | 1146 | 设备要出的组,不是设备当前的组,出组失败 |
EN_ZJ_VIEWER_ERR_SDK_SDCARD_FORMATTING_ERR | 1148 | 设备格式化SD失败 |
EN_ZJ_VIEWER_ERR_SDK_SDCARD_NOT_EXIST | 1149 | 格式化SD卡时,SD卡不存在 |
EN_ZJ_VIEWER_ERR_SDK_SDCARD_WR_ERR | 1150 | 读写SD卡时,操作失败 |
EN_ZJ_VIEWER_ERR_SDK_ADD_CHILD_DEVICE_TIMEOUT | 1151 | 添加HUB子设备时,通信超时,失败 |
EN_ZJ_VIEWER_ERR_SDK_CHILD_DEVICE_EXIST | 1152 | 添加HUB子设备时,设备ID重复 |
EN_ZJ_VIEWER_ERR_SDK_HUB_OPT_ERR | 1153 | HUB发生异常,操作失败 |
EN_ZJ_VIEWER_ERR_SDK_QUERY_RECORD_NO_PRIVILEGE | 1154 | 当前查询记录没有操作权限 |
EN_ZJ_VIEWER_ERR_SVR_CLOUDSVR_CALL_FAILED | 1155 | 无法访问当前云存记录服务 |
EN_ZJ_VIEWER_ERR_SDK_LOCAL_RECORD_NOT_EXIST | 1156 | 当前查询详情的本地记录文件已被清理 |
EN_ZJ_VIEWER_ERR_SDK_CLOUD_FILE_EXPIRE | 1157 | 当前查询的云记录文件已经过期 |
EN_ZJ_VIEWER_ERR_BINDCODE_EXIST | 1158 | 绑定码已存在 |
EN_ZJ_VIEWER_ERR_BINDCODE_NOT_EXIST | 1159 | 绑定码不存在 |
EN_ZJ_VIEWER_ERR_BINDCODE_EXPIRE | 1160 | 绑定码已过期 |
EN_ZJ_VIEWER_ERR_BINDCODE_USED | 1161 | 绑定码已使用 |
EN_ZJ_VIEWER_ERR_SVR_ACCOUNT_ISEXIST | 2001 | 账号已存在 |
EN_ZJ_VIEWER_ERR_SVR_REG_OTHER_ERR | 2003 | 其他注册失败原因 |
EN_ZJ_VIEWER_ERR_SVR_ACCOUNT_NOTEIXST | 2004 | 账号不存在 |
EN_ZJ_VIEWER_ERR_SVR_USER_ACCOUNT_PWD_ERR | 2005 | User登录账号密码错误 |
EN_ZJ_VIEWER_ERR_SVR_VERIFY_OPENID_ERR | 2006 | 第三方登陆时,第三方校验失败 |
EN_ZJ_VIEWER_ERR_SVR_ACCOUNT_FORBIDDEN | 2007 | 登陆时,发现账户已经被禁用 |
EN_ZJ_VIEWER_ERR_SVR_UTOKEN_NOTEXIST | 2008 | UTOKEN不存在 |
EN_ZJ_VIEWER_ERR_SVR_SMSCODE_FREQUENT | 2009 | 两次获取短信验证码时间过短,返回失败 |
EN_ZJ_VIEWER_ERR_SVR_USER_REJECT_INVITE | 2010 | 给用户发送分享邀请,被邀请者拒绝 |
EN_ZJ_VIEWER_ERR_SVR_GTOKENNOTMATCH | 2011 | 通过Gtoken入组,Gtoken失效 |
EN_ZJ_VIEWER_ERR_SVR_DEVICEISINGROUP | 2012 | 添加设备进组时失败,设备已经加入了另一个组 |
EN_ZJ_VIEWER_ERR_SVR_USERNOPRIVILEGE | 2013 | 用户无操作权限 |
EN_ZJ_VIEWER_ERR_SVR_ACCOUNT_TYPE_NOT_SUPPORT | 2014 | 获取短信验证码时,不支持手机邮箱以外的方式获取 |
EN_ZJ_VIEWER_ERR_SVR_ACCOUNT_FORMAT_ERR | 2015 | 账号格式错误 |
EN_ZJ_VIEWER_ERR_SVR_ACCOUNT_ALREADY_BIND | 2016 | 账号已被绑定 |
EN_ZJ_VIEWER_ERR_SVR_ACCOUNT_BIND_ERR | 2017 | 绑定账号错误 |
EN_ZJ_VIEWER_ERR_SVR_FILEID_NOT_EXIST | 2018 | 云存储文件ID不存在 |
EN_ZJ_VIEWER_ERR_SVR_4GCARDNO_NOT_EXIST | 2020 | 4G卡号不存在 |
EN_ZJ_VIEWER_ERR_SVR_4GCARDNO_REPORT_ERR | 2021 | 4G卡号汇报失败 |
EN_ZJ_VIEWER_ERR_SVR_APPID_NOTFOUND_TEMPLATE | 2027 | APPID未找到对应的短信/ems模板 |
EN_ZJ_VIEWER_ERR_SVR_SMS_SEND_FREQUENCY_LIMIT | 2033 | 单个手机号码在规定时间内短信发送达到上限 |
ERR_ZJ_VIEWER_ERR_ERR_ERR_SVR_TEMPAUTH_SHARE_ERR | 2201 | 分享失败 |
ERR_ZJ_VIEWER_ERR_ERR_SVR_TEMPAUTH_QRCODE_INVALID | 2202 | 无效的二维码 |
ERR_ZJ_VIEWER_ERR_SVR_TEMPAUTH_REMOVE_ERR | 2203 | 设备出组失败 |
EN_ZJ_VIEWER_ERR_SVR_VERIFICATION_CODE_NOTEXIST | 2207 | 验证码不存在 |
EN_ZJ_VIEWER_ERR_SVR_DEVICE_P2P_NOT_SUPPORT | 3001 | 当用户向设备请求P2P时,设备返回不支持P2P |
EN_ZJ_VIEWER_ERR_SVR_CONN_NOT_MATCH | 3002 | 用户与设备的P2P连接校验不匹配 |
EN_ZJ_VIEWER_ERR_SVR_MEDIA_MATCH_TIMEOUT | 3003 | 用户和设备在MEDIA上配对超时 |
EN_ZJ_VIEWER_ERR_SVR_MEDIA_CHANNEL_NOTEXIST | 3004 | 媒体操作时,对应的ChannelID不存在 |
EN_ZJ_VIEWER_ERR_SVR_MEDIA_PLAY_UPPER_LIMIT | 3005 | 点播流媒体时,人数超上限 |
EN_ZJ_VIEWER_ERR_SVR_MEDIA_INVALID | 3006 | 流媒体服务时,资源过期或无效 |
EN_ZJ_VIEWER_ERR_SVR_MALLOC_ERR | 4001 | 服务申请内存对象错误 |
EN_ZJ_VIEWER_ERR_SVR_JSON_DECODE_ERR | 4002 | 服务解析JSON协议错误 |
EN_ZJ_VIEWER_ERR_SVR_JSON_ENCODE_ERR | 4003 | 服务构造JSON字符串错误 |
EN_ZJ_VIEWER_ERR_SVR_API_PARAM_ERR | 4004 | API调用参数错误 |
EN_ZJ_VIEWER_ERR_SVR_METHOD_ERR | 4005 | API返回NIL |
EN_ZJ_VIEWER_ERR_SVR_ENCRYPT_ERR | 4006 | 协议加密错误 |
EN_ZJ_VIEWER_ERR_SVR_DECRYPT_ERR | 4007 | 协议解密错误 |
EN_ZJ_VIEWER_ERR_SVR_BUFREAD_ERR | 4008 | 链接读取BUFFER错误 |
EN_ZJ_VIEWER_ERR_SVR_TLS_PEMKEY_ERR | 4009 | TLS链接找不到PEM KEY文件错误 |
EN_ZJ_VIEWER_ERR_SVR_AUTHATOKEN_ERR | 4010 | 服务器之间访问调用 ATOKEN出错 |
EN_ZJ_VIEWER_ERR_SVR_REDIS_PUB_ERR | 4011 | Redis服务访问错误 |
EN_ZJ_VIEWER_ERR_SVR_DB_CONNECT_ERR | 4012 | 数据库连接失败 |
EN_ZJ_VIEWER_ERR_SVR_DB_INSERT_ERR | 4013 | 数据库数据插入失败 |
EN_ZJ_VIEWER_ERR_SVR_DB_SELECT_ERR | 4014 | 数据库数据查询失败 |
EN_ZJ_VIEWER_ERR_SVR_DB_UPDATE_ERR | 4015 | 数据库数据更新失败 |
EN_ZJ_VIEWER_ERR_SVR_DB_DELETE_ERR | 4016 | 数据库数据删除失败 |
EN_ZJ_VIEWER_ERR_SVR_DB_NORECORD_ERR | 4017 | 没有找到相关记录 |
EN_ZJ_VIEWER_ERR_SVR_DB_DUPLICATE_KEY | 4018 | 主键重复 |
EN_ZJ_VIEWER_ERR_SVR_NET_LISTEN_ERR | 4019 | 服务端口侦听错误 |
EN_ZJ_VIEWER_ERR_SVR_CLOSED | 4020 | 服务关闭错误 |
EN_ZJ_VIEWER_ERR_SVR_IDSVR_NOT_FOUND | 4021 | IDSVR服务找不到 |
EN_ZJ_VIEWER_ERR_SVR_IDSTUNSVR_NOT_FOUND | 4022 | IDSTUN服务找不到 |
EN_ZJ_VIEWER_ERR_SVR_BUSISVR_NOT_FOUND | 4023 | BUSICENTRE服务找不到 |
EN_ZJ_VIEWER_ERR_SVR_MEDIASVR_NOT_FOUND | 4024 | 媒体服务找不到 |
EN_ZJ_VIEWER_ERR_SVR_LINKSVR_NOT_FOUND | 4025 | LINK服务找不到 |
EN_ZJ_VIEWER_ERR_SVR_USERSVR_CALL_FAILED | 4026 | 用户系统接口调用失败 |
EN_ZJ_VIEWER_ERR_SVR_IDSVR_CALL_FAILED | 4027 | IDSVR系统接口调用失败 |
EN_ZJ_VIEWER_ERR_SVR_IDSTUN_CALL_FAILED | 4028 | IDSTUN系统接口调用失败 |
EN_ZJ_VIEWER_ERR_SVR_PUSHSVR_NOT_FOUND | 4029 | 推送服务找不到 |
EN_ZJ_VIEWER_ERR_SVR_GATEWAYSVR_CALL_FAILED | 4030 | 网关服务调用失败 |
EN_ZJ_VIEWER_ERR_SVR_COMPMNGSVR_CALL_FAILED | 4031 | 企业后台服务调用失败 |
EN_ZJ_VIEWER_ERR_SVR_PUBSUBSVR_NOT_FOUND | 4032 | 订阅发布服务找不到 |
EN_ZJ_VIEWER_ERR_SVR_SYSNOTICESVR_NOT_FOUND | 4033 | sysnotice找不到 |
EN_ZJ_VIEWER_ERR_SVR_GATEWAYSVR_NOT_FOUND | 4034 | 网关服务找不到 |
EN_ZJ_VIEWER_ERR_SVR_HTTPSVR_NOT_FOUND | 4035 | http服务找不到 |
EN_ZJ_VIEWER_ERR_SVR_HTTPSVR_CALL_FAILED | 4036 | http服务调用失败 |
EN_ZJ_VIEWER_ERR_SVR_BUSISVR_CALL_FAILED | 4037 | busicentre调用失败 |
EN_ZJ_VIEWER_ERR_SVR_ID_CALL_FAILED | 4038 | IDSVR调用失败 |
EN_ZJ_VIEWER_ERR_SVR_SIGN_CALL_FAILED | 4039 | SIGN服务调用失败 |
EN_ZJ_VIEWER_ERR_SVR_LINK_CALL_FAILED | 4040 | Link服务调用失败 |
EN_ZJ_VIEWER_ERR_SVR_LOGSVR_CALL_FAILED | 4041 | LOG系统调用失败 |
EN_ZJ_VIEWER_ERR_SVR_USERSVR_NOT_FOUND | 4042 | 用户系统找不到 |
EN_ZJ_VIEWER_ERR_SVR_SYSNOTICESVR_CALL_FAILED | 4043 | sysnotice找不到调用失败 |
EN_ZJ_VIEWER_ERR_SVR_PUBSUBSVR_CALL_FAILED | 4044 | 订阅发布服务调用失败 |
EN_ZJ_VIEWER_ERR_SVR_DYNAMICMETHOD_CALL_FAILED | 4045 | notice动态调用其他服务失败 |
EN_ZJ_VIEWER_ERR_SVR_PLAYLOAD_IS_FULL | 4046 | 负载为空 |
EN_ZJ_VIEWER_ERR_SVR_GRPCSVR_CALL_FAILED | 4047 | GRPC调用失败 |
EN_ZJ_VIEWER_ERR_SVR_DEVICESVR_NOT_FOUND | 4048 | 设备系统位找不到 |
EN_ZJ_VIEWER_ERR_SVR_EVENTSVR_NOT_FOUND | 4049 | 事件系统找不到 |
EN_ZJ_VIEWER_ERR_SVR_ZONE_NOT_FOUND | 4050 | ZONE服务找不到 |
EN_ZJ_VIEWER_ERR_SVR_NET_WRITE_BLOCK | 4051 | 网络通道写入包失败 |
EN_ZJ_VIEWER_ERR_SVR_SOCKET_CLOSED | 4052 | SOCKET连接已关闭 |
EN_ZJ_VIEWER_ERR_SVR_SOCKET_READERR | 4053 | SOCKET连接读取包失败 |
EN_ZJ_VIEWER_ERR_SVR_ID_PARSEERR | 4054 | ID参数解析失败(格式不争取) |
EN_ZJ_VIEWER_ERR_SVR_NET_DNSPARSE_ERR | 4055 | |
EN_ZJ_VIEWER_ERR_SVR_NET_REQ_TIMEOUT | 4056 | 网络请求超时 |
EN_ZJ_VIEWER_ERR_SVR_SUBPUB_TOKEN_NOTEXIST | 4057 | |
EN_ZJ_VIEWER_ERR_SVR_SOCKET_ACCEPT_ERROR | 4058 | |
EN_ZJ_VIEWER_ERR_SVR_OPERATION_TOO_FREQUENT | 4059 | |
EN_ZJ_VIEWER_ERR_SVR_PARSE_IP_ERR | 4060 | |
EN_ZJ_VIEWER_ERR_SVR_GETSVRPUBKEY_ERR | 4061 | 获取pubkey |
EN_ZJ_VIEWER_ERR_SVR_LINKNOTICESVR_NOT_FOUND | 4062 | LINKNOTICE找不到 |
EN_ZJ_VIEWER_ERR_SVR_ENCRYPTTYPE_ERROR | 4064 | 加密类型错误 |
EN_ZJ_VIEWER_ERR_SVR_VIDEOSVR_NOT_FOUND | 4065 | 视频存储服务找不到 |
EN_ZJ_VIEWER_ERR_SVR_EXCEPTIONSVR_NOT_FOUND | 4066 | EXCEPTION服务找不到 |
EN_ZJ_VIEWER_ERR_SVR_LOGSVR_NOT_FOUND | 4067 | LOGSVR找不到 |
EN_ZJ_VIEWER_ERR_SVR_OPRECORDSVR_NOT_FOUND | 4068 | OPRECORD服务找不到 |
EN_ZJ_VIEWER_ERR_SVR_NATSTUNSVR_NOT_FOUND | 4069 | NATSTUN服务找不到 |
EN_ZJ_VIEWER_ERR_SVR_COMBO_CALL_FAILED | 4070 | 套餐服务调用失败 |
EN_ZJ_VIEWER_ERR_SVR_COMBO_NOT_FOUND | 4071 | 套餐服务找不到 |
EN_ZJ_VIEWER_ERR_SVR_BINDSVR_NOT_FOUND | 4073 | 绑定服务找不到 |
EN_ZJ_VIEWER_ERR_SVR_PICTURESVR_NOT_FOUND | 4074 | 图片系统找不到 |
EN_ZJ_VIEWER_ERR_SVR_CLOUDSUBPUB_NOT_FOUND | 4075 | 消息订阅系统找不到 |
EN_ZJ_VIEWER_ERR_SVR_LINKNOTICESVR_CALL_FAILED | 4076 | LinkNotice服务调用失败 |
EN_ZJ_VIEWER_ERR_SVR_NOTICESVR_NOT_FOUND | 4077 | Notice未找到 |
EN_ZJ_VIEWER_ERR_SVR_NOTICESVR_CALL_FAILED | 4078 | Notice服务调用失败 |
EN_ZJ_VIEWER_ERR_SVR_CLOUDSUBPUB_CALL_FAILED | 4079 | 消息订阅系统服务调用失败 |
EN_ZJ_VIEWER_ERR_SVR_MOBCOMMSVR_NOT_FOUND | 4080 | 移动通信(Java向运营商查询套餐信息的服务)服务未找到 |
EN_ZJ_VIEWER_ERR_SVR_MOBCOMMSVR_CALL_FAILED | 4081 | 移动通信(Java向运营商查询套餐信息的服务)服务调用失败 |
EN_ZJ_VIEWER_ERR_SVR_ZONESVR_CALL_FAILED | 4082 | Zone服务调用失败 |
EN_ZJ_VIEWER_ERR_SVR_BINDSVR_CALL_FAILED | 4083 | Bind服务调用失败 |
EN_ZJ_VIEWER_ERR_SVR_EVENTSVR_CALL_FAILED | 4084 | 事件服务调用失败 |
EN_ZJ_VIEWER_ERR_SVR_PICTURESVR_CALL_FAILED | 4085 | 图片服务调用失败 |
EN_ZJ_VIEWER_ERR_SVR_VIDEOSVR_CALL_FAILED | 4086 | 视频服务调用失败 |
EN_ZJ_VIEWER_ERR_SVR_OPRECORDSVR_CALL_FAILED | 4087 | 操作记录服务调用失败 |
EN_ZJ_VIEWER_ERR_SVR_MEDIASVR_CALL_FAILED | 4088 | 媒体服务调用失败 |
EN_ZJ_VIEWER_ERR_SVR_FACEMANAGER_NOT_FOUND | 4089 | 人脸管理系统未找到 |
EN_ZJ_VIEWER_ERR_SVR_FACEMANAGER_CALL_FAILED | 4090 | 人脸系统服务调用失败 |
EN_ZJ_VIEWER_ERR_SVR_GROUPNOTHERE | 4407 | 组不存在 |
EN_ZJ_VIEWER_ERR_SVR_DEVICENOTINGROUP | 4409 | Device不在组里 |
EN_ZJ_VIEWER_ERR_SVR_WAKEUP_DEVICEERR | 4422 | 唤醒出错 |
EN_ZJ_VIEWER_ERR_SVR_DEVICEOFFLINE | 4602 | Device不在线 |
EN_ZJ_VIEWER_ERR_SVR_DEVICE_ISSLEEP | 4610 | 设备已休眠 |
EN_ZJ_VIEWER_ERR_SVR_HAVENOGROUPS | 4612 | 没有组列表 |
EN_ZJ_VIEWER_ERR_SVR_REG_AUTH_ERR | 5001 | SIGN服务注册 SVRID&SVRPWD校验错误 |
EN_ZJ_VIEWER_ERR_SVR_SIGN_ATOKEN_NOT_EXIST | 5002 | SIGN服务通过SVR ATOKEN找不到服务 |
EN_ZJ_VIEWER_ERR_SVR_SIGN_MANAGE_NOMETHOD | 5004 | |
EN_ZJ_VIEWER_ERR_SVR_GENERALUTOKEN_ERR | 5005 | USI生成UTOKEN错误 |
EN_ZJ_VIEWER_ERR_SVR_USERNOTHERE | 5007 | |
EN_ZJ_VIEWER_ERR_SVR_USERISINGROUP | 5011 | 用户已经入组 |
EN_ZJ_VIEWER_ERR_SVR_ROLENOTEXIST | 5013 | |
EN_ZJ_VIEWER_ERR_SVR_CHILDGROUPNOTEXIST | 5014 | |
EN_ZJ_VIEWER_ERR_SVR_ROLEISINUSE | 5015 | |
EN_ZJ_VIEWER_ERR_SVR_GROUPISINGROUP | 5016 | |
EN_ZJ_VIEWER_ERR_SVR_USERNOTINGROUP | 5017 | |
EN_ZJ_VIEWER_ERR_SVR_GROUPNOTINGROUP | 5019 | |
EN_ZJ_VIEWER_ERR_SVR_DEVICEISSLEEP | 5021 | |
EN_ZJ_VIEWER_ERR_SVR_ID_MAXIDINDEX_GETERR | 5024 | |
EN_ZJ_VIEWER_ERR_SVR_APPNOTEXIST | 5026 | |
EN_ZJ_VIEWER_ERR_SVR_APPDISABLE | 5027 | |
EN_ZJ_VIEWER_ERR_SVR_APPAUTHTYPE_ERR | 5031 | |
EN_ZJ_VIEWER_ERR_SVR_APPISEXIST | 5032 | |
EN_ZJ_VIEWER_ERR_SVR_ACCOUNTTYPENOTBIND | 5034 | |
EN_ZJ_VIEWER_ERR_SVR_APPAUTHTYPENOTSUPPORT | 5036 | |
EN_ZJ_VIEWER_ERR_SVR_DEVICE_NOT_AUTH | 5038 | |
EN_ZJ_VIEWER_ERR_SVR_UTOKEN_NOT_AUTH | 5039 | |
EN_ZJ_VIEWER_ERR_SVR_DEVICE_FORBIDDEN | 5040 | |
EN_ZJ_VIEWER_ERR_SVR_UTOKEN_FORBIDDEN | 5041 | |
EN_ZJ_VIEWER_ERR_SVR_UTOKEN_CHECKERR | 5042 | |
EN_ZJ_VIEWER_ERR_SVR_SYSCOMMAND_FAIL | 5043 | |
EN_ZJ_VIEWER_ERR_SVR_PUSHTEMPLATENOTEXIST | 5044 | |
EN_ZJ_VIEWER_ERR_SVR_DEVICE_LIMIT_AUTH | 5045 | |
EN_ZJ_VIEWER_ERR_SVR_SIGN_SVRKEY_NOTEXIST | 5046 | |
EN_ZJ_VIEWER_ERR_SVR_SVRPUBKEY_NOTEXIST | 5047 | |
EN_ZJ_VIEWER_ERR_SVR_FILETYPE_NOTEXIST | 5048 | |
EN_ZJ_VIEWER_ERR_SVR_SUBPUB_SUBJ_NOT_EXIST | 8000 | |
EN_ZJ_VIEWER_ERR_SVR_SUBPUB_ID_TYPE_NOT_SUPPORT | 8001 | |
EN_ZJ_VIEWER_ERR_SVR_NOTICE_QUEUE_WRITE_ERR | 8002 | NOTICE服务写入队列失败 |
EN_ZJ_VIEWER_ERR_SVR_NOTICE_PROTO_NOT_SUPPORT | 8003 | NOTICE通知协议不支持 |
EN_ZJ_VIEWER_ERR_SVR_LANGUAGE_NOT_EXIST | 8004 | 语言不存在 |
EN_ZJ_VIEWER_ERR_SVR_SUBPUB_PUBLISH_MSG_ERR | 8005 | 订阅发布服务Publish失败 |
EN_ZJ_VIEWER_ERR_SVR_NOTICE_JUMP_NOTIE_SUPPORT | 8006 | NOTICE跨机房调用不支持 |
EN_ZJ_VIEWER_ERR_SVR_SIGNAL_NOT_SUPPORT | 9001 | 所发送的指令,对方不支持该指令集;(版本/型号错误导致) |
EN_ZJ_VIEWER_ERR_SVR_SERVICE_TIMEOUT | 9002 | 指令发送后,超过超时时间仍没有回应 |
EN_ZJ_VIEWER_SVR_SIGNAL_ALREADY_CACHE | 9003 | 通过服务端转发信令,设备支持信令缓存,设备在线,则回应 |
EN_ZJ_VIEWER_ERR_SVR_SIGNAL_DISCARD | 9004 | 通过服务端转发信令,不支持信令缓存,设备不在线,则回应 |
EN_ZJ_VIEWER_ERR_SVR_CMD_NOT_SUPPORT | 9010 | 版本较旧,或设备类型不符合不支持当前指令 |
EN_ZJ_VIEWER_ERR_SVR_DEVICE_REG_FORBIDDEN | 9030 | 设备注册无权限,或服务限制,设备不再重试 |
EN_ZJ_VIEWER_ERR_SVR_DEVICE_LOGIN_FORBIDDEN | 9031 | 设备登陆被禁用,设备不再重试 |
8. 更新日志
本文提供 iOS 版汇云 App SDK 的变更日志和发布说明。SDK 会持续更新,并且汇云对每个版本 SDK 均保留使用权利(© 2017 - 2021 HuiYun Inc. All Rights Reserved)