一、IO定义
以下为文件传输相关的IO Type及数据结构定义:
// 协议类型枚举
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;
// 时间结构体
typedef struct{
unsigned short year;
unsigned char month;
unsigned char day;
unsigned char wday;
unsigned char hour;
unsigned char minute;
unsigned char second;
}stDateTime;
// 文件列表请求结构体
typedef struct{
unsigned int channel;
stDateTime begin;//UTC时间
stDateTime end;//UTC时间
int fileType;//参考FILE_TYPE
unsigned char reserved[4];
}stFileListReq;
// 文件信息结构体
typedef struct{
char fileName[64];
}stFileInfo;
// 扩展文件信息结构体
typedef struct{
unsigned int iotcChannelId;
unsigned int fileIndex;
char fileName[64];
unsigned int fileSize; //Byte
}stFileInfoEx;
// 通道信息结构体
typedef struct{
uint iotcChanelId;
}stChannelInfo;
// 文件列表响应结构体
typedef struct{
int total;//本次查询总共有多少个文件,如果数量较多,可以分多包发送
int index;//这是第几包
int count;//本包中包含多少文件名
int endflag;//0为非最后一包,1为最后一包
stFileInfo files[0];
}stFileListResp;
// 文件操作请求结构体(下载/删除/上传)
typedef struct{
int count;
stFileInfo files[0];
}stFileDownloadReq,stFileDeleteReq,stFileUploadReq;
// 文件下载/上传响应结构体
typedef struct{
int protocol;
int count; // -1表示fail,否则为本次下载使用的通道数。
stChannelInfo channels[0];
}stFileDownloadResp,stFileUploadResp;
// 文件删除响应结构体
typedef struct{
int result;
}stFileDeleteResp;
二、AVAPIs 帧信息定义
AVAPIs 协议中,文件传输的数据包与包头分开发送,需单独填充包头信息(FRAMEINFO_FOR_UPLOAD_DOWNLOAD_t)和数据缓冲区。因为公版头文件《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;
为了不影响其他功能,我们建议重新定义结构体,而不是扩展原来的 FRAMEINFO_t:
typedef struct {
char fileName[64]; // 文件名(含扩展名,与请求中的文件名一致)
unsigned int fileSize; // 文件总大小(单位:字节)
unsigned int frmSize; // 当前帧数据大小(单位:字节)
char endFlag; // 结束标志:1=最后一包,其余=非最后一包
char reserved[3]; // 预留字段,默认填充0
} FRAMEINFO_FOR_UPLOAD_DOWNLOAD_t;
