南京市江宁区菲尼克斯路70号总部基地32栋1001室
电话:025-8418 6339
1.1 编制说明
本文档使用对象为设备厂商,主要说明厂商通过设备侧SDK接入牵心平台。
1.2 摄像头要求
摄像头厂商集成牵心SDK相关要求如下:
Linux/Unix环境,需要支持标准GCC指令,需要支持标准POSIX库,需要有集成openssl加密库等基础环境;
1、 需要有大于16M,最好能32M的内存空间可供SDK使用;
2、 需要大约2M的FLASH空间用来存放SDK相关的库文件;
3、 需要大约1M的空间用来存放SDK中记录的配置项相关文件。
为了保证设备能够被观看、被控制,关键数据可以被存储。SDK提供以下基本功能:
1. 媒体数据传输
高效、实时的传送音视频数据,保证视频的流畅性和及时性。
2. 设备的各种配置记录
记录用户对设备的各种设置,主要包括设备,镜头,传感器等
3. 录像的存储和回放
录制音视频数据,支持用户对某个时间或视频的点播回放
4. 云视频上传
根据业务需求, 将视音频数据上传到云端,实现更加可靠的存储
5. 控制命令的分发等
将用户的各种控制指令分发到各个模块
对外提供的结构主要在头文件如下:
文件名称 |
描述 |
zj_cameraiot.h |
摄像头设备相关的IoT事件能力和硬件能力接口,如:图形侦测报警、声音报警、设备指示灯控制、蜂鸣器控制、本地录制等 |
zj_camera.h |
与音视频相关接口 |
zj_channel.h |
用户自定义消息的接受和发送 |
zj_log.h |
日志相关接口 |
zj_network.h |
网络相关的接口 |
zj_ota.h |
固件升级相关接口 |
zj_power.h |
电源及节能设备相关的接口 |
zj_system.h |
与软件相关的接口,如初始化、注销等 |
zj_type.h |
使用的数据结构定义 |
zj_err.h |
与服务器之间通信的错误码定义 |
zj_iothub.h |
管理IOT HUB扩展能力,包括HUB的通信、协议转换等 |
zj_upload.h |
获取默认时间,如果厂商没有实现NTP服务,可以使用此文件提供的接口。 |
CTEI码,设备唯一码,摄像机厂家获得该信息后写入摄像机。
设备方提供交叉编译工具,并按照平台方要求实现设备功能接口,平台方编译提供应用程序功能库供设备方调用整合到设备程序中。
各模块关系图如下所示:
1、 平台方用设备方提供的交叉编译工具生成应用程序库提供给设备方。
2、 设备方按平台方要求实现公共接口,用于获取设备音视频及控制设备相关参数等功能。
3、 设备方主程序整合平台方提供的应用程序库,并调用相关接口,启动平台方的应用程序服务。
4、 第三方库ssl需要厂商编译链接(如需要平台方编译,需要提供移植流程示例及源码)
├── include //头文件
│ ├── zj_camera.h
│ ├── zj_cameraiot.h
│ ├── zj_channel.h
│ ├── zj_err.h
│ ├── zj_log.h
│ ├── zj_network.h
│ ├── zj_ota.h
│ ├── zj_power.h
│ ├── zj_system.h
│ └── zj_type.h
├── libcommon.so //核心动态库
├── libcos.so //系统库动态库
├── libthirdparty.so //第三方库动态库
└── static
├── libcommon.a //核心静态库
├── libcos.a //系统静态库
└── libthirdparty.a //第三方静态库
SDK启动流程:
1、 调用ZJ_Init() 初始化SDK
2、 设置日志模式和设置日志等级
3、 配置音视频参数、能力集回调接口注册
4、 调用ZJ_Start()启动SDK并分配资源
…
5、 调用ZJ_Stop()停止SDK运行
6、 调用ZJ_Destory()释放SDK资源
设置时间回调接口
Ø 获取时间回调接口
默认时间和时区回调函数
以下为摄像头能力集设置函数, 不设置默认为不支持。
ZJ_PFUN_CAMERA_ONPTZ
ZJ_PFUN_CAMERA_PTZ_GETPOINT
ZJ_PFUN_CAMERA_PTZ_GOTOPOINT
ZJ_PFUN_CAMERA_PTZ_AUTOCHECK
ZJ_PFUN_CAMERA_CRUISE_START
ZJ_PFUN_CAMERA_PTZ_STOP
ZJ_PFUN_CAMERA_CRUISE_START
ZJ_PFUN_CAMERA_CRUISE_STOP
ZJ_PFUN_CAMERA_RECORD_STATUS
ZJ_PFUN_CAMERA_OSDSETTING
SD卡格式化回调
获取SD卡容量回调
SD卡自检测回调
ZJ_PFUN_SWITCH_LEN
ZJ_PFUN_SET_WIDE_DYNAMIC_CAM
ZJ_PFUN_DELSOUNDFILE
ZJ_PFUN_GETSOUNDFILES
Ø ZJ_PFUN_SETRELAYDEVAWAKE
Ø ZJ_PFUN_CAMERA_SCANFREQUERY
摄像头逆向流传入回调接口
音频编码开关回调
设置音频采集音量调节
视频编码开关回调
视频编码开关回调
Ø ZJ_PFUN_AIIOT_START
Ø ZJ_PFUN_AIIOT_STOP
Ø ZJ_PFUN_AIIOT_GETINPUT
Ø ZJ_PFUN_AIIOT_OUTPUT
Ø ZJ_PFUN_AIIOT_SETPROP
Ø ZJ_PFUN_AIIOT_CHECKEVENT
1、 向固件设置iot Prop回调接口:
typedef int (*ZJ_PFUN_AIIOT_SETPROP)(unsigned int uiAIIoTType, unsigned long long uiAIIoTID, unsigned char* pstProp);
备注:厂商需要注册、实现此回调函数,sdk通过此接口设置iot属性到固件,其中,设置固件属性入参:pstProp以一个JSON字符串传递
例如:
{"Motion":{"Sensitive":"20","Status":"1","Trace":"0","Interval":"60"},
"Human":{"Sensitive":"20","Status":"1","Trace":"0","Interval":"60"}
}
2、 向固件输入控制信号
typedef int (*ZJ_PFUN_AIIOT_OUTPUT)(unsigned int uiAIIoTType, unsigned long long uiAIIoTID, unsigned char* pSignalValue,ST_ZJ_TRIGGER_INFO* pstTriggerInf);
备注:厂商需要注册、实现此回调函数,sdk通过此接口,向固件输入控制信号,例如:蜂鸣器、白光灯等
控制型号的属性值通过参数pSignalValue来传递, pstTriggerInf参数可为空。
例如:
白光灯控制:{"CtrlType":"1","Duration":"30"}
蜂鸣器控制:{"CtrlType":"1","AlarmType":"1000"}
Ø 设置WIFI回调接口
Ø 获取WIFI列表回调接口
Ø 获取当前网络详情
OTA升级流程
1、设备注册ZJ_SetOtaCBFuncs相关函数。
2、SDK收到升级请求,调用pFunNewVersionCb回调函数通知设备有新版固件需要升级,设备需要准备充足的资源。
3、设备准备完成调用ZJ_StartUpdate接口通知SDK开始升级。
4、SDK调用pFunVersonDataDownCb回调接口将升级包数据传给设备,设备应做好缓存。
5、升级包数据下载完成,SDK调用pFunCoverImageNotice回调函数,通知设备升级包是否校验通过,校验通过设备进行覆盖升级,否则删除缓存数据重启设备。
6、设备通过ZJ_SetBurnningProgress接口上报烧录进度。
7、烧录成功重启设备。
Ø 设备版本状态回调接口
Ø 设备版本下载回调接口
Ø 设备停止升级接口
Ø 设备进入休眠回调接口
Ø 日志收集回调接口
Ø 第三方厂商打开录像文件回调
Ø 第三方厂商关闭录像文件回调
Ø 读取第三方厂商一帧录像数据回调
Ø 跳转第三方厂商录像时间回调
Ø 获取第三方录像音视频参数
如果厂商没有实现NTP服务,可以使用以下SDK提供的接口。
/**
* 系统平台定义。
*/
typedef enum enum_zj_os_type
{
EN_ZJ_OS_TYPE_LINUX = 1,
EN_ZJ_OS_TYPE_IOS = 2,
EN_ZJ_OS_TYPE_ANDRIOD = 3,
EN_ZJ_OS_TYPE_ANDRIODTV = 4,
EN_ZJ_OS_TYPE_WINDOWS = 5,
EN_ZJ_OS_TYPE_RTOS = 6
}EN_ZJ_OS_TYPE;
/**
* 设置设备类型:1.摄像机;2.分体门铃;3.单体门铃;4.NVR。
*/
typedef enum enum_ZJ_DEV_TYPE
{
EN_ZJ_DEV_TYPE_CAMERA = 0X01, //摄像机
EN_ZJ_DEV_TYPE_DOORBELL_SPLIT = 0X02, //分体门铃
EN_ZJ_DEV_TYPE_DOORBELL_SINGLE = 0X03, //单体门铃
EN_ZJ_DEV_TYPE_NVR = 0X04 //NVR
EN_ZJ_DEV_TYPE_EDR = 0X05 //EDR
EN_ZJ_DEV_TYPE_SOLAR_PANEL = 0x06 //太阳能设备
}EN_ZJ_DEV_TYPE;
/**
* 设备初始化状态。分别为:初始化、配置加载、网络初始化、注册、登录、绑定、运行。
*/
typedef enum enum_ZJ_DEVICE_STATUS
{
EN_ZJ_DEVICE_STATUS_INIT = 0,
EN_ZJ_DEVICE_STATUS_LOADCONF, //SDK初始化加载配置成功
EN_ZJ_DEVICE_STATUS_NETWORK, //网络连接完成
EN_ZJ_DEVICE_STATUS_REGIST, //设备注册
EN_ZJ_DEVICE_STATUS_LOGIN, //设备登录服务成功
EN_ZJ_DEVICE_STATUS_BIND, //设备绑定(解绑)完成
EN_ZJ_DEVICE_STATUS_PROCESS //设备完成上线
}EN_ZJ_DEVICE_STATUS;
/*
* 设备内存富余级别
*/
typedef enum enum_ZJ_DEVICE_MEM_ABILITY
{
//内存余量可以存储3个以上完整GOP
EN_ZJ_DEVICE_MEM_ABILITY_RICH = 0,
//内存余量适中,可以存储1个以上完整GOP
EN_ZJ_DEVICE_MEM_ABILITY_MID = 1,
//内存余量不足,只可以存在一个完整帧
EN_ZJ_DEVICE_MEM_ABILITY_POOR = 2
}EN_ZJ_DEVICE_MEM_ABILITY;
/*
* 设备升级状态。
*/
typedef enum enum_ZJ_DEVICE_UPDATE_STATUS
{
EN_ZJ_DEVICE_UPDATE_STATUS_NOUPDATE = 0, //不需要升级
EN_ZJ_DEVICE_UPDATE_STATUS_NEEDUPDATE = 1, //有新版本需要升级
EN_ZJ_DEVICE_UPDATE_STATUS_MUSTUPDATE = 2 //强制升级,系统版本不兼容需要强制升级
}
// 网络类型
typedef enum enum_ZJ_NETWORK_TYPE{
EN_ZJ_NETWORK_TYPE_NONET = 0x00, // 无网络
EN_ZJ_NETWORK_TYPE_WIRED = 0x01, // 有线连接
EN_ZJ_NETWORK_TYPE_WIFI = 0x02, // WIFI连接
EN_ZJ_NETWORK_TYPE_AP = 0x04, // AP连接
EN_ZJ_NETWORK_TYPE_SIM = 0x08, // 移动网络
}EN_ZJ_NETWORK_TYPE;
//定义WIFI列表元素
typedef struct stru_ZJ_WIFI_INFO{
int iSigStrength; //信号强度
int iConnectFlag; //是否当前连接 1.是;0.不是
char acWifiSSID[32]; //最长31字节WiFiSSID
}ST_ZJ_WIFI_INFO;
// 定义当前网络详情结构
typedef struct stru_ZJ_NETWORK_INFO{
int iNetType;
int iSignalType; // 2: 2G 3: 3G 4: 4G
int iSigStrength;
unsigned char aucNetmask[64]; //子网掩码
unsigned char aucGateway[64]; //默认网关
unsigned char aucIPAddr[64];
unsigned char aucMacAddr[64];
unsigned char aucWIFISSID[32];
}ST_ZJ_NETWORK_INFO;
//网络连接状态
typedef enum enum_ZJ_NETWORK_ERR_STATUS{
EN_ZJ_NETWORK_ERR_STATUS_PWDERR = 0x01, //WIFI密码错误
EN_ZJ_NETWORK_ERR_STATUS_NOSIGNAL = 0x02 //信号中断
}EN_ZJ_NETWORK_ERR_STATUS;
//支持OTA升级的模式
typedef enum enum_ZJ_OTA_ABILITY{
// SD卡升级,用户将升级包拷贝到SD卡,然后将SD卡插入设备完成升级
EN_ZJ_OTA_ABILITY_SDCARD = 0x01,
//本地升级,用户与设备连接在同一个局域网,完成升级;
EN_ZJ_OTA_ABILITY_LOCALUPDATE = 0x02,
//远程升级,用户与设备不在同一个局域网,完成升级;设备需要更多的空间存放升级包;
EN_ZJ_OTA_ABILITY_REMOTEUPDATE = 0x04
}EN_ZJ_OTA_ABILITY;
// 支持WIFI配置模式
typedef enum enum_ZJ_SETWIFI_ABILITY{
EN_ZJ_SETWIFI_ABILITY_AP = 0x01, //支持AP配网
EN_ZJ_SETWIFI_ABILITY_SOUND = 0x02,//支持声波配网
EN_ZJ_SETWIFI_ABILITY_SMARTLINK = 0x04,//支持SMARTLINK配网
EN_ZJ_SETWIFI_ABILITY_QRCODE = 0x08,//支持二维码配网
EN_ZJ_SETWIFI_ABILITY_WIRED = 0x10 //支持有线配网
}EN_ZJ_SETWIFI_ABILITY;
//设备休眠唤醒能力
typedef enum enum_ZJ_AWAKE_ABILITY{
EN_ZJ_AWAKE_ABILITY_NOTSUPPORT = 0x00, //不支持休眠
EN_ZJ_AWAKE_ABILITY_LOCALAWAKE = 0x01, //支持本地唤醒
EN_ZJ_AWAKE_ABILITY_REMOTEAWAKE = 0x02 //支持远程唤醒
}EN_ZJ_AWAKE_ABILITY;
//声音对讲支持能力
typedef enum enum_ZJ_VOICEPLAY_ABILITY{
EN_ZJ_VOICEPLAY_ABILITY_NOSUPPORT = 0x00, //不支持对讲
EN_ZJ_VOICEPLAY_ABILITY_SIMPLEX = 0x01, //单工
EN_ZJ_VOICEPLAY_ABILITY_DUPLEX = 0x02 //双工
}EN_ZJ_VOICEPLAY_ABILITY;
//摄像机PTZ支持能力
typedef enum enum_ZJ_CAMERA_PTZ_ABILITY{
EN_ZJ_CAMERA_PTZ_ABILITY_P = 0x01, //支持P操作
EN_ZJ_CAMERA_PTZ_ABILITY_T = 0x02, //支持T操作
EN_ZJ_CAMERA_PTZ_ABILITY_Z = 0x04 //支持Z操作
}EN_ZJ_CAMERA_PTZ_ABILITY;
//摄像机PTZ转动
typedef enum enum_ZJ_CAMERA_PTZ_CONTROL{
EN_ZJ_CAMERA_PTZ_CONTROL_UP = 1,
EN_ZJ_CAMERA_PTZ_CONTROL_DOWN = 2,
EN_ZJ_CAMERA_PTZ_CONTROL_LEFT = 3,
EN_ZJ_CAMERA_PTZ_CONTROL_RIGHT = 4,
}EN_ZJ_CAMERA_PTZ_CONTROL;
//巡航预置点定义
typedef struct stru_ZJ_CAMERA_CRUISE_PRESET{
int Idx; //预置点序号
int iX; //预置点位移X
int iY; //预置点位移Y
int iDwellTime; //停留时间
int iSpeed; //云台转速
}ST_ZJ_CAMERA_CRUISE_PRESET;
//摄像机分辨率支持能力集
typedef enum enum_ZJ_CAMERA_RESOLUTION_ABILITY{
EN_ZJ_CARERA_RESOLUTION_ABILITY_360P = 0x0001, //支持640*360分辨率
EN_ZJ_CARERA_RESOLUTION_ABILITY_480P = 0x0002, //支持640*480分辨率
EN_ZJ_CARERA_RESOLUTION_ABILITY_720P = 0x0004, //支持1280*720分辨率
EN_ZJ_CARERA_RESOLUTION_ABILITY_960P = 0x0008, //支持1280*960分辨率
EN_ZJ_CARERA_RESOLUTION_ABILITY_1080P = 0x0010, //支持1920*1080分辨率
EN_ZJ_CARERA_RESOLUTION_ABILITY_1200P = 0x0020, //支持1600*1200分辨率
EN_ZJ_CARERA_RESOLUTION_ABILITY_300W = 0x0040, //支持2048*1536分辨率
EN_ZJ_CARERA_RESOLUTION_ABILITY_400W = 0x0080, //支持2500*1600分辨率
EN_ZJ_CARERA_RESOLUTION_ABILITY_500W = 0x0100, //支持2560*1920分辨率
EN_ZJ_CARERA_RESOLUTION_ABILITY_4K = 0x0200, //支持3840*2160分辨率 800W像素
EN_ZJ_CARERA_RESOLUTION_ABILITY_8K = 0x0400, //支持7680*4320分辨率 3200W像素
}EN_ZJ_CARERA_RESOLUTION_ABILITY;
//摄像机编码帧率定义
typedef enum enum_ZJ_CAMERA_BITRATE_TYPE{
EN_ZJ_CAMERA_BITRATE_TYPE_96K = 1,
EN_ZJ_CAMERA_BITRATE_TYPE_128K = 2,
EN_ZJ_CAMERA_BITRATE_TYPE_196K = 3,
EN_ZJ_CAMERA_BITRATE_TYPE_256K = 4,
EN_ZJ_CAMERA_BITRATE_TYPE_384K = 5,
EN_ZJ_CAMERA_BITRATE_TYPE_512K = 6,
EN_ZJ_CAMERA_BITRATE_TYPE_768K = 7,
EN_ZJ_CAMERA_BITRATE_TYPE_1024K = 8,
EN_ZJ_CAMERA_BITRATE_TYPE_1536K = 9,
EN_ZJ_CAMERA_BITRATE_TYPE_2048K = 10,
EN_ZJ_CAMERA_BITRATE_TYPE_2560K = 11,
EN_ZJ_CAMERA_BITRATE_TYPE_3072K = 12,
EN_ZJ_CAMERA_BITRATE_TYPE_4096K = 13
}EN_ZJ_CAMERA_BITRATE_TYPE;
//红外灯支持能力
typedef enum enum_ZJ_CAMERA_IRLED_ABILITY{
EN_ZJ_CAMERA_IRLED_ABILITY_NOSUPPORT = 0x00, //不支持红外灯
EN_ZJ_CAMERA_IRLED_ABILITY_NOCONTROL = 0x01, //不支持红外灯开关控制,只能通过感光器自动开关控制
EN_ZJ_CAMERA_IRCUR_ABILITY_CANCONTROL = 0x02, //支持红外灯命令开关控制
}EN_ZJ_CAMERA_IRLED_ABILITY;
//图像侦测报警能力
typedef enum enum_ZJ_MOTION_ABILITY{
EN_ZJ_MOTION_ABILITY_NOSUPPORT = 0x00, //不支持侦测
EN_ZJ_MOTION_ABILITY_NORMAL = 0x01, //普通运动侦测
EN_ZJ_MOTION_ABILITY_NORMALTRACE = 0x02, //普通运动跟踪
EN_ZJ_MOTION_ABILITY_HUMAN = 0x03, //人形侦测
EN_ZJ_MOTION_ABILITY_HUMANTRACE = 0x04 //人形追踪
}EN_ZJ_MOTION_ABILITY;
//摄像机视频编码类型
typedef enum enum_ZJ_VIDEOENC_TYPE{
EN_ZJ_VIDEOENC_TYPE_JPEG = 0x01, //JPEG图片编码模式
EN_ZJ_VIDEOENC_TYPE_H264 = 0x02, //H264编码类型
EN_ZJ_VIDEOENC_TYPE_H265 = 0x04 //H265编码类型
}EN_ZJ_VIDEOENC_TYPE;
//音频编码类型
typedef enum enum_ZJ_AUDIOENC_TYPE{
EN_ZJ_AUDIOENC_TYPE_PCM16 = 0x01,
EN_ZJ_AUDIOENC_TYPE_G711A = 0x02,
EN_ZJ_AUDIOENC_TYPE_G711U = 0x04,
EN_ZJ_AUDIOENC_TYPE_AAC = 0x08,
EN_ZJ_AUDIOENC_TYPE_MP3 = 0x10
}EN_ZJ_AUDIOENC_TYPE;
//镜头类型
typedef enum enum_ZJ_CAMERA_LENS_TYPE{
EN_ZJ_CAMERA_LENS_TYPE_NORMAL = 0x00,
EN_ZJ_CAMERA_LENS_TYPE_360 = 0x01,
EN_ZJ_CAMERA_LENS_TYPE_720 = 0x02
}EN_ZJ_CAMERA_LENS_TYPE;
//视频编码参数
typedef struct stru_ZJ_VIDEO_PARAM{
unsigned int uiResolution; //分辨率,见分辨率定义
unsigned int uiEncodeType; //编码格式
unsigned int uiSmartEncFlag; //0.不支持Smart编码;1.支持Smart编码
unsigned int uiQuality; //编码质量
unsigned int uiBitrate; //码率,见码率定义
unsigned int uiFramerate; //帧率
unsigned int uiFrameInterval; //I帧间隔
}ST_ZJ_VIDEO_PARAM;
// 音频参数描述
typedef struct stru_ZJ_AUDIO_PARAM{
unsigned int uiEncodeType; //编码格式
unsigned int uiSampleRate; //采样率
unsigned int uiChannel; //声道数
unsigned int uiDepth; //深度
}ST_ZJ_AUDIO_PARAM;
//广角镜头圆心半径信息描述
typedef struct str_ZJ_VIDEO_CIRCLE
{
unsigned int uiRadius; //半径
double doubleAngle; //角度
unsigned int uiCc1x; //圆心坐标X
unsigned int uiCc1Y; //圆心坐标Y
unsigned int uiCc2x; // 720度双目
unsigned int uiCc2Y; // 720度双目
}ST_ZJ_VIDEO_CIRCLE;
// 扭曲度描述
typedef struct str_ZJ_VIDEO_DISTORTION
{
double fx; // 镜头光轴与图像圆心的水平偏移
double fy; // 镜头光轴与图像圆心的垂直偏移
double a; // 桶形畸变校正参数
double b; // 枕形畸变校正参数
double scale; // 图像缩放因子
}ST_ZJ_VIDEO_DISTORTION;
//视频编码帧类型
typedef enum enum_ZJ_VIDEO_FRAME_TYPE{
EN_ZJ_VIDEO_FRAME_TYPE_UNKNOW = 0, //未知帧类型,需要去检测
EN_ZJ_VIDEO_FRAME_TYPE_I = 1, //I帧
EN_ZJ_VIDEO_FRAME_TYPE_P = 2, //P帧
}EN_ZJ_VIDEO_FRAME_TYPE;
// 图片类型定义。普通图片,中等大小图片,小图,ICON图片;
typedef enum enum_ZJ_PICTURE_TYPE{
EN_ZJ_PICTURE_NORMAL = 0, //码流同等尺寸
EN_ZJ_PICTURE_MIDDLE = 1, //码流缩放一倍尺寸
EN_ZJ_PICTURE_SMALL = 2, //320*240尺寸
EN_ZJ_PICTURE_ICON = 3 //64*48尺寸
}EN_ZJ_PICTURE_TYPE;
//TF卡状态
typedef enum enum_tfcard_status
{
EN_TFCARD_STATUS_OK = 0, // tf 卡正常
EN_TFCARD_STATUS_UNKNOWNSYSTEM = 1, // tf 卡正常,但是文件系统不支持
EN_TFCARD_STATUS_NOTFCAR = 2, // TF 卡不存在
EN_TFCARD_STATUS_FORMATTING = 3, // TF 卡正在格式化
EN_TFCARD_STATUS_SYSTEMERR = 4 // TF 卡文件系统损坏,需要人工修复
}EN_TFCARD_STATUS;
// IR模式。自动模式,红外模式,全彩模式。
typedef enum enum_ZJ_IRMODE{
EN_ZJ_IRMODE_AUTO = 0, //自动模式
EN_ZJ_IRMODE_IR = 1, //红外模式
EN_ZJ_IRMODE_FULLCOLOR = 2 //全彩模式
}EN_ZJ_IRMODE;
// 关键帧编码质量参数
typedef enum enum_ZJ_KEYFRAME_QUALITY{
EN_ZJ_KEYFRAME_QUALITY_NORMAL = 1, // 标准质量
EN_ZJ_KEYFRAME_QUALITY_LOW = 2, // 低质量
}EN_ZJ_KEYFRAME_QUALITY;
//定义AIIoT类型,包括报警器、信号采集检测器、控制器;
typedef enum enum_ZJ_AIIOT_TYPE{
EN_ZJ_AIIOT_TYPE_REMOTECTRLER = 0, //遥控器
EN_ZJ_AIIOT_TYPE_DOORSWITCH = 1, //门磁
EN_ZJ_AIIOT_TYPE_SMOKETRANSDUCER = 2, //烟雾传感器
EN_ZJ_AIIOT_TYPE_GASSENSOR = 3, //燃气 探测 传感器
EN_ZJ_AIIOT_TYPE_LIGHTSWITCH = 4, //电灯
EN_ZJ_AIIOT_TYPE_CURTAIN = 5, //窗帘
EN_ZJ_AIIOT_TYPE_JACK = 6, //插座
EN_ZJ_AIIOT_TYPE_PIR = 7, //人体 红外
EN_ZJ_AIIOT_TYPE_WATER = 8, //水浸
EN_ZJ_AIIOT_TYPE_ERG = 9, //紧急
EN_ZJ_AIIOT_TYPE_ALARMBEER = 10, //警号
EN_ZJ_AIIOT_TYPE_JCAKHVAC = 11, //空调插座
EN_ZJ_AIIOT_TYPE_MULTISWITCH = 12, //多路开关
EN_ZJ_AIIOT_TYPE_SHUTTERMOTOR = 13, //卷帘 电动机
EN_ZJ_AIIOT_TYPE_GLASSBROKENSENSOR = 20, //玻璃破碎 传感器
EN_ZJ_AIIOT_TYPE_INFRAREDSENSOR = 23, //红外 对射
EN_ZJ_AIIOT_TYPE_BATTERYVALVE = 24, //电磁阀门
EN_ZJ_AIIOT_TYPE_AIRFLOWSENSOR = 25, //气流传感器
EN_ZJ_AIIOT_TYPE_MULTICTR = 32, //多功能控制
EN_ZJ_AIIOT_TYPE_INTELLOCK = 33, //智能锁
EN_ZJ_AIIOT_TYPE_DOORBELL = 34, //门铃
EN_ZJ_AIIOT_TYPE_COSENSOR = 40, //一氧化碳探测器
EN_ZJ_AIIOT_TYPE_MOTION = 1000, //运动检测
EN_ZJ_AIIOT_TYPE_INNER_DOORBELL = 1001, //内置 门铃
EN_ZJ_AIIOT_TYPE_RECORD = 1002, //录像 不需要注册IOT
EN_ZJ_AIIOT_TYPE_INNER_PIR = 1003, //内置人体红外探测器
EN_ZJ_AIIOT_TYPE_VOICEALARMDETECT = 1004, //声音报警检测
EN_ZJ_AIIOT_TYPE_SNAPSHORT = 1005, //SnapShot截图 不需要注册IOT
EN_ZJ_AIIOT_TYPE_PTZ = 1006, //PTZ 不需要用注册IOT
EN_ZJ_AIIOT_TYPE_INNER_LAMP = 1007, //内置白光灯
EN_ZJ_AIIOT_TYPE_INNER_STATELAMP = 1008, //内置状态指示灯
EN_ZJ_AIIOT_TYPE_BUZZER = 1009, //内置蜂鸣器
EN_ZJ_AIIOT_TYPE_CLOUDRECORD = 1010, // 云端录像
EN_ZJ_AIIOT_TYPE_CLOUDSNAP = 1011, // 云端截图
EN_ZJ_AIIOT_TYPE_CAMERA = 1012, // 摄像机 开关
EN_ZJ_AIIOT_TYPE_EVENT = 1013, // 事件记录
EN_ZJ_AIIOT_TYPE_DNSET = 1014, // 强制白天晚上,和自动
EN_ZJ_AIIOT_TYPE_FORCEREMOVE = 1015, // 强拆
EN_ZJ_AIIOT_TYPE_STAY = 1016 // 逗留
}EN_ZJ_AIIOT_TYPE;
//区分MOTION中不同的检测类型
typedef enum enum_zj_motion_event_type
{
EN_ZJ_MOTION_EVENT_MOTION = 0X00, //移动侦测事件类型
EN_ZJ_MOTION_EVENT_HUMAN = 0X01, //人形侦测事件类型
EN_ZJ_MOTION_EVENT_FACE = 0X02, //人脸侦测事件类型
EN_ZJ_MOTION_EVENT_FENCE_MOTION_IN = 0X03, //电子围栏移动侦测进入事件
EN_ZJ_MOTION_EVENT_FENCE_MOTION_OUT = 0X04, //电子围栏移动侦测离开事件
EN_ZJ_MOTION_EVENT_FENCE_HUMAN_IN = 0X05, //电子围栏移动人形进入事件
EN_ZJ_MOTION_EVENT_FENCE_HUMAN_OUT = 0X06, //电子围栏移动人形离开事件
EN_ZJ_MOTION_EVENT_FENCE_FACE_IN = 0X07, //电子围栏移动人脸进入事件
EN_ZJ_MOTION_EVENT_FENCE_FACE_OUT = 0X08, //电子围栏移动人脸离开事件
EN_ZJ_MOTION_EVENT_CAR = 0X09, //车辆识别
EN_ZJ_MOTION_EVENT_CAR_DISCERN = 0X10, //车牌识别事件
EN_ZJ_MOTION_EVENT_MOTION_OVERLINE = 0X11, //运动物体越线
EN_ZJ_MOTION_EVENT_HUMAN_OVERLINE = 0X12, //人形越线
EN_ZJ_MOTION_EVENT_FACE_OVERLINE = 0X13 //人脸越线
}EN_ZJ_MOTION_EVENT_TYPE;
typedef enum enum_ZJ_CTRLDEVICEID_TYPE{
EN_ZJ_CTRLDID_NODE = 0,
EN_ZJ_CTRLDID_CLEAR = 1,//更换DID
EN_ZJ_CTRLDID_QUERY = 2,//查询DID
EN_ZJ_CTRLDID_EXITGROUP = 3//DID解绑用户与设备关系
}EN_ZJ_CTRLDEVICEID_TYPE;
typedef struct ZJ_HUMANFACE_NODE
{
unsigned char aucFaceId[64];
unsigned char aucFaceLabelId[64];
struct ZJ_HUMANFACE_NODE *pstNextNode;
}ZJ_HUMANFACE_NODE;
typedef struct ZJ_HUMANFACE_LABLE_NODE
{
unsigned int uiMaxFaceCnt;
unsigned int *pucFaceDes;
unsigned char aucFaceLabeName[64];
unsigned char aucFaceLabelId[64];
struct ZJ_HUMANFACE_LABLE_NODE *pstNextNode;
}ZJ_HUMANFACE_LABLE_NODE;
由于设备重启会影响到用户实时视频观看和云存的丢失,设备端尽量避免定时自动重启,更不允许设备定时准点自动重启。
若设备确实需要周期性自动重启,需要随机打散重启时间,避免所有设备在同一时间周期性冲击平台接口,自动重启设计为间隔7到14天、00:30:00 到 04:00:00之间随机时间点,具体要求如下:
1、重启日周期:从设备启动或重启后第7到第14天,随机一天,避免所有设备在同一天重启。公式如下: 重启日周期=7+N, N为0到7的系统随机数。
2、时间点:00:30:00 到 04:00:00之间,随机一秒,避免重启的设备在同一秒重启。公式如下:时间点=T ,T为00:30:00 到 04:00:00之间随机秒数(即1800 到 14400之间随机数)。
举例:设备启动或重启日期为2020/02/05,若随机数N=3、随机数T=3672,则设备在第10天 01:01:12自动重启,即2020/02/15 01:01:12自动重启。