#include <stdio.h>
|
#include <iostream>
|
#include <string.h>
|
#include <stdlib.h>
|
//#include "Windows.h"
|
#include "HCNetSDK.h"
|
#include <time.h>
|
|
using namespace std;
|
#define XML_BUF 3*1024*1024
|
void CALLBACK g_ExceptionCallBack(DWORD dwType, LONG lUserID, LONG lHandle, void *pUser) {
|
char tempbuf[256] = {0};
|
switch(dwType) {
|
case EXCEPTION_RECONNECT:
|
// 预览时重连
|
printf("----------reconnect--------%d\n", time(NULL));
|
break;
|
default:
|
break;
|
}
|
}
|
int main() {
|
DWORD dwRet;
|
|
NET_DVR_Init();
|
NET_DVR_SetConnectTime(2000, 1);
|
NET_DVR_SetReconnect(10000, true);
|
NET_DVR_SetExceptionCallBack_V30(0, NULL,g_ExceptionCallBack, NULL);
|
|
LONG lUserID;
|
|
NET_DVR_DEVICEINFO_V30 struDeviceInfo;
|
lUserID = NET_DVR_Login_V30("192.168.1.101", 8000, "admin", "a1234567", &struDeviceInfo);
|
if (lUserID < 0) {
|
printf("NET_DVR_Login_V30 failed, err: %d\n", NET_DVR_GetLastError());
|
NET_DVR_Cleanup();
|
return -1;
|
}
|
|
//DWORD dwWallNo = 1 << 24;
|
//
|
////---------------------------------------
|
//// 获取电视墙显示输出位置,获取4个屏幕信息
|
//DWORD m_dwDispNum=4;
|
//DWORD m_lDispChan[4]; //显示输出号,通过NET_DVR_GET_VIDEOWALLDISPLAYNO获取
|
//m_lDispChan[0]= 0x01000001;
|
//m_lDispChan[1]= 0x01000002;
|
//m_lDispChan[2]= 0x01000003;
|
//m_lDispChan[3]= 0x01000004;
|
//DWORD m_dwStatus[4];
|
//NET_DVR_VIDEOWALLDISPLAYPOSITION m_struWallDispPos[4];
|
//memset(m_dwStatus, 0, sizeof(m_dwStatus));
|
//memset(m_struWallDispPos, 0, sizeof(m_struWallDispPos));
|
//if (!NET_DVR_GetDeviceConfig(lUserID, NET_DVR_GET_VIDEOWALLDISPLAYPOSITION, m_dwDispNum, m_lDispChan, sizeof(DWORD) * m_dwDispNum,
|
// m_dwStatus, m_struWallDispPos, m_dwDispNum* sizeof(NET_DVR_VIDEOWALLDISPLAYPOSITION))) {
|
// printf("NET_DVR_GET_VIDEOWALLDISPLAYPOSITION failed, err: %d\n", NET_DVR_GetLastError());
|
//}
|
//
|
////---------------------------------------
|
////设置电视墙显示输出位置, 设置4个显示屏幕在电视墙上的位置
|
//m_struWallDispPos[0].byEnable=1;
|
//m_struWallDispPos[0].dwVideoWallNo= dwWallNo;
|
//m_struWallDispPos[0].struRectCfg.dwXCoordinate=0;
|
//m_struWallDispPos[0].struRectCfg.dwYCoordinate=0;
|
//
|
//m_struWallDispPos[1].byEnable=1;
|
//m_struWallDispPos[1].dwVideoWallNo= dwWallNo;
|
//m_struWallDispPos[1].struRectCfg.dwXCoordinate=1920;
|
//m_struWallDispPos[1].struRectCfg.dwYCoordinate=0;
|
//
|
//m_struWallDispPos[2].byEnable=1;
|
//m_struWallDispPos[2].dwVideoWallNo= dwWallNo;
|
//m_struWallDispPos[2].struRectCfg.dwXCoordinate=0;
|
//m_struWallDispPos[2].struRectCfg.dwYCoordinate=1080;
|
//
|
//m_struWallDispPos[3].byEnable=1;
|
//m_struWallDispPos[3].dwVideoWallNo= dwWallNo;
|
//m_struWallDispPos[3].struRectCfg.dwXCoordinate=1920;
|
//m_struWallDispPos[3].struRectCfg.dwYCoordinate=1080;
|
//
|
//if (!NET_DVR_SetDeviceConfig(lUserID, NET_DVR_SET_VIDEOWALLDISPLAYPOSITION, m_dwDispNum, m_lDispChan,sizeof(DWORD) * m_dwDispNum,
|
// m_dwStatus, m_struWallDispPos, m_dwDispNum* sizeof(NET_DVR_VIDEOWALLDISPLAYPOSITION))) {
|
// printf("NET_DVR_SET_VIDEOWALLDISPLAYPOSITION failed, err: %d\n", NET_DVR_GetLastError());
|
//}
|
|
|
|
//---------------------------------------
|
//获取电视墙窗口参数
|
//DWORD m_dwWinCount;
|
//窗口个数
|
//char *pTemp = new char[4 + 256 *sizeof(NET_DVR_VIDEOWALLWINDOWPOSITION)];
|
//memset(pTemp, 0, 4 + 256 *sizeof(NET_DVR_VIDEOWALLWINDOWPOSITION));
|
//获取电视墙所有窗口信息,只需传电视墙号
|
//if (!NET_DVR_GetDeviceConfig(lUserID, NET_DVR_GET_VIDEOWALLWINDOWPOSITION, 0xffffffff, &dwWallNo, sizeof(DWORD), NULL,
|
// pTemp, 4 + 256 *sizeof(NET_DVR_VIDEOWALLWINDOWPOSITION))) {
|
// printf("NET_DVR_GET_VIDEOWALLWINDOWPOSITION error, err: %d\n", NET_DVR_GetLastError());
|
//}
|
//m_dwWinCount = *((DWORD*)pTemp);
|
//printf("m_dwWinCount=%d\n", m_dwWinCount);
|
|
//返回的前4个字节为窗口个数delete []pTemp;
|
|
|
//---------------------------------------
|
//设置电视墙窗口参数,即开窗,坐标在电视墙范围之内
|
DWORD m_dwWinCount=1;
|
//开两个窗口
|
DWORD m_dwWinNum[1];
|
//1字节墙号+ 1字节保留+ 2字节窗口号m_dwWinNum[0] = 1<<24;
|
//开窗时窗口号为0
|
m_dwWinNum[0] = 1<<24;
|
|
|
NET_DVR_VIDEOWALLWINDOWPOSITION m_struWinPos[1];
|
memset(m_struWinPos, 0, sizeof(m_struWinPos));
|
|
m_struWinPos[0].dwSize=sizeof(NET_DVR_VIDEOWALLWINDOWPOSITION);
|
m_struWinPos[0].byEnable=1;
|
m_struWinPos[0].struRect.dwXCoordinate=100;
|
m_struWinPos[0].struRect.dwYCoordinate=100;
|
m_struWinPos[0].struRect.dwWidth=1720;
|
m_struWinPos[0].struRect.dwHeight=1720;
|
|
//m_struWinPos[1].dwSize=sizeof(NET_DVR_VIDEOWALLWINDOWPOSITION);
|
//m_struWinPos[1].byEnable=1;
|
//m_struWinPos[1].struRect.dwXCoordinate=1920;
|
//m_struWinPos[1].struRect.dwYCoordinate=1920;
|
//m_struWinPos[1].struRect.dwWidth=800;
|
//m_struWinPos[1].struRect.dwHeight=600;
|
|
|
|
|
DWORD m_dwWinStatus[1];
|
DWORD dwRetWinNum[1];
|
//开窗时窗口号由设备返回
|
|
NET_DVR_IN_PARAM struInputPapam = {0};
|
struInputPapam.struCondBuf.pBuf = &m_dwWinNum;
|
//输入条件缓冲区
|
struInputPapam.struCondBuf.nLen = m_dwWinCount * sizeof(DWORD);
|
struInputPapam.dwRecvTimeout = 5000;
|
//接收超时时间
|
struInputPapam.struInParamBuf.pBuf = m_struWinPos;
|
struInputPapam.struInParamBuf.nLen = m_dwWinCount * sizeof(NET_DVR_VIDEOWALLWINDOWPOSITION);
|
|
NET_DVR_OUT_PARAM struOutputPapam = {0};
|
struOutputPapam.lpStatusList = m_dwWinStatus;
|
struOutputPapam.struOutBuf.pBuf = dwRetWinNum;
|
struOutputPapam.struOutBuf.nLen = m_dwWinCount*sizeof(DWORD);
|
|
if (!NET_DVR_SetDeviceConfigEx(lUserID, NET_DVR_SET_VIDEOWALLWINDOWPOSITION, m_dwWinCount, &struInputPapam, &struOutputPapam)) {
|
printf("NET_DVR_SET_VIDEOWALLWINDOWPOSITION error, err: %d\n", NET_DVR_GetLastError());
|
}
|
|
|
|
//前端设备 动态解码
|
NET_DVR_PU_STREAM_CFG_V41 m_struDynamicInfo= {0};
|
m_struDynamicInfo.dwSize=sizeof(m_struDynamicInfo);
|
m_struDynamicInfo.byStreamMode=1;
|
strcpy((char *)m_struDynamicInfo.uDecStreamMode.struDecStreamDev.struDevChanInfo.byAddress, "192.168.1.63");
|
m_struDynamicInfo.uDecStreamMode.struDecStreamDev.struDevChanInfo.wDVRPort=8000;
|
strcpy((char *)m_struDynamicInfo.uDecStreamMode.struDecStreamDev.struDevChanInfo.sUserName,"admin");
|
strcpy((char *)m_struDynamicInfo.uDecStreamMode.struDecStreamDev.struDevChanInfo.sPassword,"admin12345");
|
m_struDynamicInfo.uDecStreamMode.struDecStreamDev.struDevChanInfo.byChannel=1;
|
m_struDynamicInfo.uDecStreamMode.struDecStreamDev.struDevChanInfo.byFactoryType=0;
|
|
//int byWallNo=1,dwSubWinNo=1,dwWinNo=1;
|
|
DWORD dwDecChanNum=0x01000002;
|
//DWORD dwDecChanNum=(byWallNo << 24) | (dwSubWinNo<<16) |dwWinNo;
|
//1字节墙号+1字节子窗口号+2字节窗口号: (byWallNo << 24) | (dwSubWinNo<<16) |dwWinNo;
|
if (!NET_DVR_MatrixStartDynamic_V41(lUserID, dwDecChanNum, &m_struDynamicInfo)) {
|
printf("NET_DVR_MatrixStartDynamic_V41 error, err: %d\n", NET_DVR_GetLastError());
|
}
|
|
/*char logobuf[50000];
|
NET_DVR_GetDeviceAbility(lUserID,WALL_ABILITY,NULL,0,logobuf,50000);
|
FILE * pFile;
|
pFile = fopen ("./a.xml","w");
|
printf("----test open----\n");
|
if (pFile!=NULL)
|
{
|
printf("----test----%d\n",sizeof(pFile));
|
fwrite(logobuf, 1, sizeof(logobuf), pFile);
|
|
fclose (pFile);
|
}
|
else
|
perror ("Error opening file");
|
*/
|
|
//报警时间段
|
NET_DVR_SCHEDTIME net_dvr_schedtime;
|
net_dvr_schedtime.byStartHour = 0;
|
net_dvr_schedtime. byStartMin = 1;
|
net_dvr_schedtime.byStopHour = 11;
|
net_dvr_schedtime.byStopMin = 59;
|
|
//报警设置信息
|
NET_DVR_ALARMOUTCFG_V30 net_dvr_alarmoutcfg;
|
net_dvr_alarmoutcfg.dwSize = ;
|
net_dvr_alarmoutcfg.sAlarmOutName = "test";
|
net_dvr_alarmoutcfg.dwAlarmOutDelay = 0;
|
net_dvr_alarmoutcfg.struAlarmOutTime= ;
|
net_dvr_alarmoutcfg.byRes[16] = 0;
|
//开启警报
|
NET_DVR_SetAlarmOut(lUserID,0xff00,1);
|
|
|
NET_DVR_DISP_LOGOCFG net_dvr_disp_logocfg1;
|
net_dvr_disp_logocfg1.dwCorordinateX = 10;
|
net_dvr_disp_logocfg1.dwCorordinateY = 10;
|
net_dvr_disp_logocfg1.wPicWidth = 32;
|
net_dvr_disp_logocfg1.wPicHeight = 32;
|
net_dvr_disp_logocfg1.byRes1[4]=0;
|
net_dvr_disp_logocfg1.byFlash = 1;
|
net_dvr_disp_logocfg1.byTranslucent = 0;
|
net_dvr_disp_logocfg1.byRes2[6]=0;
|
net_dvr_disp_logocfg1.dwLogoSize=0;
|
|
|
|
|
char logobuf[10000];
|
{
|
FILE * pFile;
|
pFile = fopen ("./ico.bmp","rb");
|
fseek(pFile,0,SEEK_END);
|
int nFileLen = ftell(pFile);
|
fseek(pFile,0,SEEK_SET);
|
|
printf("----test open----,%d\n",nFileLen);
|
if (pFile!=NULL)
|
{
|
printf("----test----\n");
|
net_dvr_disp_logocfg1.dwLogoSize = fread(logobuf, 1, nFileLen, pFile);
|
fclose (pFile);
|
}
|
else
|
perror ("Error opening file");
|
}
|
|
if (!NET_DVR_UploadLogo(lUserID, 1, &net_dvr_disp_logocfg1, logobuf)) {
|
printf("NET_DVR_UploadLogo error, err: %d\n", NET_DVR_GetLastError());
|
}
|
|
if (!NET_DVR_LogoSwitch(lUserID, 1, NET_DVR_SHOWLOGO)) {
|
printf("NET_DVR_LogoSwitch error, err: %d\n", NET_DVR_GetLastError());
|
}
|
//if (!NET_DVR_MatrixStopDynamic(lUserID,dwDecChanNum)) {
|
// printf("NET_DVR_MatrixStopDynamic error, err: %d\n", NET_DVR_GetLastError());
|
//}
|
|
// NET_DVR_MatrixStopDynamic
|
// NET_DVR_MatrixStopPassiveDecode
|
//解除警报
|
NET_DVR_SetAlarmOut(lUserID,0xff00,0);
|
//注销用户
|
NET_DVR_Logout(lUserID);
|
//释放SDK资源
|
NET_DVR_Cleanup();
|
return 0;
|
}
|