一、说明
本文档详细描述了IPCAM设备的IOCtrl命令集,包括命令宏定义、数据流向、功能说明及数据结构定义,适用于APP与IPCAM设备之间的P2P通信开发。
二、命令详情
(一)呼叫设备开始传送Video Frame
命令宏定义:IOTYPE_USER_IPCAM_START = 0x01FF;
数据流向:APP → Device
功能说明:APP告知Device开始发送视频数据。
数据结构:
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
}SMsgAVIoctrlAVStream;
(二)呼叫设备停止传送Video Frame
命令宏定义:IOTYPE_USER_IPCAM_STOP = 0x02FF;
数据流向:APP → Device
功能说明:APP告知Device停止发送视频数据。
数据结构:
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
} SMsgAVIoctrlAVStream;
(三)呼叫设备开始接收Video Frame
命令宏定义:IOTYPE_USER_IPCAM_START_CLIENT = 0x03FF;
数据流向:APP → Device
功能说明:APP告知Device开始接收视频数据。
数据结构:
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
}SMsgAVIoctrlAVStream;
(四)呼叫设备停止接收Video Frame
命令宏定义:IOTYPE_USER_IPCAM_STOP_CLIENT = 0x04FF;
数据流向:APP → Device
功能说明:APP告知Device停止接收视频数据。
数据结构:
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
} SMsgAVIoctrlAVStream;
(五)呼叫设备开始传送Audio Frame
命令宏定义:IOTYPE_USER_IPCAM_AUDIOSTART = 0x0300;
数据流向:APP → Device
功能说明:APP告知Device开始发送音频数据。
数据结构:
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
} SMsgAVIoctrlAVStream;
(六)呼叫设备停止传送Audio Frame
命令宏定义:IOTYPE_USER_IPCAM_AUDIOSTOP = 0x0301;
数据流向:APP → Device
功能说明:APP告知Device停止发送音频数据。
数据结构:
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
} SMsgAVIoctrlAVStream;
(七)设定设备SD卡录像模式
命令宏定义:请求(IOTYPE_USER_IPCAM_SETRECORD_REQ = 0x0310) | 响应(IOTYPE_USER_IPCAM_SETRECORD_RESP = 0x0311)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device要设置设备SD卡录像模式,Device告知App设置结果。
数据结构:
// 枚举定义
typedef enum{
AVIOTC_RECORDTYPE_OFF = 0x00,
AVIOTC_RECORDTYPE_FULLTIME = 0x01,
AVIOTC_RECORDTYPE_ALARM = 0x02,
AVIOTC_RECORDTYPE_MANUAL = 0x03
}ENUM_RECORD_TYPE;
// 请求结构
typedef struct{
unsigned int channel; // Camera Index
unsigned int recordType; // 参考ENUM_RECORD_TYPE
unsigned char reserved[4];
}SMsgAVIoctrlSetRecordReq, SMsgAVIoctrlGetRecordResq;
// 响应结构
typedef struct{
int result; // 0:成功; otherwise: 失败;
unsigned char reserved[4];
}SMsgAVIoctrlSetRecordResp;
(八)获取设备目前SD卡录像模式
命令宏定义:请求(IOTYPE_USER_IPCAM_GETRECORD_REQ = 0x0312) | 响应(IOTYPE_USER_IPCAM_GETRECORD_RESP = 0x0313)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device要获取设备SD卡录像模式,Device将录像类型配置回传给App。
数据结构:
// 枚举定义
typedef enum{
AVIOTC_RECORDTYPE_OFF = 0x00,
AVIOTC_RECORDTYPE_FULLTIME = 0x01,
AVIOTC_RECORDTYPE_ALARM = 0x02,
AVIOTC_RECORDTYPE_MANUAL = 0x03
}ENUM_RECORD_TYPE;
// 请求结构
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
}SMsgAVIoctrlGetRecordReq;
// 响应结构
typedef struct{
unsigned int channel; // Camera Index
unsigned int recordType; // 参考ENUM_RECORD_TYPE
unsigned char reserved[4];
}SMsgAVIoctrlSetRecordReq, SMsgAVIoctrlGetRecordResq;
(九)获取设备事件列表
命令宏定义:请求(IOTYPE_USER_IPCAM_LISTEVENT_REQ = 0x0318) | 响应(IOTYPE_USER_IPCAM_LISTEVENT_RESP = 0x0319)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device要获取设备事件列表,Device将录像列表回传给App。
数据结构:
// 时间结构
typedef struct{
unsigned short year; // 年份数
unsigned char month; // 自一月以来的月数,范围为1到12
unsigned char day; // 每月的日期,范围为1到31
unsigned char wday; // 自星期日以来的天数,范围为0到6(星期日=0)
unsigned char hour; // 午夜之后的小时数,范围为0到23
unsigned char minute; // 小时后的分钟数,范围为0到59
unsigned char second; // 分钟后的秒数,范围为0到59
}STimeDay;
// 事件类型枚举
typedef enum{
AVIOCTRL_EVENT_ALL = 0x00, // 所有事件类型
AVIOCTRL_EVENT_MOTI = 0x01, // 移动侦测
AVIOCTRL_EVENT_VIDEOLOST = 0x02, // 视频遗失
AVIOCTRL_EVENT_IOALARM = 0x03, // IO报警
AVIOCTRL_EVENT_MOTI_END = 0x04, // 移动侦测结束
AVIOCTRL_EVENT_VIDEORESUME = 0x05, // 视频恢复
AVIOCTRL_EVENT_IOALARMPASS = 0x06, // IO报警结束
AVIOCTRL_EVENT_MOVIE = 0x07, // 影片
AVIOCTRL_EVENT_TIME_LAPSE = 0x08, // 延时拍摄
AVIOCTRL_EVENT_EMERGENCY = 0x09, // 紧急事件
AVIOCTRL_EVENT_EXPT_REBOOT = 0x10, // 系统异常重启
AVIOCTRL_EVENT_SDFAULT = 0x11, // SD卡错误
AVIOCTRL_EVENT_FULLTIME_RECORDING = 0x12, // 全时录像
AVIOCTRL_EVENT_PIR = 0x13, // PIR侦测
AVIOCTRL_EVENT_RINGBELL = 0x14, // 门铃呼叫
AVIOCTRL_EVENT_SOUND = 0x15, // 声音
AVIOCTRL_EVENT_HUMANOID_DETECTION = 0x16, // 人形侦测
AVIOCTRL_EVENT_CRY = 0x17, // 哭声侦测
AVIOCTRL_EVENT_FALL = 0x18, // 跌倒侦测
AVIOCTRL_EVENT_FACE = 0x19, // 人脸侦测
AVIOCTRL_EVENT_DEVICE_SHARE = 0x20, // 设备分享
AVIOCTRL_EVENT_ABNORMAL_NOISE = 0x21, // 异响侦测
AVIOCTRL_EVENT_SUBSCRIPTI_SUCCESS = 0x22, // 订阅成功
AVIOCTRL_EVENT_SUBSCRIPTI_EXPIRE = 0x23, // 订阅过期
AVIOCTRL_EVENT_FW_UPGRADE = 0x24, // 版本更新
AVIOCTRL_EVENT_NOTAPPEAR = 0x25, // 未出现提醒
AVIOCTRL_EVENT_INTELLIGENT_WATCHER = 0x26, // 智能看家
AVIOCTRL_EVENT_REGI = 0x27, // 区域入侵
AVIOCTRL_EVENT_ELECTR = 0x28, // 电子围栏
AVIOCTRL_EVENT_TELEPH = 0x29, // 电话告警
AVIOCTRL_EVENT_TOY = 0x37, // 玩具通知
AVIOCTRL_EVENT_PET = 0x40, // 宠物侦测
AVIOCTRL_EVENT_REMOTE_LOGIN = 0x48, // 异地登录
AVIOCTRL_EVENT_VIDEO_CALL = 0x66, // 视频呼叫
AVIOCTRL_EVENT_DEVICE_OFFLINE = 0x6F, // 设备离线
AVIOCTRL_EVENT_USER_CALL = 0x7D0 // 门铃呼叫
}ENUM_EVENTTYPE;
// 事件结构
typedef struct{
STimeDay stTime;
unsigned char event; // 参考ENUM_EVENTTYPE
unsigned char status; // 0x00:未读取 0x01:已读取 0x02:无录像
unsigned short duration; // 事件持续时间(秒)
}SAvEvent;
// 请求结构
typedef struct{
unsigned int channel; // Camera Index
STimeDay stStartTime; // 搜寻起始时间(修正:原TimeDay应为STimeDay)
STimeDay stEndTime; // 搜寻结束时间
unsigned char event; // 事件类型,参考ENUM_EVENTTYPE
unsigned char status; // 0x00:未读取 0x01:已读取 0x02:无录像
unsigned char reserved[2];
}SMsgAVIoctrlListEventReq;
// 响应结构
typedef struct{
unsigned int channel; // Camera Index
unsigned int total; // 搜索的总事件数
unsigned char index; // 数据包索引(0,1,2...)
unsigned char endflag; // 1表示最后一个数据包
unsigned char count; // 此封包中的事件数
unsigned char reserved[1];
SAvEvent stEvent[0]; // 事件数据起始地址
}SMsgAVIoctrlListEventResp;
(十)事件回播控制播放
命令宏定义:请求(IOTYPE_USER_IPCAM_RECORD_PLAYCTRL_REQ = 0x031A) | 响应(IOTYPE_USER_IPCAM_RECORD_PLAYCTRL_RESP = 0x031B)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device要进行录像事件回放,Device将录像回放结果回传给App(APP收固定字节长度)。
数据结构:
// 播放控制枚举
typedef enum{
AVIOCTRL_RECORD_PLAY_PAUSE = 0x00,
AVIOCTRL_RECORD_PLAY_STOP = 0x01,
AVIOCTRL_RECORD_PLAY_STEPFORWARD = 0x02,
AVIOCTRL_RECORD_PLAY_STEPBACKWARD = 0x03,
AVIOCTRL_RECORD_PLAY_FORWARD = 0x04,
AVIOCTRL_RECORD_PLAY_BACKWARD = 0x05,
AVIOCTRL_RECORD_PLAY_SEEKTIME = 0x06,
AVIOCTRL_RECORD_PLAY_END = 0x07,
AVIOCTRL_RECORD_PLAY_START = 0x10,
AVIOCTRL_RECORD_PLAY_NEXT = 0xf0,
AVIOCTRL_RECORD_PLAY_IFRAME = 0xf1
}ENUM_PLAYCONTROL;
// 请求结构
typedef struct{
unsigned int channel; // Camera Index
unsigned int command; // 播放指令,参考ENUM_PLAYCONTROL
unsigned int Param; // 指令参数,用户自定义
STimeDay stTimeDay; // 事件列表起始时间
unsigned char endflag; // 0:APP播放完毕 1:web继续播放下一个
unsigned char downloadFlag; // 0:回放模式 1:下载模式
unsigned char reserved[2];
} SMsgAVIoctrlPlayRecordReq;
// 响应结构
typedef struct{
unsigned int command; // 播放指令,参考ENUM_PLAYCONTROL
int result; // result>0:回放通道ID; result<0:异常(-1:回放异常,-2:超出最大连接数)
unsigned int size; // 事件回放文件大小
unsigned char respond;
unsigned char reserved[3];
} SMsgAVIoctrlPlayRecordResp;
(十一)设置设备解析度
命令宏定义:请求(IOTYPE_USER_IPCAM_SETSTREAMCTRL_REQ = 0x0320) | 响应(IOTYPE_USER_IPCAM_SETSTREAMCTRL_RESP = 0x0321)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device要设置设备的解析度,Device告知APP解析度设置结果。
数据结构:
// 画质等级枚举
typedef enum{
AVIOCTRL_QUALITY_UNKNOWN = 0x00,
AVIOCTRL_QUALITY_MAX = 0x01,
AVIOCTRL_QUALITY_HIGH = 0x02,
AVIOCTRL_QUALITY_MIDDLE = 0x03,
AVIOCTRL_QUALITY_LOW = 0x04,
AVIOCTRL_QUALITY_MIN = 0x05
}ENUM_QUALITY_LEVEL;
// 请求结构
typedef struct{
unsigned int channel; // Camera Index
unsigned char quality; // 参考ENUM_QUALITY_LEVEL
unsigned char reserved[3];
} SMsgAVIoctrlSetStreamCtrlReq;
// 响应结构(修正:原命名错误)
typedef struct{
unsigned int result; // 0: 成功; otherwise: 失败
unsigned char reserved[4];
} SMsgAVIoctrlSetStreamCtrlResp;
(十二)获取设备目前解析度
命令宏定义:请求(IOTYPE_USER_IPCAM_GETSTREAMCTRL_REQ = 0x0322) | 响应(IOTYPE_USER_IPCAM_GETSTREAMCTRL_RESP = 0x0323)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device要获取设备目前的解析度,Device将设备解析度配置回传给App。
数据结构:
// 请求结构
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
}SMsgAVIoctrlGetStreamCtrlReq;
// 响应结构
typedef struct{
unsigned int channel; // Camera Index
unsigned char quality; // 参考ENUM_QUALITY_LEVEL
unsigned char reserved[3];
} SMsgAVIoctrlSetStreamCtrlReq, SMsgAVIoctrlGetStreamCtrlResp;
(十三)设置设备位移侦测之灵敏度
命令宏定义:请求(IOTYPE_USER_IPCAM_SETMOTION_DETECT_REQ = 0x0324) | 响应(IOTYPE_USER_IPCAM_SETMOTION_DETECT_RESP = 0x0325)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device要设置设备位移侦测的灵敏度,Device告知APP设置结果。
数据结构:
// 请求结构
typedef struct{
unsigned int channel; // Camera Index
unsigned int sensitivity; // 0(禁用)~100(最大):0=关闭,25=低,50=中,75=高,100=最高
}SMsgAVIoctrlSetMotionDetectReq, SMsgAVIoctrlGetMotionDetectResp;
// 响应结构
typedef struct{
int result; // 0: 成功; otherwise: 失败
unsigned char reserved[4];
}SMsgAVIoctrlSetMotionDetectResp;
(十四)获取设备目前位移侦测之灵敏度
命令宏定义:请求(IOTYPE_USER_IPCAM_GETMOTION_DETECT_REQ = 0x0326) | 响应(IOTYPE_USER_IPCAM_GETMOTION_DETECT_RESP = 0x0327)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device要获取设备位移侦测的灵敏度,Device将配置回传给App。
数据结构:
// 请求结构
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
} SMsgAVIoctrlGetMotionDetectReq;
// 响应结构
typedef struct{
unsigned int channel; // Camera Index
unsigned int sensitivity; // 0(禁用)~100(最大):0=关闭,25=低,50=中,75=高,100=最高
}SMsgAVIoctrlSetMotionDetectReq, SMsgAVIoctrlGetMotionDetectResp;
(十五)获取目前设备通道数
命令宏定义:请求(IOTYPE_USER_IPCAM_GETSUPPORTSTREAM_REQ = 0x0328) | 响应(IOTYPE_USER_IPCAM_GETSUPPORTSTREAM_RESP = 0x0329)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device要获取目前设备频道数,Device将配置回传给App。
数据结构:
// 流定义结构
typedef struct{
unsigned short index; // 设备使用的stream index
unsigned short channel; // AVAPIs使用的channel index
char reserved[4];
}SStreamDef;
// 请求结构
typedef struct{
unsigned char reserved[4];
}SMsgAVIoctrlGetSupportStreamReq;
// 响应结构
typedef struct{
unsigned int number; // 可支持的stream数量
SStreamDef streams[0];
}SMsgAVIoctrlGetSupportStreamResp;
(十六)获取设备音讯格式
命令宏定义:请求(IOTYPE_USER_IPCAM_GETAUDIOOUTFORMAT_REQ = 0x032A) | 响应(IOTYPE_USER_IPCAM_GETAUDIOOUTFORMAT_RESP = 0x032B)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device要获取设备音频格式,Device将音频格式回传给App。
数据结构:
// 采样率枚举
typedef enum{
AUDIO_SAMPLE_8K = 0,
AUDIO_SAMPLE_11K = 1,
AUDIO_SAMPLE_12K = 2,
AUDIO_SAMPLE_16K = 3,
AUDIO_SAMPLE_22K = 4,
AUDIO_SAMPLE_24K = 5,
AUDIO_SAMPLE_32K = 6,
AUDIO_SAMPLE_44K = 7,
AUDIO_SAMPLE_48K = 8
}Sample_Rate;
// 编码ID枚举
typedef enum{
MEDIA_CODEC_UNKNOWN = 0x00,
MEDIA_CODEC_VIDEO_MPEG4 = 0x4C, // 76
MEDIA_CODEC_VIDEO_H263 = 0x4D, // 77
MEDIA_CODEC_VIDEO_H264 = 0x4E, // 78
MEDIA_CODEC_VIDEO_MJPEG = 0x4F, // 79
MEDIA_CODEC_VIDEO_HEVC = 0x50, // 80
MEDIA_CODEC_AUDIO_AAC_RAW = 0x86, // 134
MEDIA_CODEC_AUDIO_AAC_ADTS = 0x87, // 135
MEDIA_CODEC_AUDIO_AAC_LATM = 0x88, // 136
MEDIA_CODEC_AUDIO_G711U = 0x89, // 137
MEDIA_CODEC_AUDIO_G711A = 0x8A, // 138
MEDIA_CODEC_AUDIO_ADPCM = 0x8B, // 139
MEDIA_CODEC_AUDIO_PCM = 0x8C, // 140
MEDIA_CODEC_AUDIO_SPEEX = 0x8D, // 141
MEDIA_CODEC_AUDIO_MP3 = 0x8E, // 142
MEDIA_CODEC_AUDIO_G726 = 0x8F // 143
}CodecId;
// 位深度枚举
typedef enum{
AUDIO_DATABITS_8 = 0,
AUDIO_DATABITS_16 = 1,
AUDIO_DATABITS_24 = 2,
AUDIO_DATABITS_32 = 3,
AUDIO_DATABITS_40 = 4
}Bitdata; // Bit Depth
// 请求结构
typedef struct{
unsigned int channel; // camera index
char reserved[4];
}SMsgAVIoctrlGetAudioOutFormatReq;
// 响应结构
typedef struct{
unsigned int channel; // camera index
int format; // 参考ENUM_CODECID in AVFRAMEINFO.h
char sample_rate;
char bitdata;
char channels; // 可支持的通道数量
char avservchannel; // 0:子通道;1:主通道;默认0
}SMsgAVIoctrlGetAudioOutFormatResp;
(十七)获取设备信息
命令宏定义:请求(IOTYPE_USER_IPCAM_DEVINFO_REQ = 0x0330) | 响应(IOTYPE_USER_IPCAM_DEVINFO_RESP = 0x0331)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device要获取设备资讯,Device将设备资讯回传给App。
数据结构:
// 请求结构
typedef struct{
unsigned char reserved[4];
}SMsgAVIoctrlDeviceInfoReq;
// 响应结构
typedef struct{
unsigned char model[16];
unsigned char vendor[16];
unsigned int version;
unsigned int channel; // 保留
unsigned int total; // MBytes, sdcard总空间
unsigned int free; // MBytes, sdcard可用空间
unsigned int company; // 参考OTA上的公司名
unsigned char reserved[4];
}SMsgAVIoctrlDeviceInfoResp;
(十八)变更设备密码
命令宏定义:请求(IOTYPE_USER_IPCAM_SETPASSWORD_REQ = 0x0332) | 响应(IOTYPE_USER_IPCAM_SETPASSWORD_RESP = 0x0333)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device要变更设备密码,Device告知APP变更结果。
数据结构:
// 请求结构
typedef struct{
char oldpasswd[32]; // 旧密码
char newpasswd[32]; // 新密码
}SMsgAVIoctrlSetPasswdReq;
// 响应结构
typedef struct{
int result; // 0x00:成功, 否则失败
unsigned char reserved[4];
}SMsgAVIoctrlSetPasswdResp;
(十九)事件回放进度控制
命令宏定义:获取时长(0x033A/0x033B) | 设置进度(0x033C/0x033D)
数据流向:获取时长(APP→Device/Device→APP) | 设置进度(APP→Device/Device→APP)
功能说明:获取事件时长信息(视频流时间戳为UTC格式);从指定时间播放(App不发送0x2ff停止视频流)。
数据结构:
// 获取时长请求结构
typedef struct{
unsigned int channel; // Camera Index
STimeDay stTimeDay; // 事件的时间长度
unsigned char reserved[4];
}SMsgAVIoctrlGetPlaybackReq;
// 获取时长响应结构
typedef struct{
unsigned int videoTime; // 事件视频时间(秒)
unsigned long size; // 事件大小(字节)
unsigned char reserved[4];
}SMsgAVIoctrlGetPlaybackResp;
// 设置进度请求结构
typedef struct{
unsigned int channel; // Camera Index
STimeDay stTimeDay; // 事件的时间长度
unsigned int progressTime; // 事件进度时间(秒)
unsigned char reserved[4];
}SMsgAVIoctrlSetRecordProgessReq;
// 设置进度响应结构(修正:原拼写错误)
typedef struct{
unsigned char result; // 0:成功;otherwise:失败
unsigned char reserved[3];
}SMsgAVIoctrlSetRecordProgressResp;
(二十)获取设备周围Wifi列表
命令宏定义:请求(IOTYPE_USER_IPCAM_GET_WIFI_LIST_REQ = 0x0340) | 响应(IOTYPE_USER_IPCAM_GET_WIFI_LIST_RESP = 0x0341)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device要获取周围可用的Wifi列表,Device搜索附近Wifi并将列表信息回传给App。
数据结构:
// Wifi信息结构
typedef struct{
char ssid[32]; // Wifi名称
char bssid[18]; // Wifi物理地址(MAC)
unsigned char rssi; // 信号强度(0-100)
unsigned char encrypt; // 加密方式:0=无加密,1=WEP,2=WPA,3=WPA2,4=WPA/WPA2混合
unsigned char channel; // 信道号
unsigned char reserved[1];
}SWifiInfo;
// 请求结构
typedef struct{
unsigned char reserved[4];
}SMsgAVIoctrlGetWifiListReq;
// 响应结构
typedef struct{
unsigned char count; // 搜索到的Wifi数量
unsigned char reserved[3];
SWifiInfo wifiInfo[0]; // Wifi信息列表
}SMsgAVIoctrlGetWifiListResp;
(二十一)设定设备的Wifi网络
命令宏定义:请求(IOTYPE_USER_IPCAM_SETWIFI_REQ = 0x0342) | 响应(IOTYPE_USER_IPCAM_SETWIFI_RESP = 0x0343)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device要设置设备的wifi,Device告知APP设置设备wifi的结果。
数据结构:
// 请求结构
typedef struct{
unsigned char ssid[32]; // 连接的WiFi SSID
unsigned char password[32]; // WiFi SSID 密码
unsigned char mode; // 参考ENUM_AP_MODE
unsigned char enctype; // 参考ENUM_AP_ENCTYPE
unsigned char reserved[10];
}SMsgAVIoctrlSetWifiReq;
// 响应结构
typedef struct{
int result; // 如果已连接WiFi,则返回0,否则返回1。
unsigned char reserved[4];
}SMsgAVIoctrlSetWifiResp;
(二十二)获取设备目前所设置的WiFi
命令宏定义:请求(IOTYPE_USER_IPCAM_GETWIFI_REQ = 0x0344) | 响应(IOTYPE_USER_IPCAM_GETWIFI_RESP = 0x0345)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device要获取设备目前所设置的wifi,Device将设备当前wifi配置放到IOCtrl资料并回传给App。
数据结构:
// 请求结构
typedef struct{
unsigned char reserved[4];
}SMsgAVIoctrlGetWifiReq;
// 响应结构
typedef struct{
unsigned char ssid[32]; // WiFi ssid
unsigned char password[32]; // WiFi密码(如果不为空)
unsigned char mode; // 参考ENUM_AP_MODE
unsigned char enctype; // 参考ENUM_AP_ENCTYPE
unsigned char signal; // 信号强度 0--100%
unsigned char status; // 参考SWifiAp的"status"
}SMsgAVIoctrlGetWifiResp;
(二十三)设定设备目前所设置的WiFi(64bit密码)
命令宏定义:请求(IOTYPE_USER_IPCAM_SETWIFI_REQ2 = 0x0346) | 响应(IOTYPE_USER_IPCAM_GETWIFI_RESP2 = 0x0347)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:该command支持64bit密码,同IOTYPE_USER_IPCAM_SETWIFI_REQ = 0x0342一起发送。APP告知Device要设定设备目前所设置的wifi,Device将设备当前wifi配置放到IOCtrl资料并回传给App。
数据结构:
// 请求结构
typedef struct{
unsigned char ssid[32]; // 连接的WiFi SSID
unsigned char password[64]; // WiFi SSID密码
unsigned char mode; // 参考ENUM_AP_MODE
unsigned char enctype; // 参考ENUM_AP_ENCTYPE
unsigned char reserved[10];
}SMsgAVIoctrlSetWifiReq2;
// 响应结构
typedef struct{
unsigned char ssid[32]; // WiFi ssid
unsigned char password[64]; // WiFi密码(如果不为空)
unsigned char mode; // 参考ENUM_AP_MODE
unsigned char enctype; // 参考ENUM_AP_ENCTYPE
unsigned char signal; // 信号强度 0--100%
unsigned char status; // 参考SWifiAp的"status"
}SMsgAVIoctrlGetWifiResp2;
(二十四)呼叫设备开始接收Audio Frame
命令宏定义:IOTYPE_USER_IPCAM_SPEAKERSTART = 0x0350;
数据流向:APP → Device
功能说明:APP告知Device开始接收音频数据。
数据结构:
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
} SMsgAVIoctrlAVStream;
(二十五)呼叫设备停止接收Audio Frame
命令宏定义:IOTYPE_USER_IPCAM_SPEAKERSTOP = 0x0351;
数据流向:APP → Device
功能说明:APP告知Device停止接收音频数据。
数据结构:
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
} SMsgAVIoctrlAVStream;
(二十六)设置画面镜像/翻转状态
命令宏定义:请求(IOTYPE_USER_IPCAM_SET_VIDEOMODE_REQ = 0x0370) | 响应(IOTYPE_USER_IPCAM_SET_VIDEOMODE_RESP = 0x0371)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device进行镜像/翻转设置,Device告知APP设置结果。
数据结构:
// 视频模式枚举
typedef enum{
AVIOCTRL_VIDEOMODE_NORMAL = 0x00,
AVIOCTRL_VIDEOMODE_FLIP = 0x01, // 垂直翻转
AVIOCTRL_VIDEOMODE_MIRROR = 0x02, // 水平翻转
AVIOCTRL_VIDEOMODE_FLIP_MIRROR = 0x03 // 垂直和水平翻转
}ENUM_VIDEO_MODE;
// 请求结构
typedef struct{
unsigned int channel; // Camera Index
unsigned char mode; // 参考 ENUM_VIDEO_MODE
unsigned char reserved[3];
}SMsgAVIoctrlSetVideoModeReq;
// 响应结构
typedef struct{
unsigned int channel; // Camera Index
unsigned char result; // 0: 成功; otherwise:失败;
unsigned char reserved[3];
}SMsgAVIoctrlSetVideoModeResp;
(二十七)获取画面镜像/翻转设置状态
命令宏定义:请求(IOTYPE_USER_IPCAM_GET_VIDEOMODE_REQ = 0x0372) | 响应(IOTYPE_USER_IPCAM_GET_VIDEOMODE_RESP = 0x0373)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device获取镜像/翻转设置状态,Device告知APP目前画面镜像/翻转的设置状态。
数据结构:
// 请求结构
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
}SMsgAVIoctrlGetVideoModeReq;
// 视频模式枚举
typedef enum{
AVIOCTRL_VIDEOMODE_NORMAL = 0x00,
AVIOCTRL_VIDEOMODE_FLIP = 0x01, // 垂直翻转
AVIOCTRL_VIDEOMODE_MIRROR = 0x02, // 水平翻转
AVIOCTRL_VIDEOMODE_FLIP_MIRROR = 0x03 // 垂直和水平翻转
}ENUM_VIDEO_MODE;
// 响应结构
typedef struct{
unsigned int channel; // Camera Index
unsigned char mode; // 参考 ENUM_VIDEO_MODE
unsigned char reserved[3];
}SMsgAVIoctrlGetVideoModeResp;
(二十八)格式化SD卡
命令宏定义:请求(IOTYPE_USER_IPCAM_FORMATEXTSTORAGE_REQ = 0x0380) | 响应(IOTYPE_USER_IPCAM_FORMATEXTSTORAGE_RESP = 0x0381)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device执行格式化SD卡操作,Device告知APP已格式化SD卡结果。
数据结构:
// 请求结构
typedef struct{
unsigned int storage; // Storage index(例如sdcard插槽= 0,内部闪存= 1,...)
unsigned char reserved[4];
}SMsgAVIoctrlFormatExtStorageReq;
// 响应结构
typedef struct{
unsigned int storage; // Storage index
char result; // 0: 成功;
// -1:不支持格式化指令;
// otherwise: 失败;
unsigned char reserved[3];
}SMsgAVIoctrlFormatExtStorageResp;
(二十九)呼叫Client端开始传送Video Frame
命令宏定义:IOTYPE_USER_IPCAM_START_CLIENT = 0x03FF;
数据流向:APP → Client
功能说明:主要应用于双向视频通话场景。APP告知Client开始发送视频数据。
数据结构:
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
} SMsgAVIoctrlAVStream;
(三十)呼叫Client端停止传送Video Frame
命令宏定义:IOTYPE_USER_IPCAM_STOP_CLIENT = 0x04FF;
数据流向:APP → Client
功能说明:主要应用于双向视频通话场景。APP告知Client停止发送视频数据。
数据结构:
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
} SMsgAVIoctrlAVStream;
(三十一)获取NVR设备Channel接口数量
命令宏定义:请求(IOTYPE_USER_IPCAM_GET_NVR_CHANNEL_NUMBER_REQ = 0x5A4) | 响应(IOTYPE_USER_IPCAM_GET_NVR_CHANNEL_NUMBER_RESP = 0x5A5)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device获取设备Channel的接口数量,Device告知APP目前设备Channel的接口数量。
数据结构:
// 请求结构
typedef struct{
unsigned char reserved[4];
}SMsgAVIoctrlGetNVRChannelNumberReq;
// 响应结构
typedef struct{
unsigned int number; // 设备的通道数量
unsigned char reserved[4];
}SMsgAVIoctrlGetNVRChannelNumberResp;
(三十二)获取通道名称
命令宏定义:请求(IOTYPE_USER_IPCAM_GET_CHANNEL_NAME_REQ = 0x5B0) | 响应(IOTYPE_USER_IPCAM_GET_CHANNEL_NAME_RESP = 0x5B1)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device获取设备的通道名称,Device告知APP设备的通道名称。
数据结构:
// 请求结构
typedef struct{
unsigned char reserved[4];
}SMsgAVIoctrlGetChannelNameReq;
// 通道信息结构
typedef struct{
unsigned int channel; // camera index
unsigned char name[24]; // 通道名称
} SChannelInfo;
// 响应结构
typedef struct{
unsigned char count; // 通道数量
unsigned char reserved[3];
SChannelInfo sChannelInfo[0]; // SChannelInfo数组
}SMsgAVIoctrlGetChannelNameResp;
(三十三)设置通道名称
命令宏定义:请求(IOTYPE_USER_IPCAM_SET_CHANNEL_NAME_REQ = 0x5B2) | 响应(IOTYPE_USER_IPCAM_SET_CHANNEL_NAME_RESP = 0x5B3)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device要设置设备的通道名称,Device告知APP设置设备通道名称的结果。
数据结构:
// 请求结构
typedef struct{
unsigned char count; // SChannelInfos的数量
unsigned char reserved[3];
SChannelInfo sChannelInfo[0]; // SChannelInfo数组
}SMsgAVIoctrlSetChannelNameReq;
// 响应结构
typedef struct{
unsigned char result; // 0:成功; otherwise:失败;
unsigned char reserved[3];
}SMsgAVIoctrlSetResetResp;
(三十四)门铃呼叫
命令宏定义:请求(IOTYPE_XM_CALL_REQ = 0x700) | 响应(IOTYPE_XM_CALL_RESP = 0x701) | 通知(IOTYPE_XM_CALL_IND = 0x702)
数据流向:请求(Device → APP) | 响应(APP → Device) | 通知(Device → APP)
功能说明:主要应用于可视门铃通话场景。Device告知APP有用户呼叫;APP告知Device是否进行接听;Device告知APP是否有其他用户接听。
数据结构:
// 请求结构(Device→APP)
typedef struct{
unsigned char index; // 门索引号,0:门1; 1:门2;
STimeDay stTime; // 事件时间
unsigned char reserved[3];
} SMsgAVIoctrlCallReq;
// 响应结构(APP→Device)
typedef struct{
unsigned char index; // 门索引号,0:门1;1: 门2;
int nAnswered; // 0:挂断;1:接听;
unsigned char reserved[3];
}SMsgAVIoctrlCallResp;
// 通知结构(Device→APP)
typedef struct{
unsigned char index; // 门索引号,0:门1;1:门2;
unsigned char type; // 类型,0:有用户呼叫;1:有其他用户应答;
STimeDay stTime; // 事件时间
unsigned char reserved[3];
}SMsgAVIoctrlCallInd;
(三十五)发送设备名称给设备
命令宏定义:请求(IOTYPE_USER_IPCAM_PUSH_DEVICENAME_REQ = 0x0736) | 响应(IOTYPE_USER_IPCAM_PUSH_DEVICENAME_RESP = 0x0737)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device设置当前设备名称,Device告知APP设备名称更新结果。
数据结构:
// 请求结构
typedef struct{
unsigned int channel; // camera index
char devicename[150]; // 当前设备名称
}SMsgAVIoctrlPushDeviceNameReq;
// 响应结构
typedef struct{
int res; // 0:成功;otherwise:失败;
char reserved[4];
}SMsgAVIoctrlPushDeviceNameResp;
(三十六)同步手机时间给设备
命令宏定义:请求(IOTYPE_USER_IPCAM_SET_TIME_SYNC_REQ = 0x0816) | 响应(IOTYPE_USER_IPCAM_SET_TIME_SYNC_RESP = 0x0817)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device进行手机时间同步,Device告知APP时间同步结果。
数据结构:
// 请求结构
typedef struct{
unsigned short year;
unsigned char month;
unsigned char day;
unsigned char hour;
unsigned char minute;
unsigned char second;
unsigned char nIsSupportSync; // 1:支持; 0:不支持;
int nGMTOffset; // GMT之间的偏移量(以秒为单位)
} SMsgAVIoctrlTimeSyncReq;
// 响应结构
typedef struct{
unsigned int result; // 0:成功;otherwise:失败;
unsigned char reserved[4];
} SMsgAVIoctrlTimeSyncResp;
(三十七)结束通话
命令宏定义:IOTYPE_USER_IPCAM_CALL_END = 0x0900;
数据流向:APP → 另一端
功能说明:主要应用于双向视频通话场景。APP告知对方结束当前通话。
数据结构:
typedef struct{
unsigned char myID[6]; // 我的ID
unsigned char reserved[2];
}SMsgAVIoctrlCallEnd;
(三十八)呼叫方发出通话请求
命令宏定义:IOTYPE_USER_IPCAM_CALL_REQ = 0x0901;
数据流向:呼叫方 → 被呼叫方
功能说明:主要应用于双向视频通话场景。呼叫方向被呼叫方发起通话请求。
数据结构:
// 账户信息结构
typedef struct{
unsigned char UID[20]; // UID
unsigned char myID[6]; // ID
unsigned char reserved[2];
}AccountInfo;
// 通话请求结构
typedef struct{
unsigned char myID[6]; // 我的 ID
unsigned char myUID[20]; // 我的 UID
unsigned char callType; // 0:单向视频;1:双向视频;
unsigned char beInvited; // 0:表示邀请;1:表示被邀请;
unsigned char infoCount; // 其他参与者的数量
unsigned char reserved[3];
AccountInfo info[]; // 其他参与者的信息
}SMsgAVIoctrlCallReq;
(三十九)被呼叫方响应呼叫请求
命令宏定义:IOTYPE_USER_IPCAM_CALL_RESP = 0x0902;
数据流向:被呼叫方 → 呼叫方
功能说明:主要应用于双向视频通话场景。被呼叫方响应呼叫方发起的通话请求。
数据结构:
typedef struct{
unsigned char answer; // 0:拒绝; 1:接听;
unsigned char myID[6]; // myID
unsigned char reserved[1];
}SMsgAVIoctrlCallResp;
(四十)云台控制
命令宏定义:IOTYPE_USER_IPCAM_PTZ_COMMAND = 0x1001;
数据流向:APP → Device
功能说明:APP告知Device进行云台控制操作。
数据结构:
// AVIOCTRL PTZ Command 枚举定义
typedef enum{
AVIOCTRL_PTZ_STOP = 0,
AVIOCTRL_PTZ_UP = 1,
AVIOCTRL_PTZ_DOWN = 2,
AVIOCTRL_PTZ_LEFT = 3,
AVIOCTRL_PTZ_LEFT_UP = 4,
AVIOCTRL_PTZ_LEFT_DOWN = 5,
AVIOCTRL_PTZ_RIGHT = 6,
AVIOCTRL_PTZ_RIGHT_UP = 7,
AVIOCTRL_PTZ_RIGHT_DOWN = 8,
AVIOCTRL_PTZ_AUTO = 9,
AVIOCTRL_PTZ_SET_POINT = 10,
AVIOCTRL_PTZ_CLEAR_POINT = 11,
AVIOCTRL_PTZ_GOTO_POINT = 12,
AVIOCTRL_PTZ_SET_MODE_START = 13,
AVIOCTRL_PTZ_SET_MODE_STOP = 14,
AVIOCTRL_PTZ_MODE_RUN = 15,
AVIOCTRL_PTZ_MENU_OPEN = 16,
AVIOCTRL_PTZ_MENU_EXIT = 17,
AVIOCTRL_PTZ_MENU_ENTER = 18,
AVIOCTRL_PTZ_FLIP = 19,
AVIOCTRL_PTZ_START = 20,
AVIOCTRL_LENS_APERTURE_OPEN = 21,
AVIOCTRL_LENS_APERTURE_CLOSE = 22,
AVIOCTRL_LENS_ZOOM_IN = 23,
AVIOCTRL_LENS_ZOOM_OUT = 24,
AVIOCTRL_LENS_FOCAL_NEAR = 25,
AVIOCTRL_LENS_FOCAL_FAR = 26,
AVIOCTRL_AUTO_PAN_SPEED = 27,
AVIOCTRL_AUTO_PAN_LIMIT = 28,
AVIOCTRL_AUTO_PAN_START = 29,
AVIOCTRL_PATTERN_START = 30,
AVIOCTRL_PATTERN_STOP = 31,
AVIOCTRL_PATTERN_RUN = 32,
AVIOCTRL_SET_AUX = 33,
AVIOCTRL_CLEAR_AUX = 34,
AVIOCTRL_MOTOR_RESET_POSITION = 35
}ENUM_PTZCMD;
// 云台控制结构
typedef struct{
unsigned char control; // 云台控制指令,参考 ENUM_PTZCMD.
unsigned char speed; // 云台转动的速度
unsigned char point; // app未使用
unsigned char limit; // app未使用
unsigned char aux; // app未使用
unsigned char channel; // camera index
unsigned char reserve[2];
} SMsgAVIoctrlPtzCmd;
(四十一)APP获取第一张I帧图片
命令宏定义:IOTYPE_USER_IPCAM_RECEIVE_FIRST_IFRAME = 0x1002;
数据流向:APP → Device
功能说明:APP告知Device接收到第一张I帧图片。
数据结构:
typedef struct{
unsigned int channel; // camera index
char reserved[4];
}SMsgAVIoctrlReceiveFirstIFrame;
(四十二)设备进行OTA升级
命令宏定义:请求(IOTYPE_USER_IPCAM_OTA_REQ = 0x8001) | 响应(IOTYPE_USER_IPCAM_OTA_RESP = 0x8002)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device开始进行OTA升级,Device告知APPOTA升级进度及结果。
数据结构:
// 请求结构
typedef struct{
unsigned char file_checksum[32]; // MD5校验码
unsigned char url[256]; // 下载固件url链接
unsigned int file_size; // 固件包大小
unsigned char reserved[4];
}SMsgAVIoctrlOTAReq;
// 响应结构
typedef struct{
unsigned int progress; // 下载固件进度
unsigned int endflag; // 1:下载完成;0:下载中;
unsigned char reserved[8];
}SMsgAVIoctrlOTAResp;
(四十三)获取设备信息(新)
命令宏定义:请求(IOTYPE_USER_IPCAM_DEVICE_INFO_REQ = 0x8015) | 响应(IOTYPE_USER_IPCAM_DEVICE_INFO_RESP = 0x8016)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:注:新设备需对接OTA功能时建议使用,与旧cmd IOTYPE_USER_IPCAM_DEVINFO_REQ = 0x0330同作用。APP告知Device要获取设备资讯,Device告知APP设备详细资讯。
数据结构:
// 请求结构
typedef struct{
unsigned char reserved[8];
} SMsgAVIoctrlDeviceInfoReq;
// 响应结构
typedef struct{
unsigned char model[32]; // 产品型号
unsigned char product[32]; // 产品名
unsigned char vender[32]; // 制造商(需与KOTA服务器上的厂商一致)
unsigned char version[64]; // 当前版本号
unsigned int free; // SD卡剩余空间
unsigned int total; // SD卡总空间
unsigned char region; // 获取设备所在位置,0:中国大陆区;1:非中国大陆区;
unsigned char reserved[3];
} SMsgAVIoctrlDeviceInfoResp;
注:以上参数用于拼接向KOTA服务器获取升级文件的下载地址请求,故需与在KOTA服务器上创建的vender,product,model等信息保持一致,且注意区分设备所在区域。
(四十四)获取设备是否支持OTA升级
命令宏定义:请求(IOTYPE_USER_IPCAM_DEVICE_SUPPORT_OTA_REQ = 0x800A) | 响应(IOTYPE_USER_IPCAM_DEVICE_SUPPORT_OTA_RESP = 0x800B)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device要获取设备是否支持OTA升级,Device告知APP设备OTA升级支持状态。
数据结构:
// 请求结构
typedef struct{
unsigned char reserved[8];
}SMsgAVIoctrlDeviceSupportOTAReq;
// 响应结构
typedef struct{
unsigned char isSupport; // 0:不支持;1:支持;
unsigned char reserved[4];
} SMsgAVIoctrlDeviceSupportOTAResp;
(四十五)获取设备是否支持云存储
命令宏定义:请求(IOTYPE_USER_IPCAM_DEVICE_SUPPORT_CLOUD_REQ = 0x800C) | 响应(IOTYPE_USER_IPCAM_DEVICE_SUPPORT_CLOUD_RESP = 0x800D)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device查询是否支持云存储,Device告知APP设备云存储支持状态。
数据结构:
// 请求结构
typedef struct{
  unsigned char reserved[8];
}SMsgAVIoctrlDeviceSupportCloudReq;
// 响应结构
typedef struct{
  unsigned int result; // 0:不支持;1:支持;
  unsigned char reserved[4];
} SMsgAVIoctrlDeviceSupportCloudResp;
(四十六)设置设备云存储录像状态
命令宏定义:请求(IOTYPE_USER_IPCAM_DEVICE_SET_CLOUD_REQ = 0x8010) | 响应(IOTYPE_USER_IPCAM_DEVICE_SET_CLOUD_RESP = 0x8011)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device开启或关闭云存储录像功能,Device告知APP设置结果。
数据结构:
// 请求结构
typedef struct{
  unsigned int channel; // camera index
  unsigned int isOn; // 1:开启; 0:关闭;
}SMsgAVIoctrlSetCloudReq;
// 响应结构
typedef struct{
  unsigned int channel; // camera index
  unsigned int result; // 0:成功; 1:失败;
}SMsgAVIoctrlSetCloudResp;
(四十七)获取设备云存储录像状态
命令宏定义:请求(IOTYPE_USER_IPCAM_DEVICE_GET_CLOUD_REQ = 0x8012) | 响应(IOTYPE_USER_IPCAM_DEVICE_GET_CLOUD_RESP = 0x8013)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP获取Device云存储录像状态,Device告知APP当前云存储录像状态。
数据结构:
// 请求结构
typedef struct{
  unsigned int channel; // camera index
  unsigned char reserved[4];
}SMsgAVIoctrlGetCloudReq;
// 响应结构
typedef struct{
  unsigned int channel; // camera index
  unsigned int isOn; // 1:开启; 0:关闭;
}SMsgAVIoctrlGetCloudResp;
(四十八)获取有SD卡事件的日期
命令宏定义:请求(IOTYPE_USER_IPCAM_GET_EVENT_DATE_REQ = 0x9000) | 响应(IOTYPE_USER_IPCAM_GET_EVENT_DATE_RESP = 0x9001)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device获取有SD卡事件的日期,Device告知APP包含SD卡事件的日期列表。
数据结构:
// 请求结构
typedef struct{
  unsigned int channel; // Camera Index
  unsigned int eventType; // 查询的事件类型,0:全部;1:移动侦测;2:全时录像;(默认是0)
  STimeDay stStartTime; // 开始时间
  STimeDay stEndTime; // 结束时间
  unsigned char reserved[8];
} SMsgAVIoctrlGetEventDateReq;
// 日期结构
typedef struct{
  char date[8]; // 事件的日期,例如:20200210,后面依次还有count-1个date[8]
} EventDate;
// 响应结构
typedef struct{
  unsigned int count; // 事件的日期数量
  unsigned char reserved[4];
  EventDate eventDate[1]; // 事件的日期
} SMsgAVIoctrlGetEventDateResp;
(四十九)获取设备人形侦测开关
命令宏定义:请求(IOTYPE_USER_IPCAM_GET_HUMANDETECTION_REQ = 0x9002) | 响应(IOTYPE_USER_IPCAM_GET_HUMANDETECTION_RESP = 0x9003)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device查询人形侦测开关状态,Device告知APP人形侦测开关查询结果。
数据结构:
// 请求结构
typedef struct{
  unsigned char reserved[4];
} SMsgAVIoctrlGetHumanDetectionReq;
// 响应结构
typedef struct{
  unsigned int result; // 1:开启;其他:关闭;
  unsigned char reserved[4];
} SMsgAVIoctrlGetHumanDetectionResp;
(五十)设置设备人形侦测开关
命令宏定义:请求(IOTYPE_USER_IPCAM_SET_HUMANDETECTION_REQ = 0x9004) | 响应(IOTYPE_USER_IPCAM_SET_HUMANDETECTION_RESP = 0x9005)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device设置人形侦测开关状态,Device告知APP人形侦测开关设置结果。
数据结构:
// 请求结构
typedef struct{
  unsigned int isOn; // 1:开启;0:关闭;
  unsigned char reserved[4];
} SMsgAVIoctrlSetHumanDetectionReq;
// 响应结构
typedef struct{
  unsigned int result; // 0:成功;其他:失败;
  unsigned char reserved[4];
} SMsgAVIoctrlSetHumanDetectionResp;
(五十一)获取设备夜视状态
命令宏定义:请求(IOTYPE_USER_IPCAM_GET_NIGHTVISION_REQ = 0x9006) | 响应(IOTYPE_USER_IPCAM_GET_NIGHTVISION_RESP = 0x9007)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device获取夜视设置状态,Device告知APP当前夜视设置状态。
数据结构:
// 请求结构
typedef struct{
  unsigned char reserved[4];
} SMsgAVIoctrlGetNightVisionReq;
// 响应结构
typedef struct{
  unsigned int result; // 0:关闭;1:开启;2:自动;
  unsigned char reserved[4];
} SMsgAVIoctrlGetNightVisionResp;
(五十二)设置设备夜视状态
命令宏定义:请求(IOTYPE_USER_IPCAM_SET_NIGHTVISION_REQ = 0x9008) | 响应(IOTYPE_USER_IPCAM_SET_NIGHTVISION_RESP = 0x9009)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device设置夜视状态,Device告知APP夜视设置结果。
数据结构:
// 请求结构
typedef struct{
  unsigned int isOn; // 0:关闭;1:开启;2:自动;
  unsigned char reserved[4];
} SMsgAVIoctrlSetNightVisionReq;
// 响应结构
typedef struct{
  unsigned int result; // 0:成功;其他:失败;
  unsigned char reserved[4];
} SMsgAVIoctrlSetNightVisionResp;
(五十三)获取设备夏令时开关
命令宏定义:请求(IOTYPE_USER_IPCAM_GET_SUMMERTIME_REQ = 0x9010) | 响应(IOTYPE_USER_IPCAM_GET_SUMMERTIME_RESP = 0x9011)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device查询夏令时开关状态,Device告知APP夏令时开关查询结果。
数据结构:
// 请求结构
typedef struct{
  unsigned char reserved[4];
} SMsgAVIoctrlGetSummerTimeReq;
// 响应结构
typedef struct{
  unsigned int result; // 1:开启;其他:关闭;
  unsigned char reserved[4];
} SMsgAVIoctrlGetSummerTimeResp;
(五十四)设置设备夏令时开关
命令宏定义:请求(IOTYPE_USER_IPCAM_SET_SUMMERTIME_REQ = 0x9012) | 响应(IOTYPE_USER_IPCAM_SET_SUMMERTIME_RESP = 0x9013)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device设置夏令时开关状态,Device告知APP夏令时开关设置结果。
数据结构:
// 请求结构
typedef struct{
  unsigned int isOn; // 1:开启; 0:关闭;
  unsigned char reserved[4];
} SMsgAVIoctrlSetSummerTimeReq;
// 响应结构
typedef struct{
  unsigned int result; // 0:成功;其他:失败;
  unsigned char reserved[4];
} SMsgAVIoctrlSetSummerTimeResp;
(五十五)获取设备CertKey及ProfileVer
命令宏定义:请求(IOTYPE_USER_IPCAM_GET_PROFILE_REQ = 0x9014) | 响应(IOTYPE_USER_IPCAM_GET_PROFILE_RESP = 0x9015)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device需要获取certKey、profileVer,Device告知APP设备的certKey和profileVer信息。
数据结构:
// 请求结构
typedef struct{
  unsigned char reserved[8];
}SMsgAVIoctrlGetProfileReq;
// 响应结构
typedef struct{
  unsigned char certKey[40];
  unsigned char profileVer[20]; // profile配置文件版本号
  unsigned char reserved[8];
} SMsgAVIoctrlGetProfileResp;
(五十六)获取上传文件的通道列表
命令宏定义:请求(IOTYPE_USER_IPCAM_UPLOAD_FILE_REQ = 0x9027) | 响应(IOTYPE_USER_IPCAM_UPLOAD_FILE_RESP = 0x9028)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device需要获取上传文件的通道列表,Device告知APP设备的可上传类型、可上传的连接通道。
数据结构:
// 文件信息结构
typedef struct{
  unsigned char fileName[64]; // 文件名称
}Fileinfo;
// 请求结构
typedef struct{
  int functionalType; // 功能类型: 1.预设语音 2.其他功能类型
  int count; // 需要上传文件的总数
  Fileinfo Filename[10]; // 上传文件名集合
} SMsgAVIoctrlFileUploadReq;
// 传输类型枚举
typedef enum{
  TKTransferType_AVAPI = 0, // AVAPI 上传类型
  TKTransferType_RDT = 1 // RDT 上传类型
}ENUM_TKTransferType;
// 通道信息结构
typedef struct{
  unsigned int channel; // 通道 id
}ChannelInfo;
// 响应结构
typedef struct{
  unsigned int type; // TKTransferType 上传类型
  int count; // 通道集合的总数(最多10个) ; -1:表示失败;
  ChannelInfo channel[10];
} SMsgAVIoctrlFileUploadResp;
(五十七)获取下载SD卡事件的通道列表
命令宏定义:请求(IOTYPE_USER_IPCAM_EVENT_DOWNLOAD_FILE_REQ = 0x9029) | 响应(IOTYPE_USER_IPCAM_EVENT_DOWNLOAD_FILE_RESP = 0x902A)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device需要获取下载SD卡事件的通道列表,Device告知APP设备的下载类型、可下载的连接通道。
数据结构:
// 请求结构
typedef struct{
  int count; // 需要下载事件的个数
  STimeDay sTimeDayList [10]; // 需要下载SD卡事件的时间集合(每次最多10个)
}SMsgAVIoctrlEventFileDownReq;
// 传输类型枚举
typedef enum{
  TKTransferType_AVAPI = 0, // AVAPI下载类型
  TKTransferType_RDT = 1 // RDT下载类型
}ENUM_TKTransferType;
// 通道信息结构
typedef struct{
  unsigned int channel; // 通道 id
}ChannelInfo;
// 响应结构
typedef struct{
  unsigned int type; // TKTransferType 下载类型
  int count; // 通道集合的总数(最多10个) ; -1:表示失败;
  ChannelInfo channel[10];
} SMsgAVIoctrlEventFileDownResp;
(五十八)获取预设语音列表
命令宏定义:请求(IOTYPE_USER_IPCAM_GET_VOICE_FILELIST_REQ = 0x902B) | 响应(IOTYPE_USER_IPCAM_GET_VOICE_FILELIST_RESP = 0x902C)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device需要获取预设语音文件名称列表,Device告知APP设备的预设语音列表。
数据结构:
// 请求结构
typedef struct{
  int channel; // 通道号
}SMsgAVIoctrlGetVoiceFileReq;
// 预设语音信息结构
typedef struct{
  int isPresetSpeech; // 是否预设语音,1:当前预设语音,0:当前不是预设语音;
  char fileName[64]; // 文件名称
}PresetSpeechInfo;
// 响应结构
typedef struct{
  int count; // 文件名称总数 (最多10个); -1:表示失败;
  PresetSpeechInfo presetSpeechInfo [10];
} SMsgAVIoctrlGetVoiceFileResp;
(五十九)播放设备存储的预设语音
命令宏定义:请求(IOTYPE_USER_IPCAM_PLAY_VOICE_REQ = 0x902D) | 响应(IOTYPE_USER_IPCAM_PLAY_VOICE_RESP = 0x902E)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device开始播放预设语音,Device告知APP语音播放结果。
数据结构:
// 请求结构
typedef struct{
  int channel; // 通道号
}SMsgAVIoctrlPlayVoiceReq;
// 响应结构
typedef struct{
  int result; // 1:成功播放;其他:返回播放失败;
} SMsgAVIoctrlPlayVoiceResp;
(六十)获取设备是否支持双向视频
命令宏定义:请求(IOTYPE_USER_IPCAM_DEVICE_SUPPORT_DOUBLEVIDEO_REQ = 0x9030) | 响应(IOTYPE_USER_IPCAM_DEVICE_SUPPORT_DOUBLEVIDEO_RESP = 0x9031)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP发送请求获取设备是否支持双向视频,Device告知APP设备双向视频支持状态。
数据结构:
// 请求结构
typedef struct{
  unsigned char reserved[8];
}SMsgAVIoctrlDeviceSupportDoubleVideoReq;
// 响应结构
typedef struct{
  unsigned char isSupport; // 0:不支持;1:支持;
  unsigned char reserved[3];
} SMsgAVIoctrlDeviceSupportDoubleVideoResp;
(六十一)发起双向视频
命令宏定义:请求(IOTYPE_USER_IPCAM_DOUBLEVIDEOCALL_REQ = 0x9032) | 响应(IOTYPE_USER_IPCAM_DOUBLEVIDEOCALL_RESP = 0x9033)
数据流向:请求(呼叫方 → 被呼叫方) | 响应(被呼叫方 → 呼叫方)
功能说明:呼叫方向被呼叫方发起双向视频通话请求,被呼叫方响应呼叫方的通话请求。
数据结构:
// 请求结构(呼叫方→被呼叫方)
typedef struct{
  unsigned char reserved[8];
}SMsgAVIoctrlDoubleVideoCallReq;
// 响应结构(被呼叫方→呼叫方)
typedef struct{
  unsigned char answer; // 0:拒绝;1:接听;
  unsigned char reserved[3];
} SMsgAVIoctrlDoubleVideoCallResp;
(六十二)获取SD卡挂载状态
命令宏定义:请求(IOTYPE_USER_IPCAM_SDINFO_REQ = 0x9034) | 响应(IOTYPE_USER_IPCAM_SDINFO_RESP = 0x9035)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP发送请求获取设备SD卡挂载状态,Device告知APP设备SD卡当前挂载状态。
数据结构:
// 请求结构
typedef struct{
  unsigned char reserved[8];
}SMsgAVIoctrlSdInfoReq;
// 响应结构
typedef struct{
  unsigned char state; // 0:sd卡异常;1:未插卡;2:已插卡;
  unsigned char reserved[3];
} SMsgAVIoctrlSdInfoResp;
(六十三)获取设备当前对讲状态
命令宏定义:请求(IOTYPE_USER_IPCAM_SPEAK_STATE_REQ = 0x9036) | 响应(IOTYPE_USER_IPCAM_SPEAK_STATE_RESP = 0x9037)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP发送请求获取设备当前对讲状态,Device告知APP设备当前对讲状态。
数据结构:
// 请求结构
typedef struct{
  unsigned char reserved[8];
}SMsgAVIoctrlSpeakStateReq;
// 响应结构
typedef struct{
  unsigned char state; // 0:未占用(允许app进行对讲);1:被占用(不允许app进行对讲);2:不支持(设备没有对讲功能);
  unsigned char reserved[3];
} SMsgAVIoctrlSpeakStateResp;
(六十四)获取移动追踪开关状态
命令宏定义:请求(IOTYPE_USER_IPCAM_GET_MOTION_TRACKING_REQ = 0x9038) | 响应(IOTYPE_USER_IPCAM_GET_MOTION_TRACKING_RESP = 0x9039)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device获取移动追踪状态,Device告知APP当前移动追踪状态。
数据结构:
// 请求结构
typedef struct{
  unsigned int channel; // Camera Index
  unsigned char reserved[4];
}SMsgAVIoctrlGetMotionTrackingReq;
// 追踪类型枚举
typedef enum{
  TRACE_TYPE_OBJECT = 0x01, // 物体追踪
  TRACE_TYPE_HUMAN = 0x02, // 人形追踪
  TRACE_TYPE_AUDIO = 0x03 // 听音辨位
}ENUM_TRACE_TYPE;
// 追踪任务结构
typedef struct{
  unsigned int traceType; // 追踪类型,详情查看ENUM_TRACE_TYPE
  unsigned int isOn; // 是否开启, 0:关闭;1:开启;
  unsigned char reserved[4];
}SMsgTraceTask;
// 响应结构
typedef struct{
  unsigned int channel; // Camera Index
  unsigned int count; // SMsgTraceTask数组的长度
  unsigned char reserved[4]; // 保留位
  SMsgTraceTask task[1] ; // SMsgTraceTask的数组;count是数组的长度;
}SMsgAVIoctrlGetMotionTrackingResp;
(六十五)设置移动追踪开关状态
命令宏定义:请求(IOTYPE_USER_IPCAM_SET_MOTION_TRACKING_REQ = 0x903A) | 响应(IOTYPE_USER_IPCAM_SET_MOTION_TRACKING_RESP = 0x903B)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device设置追踪开关状态,Device告知APP移动追踪设置结果。
数据结构:
// 追踪类型枚举
typedef enum{
  TRACE_TYPE_OBJECT = 0x01, // 物体追踪
  TRACE_TYPE_HUMAN = 0x02, // 人形追踪
  TRACE_TYPE_AUDIO = 0x03 // 听音辨位
}ENUM_TRACE_TYPE;
// 追踪任务结构
typedef struct{
  unsigned int traceType; // 追踪类型,详情查看ENUM_TRACE_TYPE
  unsigned int isOn; // 是否开启, 0:关闭;1:开启;
  unsigned char reserved[4];
}SMsgTraceTask;
// 设置结果结构
typedef struct{
  unsigned int traceType; // 设置的追踪类型 详情查看ENUM_TRACE_TYPE
  unsigned int result; // 当前设置类型是否设置成功,0:成功;others:失败;
  unsigned char reserved[4];
}SMsgAVIoctrlSetResult;
// 请求结构
typedef struct{
  unsigned int channel; // Camera Index
  unsigned int count; // SMsgTraceTask数组的长度
  unsigned char reserved[4]; // 保留位
  SMsgTraceTask task[1] ; // SMsgTraceTask的数组;count是数组的长度;
}SMsgAVIoctrlSetMotionTrackingReq;
// 响应结构
typedef struct{
  unsigned int count; // 设置返回结果的数量
  SMsgAVIoctrlSetResult result[1]; // 设置返回结果的数组
  unsigned char reserved[4];
}SMsgAVIoctrlSetMotionTrackingResp;
(六十六)获取指示灯状态
命令宏定义:请求(IOTYPE_USER_IPCAM_GET_PILOT_LAMP_REQ = 0x903C) | 响应(IOTYPE_USER_IPCAM_GET_PILOT_LAMP_RESP = 0x903D)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device获取指示灯的状态,Device告知APP当前指示灯状态。
数据结构:
// 请求结构
typedef struct{
  unsigned int channel; // Camera Index
  unsigned char reserved[4];
}SMsgAVIoctrlGetPilotLampReq;
// 响应结构
typedef struct{
  unsigned int channel; // Camera Index
  unsigned int lightState; // 指示灯的状态,0:关闭;1:开启;
  unsigned char reserved[8];
}SMsgAVIoctrlGetPilotLampResp;
(六十七)设置指示灯状态
命令宏定义:请求(IOTYPE_USER_IPCAM_SET_PILOT_LAMP_REQ = 0x903E) | 响应(IOTYPE_USER_IPCAM_SET_PILOT_LAMP_RESP = 0x903F)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device设置指示灯状态,Device告知APP指示灯设置结果。
数据结构:
// 请求结构
typedef struct{
  unsigned int channel; // Camera Index
  unsigned int lightState; // 指示灯的状态, 0:关闭; 1:开启;
  unsigned char reserved[8];
}SMsgAVIoctrlSetPilotLampReq;
// 响应结构
typedef struct{
  unsigned int result; // 0:成功;otherwise:失败;
  unsigned char reserved[4];
}SMsgAVIoctrlSetPilotLampResp;
(六十八)设置设备重启
命令宏定义:请求(IOTYPE_USER_IPCAM_SET_RESTART_REQ = 0x9040) | 响应(IOTYPE_USER_IPCAM_SET_RESTART_RESP = 0x9041)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device重启设备,Device告知APP设备重启结果。
数据结构:
// 请求结构
typedef struct{
  unsigned int channel; // Camera Index
  unsigned char reserved[4];
}SMsgAVIoctrlSetRestartReq;
// 响应结构
typedef struct{
  unsigned int result; // 0:成功;otherwise:失败;
  unsigned char reserved[4];
}SMsgAVIoctrlSetRestartResp;
(六十九)获取智能侦测状态
命令宏定义:请求(IOTYPE_USER_IPCAM_GET_INTELLIGENT_DETECTION_REQ) | 响应(IOTYPE_USER_IPCAM_GET_INTELLIGENT_DETECTION_RESP)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device获取智能侦测状态,Device告知APP当前智能侦测状态。
数据结构:
// 请求结构
typedef struct{
  unsigned int channel; // Camera Index
  unsigned char reserved[4];
}SMsgAVIoctrlGetIntelligentDetectionReq;
// 侦测任务结构
typedef struct{
  unsigned int detectionType; // 侦测类型(类型详情请参考ENUM_EVENTTYPE)
  unsigned int isOn; // 是否开启,0:关闭;1:开启;
  unsigned int sensitivity; // 灵敏度
  unsigned char reserved[4]; // 保留位
}SMsgDetectionTask;
// 响应结构
typedef struct{
  unsigned int channel; // Camera Index
  unsigned int count; // SMsgDetectionTask数组的长度
  unsigned char reserved[4]; // 保留位
  SMsgDetectionTask task[1] ; // 侦测类型的数组;count是数组的长度;
}SMsgAVIoctrlGetIntelligentDetectionResp;
(七十)设置智能侦测状态
命令宏定义:请求(IOTYPE_USER_IPCAM_SET_INTELLIGENT_DETECTION_REQ) | 响应(IOTYPE_USER_IPCAM_SET_INTELLIGENT_DETECTION_RESP)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device设置智能侦测状态,Device告知APP智能侦测设置结果。
数据结构:
// 侦测任务结构
typedef struct{
  unsigned int detectionType; // 侦测类型(类型详情请参考ENUM_EVENTTYPE)
  unsigned int isOn; // 是否开启,0:关闭;1:开启;
  unsigned int sensitivity; // 灵敏度
  unsigned char reserved[4]; // 保留位
}SMsgDetectionTask;
// 设置结果结构
typedef struct{
  unsigned int detectionType; // 设置的侦测类型(类型详情请参考ENUM_EVENTTYPE)
  unsigned int result; // 当前设置类型是否设置成功0:成功;otherwise:失败;
  unsigned char reserved[4];
} SMsgAVIoctrlSetDetectResult;
// 请求结构
typedef struct{
  unsigned int channel; // Camera Index
  unsigned int count; // SMsgDetectionTask数组的长度
  unsigned char reserved[4]; // 保留位
  SMsgDetectionTask task[1] ; // 侦测类型的数组;count是数组的长度;
}SMsgAVIoctrlSetIntelligentDetectionReq;
// 响应结构
typedef struct{
  unsigned int count; // 设置返回结果的数量
  SMsgAVIoctrlSetDetectResult result[1]; // 设置返回结果的数组
  unsigned char reserved[4];
}SMsgAVIoctrlSetIntelligentDetectionResp;
(七十一)获取休眠设置状态
命令宏定义:请求(IOTYPE_USER_IPCAM_GET_DORMANCY_REQ = 0x9046) | 响应(IOTYPE_USER_IPCAM_GET_DORMANCY_RESP = 0x9047)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device获取休眠设置状态,Device告知APP当前休眠设置状态。
数据结构:
// 休眠定时任务结构
typedef struct{
  STimeDay startTime; // 开启时间
  STimeDay endTime; // 结束时间
  unsigned int executionTime; // 实行时间,0:执行一次;1:每天;2:工作日;3:周末;
  unsigned int isOn; // 是否开启,0:关闭;1:开启;
  unsigned char reserved[4];
}SMsgDormancyTask;
// 请求结构
typedef struct{
  unsigned int channel; // Camera Index
  unsigned char reserved[4];
}SMsgAVIoctrlGetDormancyReq;
// 响应结构
typedef struct{
  unsigned int channel; // Camera Index
  unsigned int sleepState; // 设备状态,0:关闭;1:开启;2:定时休眠中;
  unsigned int count; // 设置定时休眠的数组,最多5个
  unsigned int currentSleepState; // 当前设备是否处在休眠中,0:不休眠;1:休眠;
  SMsgDormancyTask task[1]; // 参考SMsgDormancyTask
}SMsgAVIoctrlGetDormancyResp;
(七十二)设置休眠设置状态
命令宏定义:请求(IOTYPE_USER_IPCAM_SET_DORMANCY_REQ = 0x9048) | 响应(IOTYPE_USER_IPCAM_SET_DORMANCY_RESP = 0x9049)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device设置休眠状态,Device告知APP休眠设置结果。
数据结构:
// 休眠定时任务结构
typedef struct{
  STimeDay startTime; // 开启时间
  STimeDay endTime; // 结束时间
  unsigned int executionTime; // 实行时间,0:执行一次;1:每天;2:工作日;3:周末;
  unsigned int isOn; // 是否开启,0:关闭;1:开启;
  unsigned char reserved[4];
}SMsgDormancyTask;
// 请求结构
typedef struct{
  unsigned int channel; // Camera Index
  unsigned int sleepState; // 设备状态,0:关闭;1:开启;2:定时休眠中;
  unsigned int count; // 设置定时休眠的数组,1-5最多5个
  unsigned char reserved[4];
  SMsgDormancyTask task[1];
}SMsgAVIoctrlSetDormancyReq;
// 响应结构
typedef struct{
  unsigned int result; // 0:成功;otherwise:失败;
  unsigned char reserved[4];
}SMsgAVIoctrlSetDormancyResp;
(七十三)获取时区设置信息
命令宏定义:请求(IOTYPE_USER_IPCAM_GET_TIME_ZONE_REQ) | 响应(IOTYPE_USER_IPCAM_GET_TIME_ZONE_RESP)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device获取时区等状态信息,Device告知APP当前时区、语言、地区等状态信息。
数据结构:
// 请求结构
typedef struct{
  unsigned int channel; // Camera Index
  unsigned char reserved[4];
}SMsgAVIoctrlGetTimeZoneReq;
// 语言类型枚举
typedef enum{
  LANGUAGE_TYPE_CN = 0x01, // 中文-简体
  LANGUAGE_TYPE_CN_TW = 0x02, // 中文-繁体
  LANGUAGE_TYPE_EN = 0x03, // 英语
  LANGUAGE_TYPE_FR = 0x04, // 法语
  LANGUAGE_TYPE_DE = 0x05, // 德语
  LANGUAGE_TYPE_PT = 0x06, // 葡萄牙语
  LANGUAGE_TYPE_ES = 0x07, // 西班牙语
  LANGUAGE_TYPE_TR = 0x08, // 土耳其语
  LANGUAGE_TYPE_RU = 0x09, // 俄语
  LANGUAGE_TYPE_IT = 0x10, // 意大利语
  LANGUAGE_TYPE_CS = 0x11, // 捷克语
  LANGUAGE_TYPE_PL = 0x12, // 波兰语
  LANGUAGE_TYPE_NL = 0x13, // 荷兰语
  LANGUAGE_TYPE_JA = 0x14 // 日语
}ENUM_LANGUAGE_TYPE;
// 响应结构
typedef struct{
  unsigned int channel; // Camera Index
  unsigned long timestamp; // UTC时间戳,精确到秒(s)
  unsigned int isFollowingSystem; // 是否跟随系统,1:跟随;0:不跟随;
  int timeZone ; // -12~12 时区(包含夏令时偏移量),精确到分钟(比如:英国在UTC 0 时区,夏令时+1,则timeZone = 60)
  unsigned char region[128] ; // 地区
  unsigned int language; // 语系(参考ENUM_LANGUAGE_TYPE)
  unsigned char reserved[4];
}SMsgAVIoctrlGetTimeZoneResp;
备注:long一般是占8个字节,因为考虑有些编译器做字节对齐的时候,会进行内存优化,建议struct定义的时候加上免优化的选项(linux一般是在struct后加上__attribute__((packed)))
(七十四)设置设备时区
命令宏定义:请求(IOTYPE_USER_IPCAM_SET_TIME_ZONE_REQ) | 响应(IOTYPE_USER_IPCAM_SET_TIME_ZONE_RESP)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device设置时区等状态信息,Device告知APP时区设置结果。
数据结构:
// 语言类型枚举
typedef enum{
  LANGUAGE_TYPE_CN = 0x01, // 中文-简体
  LANGUAGE_TYPE_CN_TW = 0x02, // 中文-繁体
  LANGUAGE_TYPE_EN = 0x03, // 英语
  LANGUAGE_TYPE_FR = 0x04, // 法语
  LANGUAGE_TYPE_DE = 0x05, // 德语
  LANGUAGE_TYPE_PT = 0x06, // 葡萄牙语
  LANGUAGE_TYPE_ES = 0x07, // 西班牙语
  LANGUAGE_TYPE_TR = 0x08, // 土耳其语
  LANGUAGE_TYPE_RU = 0x09, // 俄语
  LANGUAGE_TYPE_IT = 0x10, // 意大利语
  LANGUAGE_TYPE_CS = 0x11, // 捷克语
  LANGUAGE_TYPE_PL = 0x12, // 波兰语
  LANGUAGE_TYPE_NL = 0x13, // 荷兰语
  LANGUAGE_TYPE_JA = 0x14 // 日语
}ENUM_LANGUAGE_TYPE;
// 请求结构
typedef struct{
  unsigned int channel; // Camera Index
  unsigned long timestamp; // UTC时间戳,精确到秒(s)
  unsigned int isFollowingSystem; // 是否跟随系统,1:跟随;0:不跟随;
  int timeZone ; // -12~12 时区(包含夏令时偏移量),精确到分钟(比如:英国在UTC 0 时区,夏令时+1,则timeZone = 60)
  unsigned char region[128] ; // 地区
  unsigned int language; // 语系(参考ENUM_LANGUAGE_TYPE)
  unsigned char reserved[4];
}SMsgAVIoctrlSetTimeZoneReq;
// 响应结构
typedef struct{
  unsigned int result; // 0:成功;otherwise:失败;
  unsigned char reserved[4];
}SMsgAVIoctrlSetTimeZoneResp;
备注:long一般是占8个字节,因为考虑有些编译器做字节对齐的时候,会进行内存优化,建议struct定义的时候加上免优化的选项(linux一般是在struct后加上__attribute__((packed)))
(七十五)根据命令获取设备各种状态
命令宏定义:请求(IOTYPE_USER_IPCAM_GET_ALL_STATE_REQ = 0x904E) | 响应(IOTYPE_USER_IPCAM_GET_ALL_STATE_RESP)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device根据指令获取设备的状态,设备根据之前定义的cmd来返回状态。
数据结构:
// 获取设备状态的命令数据
typedef struct{
  unsigned int cmdType; // 命令类型
}SMsgCommandTask;
// 请求结构
typedef struct{
  unsigned int channel; // Camera Index
  unsigned int count; // 命令数组长度
  unsigned char reserved[4];
  SMsgCommandTask task[1]; // 参考SMsgCommandTask
}SMsgAVIoctrlGetAllStateReq;
(七十六)重置设备(恢复出厂设置)
命令宏定义:请求(IOTYPE_USER_IPCAM_SET_RESET_REQ = 0x30000001) | 响应(IOTYPE_USER_IPCAM_SET_RESET_RESP = 0x30000002)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device进行重置(恢复出厂设置),Device告知APP设置结果。
数据结构:
// 请求结构
typedef struct{
  unsigned int channel; // Camera Index
  unsigned char reserved[4];
}SMsgAVIoctrlSetResetReq;
// 响应结构
typedef struct{
  unsigned int result; // 0:成功;otherwise:失败;
  unsigned char reserved[4];
}SMsgAVIoctrlSetResetResp;
(七十七)获取音乐列表
命令宏定义:请求(IOTYPE_USER_IPCAM_GET_MUSIC_LIST_REQ = 0x9050) | 响应(IOTYPE_USER_IPCAM_GET_MUSIC_LIST_RESP = 0x9051)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device获取音乐列表,Device告知APP音乐列表。
数据结构:
// 请求结构
typedef struct
{
  unsigned int channel; // Camera Index
  unsigned char reserved[4];
}SMsgAVIoctrlGetMusicListReq;
// 音乐信息结构
typedef struct
{
  unsigned char name[64]; // 音乐名称
  unsigned int index; // 序号
  unsigned int isCustom; // 是否自定义音乐,0:默认音乐 1:自定义音乐
  unsigned int isCurrent; // 是否选中,1:选中,其他:否
  unsigned char reserved[4];
}SAvMusic;
// 响应结构
typedef struct
{
  unsigned int count;
  unsigned char reserved[4];
  SAvMusic stMusic[1]; // 数组
}SMsgAVIoctrlGetMusicListResp;
(七十八)获取音乐播放状态
命令宏定义:请求(IOTYPE_USER_IPCAM_GET_MUSIC_STATE_REQ = 0x9052) | 响应(IOTYPE_USER_IPCAM_GET_MUSIC_STATE_RESP = 0x9053)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP请求Device告知当前音乐的播放状态(当播放状态改变时,设备应主动告知APP)。
数据结构:
// 请求结构
typedef struct
{
  unsigned int channel; // Camera Index
  unsigned char reserved[4];
}SMsgAVIoctrlGetMusicStateReq;
// 响应结构
typedef struct
{
  unsigned int channel; // Camera Index
  unsigned int isPlaying; // 播放状态, 0:停止播放,1:正在播放
  unsigned int isTryMusic; // 是否是试听,0:试听音乐,1:正式播放音乐
  unsigned char reserved[4];
  SAvMusic stMusic; // 当前音乐
} __attribute__((packed)) SMsgAVIoctrlGetMusicStateResp;
(七十九)音乐播放控制
命令宏定义:请求(IOTYPE_USER_IPCAM_PLAY_MUSIC_REQ = 0x9054) | 响应(IOTYPE_USER_IPCAM_PLAY_MUSIC_RESP = 0x9055)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device开始/停止播放音乐,Device告知APP设置结果。
数据结构:
// 请求结构
typedef struct
{
  unsigned int channel; // Camera Index
  unsigned int isPlaying; // 播放状态,0:停止播放,1:正在播放
  unsigned int isTryMusic; // 是否是试听,0:试听音乐,1:正式播放音乐
  unsigned char reserved[4];
  SAvMusic stMusic; // 当前音乐
} __attribute__((packed)) SMsgAVIoctrlPlayMusicReq;
// 响应结构
typedef struct
{
  unsigned int result; // 0:成功,其他:失败
  unsigned char reserved[4];
}SMsgAVIoctrlPlayMusicResp;
(八十)删除录制音乐
命令宏定义:请求(IOTYPE_USER_IPCAM_DELETE_MUSIC_REQ = 0x9056) | 响应(IOTYPE_USER_IPCAM_DELETE_MUSIC_RESP = 0x9057)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device删除录制音乐,Device告知APP删除录制音乐结果。
数据结构:
// 请求结构
typedef struct
{
  unsigned int channel; // Camera Index
  unsigned char reserved[4];
  SAvMusic stMusic; // 当前音乐
}SMsgAVIoctrlDeleteMusicReq;
// 响应结构
typedef struct
{
  unsigned int result; // 0:成功,其他:失败
  unsigned char reserved[4];
}SMsgAVIoctrlDeleteMusicResp;
(八十一)设置音乐
命令宏定义:请求(IOTYPE_USER_IPCAM_SET_MUSIC_REQ = 0x9058) | 响应(IOTYPE_USER_IPCAM_SET_MUSIC_RESP = 0x9059)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device进行音乐设置,Device告知APP设置结果。
数据结构:
// 请求结构
typedef struct
{
  unsigned int channel; // Camera Index
  unsigned char reserved[4];
  SAvMusic stMusic; // 设置音乐
} __attribute__((packed)) SMsgAVIoctrlSetMusicReq;
// 响应结构
typedef struct
{
  unsigned int result; // 0:成功,其他:失败
  unsigned char reserved[4];
}SMsgAVIoctrlSetMusicResp;
补充说明:设置选中时,如果是单曲循环模式,则循环播放该音乐;如果是列表播放模式或者随机播放,则表示从该音乐开始按列表或者随机播放。
(八十二)获取音乐播放模式状态
命令宏定义:请求(IOTYPE_USER_IPCAM_GET_MUSIC_PLAY_MODE_REQ = 0x905A) | 响应(IOTYPE_USER_IPCAM_GET_MUSIC_PLAY_MODE_RESP = 0x905B)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device获取音乐播放模式状态(当播放模式改变时,设备应主动告知APP)。
数据结构:
// 请求结构
typedef struct
{
  unsigned int channel; // Camera Index
  unsigned char reserved[4];
}SMsgAVIoctrlGetMusicPlayModeReq;
// 响应结构
typedef struct
{
  unsigned int channel; // Camera Index
  unsigned int playMode; // 播放模式,0:单曲循环,1:列表播放,2:随机播放
  unsigned char reserved[8];
}SMsgAVIoctrlGetMusicPlayModeResp;
(八十三)设置音乐播放模式
命令宏定义:请求(IOTYPE_USER_IPCAM_SET_MUSIC_PLAY_MODE_REQ = 0x905C) | 响应(IOTYPE_USER_IPCAM_SET_MUSIC_PLAY_MODE_RESP = 0x905D)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device设置播放模式,Device告知APP设置结果。
数据结构:
// 请求结构(修正原拼写错误:SMsgAVIoctrlSetMusicPlayModeRep → SMsgAVIoctrlSetMusicPlayModeReq)
typedef struct
{
  unsigned int channel; // Camera Index
  unsigned int playMode; // 播放模式,0:单曲循环,1:列表播放,2:随机播放
  unsigned char reserved[4];
}SMsgAVIoctrlSetMusicPlayModeReq;
// 响应结构
typedef struct
{
  unsigned int channel; // Camera Index
  unsigned int result; // 0:成功,其他:失败
  unsigned char reserved[4];
}SMsgAVIoctrlSetMusicPlayModeResp;
(八十四)获取设备音量
命令宏定义:请求(IOTYPE_USER_IPCAM_GET_DEVICE_VOL_REQ = 0x9060) | 响应(IOTYPE_USER_IPCAM_GET_DEVICE_VOL_RESP = 0x9061)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device获取设备音量状态,Device告知APP设备音量。
数据结构:
// 请求结构
typedef struct
{
  unsigned int channel; // Camera Index
  unsigned char reserved[4];
}SMsgAVIoctrlGetDeviceVolReq;
// 音量信息结构
typedef struct
{
  unsigned int vol; // 0 - 100
  unsigned int volType; // 0:麦克风,1:扬声器
} SAvVol;
// 响应结构
typedef struct
{
  unsigned int channel; // Camera Index
  unsigned char reserved[4]; // 保留位
  unsigned int count;
  SAvVol vol[1];
} __attribute__((packed)) SMsgAVIoctrlGetDeviceVolResp;
(八十五)设置设备音量
命令宏定义:请求(IOTYPE_USER_IPCAM_SET_DEVICE_VOL_REQ = 0x9062) | 响应(IOTYPE_USER_IPCAM_SET_DEVICE_VOL_RESP = 0x9063)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device设置设备音量,Device告知APP设置结果。
数据结构:
// 请求结构
typedef struct
{
  unsigned int channel; // Camera Index
  unsigned char reserved[4]; // 保留位
  unsigned int count;
  SAvVol vol[1];
}SMsgAVIoctrlSetDeviceVolReq;
// 响应结构
typedef struct
{
  unsigned int channel; // Camera Index
  unsigned int result; // 0:成功,其他:失败
  unsigned char reserved[4];
}SMsgAVIoctrlSetDeviceVolResp;
(八十六)获取温度
命令宏定义:请求(IOTYPE_USER_IPCAM_GET_DEVICE_TEMPERATURE_REQ = 0x9064) | 响应(IOTYPE_USER_IPCAM_GET_DEVICE_TEMPERATURE_RESP = 0x9065)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device获取设备温度状态(当温度改变时,设备应主动告知APP)。
数据结构:
// 请求结构
typedef struct
{
  unsigned int channel; // Camera Index
  unsigned char reserved[4];
}SMsgAVIoctrlGetDeviceTemperatureReq;
// 响应结构
typedef struct
{
  unsigned int channel; // Camera Index
  unsigned int integer; // 小数点前的温度,比如36.2,此处就是36
  unsigned int decimal; // 小数点后的温度,比如36.2,此处是2
  unsigned int unit; // 单位,0:摄氏度(℃),1:华氏度(℉)
  unsigned char reserved[4];
}SMsgAVIoctrlGetDeviceTemperatureResp;
(八十七)获取温度单位
命令宏定义:请求(IOTYPE_USER_IPCAM_GET_DEVICE_TEMPERATUREUNIT_REQ = 0x9066) | 响应(IOTYPE_USER_IPCAM_GET_DEVICE_TEMPERATUREUNIT_RESP = 0x9067)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device获取设备温度单位状态,Device告知APP设备温度单位。
数据结构:
// 请求结构
typedef struct
{
  unsigned int channel; // Camera Index
  unsigned char reserved[4];
}SMsgAVIoctrlGetDeviceTemperatureUnitReq;
// 响应结构
typedef struct
{
  unsigned int channel; // Camera Index
  unsigned int unit; // 单位,0:摄氏度(℃),1:华氏度(℉)
  unsigned char reserved[4];
}SMsgAVIoctrlGetDeviceTemperatureUnitResp;
(八十八)设置温度单位
命令宏定义:请求(IOTYPE_USER_IPCAM_SET_DEVICE_TEMPERATUREUNIT_REQ = 0x9068) | 响应(IOTYPE_USER_IPCAM_SET_DEVICE_TEMPERATUREUNIT_RESP = 0x9069)
数据流向:请求(APP → Device) | 响应(Device → APP)
功能说明:APP告知Device设置设备温度单位状态,Device告知APP设备温度单位响应结果。
数据结构:
// 请求结构
typedef struct
{
  unsigned int channel; // Camera Index
  unsigned int unit; // 单位,0:摄氏度(℃),1:华氏度(℉)
  unsigned char reserved[4];
}SMsgAVIoctrlSetDeviceTemperatureUnitReq;
// 响应结构
typedef struct
{
  unsigned int channel; // Camera Index
  unsigned int result; // 0:成功,其他:失败
  unsigned char reserved[4];
}SMsgAVIoctrlSetDeviceTemperatureUnitResp;
