一、IO定義
以下為文件傳輸相關(guān)的IO Type及數(shù)據(jù)結(jié)構(gòu)定義:
// 協(xié)議類型枚舉
typedef enum{
TK_PROTOCOL_AVAPIs = 0,
TK_PROTOCOL_RDTAPIs
}TKProtocol;
// 文件類型枚舉
typedef enum{
TYPE_ALL = 0,
TYPE_VIDEO,
TYPE_AUDIO,
TYPE_IMAGE
}FILE_TYPE;
// IO控制類型枚舉
typedef enum{
IOCTRL_FILEMANAGER_FILE_LIST_REQ = 0x9021,
IOCTRL_FILEMANAGER_FILE_LIST_RESP = 0x9022,
IOCTRL_FILEMANAGER_FILE_DOWNLOAD_REQ = 0x9023,
IOCTRL_FILEMANAGER_FILE_DOWNLOAD_RESP = 0x9024,
IOCTRL_FILEMANAGER_FILE_DELETE_REQ = 0x9025,
IOCTRL_FILEMANAGER_FILE_DELETE_RESP = 0x9026,
IOCTRL_FILEMANAGER_FILE_UPLOAD_REQ = 0x9027,
IOCTRL_FILEMANAGER_FILE_UPLOAD_RESP = 0x9028,
}IOCTRL_TYPE;
// 時間結(jié)構(gòu)體
typedef struct{
unsigned short year;
unsigned char month;
unsigned char day;
unsigned char wday;
unsigned char hour;
unsigned char minute;
unsigned char second;
}stDateTime;
// 文件列表請求結(jié)構(gòu)體
typedef struct{
unsigned int channel;
stDateTime begin;//UTC時間
stDateTime end;//UTC時間
int fileType;//參考FILE_TYPE
unsigned char reserved[4];
}stFileListReq;
// 文件信息結(jié)構(gòu)體
typedef struct{
char fileName[64];
}stFileInfo;
// 擴(kuò)展文件信息結(jié)構(gòu)體
typedef struct{
unsigned int iotcChannelId;
unsigned int fileIndex;
char fileName[64];
unsigned int fileSize; //Byte
}stFileInfoEx;
// 通道信息結(jié)構(gòu)體
typedef struct{
uint iotcChanelId;
}stChannelInfo;
// 文件列表響應(yīng)結(jié)構(gòu)體
typedef struct{
int total;//本次查詢總共有多少個文件,如果數(shù)量較多,可以分多包發(fā)送
int index;//這是第幾包
int count;//本包中包含多少文件名
int endflag;//0為非最后一包,1為最后一包
stFileInfo files[0];
}stFileListResp;
// 文件操作請求結(jié)構(gòu)體(下載/刪除/上傳)
typedef struct{
int count;
stFileInfo files[0];
}stFileDownloadReq,stFileDeleteReq,stFileUploadReq;
// 文件下載/上傳響應(yīng)結(jié)構(gòu)體
typedef struct{
int protocol;
int count; // -1表示fail,否則為本次下載使用的通道數(shù)。
stChannelInfo channels[0];
}stFileDownloadResp,stFileUploadResp;
// 文件刪除響應(yīng)結(jié)構(gòu)體
typedef struct{
int result;
}stFileDeleteResp;
二、AVAPIs 幀信息定義
AVAPIs 協(xié)議中,文件傳輸?shù)臄?shù)據(jù)包與包頭分開發(fā)送,需單獨(dú)填充包頭信息(FRAMEINFO_FOR_UPLOAD_DOWNLOAD_t)和數(shù)據(jù)緩沖區(qū)。因?yàn)楣骖^文件《AVFRAMEINFO.h》已包含 FRAMEINFO_t.h 的定義:
typedef struct _FRAMEINFO
{
unsigned short codec_id;
unsigned char flags;
unsigned char cam_index;
unsigned char onlineNum;
unsigned char tags;
unsigned char reserve1[2];
unsigned int reserve2;
unsigned int timestamp;
} FRAMEINFO_t;
為了不影響其他功能,我們建議重新定義結(jié)構(gòu)體,而不是擴(kuò)展原來的 FRAMEINFO_t:
typedef struct {
char fileName[64]; // 文件名(含擴(kuò)展名,與請求中的文件名一致)
unsigned int fileSize; // 文件總大?。▎挝唬鹤止?jié))
unsigned int frmSize; // 當(dāng)前幀數(shù)據(jù)大小(單位:字節(jié))
char endFlag; // 結(jié)束標(biāo)志:1=最后一包,其余=非最后一包
char reserved[3]; // 預(yù)留字段,默認(rèn)填充0
} FRAMEINFO_FOR_UPLOAD_DOWNLOAD_t;
