一、說明
本文檔將詳細(xì)介紹IPCAM設(shè)備的IOCtrl命令集,包括命令宏定義、數(shù)據(jù)流向、功能說明及數(shù)據(jù)結(jié)構(gòu)定義,適用于APP與IPCAM設(shè)備之間的P2P通信開發(fā),數(shù)據(jù)結(jié)構(gòu)采用結(jié)構(gòu)體的方式定義,其他平臺(tái)可能會(huì)需要按照此格式進(jìn)行拼接和解析,本文檔所有指令中的時(shí)間,都采用UTC+0時(shí)區(qū),以適應(yīng)跨時(shí)區(qū)訪問的問題。
二、命令詳情
(一)請(qǐng)求設(shè)備發(fā)送圖像實(shí)時(shí)流
命令宏定義:IOTYPE_USER_IPCAM_START = 0x01FF;
數(shù)據(jù)流向:APP → Device
功能說明:APP告知Device開始發(fā)送視頻數(shù)據(jù)。
數(shù)據(jù)結(jié)構(gòu):
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
}SMsgAVIoctrlAVStream;
(二)請(qǐng)求設(shè)備停止傳送圖像實(shí)時(shí)流
命令宏定義:IOTYPE_USER_IPCAM_STOP = 0x02FF;
數(shù)據(jù)流向:APP → Device
功能說明:APP告知Device停止發(fā)送視頻數(shù)據(jù)。
數(shù)據(jù)結(jié)構(gòu):
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
} SMsgAVIoctrlAVStream;
(三)請(qǐng)求設(shè)備開始接收?qǐng)D像實(shí)時(shí)流
命令宏定義:IOTYPE_USER_IPCAM_START_CLIENT = 0x03FF;
數(shù)據(jù)流向:APP → Device
功能說明:APP告知Device開始接收視頻數(shù)據(jù)。
數(shù)據(jù)結(jié)構(gòu):
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
}SMsgAVIoctrlAVStream;
(四)請(qǐng)求設(shè)備停止接收?qǐng)D像實(shí)時(shí)流
命令宏定義:IOTYPE_USER_IPCAM_STOP_CLIENT = 0x04FF;
數(shù)據(jù)流向:APP → Device
功能說明:APP告知Device停止接收視頻數(shù)據(jù)。
數(shù)據(jù)結(jié)構(gòu):
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
} SMsgAVIoctrlAVStream;
(五)請(qǐng)求設(shè)備開始發(fā)送音頻實(shí)時(shí)流
命令宏定義:IOTYPE_USER_IPCAM_AUDIOSTART = 0x0300;
數(shù)據(jù)流向:APP → Device
功能說明:APP告知Device開始發(fā)送音頻數(shù)據(jù)。
數(shù)據(jù)結(jié)構(gòu):
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
} SMsgAVIoctrlAVStream;
(六)請(qǐng)求設(shè)備停止發(fā)送音頻實(shí)時(shí)流
命令宏定義:IOTYPE_USER_IPCAM_AUDIOSTOP = 0x0301;
數(shù)據(jù)流向:APP → Device
功能說明:APP告知Device停止發(fā)送音頻數(shù)據(jù)。
數(shù)據(jù)結(jié)構(gòu):
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
} SMsgAVIoctrlAVStream;
(七)設(shè)定設(shè)備SD卡錄像模式
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_SETRECORD_REQ = 0x0310) | 響應(yīng)(IOTYPE_USER_IPCAM_SETRECORD_RESP = 0x0311)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device要設(shè)置設(shè)備SD卡錄像模式,Device告知App設(shè)置結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 枚舉定義
typedef enum{
AVIOTC_RECORDTYPE_OFF = 0x00,
AVIOTC_RECORDTYPE_FULLTIME = 0x01,
AVIOTC_RECORDTYPE_ALARM = 0x02,
AVIOTC_RECORDTYPE_MANUAL = 0x03
}ENUM_RECORD_TYPE;
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned int recordType; // 參考ENUM_RECORD_TYPE
unsigned char reserved[4];
}SMsgAVIoctrlSetRecordReq, SMsgAVIoctrlGetRecordResq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
int result; // 0:成功; otherwise: 失??;
unsigned char reserved[4];
}SMsgAVIoctrlSetRecordResp;
(八)獲取設(shè)備當(dāng)前SD卡錄像模式
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_GETRECORD_REQ = 0x0312) | 響應(yīng)(IOTYPE_USER_IPCAM_GETRECORD_RESP = 0x0313)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device要獲取設(shè)備SD卡錄像模式,Device將錄像類型配置回傳給App。
數(shù)據(jù)結(jié)構(gòu):
// 枚舉定義
typedef enum{
AVIOTC_RECORDTYPE_OFF = 0x00,
AVIOTC_RECORDTYPE_FULLTIME = 0x01,
AVIOTC_RECORDTYPE_ALARM = 0x02,
AVIOTC_RECORDTYPE_MANUAL = 0x03
}ENUM_RECORD_TYPE;
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
}SMsgAVIoctrlGetRecordReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned int recordType; // 參考ENUM_RECORD_TYPE
unsigned char reserved[4];
}SMsgAVIoctrlSetRecordReq, SMsgAVIoctrlGetRecordResq;
(九)獲取設(shè)備事件列表
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_LISTEVENT_REQ = 0x0318) | 響應(yīng)(IOTYPE_USER_IPCAM_LISTEVENT_RESP = 0x0319)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device要獲取設(shè)備事件列表,Device將錄像列表回傳給App。
數(shù)據(jù)結(jié)構(gòu):
// 時(shí)間結(jié)構(gòu)
typedef struct{
unsigned short year; // 年份數(shù)
unsigned char month; // 自一月以來的月數(shù),范圍為1到12
unsigned char day; // 每月的日期,范圍為1到31
unsigned char wday; // 自星期日以來的天數(shù),范圍為0到6(星期日=0)
unsigned char hour; // 午夜之后的小時(shí)數(shù),范圍為0到23
unsigned char minute; // 小時(shí)后的分鐘數(shù),范圍為0到59
unsigned char second; // 分鐘后的秒數(shù),范圍為0到59
}STimeDay;
// 事件類型枚舉
typedef enum{
AVIOCTRL_EVENT_ALL = 0x00, // 所有事件類型
AVIOCTRL_EVENT_MOTI = 0x01, // 移動(dòng)偵測(cè)
AVIOCTRL_EVENT_VIDEOLOST = 0x02, // 視頻遺失
AVIOCTRL_EVENT_IOALARM = 0x03, // IO報(bào)警
AVIOCTRL_EVENT_MOTI_END = 0x04, // 移動(dòng)偵測(cè)結(jié)束
AVIOCTRL_EVENT_VIDEORESUME = 0x05, // 視頻恢復(fù)
AVIOCTRL_EVENT_IOALARMPASS = 0x06, // IO報(bào)警結(jié)束
AVIOCTRL_EVENT_MOVIE = 0x07, // 影片
AVIOCTRL_EVENT_TIME_LAPSE = 0x08, // 延時(shí)拍攝
AVIOCTRL_EVENT_EMERGENCY = 0x09, // 緊急事件
AVIOCTRL_EVENT_EXPT_REBOOT = 0x10, // 系統(tǒng)異常重啟
AVIOCTRL_EVENT_SDFAULT = 0x11, // SD卡錯(cuò)誤
AVIOCTRL_EVENT_FULLTIME_RECORDING = 0x12, // 全時(shí)錄像
AVIOCTRL_EVENT_PIR = 0x13, // PIR偵測(cè)
AVIOCTRL_EVENT_RINGBELL = 0x14, // 門鈴呼叫
AVIOCTRL_EVENT_SOUND = 0x15, // 聲音
AVIOCTRL_EVENT_HUMANOID_DETECTION = 0x16, // 人形偵測(cè)
AVIOCTRL_EVENT_CRY = 0x17, // 哭聲偵測(cè)
AVIOCTRL_EVENT_FALL = 0x18, // 跌倒偵測(cè)
AVIOCTRL_EVENT_FACE = 0x19, // 人臉偵測(cè)
AVIOCTRL_EVENT_DEVICE_SHARE = 0x20, // 設(shè)備分享
AVIOCTRL_EVENT_ABNORMAL_NOISE = 0x21, // 異響偵測(cè)
AVIOCTRL_EVENT_SUBSCRIPTI_SUCCESS = 0x22, // 訂閱成功
AVIOCTRL_EVENT_SUBSCRIPTI_EXPIRE = 0x23, // 訂閱過期
AVIOCTRL_EVENT_FW_UPGRADE = 0x24, // 版本更新
AVIOCTRL_EVENT_NOTAPPEAR = 0x25, // 未出現(xiàn)提醒
AVIOCTRL_EVENT_INTELLIGENT_WATCHER = 0x26, // 智能看家
AVIOCTRL_EVENT_REGI = 0x27, // 區(qū)域入侵
AVIOCTRL_EVENT_ELECTR = 0x28, // 電子圍欄
AVIOCTRL_EVENT_TELEPH = 0x29, // 電話告警
AVIOCTRL_EVENT_TOY = 0x37, // 玩具通知
AVIOCTRL_EVENT_PET = 0x40, // 寵物偵測(cè)
AVIOCTRL_EVENT_REMOTE_LOGIN = 0x48, // 異地登錄
AVIOCTRL_EVENT_VIDEO_CALL = 0x66, // 視頻呼叫
AVIOCTRL_EVENT_DEVICE_OFFLINE = 0x6F, // 設(shè)備離線
AVIOCTRL_EVENT_USER_CALL = 0x7D0 // 門鈴呼叫
}ENUM_EVENTTYPE;
// 事件結(jié)構(gòu)
typedef struct{
STimeDay stTime;
unsigned char event; // 參考ENUM_EVENTTYPE
unsigned char status; // 0x00:未讀取 0x01:已讀取 0x02:無錄像
unsigned short duration; // 事件持續(xù)時(shí)間(秒)
}SAvEvent;
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
STimeDay stStartTime; // 搜尋起始時(shí)間(修正:原TimeDay應(yīng)為STimeDay)
STimeDay stEndTime; // 搜尋結(jié)束時(shí)間
unsigned char event; // 事件類型,參考ENUM_EVENTTYPE
unsigned char status; // 0x00:未讀取 0x01:已讀取 0x02:無錄像
unsigned char reserved[2];
}SMsgAVIoctrlListEventReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned int total; // 搜索的總事件數(shù)
unsigned char index; // 數(shù)據(jù)包索引(0,1,2...)
unsigned char endflag; // 1表示最后一個(gè)數(shù)據(jù)包
unsigned char count; // 此封包中的事件數(shù)
unsigned char reserved[1];
SAvEvent stEvent[0]; // 事件數(shù)據(jù)起始地址
}SMsgAVIoctrlListEventResp;
(十)SD卡事件回播控制播放
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_RECORD_PLAYCTRL_REQ = 0x031A) | 響應(yīng)(IOTYPE_USER_IPCAM_RECORD_PLAYCTRL_RESP = 0x031B)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device要進(jìn)行錄像事件回放,Device將錄像回放結(jié)果回傳給App(APP收固定字節(jié)長度)。
數(shù)據(jù)結(jié)構(gòu):
// 播放控制枚舉
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;
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned int command; // 播放指令,參考ENUM_PLAYCONTROL
unsigned int Param; // 指令參數(shù),用戶自定義
STimeDay stTimeDay; // 事件列表起始時(shí)間
unsigned char endflag; // 0:APP播放完畢 1:web繼續(xù)播放下一個(gè)
unsigned char downloadFlag; // 0:回放模式 1:下載模式
unsigned char reserved[2];
} SMsgAVIoctrlPlayRecordReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int command; // 播放指令,參考ENUM_PLAYCONTROL
int result; // result>0:回放通道ID; result<0:異常(-1:回放異常,-2:超出最大連接數(shù))
unsigned int size; // 事件回放文件大小
unsigned char respond;
unsigned char reserved[3];
} SMsgAVIoctrlPlayRecordResp;
(十一)設(shè)置設(shè)備解析度檔位
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_SETSTREAMCTRL_REQ = 0x0320) | 響應(yīng)(IOTYPE_USER_IPCAM_SETSTREAMCTRL_RESP = 0x0321)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device要設(shè)置設(shè)備的解析度,Device告知APP解析度設(shè)置結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 畫質(zhì)等級(jí)枚舉
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;
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned char quality; // 參考ENUM_QUALITY_LEVEL
unsigned char reserved[3];
} SMsgAVIoctrlSetStreamCtrlReq;
// 響應(yīng)結(jié)構(gòu)(修正:原命名錯(cuò)誤)
typedef struct{
unsigned int result; // 0: 成功; otherwise: 失敗
unsigned char reserved[4];
} SMsgAVIoctrlSetStreamCtrlResp;
(十二)獲取設(shè)備目前解析度檔位
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_GETSTREAMCTRL_REQ = 0x0322) | 響應(yīng)(IOTYPE_USER_IPCAM_GETSTREAMCTRL_RESP = 0x0323)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device要獲取設(shè)備當(dāng)前的解析度,Device將設(shè)備解析度配置回傳給App。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
}SMsgAVIoctrlGetStreamCtrlReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned char quality; // 參考ENUM_QUALITY_LEVEL
unsigned char reserved[3];
} SMsgAVIoctrlSetStreamCtrlReq, SMsgAVIoctrlGetStreamCtrlResp;
(十三)設(shè)置設(shè)備位移偵測(cè)之靈敏度
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_SETMOTION_DETECT_REQ = 0x0324) | 響應(yīng)(IOTYPE_USER_IPCAM_SETMOTION_DETECT_RESP = 0x0325)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device要設(shè)置設(shè)備位移偵測(cè)的靈敏度,Device告知APP設(shè)置結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned int sensitivity; // 0(禁用)~100(最大):0=關(guān)閉,25=低,50=中,75=高,100=最高
}SMsgAVIoctrlSetMotionDetectReq, SMsgAVIoctrlGetMotionDetectResp;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
int result; // 0: 成功; otherwise: 失敗
unsigned char reserved[4];
}SMsgAVIoctrlSetMotionDetectResp;
(十四)獲取設(shè)備目前位移偵測(cè)之靈敏度
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_GETMOTION_DETECT_REQ = 0x0326) | 響應(yīng)(IOTYPE_USER_IPCAM_GETMOTION_DETECT_RESP = 0x0327)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device要獲取設(shè)備位移偵測(cè)的靈敏度,Device將配置回傳給App。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
} SMsgAVIoctrlGetMotionDetectReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned int sensitivity; // 0(禁用)~100(最大):0=關(guān)閉,25=低,50=中,75=高,100=最高
}SMsgAVIoctrlSetMotionDetectReq, SMsgAVIoctrlGetMotionDetectResp;
(十五)獲取當(dāng)前設(shè)備通道數(shù)
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_GETSUPPORTSTREAM_REQ = 0x0328) | 響應(yīng)(IOTYPE_USER_IPCAM_GETSUPPORTSTREAM_RESP = 0x0329)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device要獲取目前設(shè)備頻道數(shù),Device將配置回傳給App。
數(shù)據(jù)結(jié)構(gòu):
// 流定義結(jié)構(gòu)
typedef struct{
unsigned short index; // 設(shè)備使用的stream index
unsigned short channel; // AVAPIs使用的channel index
char reserved[4];
}SStreamDef;
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned char reserved[4];
}SMsgAVIoctrlGetSupportStreamReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int number; // 可支持的stream數(shù)量
SStreamDef streams[0];
}SMsgAVIoctrlGetSupportStreamResp;
(十六)獲取設(shè)備對(duì)講支持的音頻格式
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_GETAUDIOOUTFORMAT_REQ = 0x032A) | 響應(yīng)(IOTYPE_USER_IPCAM_GETAUDIOOUTFORMAT_RESP = 0x032B)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device要獲取設(shè)備音頻格式,Device將音頻格式回傳給App。
數(shù)據(jù)結(jié)構(gòu):
// 采樣率枚舉
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
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int channel; // camera index
char reserved[4];
}SMsgAVIoctrlGetAudioOutFormatReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int channel; // camera index
int format; // 參考ENUM_CODECID in AVFRAMEINFO.h
char sample_rate;
char bitdata;
char channels; // 可支持的通道數(shù)量
char avservchannel; // 0:子通道;1:主通道;默認(rèn)0
}SMsgAVIoctrlGetAudioOutFormatResp;
(十七)獲取設(shè)備信息
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_DEVINFO_REQ = 0x0330) | 響應(yīng)(IOTYPE_USER_IPCAM_DEVINFO_RESP = 0x0331)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device要獲取設(shè)備資訊,Device將設(shè)備資訊回傳給App。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned char reserved[4];
}SMsgAVIoctrlDeviceInfoReq;
// 響應(yīng)結(jié)構(gòu)
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;
(十八)變更設(shè)備密碼
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_SETPASSWORD_REQ = 0x0332) | 響應(yīng)(IOTYPE_USER_IPCAM_SETPASSWORD_RESP = 0x0333)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device要變更設(shè)備密碼,Device告知APP變更結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
char oldpasswd[32]; // 舊密碼
char newpasswd[32]; // 新密碼
}SMsgAVIoctrlSetPasswdReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
int result; // 0x00:成功, 否則失敗
unsigned char reserved[4];
}SMsgAVIoctrlSetPasswdResp;
(十九)SD卡事件回放進(jìn)度控制
命令宏定義:獲取時(shí)長(0x033A/0x033B) | 設(shè)置進(jìn)度(0x033C/0x033D)
數(shù)據(jù)流向:獲取時(shí)長(APP→Device/Device→APP) | 設(shè)置進(jìn)度(APP→Device/Device→APP)
功能說明:獲取事件時(shí)長信息(視頻流時(shí)間戳為UTC格式);從指定時(shí)間播放(App不發(fā)送0x2ff停止視頻流)。
數(shù)據(jù)結(jié)構(gòu):
// 獲取時(shí)長請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
STimeDay stTimeDay; // 事件的時(shí)間長度
unsigned char reserved[4];
}SMsgAVIoctrlGetPlaybackReq;
// 獲取時(shí)長響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int videoTime; // 事件視頻時(shí)間(秒)
unsigned long size; // 事件大?。ㄗ止?jié))
unsigned char reserved[4];
}SMsgAVIoctrlGetPlaybackResp;
// 設(shè)置進(jìn)度請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
STimeDay stTimeDay; // 事件的時(shí)間長度
unsigned int progressTime; // 事件進(jìn)度時(shí)間(秒)
unsigned char reserved[4];
}SMsgAVIoctrlSetRecordProgessReq;
// 設(shè)置進(jìn)度響應(yīng)結(jié)構(gòu)(修正:原拼寫錯(cuò)誤)
typedef struct{
unsigned char result; // 0:成功;otherwise:失敗
unsigned char reserved[3];
}SMsgAVIoctrlSetRecordProgressResp;
(二十)獲取設(shè)備周圍WIFI列表
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_GET_WIFI_LIST_REQ = 0x0340) | 響應(yīng)(IOTYPE_USER_IPCAM_GET_WIFI_LIST_RESP = 0x0341)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device要獲取周圍可用的Wifi列表,Device搜索附近Wifi并將列表信息回傳給App。
數(shù)據(jù)結(jié)構(gòu):
// Wifi信息結(jié)構(gòu)
typedef struct{
char ssid[32]; // Wifi名稱
char bssid[18]; // Wifi物理地址(MAC)
unsigned char rssi; // 信號(hào)強(qiáng)度(0-100)
unsigned char encrypt; // 加密方式:0=無加密,1=WEP,2=WPA,3=WPA2,4=WPA/WPA2混合
unsigned char channel; // 信道號(hào)
unsigned char reserved[1];
}SWifiInfo;
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned char reserved[4];
}SMsgAVIoctrlGetWifiListReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned char count; // 搜索到的Wifi數(shù)量
unsigned char reserved[3];
SWifiInfo wifiInfo[0]; // Wifi信息列表
}SMsgAVIoctrlGetWifiListResp;
(二十一)設(shè)定設(shè)備的網(wǎng)絡(luò)
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_SETWIFI_REQ = 0x0342) | 響應(yīng)(IOTYPE_USER_IPCAM_SETWIFI_RESP = 0x0343)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device要設(shè)置設(shè)備的wifi,Device告知APP設(shè)置設(shè)備wifi的結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
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;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
int result; // 如果已連接WiFi,則返回0,否則返回1。
unsigned char reserved[4];
}SMsgAVIoctrlSetWifiResp;
(二十二)獲取設(shè)備目前所設(shè)置的WIFI
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_GETWIFI_REQ = 0x0344) | 響應(yīng)(IOTYPE_USER_IPCAM_GETWIFI_RESP = 0x0345)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device要獲取設(shè)備當(dāng)前所設(shè)置的wifi,Device將設(shè)備當(dāng)前wifi配置放到IOCtrl資料并回傳給App。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned char reserved[4];
}SMsgAVIoctrlGetWifiReq;
// 響應(yīng)結(jié)構(gòu)
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; // 信號(hào)強(qiáng)度 0--100%
unsigned char status; // 參考SWifiAp的"status"
}SMsgAVIoctrlGetWifiResp;
(二十三)設(shè)定設(shè)備目前所設(shè)置的WIFI(64bit密碼)
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_SETWIFI_REQ2 = 0x0346) | 響應(yīng)(IOTYPE_USER_IPCAM_GETWIFI_RESP2 = 0x0347)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:該command支持64bit密碼,同IOTYPE_USER_IPCAM_SETWIFI_REQ = 0x0342一起發(fā)送。APP告知Device要設(shè)定設(shè)備目前所設(shè)置的wifi,Device將設(shè)備當(dāng)前wifi配置放到IOCtrl資料并回傳給App。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
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;
// 響應(yīng)結(jié)構(gòu)
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; // 信號(hào)強(qiáng)度 0--100%
unsigned char status; // 參考SWifiAp的"status"
}SMsgAVIoctrlGetWifiResp2;
(二十四)請(qǐng)求設(shè)備開始對(duì)講
命令宏定義:IOTYPE_USER_IPCAM_SPEAKERSTART = 0x0350;
數(shù)據(jù)流向:APP → Device
功能說明:APP告知Device開始接收音頻數(shù)據(jù)。
數(shù)據(jù)結(jié)構(gòu):
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
} SMsgAVIoctrlAVStream;
(二十五)請(qǐng)求設(shè)備關(guān)閉對(duì)講
命令宏定義:IOTYPE_USER_IPCAM_SPEAKERSTOP = 0x0351;
數(shù)據(jù)流向:APP → Device
功能說明:APP告知Device停止接收音頻數(shù)據(jù)。
數(shù)據(jù)結(jié)構(gòu):
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
} SMsgAVIoctrlAVStream;
(二十六)設(shè)置畫面鏡像翻轉(zhuǎn)
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_SET_VIDEOMODE_REQ = 0x0370) | 響應(yīng)(IOTYPE_USER_IPCAM_SET_VIDEOMODE_RESP = 0x0371)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device進(jìn)行鏡像/翻轉(zhuǎn)設(shè)置,Device告知APP設(shè)置結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 視頻模式枚舉
typedef enum{
AVIOCTRL_VIDEOMODE_NORMAL = 0x00,
AVIOCTRL_VIDEOMODE_FLIP = 0x01, // 垂直翻轉(zhuǎn)
AVIOCTRL_VIDEOMODE_MIRROR = 0x02, // 水平翻轉(zhuǎn)
AVIOCTRL_VIDEOMODE_FLIP_MIRROR = 0x03 // 垂直和水平翻轉(zhuǎn)
}ENUM_VIDEO_MODE;
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned char mode; // 參考 ENUM_VIDEO_MODE
unsigned char reserved[3];
}SMsgAVIoctrlSetVideoModeReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned char result; // 0: 成功; otherwise:失??;
unsigned char reserved[3];
}SMsgAVIoctrlSetVideoModeResp;
(二十七)獲取畫面鏡像翻轉(zhuǎn)模式
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_GET_VIDEOMODE_REQ = 0x0372) | 響應(yīng)(IOTYPE_USER_IPCAM_GET_VIDEOMODE_RESP = 0x0373)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device獲取鏡像/翻轉(zhuǎn)設(shè)置狀態(tài),Device告知APP目前畫面鏡像/翻轉(zhuǎn)的設(shè)置狀態(tài)。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
}SMsgAVIoctrlGetVideoModeReq;
// 視頻模式枚舉
typedef enum{
AVIOCTRL_VIDEOMODE_NORMAL = 0x00,
AVIOCTRL_VIDEOMODE_FLIP = 0x01, // 垂直翻轉(zhuǎn)
AVIOCTRL_VIDEOMODE_MIRROR = 0x02, // 水平翻轉(zhuǎn)
AVIOCTRL_VIDEOMODE_FLIP_MIRROR = 0x03 // 垂直和水平翻轉(zhuǎn)
}ENUM_VIDEO_MODE;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned char mode; // 參考 ENUM_VIDEO_MODE
unsigned char reserved[3];
}SMsgAVIoctrlGetVideoModeResp;
(二十八)格式化SD卡
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_FORMATEXTSTORAGE_REQ = 0x0380) | 響應(yīng)(IOTYPE_USER_IPCAM_FORMATEXTSTORAGE_RESP = 0x0381)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device執(zhí)行格式化SD卡操作,Device告知APP已格式化SD卡結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int storage; // Storage index(例如sdcard插槽= 0,內(nèi)部閃存= 1,...)
unsigned char reserved[4];
}SMsgAVIoctrlFormatExtStorageReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int storage; // Storage index
char result; // 0: 成功;
// -1:不支持格式化指令;
// otherwise: 失?。?
unsigned char reserved[3];
}SMsgAVIoctrlFormatExtStorageResp;
(二十九)獲取NVR設(shè)備通道數(shù)量
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_GET_NVR_CHANNEL_NUMBER_REQ = 0x5A4) | 響應(yīng)(IOTYPE_USER_IPCAM_GET_NVR_CHANNEL_NUMBER_RESP = 0x5A5)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device獲取設(shè)備Channel的接口數(shù)量,Device告知APP目前設(shè)備Channel的接口數(shù)量。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned char reserved[4];
}SMsgAVIoctrlGetNVRChannelNumberReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int number; // 設(shè)備的通道數(shù)量
unsigned char reserved[4];
}SMsgAVIoctrlGetNVRChannelNumberResp;
(三十)獲取NVR通道名稱
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_GET_CHANNEL_NAME_REQ = 0x5B0) | 響應(yīng)(IOTYPE_USER_IPCAM_GET_CHANNEL_NAME_RESP = 0x5B1)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device獲取設(shè)備的通道名稱,Device告知APP設(shè)備的通道名稱。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned char reserved[4];
}SMsgAVIoctrlGetChannelNameReq;
// 通道信息結(jié)構(gòu)
typedef struct{
unsigned int channel; // camera index
unsigned char name[24]; // 通道名稱
} SChannelInfo;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned char count; // 通道數(shù)量
unsigned char reserved[3];
SChannelInfo sChannelInfo[0]; // SChannelInfo數(shù)組
}SMsgAVIoctrlGetChannelNameResp;
(三十一)設(shè)置NVR通道名稱
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_SET_CHANNEL_NAME_REQ = 0x5B2) | 響應(yīng)(IOTYPE_USER_IPCAM_SET_CHANNEL_NAME_RESP = 0x5B3)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device要設(shè)置設(shè)備的通道名稱,Device告知APP設(shè)置設(shè)備通道名稱的結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned char count; // SChannelInfos的數(shù)量
unsigned char reserved[3];
SChannelInfo sChannelInfo[0]; // SChannelInfo數(shù)組
}SMsgAVIoctrlSetChannelNameReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned char result; // 0:成功; otherwise:失??;
unsigned char reserved[3];
}SMsgAVIoctrlSetResetResp;
(三十二)門鈴呼叫
命令宏定義:請(qǐng)求(IOTYPE_XM_CALL_REQ = 0x700) | 響應(yīng)(IOTYPE_XM_CALL_RESP = 0x701) | 通知(IOTYPE_XM_CALL_IND = 0x702)
數(shù)據(jù)流向:請(qǐng)求(Device → APP) | 響應(yīng)(APP → Device) | 通知(Device → APP)
功能說明:主要應(yīng)用于可視門鈴?fù)ㄔ拡?chǎng)景。Device告知APP有用戶呼叫;APP告知Device是否進(jìn)行接聽;Device告知APP是否有其他用戶接聽。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)(Device→APP)
typedef struct{
unsigned char index; // 門索引號(hào),0:門1; 1:門2;
STimeDay stTime; // 事件時(shí)間
unsigned char reserved[3];
} SMsgAVIoctrlCallReq;
// 響應(yīng)結(jié)構(gòu)(APP→Device)
typedef struct{
unsigned char index; // 門索引號(hào),0:門1;1: 門2;
int nAnswered; // 0:掛斷;1:接聽;
unsigned char reserved[3];
}SMsgAVIoctrlCallResp;
// 通知結(jié)構(gòu)(Device→APP)
typedef struct{
unsigned char index; // 門索引號(hào),0:門1;1:門2;
unsigned char type; // 類型,0:有用戶呼叫;1:有其他用戶應(yīng)答;
STimeDay stTime; // 事件時(shí)間
unsigned char reserved[3];
}SMsgAVIoctrlCallInd;
(三十三)修改設(shè)備名稱
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_PUSH_DEVICENAME_REQ = 0x0736) | 響應(yīng)(IOTYPE_USER_IPCAM_PUSH_DEVICENAME_RESP = 0x0737)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device設(shè)置當(dāng)前設(shè)備名稱,Device告知APP設(shè)備名稱更新結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int channel; // camera index
char devicename[150]; // 當(dāng)前設(shè)備名稱
}SMsgAVIoctrlPushDeviceNameReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
int res; // 0:成功;otherwise:失??;
char reserved[4];
}SMsgAVIoctrlPushDeviceNameResp;
(三十四)同步手機(jī)時(shí)間給設(shè)備
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_SET_TIME_SYNC_REQ = 0x0816) | 響應(yīng)(IOTYPE_USER_IPCAM_SET_TIME_SYNC_RESP = 0x0817)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device進(jìn)行手機(jī)時(shí)間同步,Device告知APP時(shí)間同步結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
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;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int result; // 0:成功;otherwise:失?。?
unsigned char reserved[4];
} SMsgAVIoctrlTimeSyncResp;
(三十五)結(jié)束通話
命令宏定義:IOTYPE_USER_IPCAM_CALL_END = 0x0900;
數(shù)據(jù)流向:APP → 設(shè)備
功能說明:主要應(yīng)用于雙向視頻通話場(chǎng)景。APP告知對(duì)方結(jié)束當(dāng)前通話。
數(shù)據(jù)結(jié)構(gòu):
typedef struct{
unsigned char myID[6]; // 我的ID
unsigned char reserved[2];
}SMsgAVIoctrlCallEnd;
(三十六)呼叫方發(fā)出通話請(qǐng)求
命令宏定義:IOTYPE_USER_IPCAM_CALL_REQ = 0x0901;
數(shù)據(jù)流向:呼叫方 → 被呼叫方
功能說明:主要應(yīng)用于雙向視頻通話場(chǎng)景。呼叫方向被呼叫方發(fā)起通話請(qǐng)求。
數(shù)據(jù)結(jié)構(gòu):
// 賬戶信息結(jié)構(gòu)
typedef struct{
unsigned char UID[20]; // UID
unsigned char myID[6]; // ID
unsigned char reserved[2];
}AccountInfo;
// 通話請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned char myID[6]; // 我的 ID
unsigned char myUID[20]; // 我的 UID
unsigned char callType; // 0:?jiǎn)蜗蛞曨l;1:雙向視頻;
unsigned char beInvited; // 0:表示邀請(qǐng);1:表示被邀請(qǐng);
unsigned char infoCount; // 其他參與者的數(shù)量
unsigned char reserved[3];
AccountInfo info[]; // 其他參與者的信息
}SMsgAVIoctrlCallReq;
(三十七)被呼叫方響應(yīng)呼叫請(qǐng)求
命令宏定義:IOTYPE_USER_IPCAM_CALL_RESP = 0x0902;
數(shù)據(jù)流向:被呼叫方 → 呼叫方
功能說明:主要應(yīng)用于雙向視頻通話場(chǎng)景。被呼叫方響應(yīng)呼叫方發(fā)起的通話請(qǐng)求。
數(shù)據(jù)結(jié)構(gòu):
typedef struct{
unsigned char answer; // 0:拒絕; 1:接聽;
unsigned char myID[6]; // myID
unsigned char reserved[1];
}SMsgAVIoctrlCallResp;
(三十八)云臺(tái)PTZ控制
命令宏定義:IOTYPE_USER_IPCAM_PTZ_COMMAND = 0x1001;
數(shù)據(jù)流向:APP → Device
功能說明:APP告知Device進(jìn)行云臺(tái)控制操作。
數(shù)據(jù)結(jié)構(gòu):
// 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;
// 云臺(tái)控制結(jié)構(gòu)
typedef struct{
unsigned char control; // 云臺(tái)控制指令,參考 ENUM_PTZCMD.
unsigned char speed; // 云臺(tái)轉(zhuǎn)動(dòng)的速度
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;
數(shù)據(jù)流向:APP → Device
功能說明:APP告知Device接收到第一張I幀圖片。
數(shù)據(jù)結(jié)構(gòu):
typedef struct{
unsigned int channel; // camera index
char reserved[4];
}SMsgAVIoctrlReceiveFirstIFrame;
(四十)通知設(shè)備進(jìn)行OTA升級(jí)
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_OTA_REQ = 0x8001) | 響應(yīng)(IOTYPE_USER_IPCAM_OTA_RESP = 0x8002)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device開始進(jìn)行OTA升級(jí),Device告知APPOTA升級(jí)進(jìn)度及結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned char file_checksum[32]; // MD5校驗(yàn)碼
unsigned char url[256]; // 下載固件url鏈接
unsigned int file_size; // 固件包大小
unsigned char reserved[4];
}SMsgAVIoctrlOTAReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int progress; // 下載固件進(jìn)度
unsigned int endflag; // 1:下載完成;0:下載中;
unsigned char reserved[8];
}SMsgAVIoctrlOTAResp;
(四十一)獲取設(shè)備信息(新)
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_DEVICE_INFO_REQ = 0x8015) | 響應(yīng)(IOTYPE_USER_IPCAM_DEVICE_INFO_RESP = 0x8016)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:注:新設(shè)備需對(duì)接OTA功能時(shí)建議使用,與舊cmd IOTYPE_USER_IPCAM_DEVINFO_REQ = 0x0330同作用。APP告知Device要獲取設(shè)備資訊,Device告知APP設(shè)備詳細(xì)資訊。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned char reserved[8];
} SMsgAVIoctrlDeviceInfoReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned char model[32]; // 產(chǎn)品型號(hào)
unsigned char product[32]; // 產(chǎn)品名
unsigned char vender[32]; // 制造商(需與KOTA服務(wù)器上的廠商一致)
unsigned char version[64]; // 當(dāng)前版本號(hào)
unsigned int free; // SD卡剩余空間
unsigned int total; // SD卡總空間
unsigned char region; // 獲取設(shè)備所在位置,0:中國大陸區(qū);1:非中國大陸區(qū);
unsigned char reserved[3];
} SMsgAVIoctrlDeviceInfoResp;
注:以上參數(shù)用于拼接向KOTA服務(wù)器獲取升級(jí)文件的下載地址請(qǐng)求,故需與在KOTA服務(wù)器上創(chuàng)建的vender,product,model等信息保持一致,且注意區(qū)分設(shè)備所在區(qū)域。
(四十二)獲取設(shè)備是否支持OTA升級(jí)
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_DEVICE_SUPPORT_OTA_REQ = 0x800A) | 響應(yīng)(IOTYPE_USER_IPCAM_DEVICE_SUPPORT_OTA_RESP = 0x800B)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device要獲取設(shè)備是否支持OTA升級(jí),Device告知APP設(shè)備OTA升級(jí)支持狀態(tài)。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned char reserved[8];
}SMsgAVIoctrlDeviceSupportOTAReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned char isSupport; // 0:不支持;1:支持;
unsigned char reserved[4];
} SMsgAVIoctrlDeviceSupportOTAResp;
(四十三)查詢?cè)O(shè)備是否支持云存儲(chǔ)
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_DEVICE_SUPPORT_CLOUD_REQ = 0x800C) | 響應(yīng)(IOTYPE_USER_IPCAM_DEVICE_SUPPORT_CLOUD_RESP = 0x800D)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device查詢是否支持云存儲(chǔ),Device告知APP設(shè)備云存儲(chǔ)支持狀態(tài)。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned char reserved[8];
}SMsgAVIoctrlDeviceSupportCloudReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int result; // 0:不支持;1:支持;
unsigned char reserved[4];
} SMsgAVIoctrlDeviceSupportCloudResp;
(四十四)設(shè)置設(shè)備云存儲(chǔ)錄像開關(guān)
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_DEVICE_SET_CLOUD_REQ = 0x8010) | 響應(yīng)(IOTYPE_USER_IPCAM_DEVICE_SET_CLOUD_RESP = 0x8011)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device開啟或關(guān)閉云存儲(chǔ)錄像功能,Device告知APP設(shè)置結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int channel; // camera index
unsigned int isOn; // 1:開啟; 0:關(guān)閉;
}SMsgAVIoctrlSetCloudReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int channel; // camera index
unsigned int result; // 0:成功; 1:失??;
}SMsgAVIoctrlSetCloudResp;
(四十五)查詢?cè)O(shè)備云存儲(chǔ)錄像開關(guān)
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_DEVICE_GET_CLOUD_REQ = 0x8012) | 響應(yīng)(IOTYPE_USER_IPCAM_DEVICE_GET_CLOUD_RESP = 0x8013)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP獲取Device云存儲(chǔ)錄像狀態(tài),Device告知APP當(dāng)前云存儲(chǔ)錄像狀態(tài)。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int channel; // camera index
unsigned char reserved[4];
}SMsgAVIoctrlGetCloudReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int channel; // camera index
unsigned int isOn; // 1:開啟; 0:關(guān)閉;
}SMsgAVIoctrlGetCloudResp;
(四十六)查詢有SD卡事件的日期
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_GET_EVENT_DATE_REQ = 0x9000) | 響應(yīng)(IOTYPE_USER_IPCAM_GET_EVENT_DATE_RESP = 0x9001)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device獲取有SD卡事件的日期,Device告知APP包含SD卡事件的日期列表。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned int eventType; // 查詢的事件類型,0:全部;1:移動(dòng)偵測(cè);2:全時(shí)錄像;(默認(rèn)是0)
STimeDay stStartTime; // 開始時(shí)間
STimeDay stEndTime; // 結(jié)束時(shí)間
unsigned char reserved[8];
} SMsgAVIoctrlGetEventDateReq;
// 日期結(jié)構(gòu)
typedef struct{
char date[8]; // 事件的日期,例如:20200210,后面依次還有count-1個(gè)date[8]
} EventDate;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int count; // 事件的日期數(shù)量
unsigned char reserved[4];
EventDate eventDate[1]; // 事件的日期
} SMsgAVIoctrlGetEventDateResp;
(四十七)查詢?cè)O(shè)備人形偵測(cè)的開關(guān)
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_GET_HUMANDETECTION_REQ = 0x9002) | 響應(yīng)(IOTYPE_USER_IPCAM_GET_HUMANDETECTION_RESP = 0x9003)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device查詢?nèi)诵蝹蓽y(cè)開關(guān)狀態(tài),Device告知APP人形偵測(cè)開關(guān)查詢結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned char reserved[4];
} SMsgAVIoctrlGetHumanDetectionReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int result; // 1:開啟;其他:關(guān)閉;
unsigned char reserved[4];
} SMsgAVIoctrlGetHumanDetectionResp;
(四十八)設(shè)置設(shè)備人形偵測(cè)開關(guān)
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_SET_HUMANDETECTION_REQ = 0x9004) | 響應(yīng)(IOTYPE_USER_IPCAM_SET_HUMANDETECTION_RESP = 0x9005)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device設(shè)置人形偵測(cè)開關(guān)狀態(tài),Device告知APP人形偵測(cè)開關(guān)設(shè)置結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int isOn; // 1:開啟;0:關(guān)閉;
unsigned char reserved[4];
} SMsgAVIoctrlSetHumanDetectionReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int result; // 0:成功;其他:失??;
unsigned char reserved[4];
} SMsgAVIoctrlSetHumanDetectionResp;
(四十九)查詢?cè)O(shè)備夜視狀態(tài)
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_GET_NIGHTVISION_REQ = 0x9006) | 響應(yīng)(IOTYPE_USER_IPCAM_GET_NIGHTVISION_RESP = 0x9007)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device獲取夜視設(shè)置狀態(tài),Device告知APP當(dāng)前夜視設(shè)置狀態(tài)。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned char reserved[4];
} SMsgAVIoctrlGetNightVisionReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int result; // 0:關(guān)閉;1:開啟;2:自動(dòng);
unsigned char reserved[4];
} SMsgAVIoctrlGetNightVisionResp;
(五十)設(shè)置設(shè)備夜視狀態(tài)
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_SET_NIGHTVISION_REQ = 0x9008) | 響應(yīng)(IOTYPE_USER_IPCAM_SET_NIGHTVISION_RESP = 0x9009)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device設(shè)置夜視狀態(tài),Device告知APP夜視設(shè)置結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int isOn; // 0:關(guān)閉;1:開啟;2:自動(dòng);
unsigned char reserved[4];
} SMsgAVIoctrlSetNightVisionReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int result; // 0:成功;其他:失敗;
unsigned char reserved[4];
} SMsgAVIoctrlSetNightVisionResp;
(五十一)查詢?cè)O(shè)備夏令時(shí)開關(guān)
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_GET_SUMMERTIME_REQ = 0x9010) | 響應(yīng)(IOTYPE_USER_IPCAM_GET_SUMMERTIME_RESP = 0x9011)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device查詢夏令時(shí)開關(guān)狀態(tài),Device告知APP夏令時(shí)開關(guān)查詢結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned char reserved[4];
} SMsgAVIoctrlGetSummerTimeReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int result; // 1:開啟;其他:關(guān)閉;
unsigned char reserved[4];
} SMsgAVIoctrlGetSummerTimeResp;
(五十二)設(shè)置設(shè)備夏令時(shí)開關(guān)
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_SET_SUMMERTIME_REQ = 0x9012) | 響應(yīng)(IOTYPE_USER_IPCAM_SET_SUMMERTIME_RESP = 0x9013)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device設(shè)置夏令時(shí)開關(guān)狀態(tài),Device告知APP夏令時(shí)開關(guān)設(shè)置結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int isOn; // 1:開啟; 0:關(guān)閉;
unsigned char reserved[4];
} SMsgAVIoctrlSetSummerTimeReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int result; // 0:成功;其他:失敗;
unsigned char reserved[4];
} SMsgAVIoctrlSetSummerTimeResp;
(五十三)獲取設(shè)備CertKey及ProfileVer
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_GET_PROFILE_REQ = 0x9014) | 響應(yīng)(IOTYPE_USER_IPCAM_GET_PROFILE_RESP = 0x9015)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device需要獲取certKey、profileVer,Device告知APP設(shè)備的certKey和profileVer信息。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned char reserved[8];
}SMsgAVIoctrlGetProfileReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned char certKey[40];
unsigned char profileVer[20]; // profile配置文件版本號(hào)
unsigned char reserved[8];
} SMsgAVIoctrlGetProfileResp;
(五十四)獲取上傳文件的通道列表
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_UPLOAD_FILE_REQ = 0x9027) | 響應(yīng)(IOTYPE_USER_IPCAM_UPLOAD_FILE_RESP = 0x9028)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device需要獲取上傳文件的通道列表,Device告知APP設(shè)備的可上傳類型、可上傳的連接通道。
數(shù)據(jù)結(jié)構(gòu):
// 文件信息結(jié)構(gòu)
typedef struct{
unsigned char fileName[64]; // 文件名稱
}Fileinfo;
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
int functionalType; // 功能類型: 1.預(yù)設(shè)語音 2.其他功能類型
int count; // 需要上傳文件的總數(shù)
Fileinfo Filename[10]; // 上傳文件名集合
} SMsgAVIoctrlFileUploadReq;
// 傳輸類型枚舉
typedef enum{
TKTransferType_AVAPI = 0, // AVAPI 上傳類型
TKTransferType_RDT = 1 // RDT 上傳類型
}ENUM_TKTransferType;
// 通道信息結(jié)構(gòu)
typedef struct{
unsigned int channel; // 通道 id
}ChannelInfo;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int type; // TKTransferType 上傳類型
int count; // 通道集合的總數(shù)(最多10個(gè)) ; -1:表示失??;
ChannelInfo channel[10];
} SMsgAVIoctrlFileUploadResp;
(五十五)獲取下載SD卡事件的通道列表
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_EVENT_DOWNLOAD_FILE_REQ = 0x9029) | 響應(yīng)(IOTYPE_USER_IPCAM_EVENT_DOWNLOAD_FILE_RESP = 0x902A)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device需要獲取下載SD卡事件的通道列表,Device告知APP設(shè)備的下載類型、可下載的連接通道。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
int count; // 需要下載事件的個(gè)數(shù)
STimeDay sTimeDayList [10]; // 需要下載SD卡事件的時(shí)間集合(每次最多10個(gè))
}SMsgAVIoctrlEventFileDownReq;
// 傳輸類型枚舉
typedef enum{
TKTransferType_AVAPI = 0, // AVAPI下載類型
TKTransferType_RDT = 1 // RDT下載類型
}ENUM_TKTransferType;
// 通道信息結(jié)構(gòu)
typedef struct{
unsigned int channel; // 通道 id
}ChannelInfo;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int type; // TKTransferType 下載類型
int count; // 通道集合的總數(shù)(最多10個(gè)) ; -1:表示失??;
ChannelInfo channel[10];
} SMsgAVIoctrlEventFileDownResp;
(五十六)獲取預(yù)設(shè)語音列表
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_GET_VOICE_FILELIST_REQ = 0x902B) | 響應(yīng)(IOTYPE_USER_IPCAM_GET_VOICE_FILELIST_RESP = 0x902C)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device需要獲取預(yù)設(shè)語音文件名稱列表,Device告知APP設(shè)備的預(yù)設(shè)語音列表。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
int channel; // 通道號(hào)
}SMsgAVIoctrlGetVoiceFileReq;
// 預(yù)設(shè)語音信息結(jié)構(gòu)
typedef struct{
int isPresetSpeech; // 是否預(yù)設(shè)語音,1:當(dāng)前預(yù)設(shè)語音,0:當(dāng)前不是預(yù)設(shè)語音;
char fileName[64]; // 文件名稱
}PresetSpeechInfo;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
int count; // 文件名稱總數(shù) (最多10個(gè)); -1:表示失?。?
PresetSpeechInfo presetSpeechInfo [10];
} SMsgAVIoctrlGetVoiceFileResp;
(五十七)播放設(shè)備存儲(chǔ)的預(yù)設(shè)語音
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_PLAY_VOICE_REQ = 0x902D) | 響應(yīng)(IOTYPE_USER_IPCAM_PLAY_VOICE_RESP = 0x902E)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device開始播放預(yù)設(shè)語音,Device告知APP語音播放結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
int channel; // 通道號(hào)
}SMsgAVIoctrlPlayVoiceReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
int result; // 1:成功播放;其他:返回播放失??;
} SMsgAVIoctrlPlayVoiceResp;
(五十八)查詢?cè)O(shè)備是否支持雙向視頻
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_DEVICE_SUPPORT_DOUBLEVIDEO_REQ = 0x9030) | 響應(yīng)(IOTYPE_USER_IPCAM_DEVICE_SUPPORT_DOUBLEVIDEO_RESP = 0x9031)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP發(fā)送請(qǐng)求獲取設(shè)備是否支持雙向視頻,Device告知APP設(shè)備雙向視頻支持狀態(tài)。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned char reserved[8];
}SMsgAVIoctrlDeviceSupportDoubleVideoReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned char isSupport; // 0:不支持;1:支持;
unsigned char reserved[3];
} SMsgAVIoctrlDeviceSupportDoubleVideoResp;
(五十九)發(fā)起雙向視頻
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_DOUBLEVIDEOCALL_REQ = 0x9032) | 響應(yīng)(IOTYPE_USER_IPCAM_DOUBLEVIDEOCALL_RESP = 0x9033)
數(shù)據(jù)流向:請(qǐng)求(呼叫方 → 被呼叫方) | 響應(yīng)(被呼叫方 → 呼叫方)
功能說明:呼叫方向被呼叫方發(fā)起雙向視頻通話請(qǐng)求,被呼叫方響應(yīng)呼叫方的通話請(qǐng)求。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)(呼叫方→被呼叫方)
typedef struct{
unsigned char reserved[8];
}SMsgAVIoctrlDoubleVideoCallReq;
// 響應(yīng)結(jié)構(gòu)(被呼叫方→呼叫方)
typedef struct{
unsigned char answer; // 0:拒絕;1:接聽;
unsigned char reserved[3];
} SMsgAVIoctrlDoubleVideoCallResp;
(六十)查詢SD卡掛載狀態(tài)
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_SDINFO_REQ = 0x9034) | 響應(yīng)(IOTYPE_USER_IPCAM_SDINFO_RESP = 0x9035)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP發(fā)送請(qǐng)求獲取設(shè)備SD卡掛載狀態(tài),Device告知APP設(shè)備SD卡當(dāng)前掛載狀態(tài)。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned char reserved[8];
}SMsgAVIoctrlSdInfoReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned char state; // 0:sd卡異常;1:未插卡;2:已插卡;
unsigned char reserved[3];
} SMsgAVIoctrlSdInfoResp;
(六十一)查詢?cè)O(shè)備當(dāng)前對(duì)講狀態(tài)
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_SPEAK_STATE_REQ = 0x9036) | 響應(yīng)(IOTYPE_USER_IPCAM_SPEAK_STATE_RESP = 0x9037)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP發(fā)送請(qǐng)求獲取設(shè)備當(dāng)前對(duì)講狀態(tài),Device告知APP設(shè)備當(dāng)前對(duì)講狀態(tài)。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned char reserved[8];
}SMsgAVIoctrlSpeakStateReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned char state; // 0:未占用(允許app進(jìn)行對(duì)講);1:被占用(不允許app進(jìn)行對(duì)講);2:不支持(設(shè)備沒有對(duì)講功能);
unsigned char reserved[3];
} SMsgAVIoctrlSpeakStateResp;
(六十二)獲取移動(dòng)追蹤開關(guān)狀態(tài)
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_GET_MOTION_TRACKING_REQ = 0x9038) | 響應(yīng)(IOTYPE_USER_IPCAM_GET_MOTION_TRACKING_RESP = 0x9039)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device獲取移動(dòng)追蹤狀態(tài),Device告知APP當(dāng)前移動(dòng)追蹤狀態(tài)。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
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;
// 追蹤任務(wù)結(jié)構(gòu)
typedef struct{
unsigned int traceType; // 追蹤類型,詳情查看ENUM_TRACE_TYPE
unsigned int isOn; // 是否開啟, 0:關(guān)閉;1:開啟;
unsigned char reserved[4];
}SMsgTraceTask;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned int count; // SMsgTraceTask數(shù)組的長度
unsigned char reserved[4]; // 保留位
SMsgTraceTask task[1] ; // SMsgTraceTask的數(shù)組;count是數(shù)組的長度;
}SMsgAVIoctrlGetMotionTrackingResp;
(六十三)設(shè)置移動(dòng)追蹤開關(guān)狀態(tài)
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_SET_MOTION_TRACKING_REQ = 0x903A) | 響應(yīng)(IOTYPE_USER_IPCAM_SET_MOTION_TRACKING_RESP = 0x903B)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device設(shè)置追蹤開關(guān)狀態(tài),Device告知APP移動(dòng)追蹤設(shè)置結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 追蹤類型枚舉
typedef enum{
TRACE_TYPE_OBJECT = 0x01, // 物體追蹤
TRACE_TYPE_HUMAN = 0x02, // 人形追蹤
TRACE_TYPE_AUDIO = 0x03 // 聽音辨位
}ENUM_TRACE_TYPE;
// 追蹤任務(wù)結(jié)構(gòu)
typedef struct{
unsigned int traceType; // 追蹤類型,詳情查看ENUM_TRACE_TYPE
unsigned int isOn; // 是否開啟, 0:關(guān)閉;1:開啟;
unsigned char reserved[4];
}SMsgTraceTask;
// 設(shè)置結(jié)果結(jié)構(gòu)
typedef struct{
unsigned int traceType; // 設(shè)置的追蹤類型 詳情查看ENUM_TRACE_TYPE
unsigned int result; // 當(dāng)前設(shè)置類型是否設(shè)置成功,0:成功;others:失??;
unsigned char reserved[4];
}SMsgAVIoctrlSetResult;
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned int count; // SMsgTraceTask數(shù)組的長度
unsigned char reserved[4]; // 保留位
SMsgTraceTask task[1] ; // SMsgTraceTask的數(shù)組;count是數(shù)組的長度;
}SMsgAVIoctrlSetMotionTrackingReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int count; // 設(shè)置返回結(jié)果的數(shù)量
SMsgAVIoctrlSetResult result[1]; // 設(shè)置返回結(jié)果的數(shù)組
unsigned char reserved[4];
}SMsgAVIoctrlSetMotionTrackingResp;
(六十四)獲取指示燈狀態(tài)
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_GET_PILOT_LAMP_REQ = 0x903C) | 響應(yīng)(IOTYPE_USER_IPCAM_GET_PILOT_LAMP_RESP = 0x903D)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device獲取指示燈的狀態(tài),Device告知APP當(dāng)前指示燈狀態(tài)。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
}SMsgAVIoctrlGetPilotLampReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned int lightState; // 指示燈的狀態(tài),0:關(guān)閉;1:開啟;
unsigned char reserved[8];
}SMsgAVIoctrlGetPilotLampResp;
(六十五)設(shè)置指示燈狀態(tài)
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_SET_PILOT_LAMP_REQ = 0x903E) | 響應(yīng)(IOTYPE_USER_IPCAM_SET_PILOT_LAMP_RESP = 0x903F)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device設(shè)置指示燈狀態(tài),Device告知APP指示燈設(shè)置結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned int lightState; // 指示燈的狀態(tài), 0:關(guān)閉; 1:開啟;
unsigned char reserved[8];
}SMsgAVIoctrlSetPilotLampReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int result; // 0:成功;otherwise:失??;
unsigned char reserved[4];
}SMsgAVIoctrlSetPilotLampResp;
(六十六)通知設(shè)備重啟
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_SET_RESTART_REQ = 0x9040) | 響應(yīng)(IOTYPE_USER_IPCAM_SET_RESTART_RESP = 0x9041)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device重啟設(shè)備,Device告知APP設(shè)備重啟結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
}SMsgAVIoctrlSetRestartReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int result; // 0:成功;otherwise:失?。?
unsigned char reserved[4];
}SMsgAVIoctrlSetRestartResp;
(六十七)獲取智能偵測(cè)狀態(tài)
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_GET_INTELLIGENT_DETECTION_REQ) | 響應(yīng)(IOTYPE_USER_IPCAM_GET_INTELLIGENT_DETECTION_RESP)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device獲取智能偵測(cè)狀態(tài),Device告知APP當(dāng)前智能偵測(cè)狀態(tài)。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
}SMsgAVIoctrlGetIntelligentDetectionReq;
// 偵測(cè)任務(wù)結(jié)構(gòu)
typedef struct{
unsigned int detectionType; // 偵測(cè)類型(類型詳情請(qǐng)參考ENUM_EVENTTYPE)
unsigned int isOn; // 是否開啟,0:關(guān)閉;1:開啟;
unsigned int sensitivity; // 靈敏度
unsigned char reserved[4]; // 保留位
}SMsgDetectionTask;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned int count; // SMsgDetectionTask數(shù)組的長度
unsigned char reserved[4]; // 保留位
SMsgDetectionTask task[1] ; // 偵測(cè)類型的數(shù)組;count是數(shù)組的長度;
}SMsgAVIoctrlGetIntelligentDetectionResp;
(六十八)設(shè)置智能偵測(cè)狀態(tài)
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_SET_INTELLIGENT_DETECTION_REQ) | 響應(yīng)(IOTYPE_USER_IPCAM_SET_INTELLIGENT_DETECTION_RESP)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device設(shè)置智能偵測(cè)狀態(tài),Device告知APP智能偵測(cè)設(shè)置結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 偵測(cè)任務(wù)結(jié)構(gòu)
typedef struct{
unsigned int detectionType; // 偵測(cè)類型(類型詳情請(qǐng)參考ENUM_EVENTTYPE)
unsigned int isOn; // 是否開啟,0:關(guān)閉;1:開啟;
unsigned int sensitivity; // 靈敏度
unsigned char reserved[4]; // 保留位
}SMsgDetectionTask;
// 設(shè)置結(jié)果結(jié)構(gòu)
typedef struct{
unsigned int detectionType; // 設(shè)置的偵測(cè)類型(類型詳情請(qǐng)參考ENUM_EVENTTYPE)
unsigned int result; // 當(dāng)前設(shè)置類型是否設(shè)置成功0:成功;otherwise:失??;
unsigned char reserved[4];
} SMsgAVIoctrlSetDetectResult;
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned int count; // SMsgDetectionTask數(shù)組的長度
unsigned char reserved[4]; // 保留位
SMsgDetectionTask task[1] ; // 偵測(cè)類型的數(shù)組;count是數(shù)組的長度;
}SMsgAVIoctrlSetIntelligentDetectionReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int count; // 設(shè)置返回結(jié)果的數(shù)量
SMsgAVIoctrlSetDetectResult result[1]; // 設(shè)置返回結(jié)果的數(shù)組
unsigned char reserved[4];
}SMsgAVIoctrlSetIntelligentDetectionResp;
(六十九)查詢休眠設(shè)置
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_GET_DORMANCY_REQ = 0x9046) | 響應(yīng)(IOTYPE_USER_IPCAM_GET_DORMANCY_RESP = 0x9047)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device獲取休眠設(shè)置狀態(tài),Device告知APP當(dāng)前休眠設(shè)置狀態(tài)。
數(shù)據(jù)結(jié)構(gòu):
// 休眠定時(shí)任務(wù)結(jié)構(gòu)
typedef struct{
STimeDay startTime; // 開啟時(shí)間
STimeDay endTime; // 結(jié)束時(shí)間
unsigned int executionTime; // 實(shí)行時(shí)間,0:執(zhí)行一次;1:每天;2:工作日;3:周末;
unsigned int isOn; // 是否開啟,0:關(guān)閉;1:開啟;
unsigned char reserved[4];
}SMsgDormancyTask;
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
}SMsgAVIoctrlGetDormancyReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned int sleepState; // 設(shè)備狀態(tài),0:關(guān)閉;1:開啟;2:定時(shí)休眠中;
unsigned int count; // 設(shè)置定時(shí)休眠的數(shù)組,最多5個(gè)
unsigned int currentSleepState; // 當(dāng)前設(shè)備是否處在休眠中,0:不休眠;1:休眠;
SMsgDormancyTask task[1]; // 參考SMsgDormancyTask
}SMsgAVIoctrlGetDormancyResp;
(七十)設(shè)置休眠設(shè)置狀態(tài)
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_SET_DORMANCY_REQ = 0x9048) | 響應(yīng)(IOTYPE_USER_IPCAM_SET_DORMANCY_RESP = 0x9049)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device設(shè)置休眠狀態(tài),Device告知APP休眠設(shè)置結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 休眠定時(shí)任務(wù)結(jié)構(gòu)
typedef struct{
STimeDay startTime; // 開啟時(shí)間
STimeDay endTime; // 結(jié)束時(shí)間
unsigned int executionTime; // 實(shí)行時(shí)間,0:執(zhí)行一次;1:每天;2:工作日;3:周末;
unsigned int isOn; // 是否開啟,0:關(guān)閉;1:開啟;
unsigned char reserved[4];
}SMsgDormancyTask;
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned int sleepState; // 設(shè)備狀態(tài),0:關(guān)閉;1:開啟;2:定時(shí)休眠中;
unsigned int count; // 設(shè)置定時(shí)休眠的數(shù)組,1-5最多5個(gè)
unsigned char reserved[4];
SMsgDormancyTask task[1];
}SMsgAVIoctrlSetDormancyReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int result; // 0:成功;otherwise:失敗;
unsigned char reserved[4];
}SMsgAVIoctrlSetDormancyResp;
(七十一)獲取時(shí)區(qū)信息
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_GET_TIME_ZONE_REQ) | 響應(yīng)(IOTYPE_USER_IPCAM_GET_TIME_ZONE_RESP)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device獲取時(shí)區(qū)等狀態(tài)信息,Device告知APP當(dāng)前時(shí)區(qū)、語言、地區(qū)等狀態(tài)信息。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
}SMsgAVIoctrlGetTimeZoneReq;
// 語言類型枚舉
typedef enum{
LANGUAGE_TYPE_CN = 0x01, // 中文-簡(jiǎn)體
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;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned long timestamp; // UTC時(shí)間戳,精確到秒(s)
unsigned int isFollowingSystem; // 是否跟隨系統(tǒng),1:跟隨;0:不跟隨;
int timeZone ; // -12~12 時(shí)區(qū)(包含夏令時(shí)偏移量),精確到分鐘(比如:英國在UTC 0 時(shí)區(qū),夏令時(shí)+1,則timeZone = 60)
unsigned char region[128] ; // 地區(qū)
unsigned int language; // 語系(參考ENUM_LANGUAGE_TYPE)
unsigned char reserved[4];
}SMsgAVIoctrlGetTimeZoneResp;
備注:long一般是占8個(gè)字節(jié),因?yàn)榭紤]有些編譯器做字節(jié)對(duì)齊的時(shí)候,會(huì)進(jìn)行內(nèi)存優(yōu)化,建議struct定義的時(shí)候加上免優(yōu)化的選項(xiàng)(linux一般是在struct后加上__attribute__((packed)))
(七十二)設(shè)置設(shè)備時(shí)區(qū)
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_SET_TIME_ZONE_REQ) | 響應(yīng)(IOTYPE_USER_IPCAM_SET_TIME_ZONE_RESP)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device設(shè)置時(shí)區(qū)等狀態(tài)信息,Device告知APP時(shí)區(qū)設(shè)置結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 語言類型枚舉
typedef enum{
LANGUAGE_TYPE_CN = 0x01, // 中文-簡(jiǎn)體
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;
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned long timestamp; // UTC時(shí)間戳,精確到秒(s)
unsigned int isFollowingSystem; // 是否跟隨系統(tǒng),1:跟隨;0:不跟隨;
int timeZone ; // -12~12 時(shí)區(qū)(包含夏令時(shí)偏移量),精確到分鐘(比如:英國在UTC 0 時(shí)區(qū),夏令時(shí)+1,則timeZone = 60)
unsigned char region[128] ; // 地區(qū)
unsigned int language; // 語系(參考ENUM_LANGUAGE_TYPE)
unsigned char reserved[4];
}SMsgAVIoctrlSetTimeZoneReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int result; // 0:成功;otherwise:失??;
unsigned char reserved[4];
}SMsgAVIoctrlSetTimeZoneResp;
備注:long一般是占8個(gè)字節(jié),因?yàn)榭紤]有些編譯器做字節(jié)對(duì)齊的時(shí)候,會(huì)進(jìn)行內(nèi)存優(yōu)化,建議struct定義的時(shí)候加上免優(yōu)化的選項(xiàng)(linux一般是在struct后加上__attribute__((packed)))
(七十三)根據(jù)命令獲取設(shè)備各種狀態(tài)
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_GET_ALL_STATE_REQ = 0x904E) | 響應(yīng)(IOTYPE_USER_IPCAM_GET_ALL_STATE_RESP)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device根據(jù)指令獲取設(shè)備的狀態(tài),設(shè)備根據(jù)之前定義的cmd來返回狀態(tài)。
數(shù)據(jù)結(jié)構(gòu):
// 獲取設(shè)備狀態(tài)的命令數(shù)據(jù)
typedef struct{
unsigned int cmdType; // 命令類型
}SMsgCommandTask;
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned int count; // 命令數(shù)組長度
unsigned char reserved[4];
SMsgCommandTask task[1]; // 參考SMsgCommandTask
}SMsgAVIoctrlGetAllStateReq;
(七十四)重置設(shè)備(恢復(fù)出廠設(shè)置)
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_SET_RESET_REQ = 0x30000001) | 響應(yīng)(IOTYPE_USER_IPCAM_SET_RESET_RESP = 0x30000002)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device進(jìn)行重置(恢復(fù)出廠設(shè)置),Device告知APP設(shè)置結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct{
unsigned int channel; // Camera Index
unsigned char reserved[4];
}SMsgAVIoctrlSetResetReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct{
unsigned int result; // 0:成功;otherwise:失??;
unsigned char reserved[4];
}SMsgAVIoctrlSetResetResp;
(七十五)獲取音樂列表
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_GET_MUSIC_LIST_REQ = 0x9050) | 響應(yīng)(IOTYPE_USER_IPCAM_GET_MUSIC_LIST_RESP = 0x9051)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device獲取音樂列表,Device告知APP音樂列表。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct
{
unsigned int channel; // Camera Index
unsigned char reserved[4];
}SMsgAVIoctrlGetMusicListReq;
// 音樂信息結(jié)構(gòu)
typedef struct
{
unsigned char name[64]; // 音樂名稱
unsigned int index; // 序號(hào)
unsigned int isCustom; // 是否自定義音樂,0:默認(rèn)音樂 1:自定義音樂
unsigned int isCurrent; // 是否選中,1:選中,其他:否
unsigned char reserved[4];
}SAvMusic;
// 響應(yīng)結(jié)構(gòu)
typedef struct
{
unsigned int count;
unsigned char reserved[4];
SAvMusic stMusic[1]; // 數(shù)組
}SMsgAVIoctrlGetMusicListResp;
(七十六)獲取音樂播放狀態(tài)
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_GET_MUSIC_STATE_REQ = 0x9052) | 響應(yīng)(IOTYPE_USER_IPCAM_GET_MUSIC_STATE_RESP = 0x9053)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP請(qǐng)求Device告知當(dāng)前音樂的播放狀態(tài)(當(dāng)播放狀態(tài)改變時(shí),設(shè)備應(yīng)主動(dòng)告知APP)。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct
{
unsigned int channel; // Camera Index
unsigned char reserved[4];
}SMsgAVIoctrlGetMusicStateReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct
{
unsigned int channel; // Camera Index
unsigned int isPlaying; // 播放狀態(tài), 0:停止播放,1:正在播放
unsigned int isTryMusic; // 是否是試聽,0:試聽音樂,1:正式播放音樂
unsigned char reserved[4];
SAvMusic stMusic; // 當(dāng)前音樂
} __attribute__((packed)) SMsgAVIoctrlGetMusicStateResp;
(七十七)音樂播放控制
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_PLAY_MUSIC_REQ = 0x9054) | 響應(yīng)(IOTYPE_USER_IPCAM_PLAY_MUSIC_RESP = 0x9055)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device開始/停止播放音樂,Device告知APP設(shè)置結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct
{
unsigned int channel; // Camera Index
unsigned int isPlaying; // 播放狀態(tài),0:停止播放,1:正在播放
unsigned int isTryMusic; // 是否是試聽,0:試聽音樂,1:正式播放音樂
unsigned char reserved[4];
SAvMusic stMusic; // 當(dāng)前音樂
} __attribute__((packed)) SMsgAVIoctrlPlayMusicReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct
{
unsigned int result; // 0:成功,其他:失敗
unsigned char reserved[4];
}SMsgAVIoctrlPlayMusicResp;
(七十八)刪除錄制音樂
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_DELETE_MUSIC_REQ = 0x9056) | 響應(yīng)(IOTYPE_USER_IPCAM_DELETE_MUSIC_RESP = 0x9057)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device刪除錄制音樂,Device告知APP刪除錄制音樂結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct
{
unsigned int channel; // Camera Index
unsigned char reserved[4];
SAvMusic stMusic; // 當(dāng)前音樂
}SMsgAVIoctrlDeleteMusicReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct
{
unsigned int result; // 0:成功,其他:失敗
unsigned char reserved[4];
}SMsgAVIoctrlDeleteMusicResp;
(七十九)設(shè)置音樂
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_SET_MUSIC_REQ = 0x9058) | 響應(yīng)(IOTYPE_USER_IPCAM_SET_MUSIC_RESP = 0x9059)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device進(jìn)行音樂設(shè)置,Device告知APP設(shè)置結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct
{
unsigned int channel; // Camera Index
unsigned char reserved[4];
SAvMusic stMusic; // 設(shè)置音樂
} __attribute__((packed)) SMsgAVIoctrlSetMusicReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct
{
unsigned int result; // 0:成功,其他:失敗
unsigned char reserved[4];
}SMsgAVIoctrlSetMusicResp;
補(bǔ)充說明:設(shè)置選中時(shí),如果是單曲循環(huán)模式,則循環(huán)播放該音樂;如果是列表播放模式或者隨機(jī)播放,則表示從該音樂開始按列表或者隨機(jī)播放。
(八十)查詢音樂播放模式
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_GET_MUSIC_PLAY_MODE_REQ = 0x905A) | 響應(yīng)(IOTYPE_USER_IPCAM_GET_MUSIC_PLAY_MODE_RESP = 0x905B)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device獲取音樂播放模式狀態(tài)(當(dāng)播放模式改變時(shí),設(shè)備應(yīng)主動(dòng)告知APP)。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct
{
unsigned int channel; // Camera Index
unsigned char reserved[4];
}SMsgAVIoctrlGetMusicPlayModeReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct
{
unsigned int channel; // Camera Index
unsigned int playMode; // 播放模式,0:單曲循環(huán),1:列表播放,2:隨機(jī)播放
unsigned char reserved[8];
}SMsgAVIoctrlGetMusicPlayModeResp;
(八十一)設(shè)置音樂播放模式
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_SET_MUSIC_PLAY_MODE_REQ = 0x905C) | 響應(yīng)(IOTYPE_USER_IPCAM_SET_MUSIC_PLAY_MODE_RESP = 0x905D)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device設(shè)置播放模式,Device告知APP設(shè)置結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)(修正原拼寫錯(cuò)誤:SMsgAVIoctrlSetMusicPlayModeRep → SMsgAVIoctrlSetMusicPlayModeReq)
typedef struct
{
unsigned int channel; // Camera Index
unsigned int playMode; // 播放模式,0:單曲循環(huán),1:列表播放,2:隨機(jī)播放
unsigned char reserved[4];
}SMsgAVIoctrlSetMusicPlayModeReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct
{
unsigned int channel; // Camera Index
unsigned int result; // 0:成功,其他:失敗
unsigned char reserved[4];
}SMsgAVIoctrlSetMusicPlayModeResp;
(八十二)獲取設(shè)備音量
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_GET_DEVICE_VOL_REQ = 0x9060) | 響應(yīng)(IOTYPE_USER_IPCAM_GET_DEVICE_VOL_RESP = 0x9061)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device獲取設(shè)備音量狀態(tài),Device告知APP設(shè)備音量。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct
{
unsigned int channel; // Camera Index
unsigned char reserved[4];
}SMsgAVIoctrlGetDeviceVolReq;
// 音量信息結(jié)構(gòu)
typedef struct
{
unsigned int vol; // 0 - 100
unsigned int volType; // 0:麥克風(fēng),1:揚(yáng)聲器
} SAvVol;
// 響應(yīng)結(jié)構(gòu)
typedef struct
{
unsigned int channel; // Camera Index
unsigned char reserved[4]; // 保留位
unsigned int count;
SAvVol vol[1];
} __attribute__((packed)) SMsgAVIoctrlGetDeviceVolResp;
(八十三)設(shè)置設(shè)備音量
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_SET_DEVICE_VOL_REQ = 0x9062) | 響應(yīng)(IOTYPE_USER_IPCAM_SET_DEVICE_VOL_RESP = 0x9063)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device設(shè)置設(shè)備音量,Device告知APP設(shè)置結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct
{
unsigned int channel; // Camera Index
unsigned char reserved[4]; // 保留位
unsigned int count;
SAvVol vol[1];
}SMsgAVIoctrlSetDeviceVolReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct
{
unsigned int channel; // Camera Index
unsigned int result; // 0:成功,其他:失敗
unsigned char reserved[4];
}SMsgAVIoctrlSetDeviceVolResp;
(八十四)獲取溫度
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_GET_DEVICE_TEMPERATURE_REQ = 0x9064) | 響應(yīng)(IOTYPE_USER_IPCAM_GET_DEVICE_TEMPERATURE_RESP = 0x9065)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device獲取設(shè)備溫度狀態(tài)(當(dāng)溫度改變時(shí),設(shè)備應(yīng)主動(dòng)告知APP)。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct
{
unsigned int channel; // Camera Index
unsigned char reserved[4];
}SMsgAVIoctrlGetDeviceTemperatureReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct
{
unsigned int channel; // Camera Index
unsigned int integer; // 小數(shù)點(diǎn)前的溫度,比如36.2,此處就是36
unsigned int decimal; // 小數(shù)點(diǎn)后的溫度,比如36.2,此處是2
unsigned int unit; // 單位,0:攝氏度(℃),1:華氏度(℉)
unsigned char reserved[4];
}SMsgAVIoctrlGetDeviceTemperatureResp;
(八十五)獲取溫度單位
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_GET_DEVICE_TEMPERATUREUNIT_REQ = 0x9066) | 響應(yīng)(IOTYPE_USER_IPCAM_GET_DEVICE_TEMPERATUREUNIT_RESP = 0x9067)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device獲取設(shè)備溫度單位狀態(tài),Device告知APP設(shè)備溫度單位。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct
{
unsigned int channel; // Camera Index
unsigned char reserved[4];
}SMsgAVIoctrlGetDeviceTemperatureUnitReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct
{
unsigned int channel; // Camera Index
unsigned int unit; // 單位,0:攝氏度(℃),1:華氏度(℉)
unsigned char reserved[4];
}SMsgAVIoctrlGetDeviceTemperatureUnitResp;
(八十六)設(shè)置溫度單位
命令宏定義:請(qǐng)求(IOTYPE_USER_IPCAM_SET_DEVICE_TEMPERATUREUNIT_REQ = 0x9068) | 響應(yīng)(IOTYPE_USER_IPCAM_SET_DEVICE_TEMPERATUREUNIT_RESP = 0x9069)
數(shù)據(jù)流向:請(qǐng)求(APP → Device) | 響應(yīng)(Device → APP)
功能說明:APP告知Device設(shè)置設(shè)備溫度單位狀態(tài),Device告知APP設(shè)備溫度單位響應(yīng)結(jié)果。
數(shù)據(jù)結(jié)構(gòu):
// 請(qǐng)求結(jié)構(gòu)
typedef struct
{
unsigned int channel; // Camera Index
unsigned int unit; // 單位,0:攝氏度(℃),1:華氏度(℉)
unsigned char reserved[4];
}SMsgAVIoctrlSetDeviceTemperatureUnitReq;
// 響應(yīng)結(jié)構(gòu)
typedef struct
{
unsigned int channel; // Camera Index
unsigned int result; // 0:成功,其他:失敗
unsigned char reserved[4];
}SMsgAVIoctrlSetDeviceTemperatureUnitResp;
