#include "usg_common.h"
|
#include "usg_typedef.h"
|
#include "hcnetdisk_wrapper.h"
|
#include "HCNetSDK.h"
|
|
static int saveRecordFile(int userId, char * srcfile, char * destfile);
|
|
static int inited = 0;
|
void hcnetdisk_init_wrapper(char * libPath) {
|
if (libPath != NULL && strlen(libPath) != 0) {
|
NET_DVR_LOCAL_SDK_PATH struComPath = {0};
|
sprintf(struComPath.sPath, "%s", libPath); //HCNetSDKCom文件夹所在的路径
|
NET_DVR_SetSDKInitCfg(NET_SDK_INIT_CFG_SDK_PATH, &struComPath);
|
}
|
|
//---------------------------------------
|
// 初始化
|
NET_DVR_Init();
|
//设置连接时间与重连时间
|
NET_DVR_SetConnectTime(2000, 1);
|
NET_DVR_SetReconnect(10000, true);
|
inited = 1;
|
}
|
|
long hcnetdisk_login_wrapper(char *host, int port, char *username, char *password) {
|
//登录参数,包括设备地址、登录用户、密码等
|
NET_DVR_USER_LOGIN_INFO struLoginInfo = {0};
|
struLoginInfo.bUseAsynLogin = 0; //同步登录方式
|
strcpy(struLoginInfo.sDeviceAddress, host); //设备IP地址
|
struLoginInfo.wPort = port; //设备服务端口
|
strcpy(struLoginInfo.sUserName, username); //设备登录用户名
|
strcpy(struLoginInfo.sPassword, password); //设备登录密码
|
|
// 注册设备
|
LONG lUserID;
|
NET_DVR_DEVICEINFO_V40 struDeviceInfo = {0};
|
//lUserID = 0;
|
lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfo);
|
if (lUserID < 0)
|
{
|
printf("Login error, %d\n", NET_DVR_GetLastError());
|
NET_DVR_Cleanup();
|
return -1;
|
}
|
// printf("lUserID = %ld\n", lUserID);
|
return lUserID;
|
}
|
|
void hcnetdisk_logout_wrapper(long userid) {
|
//注销用户
|
NET_DVR_Logout(userid);
|
//释放 SDK 资源
|
NET_DVR_Cleanup();
|
}
|
|
/**
|
* @return success: 0, failture : -1
|
*/
|
int hcnetdisk_downloadByTime_wrapper(long userid, int channel, struct tm *start, struct tm *end, char *destfile) {
|
NET_DVR_FILECOND_V40 struFileCond = {0};
|
struFileCond.dwFileType = 0xFF;
|
|
//通道号
|
struFileCond.lChannel = channel;
|
struFileCond.dwIsLocked = 0xFF;
|
struFileCond.dwUseCardNo = 0;
|
struFileCond.struStartTime.dwYear = start->tm_year + 1900; //开始时间
|
struFileCond.struStartTime.dwMonth = start->tm_mon + 1;
|
struFileCond.struStartTime.dwDay = start->tm_mday;
|
struFileCond.struStartTime.dwHour = start->tm_hour;
|
struFileCond.struStartTime.dwMinute = start->tm_min;
|
struFileCond.struStartTime.dwSecond = start->tm_sec;
|
|
struFileCond.struStopTime.dwYear = end->tm_year + 1900; //结束时间
|
struFileCond.struStopTime.dwMonth = end->tm_mon + 1;
|
struFileCond.struStopTime.dwDay = end->tm_mday;
|
struFileCond.struStopTime.dwHour = end->tm_hour;
|
struFileCond.struStopTime.dwMinute = end->tm_min;
|
struFileCond.struStopTime.dwSecond = end->tm_sec;
|
|
|
//---------------------------------------
|
//查找录像文件
|
int lFindHandle = NET_DVR_FindFile_V40(userid, &struFileCond);
|
if (lFindHandle < 0)
|
{
|
printf("find file fail,last error %d\n", NET_DVR_GetLastError());
|
return -1;
|
}
|
NET_DVR_FINDDATA_V40 struFileData;
|
while (true)
|
{
|
//逐个获取查找到的文件信息
|
int result = NET_DVR_FindNextFile_V40(lFindHandle, &struFileData);
|
if (result == NET_DVR_ISFINDING)
|
{
|
|
continue;
|
}
|
else if (result == NET_DVR_FILE_SUCCESS) //获取文件信息成功
|
{
|
char strFileName[256] = {0};
|
if (destfile != NULL) {
|
sprintf(strFileName, "%s", destfile);
|
char *dir = dirname(strdup(destfile));
|
printf("dir === %s\n", dir);
|
if ((mkdir(dir, DIR_MODE) == -1) && (errno != EEXIST)) {
|
err_msg(errno, "hc_downloadByTime mkdir error ");
|
return -1;
|
}
|
} else {
|
sprintf(strFileName, "./%s", struFileData.sFileName);
|
}
|
|
return saveRecordFile(userid, struFileData.sFileName, strFileName);
|
}
|
else if (result == NET_DVR_FILE_NOFIND || result == NET_DVR_NOMOREFILE) //未查找到文件或者查找结束
|
{
|
err_msg(0, "can not finding! destfile=%s\n", destfile);
|
break;
|
}
|
else
|
{
|
printf("find file fail for illegal get file state");
|
break;
|
}
|
}
|
//停止查找
|
if (lFindHandle >= 0)
|
{
|
NET_DVR_FindClose_V30(lFindHandle);
|
}
|
return -1;
|
}
|
|
|
|
|
int saveRecordFile(int userId, char * srcfile, char * destfile)
|
{
|
printf("destfile=%s\n", destfile);
|
int bRes = 1;
|
int hPlayback = 0;
|
//按文件名下载录像
|
if ( (hPlayback = NET_DVR_GetFileByName(userId, srcfile, destfile)) < 0 )
|
{
|
printf( "GetFileByName failed. error[%d]\n", NET_DVR_GetLastError());
|
bRes = -1;
|
return bRes;
|
}
|
//开始下载
|
if (!NET_DVR_PlayBackControl_V40(hPlayback, NET_DVR_PLAYSTART, NULL, 0, NULL, NULL))
|
{
|
printf("play back control failed [%d]\n", NET_DVR_GetLastError());
|
bRes = -1;
|
return bRes;
|
}
|
int nPos = 0;
|
for (nPos = 0; nPos < 100 && nPos >= 0; nPos = NET_DVR_GetDownloadPos(hPlayback))
|
{
|
printf("Be downloading...%d %%\n", nPos);
|
sleep(1);
|
//下载进度
|
//millisecond
|
}
|
printf("have got %d\n", nPos);
|
//停止下载
|
if (!NET_DVR_StopGetFile(hPlayback))
|
{
|
printf("failed to stop get file [%d]\n", NET_DVR_GetLastError());
|
bRes = -1;
|
return bRes;
|
}
|
printf("%s\n", srcfile);
|
if (nPos < 0 || nPos > 100)
|
{
|
printf("download err [%d]\n", NET_DVR_GetLastError());
|
bRes = -1;
|
return bRes;
|
}
|
else
|
{
|
return 0;
|
}
|
}
|