#include "DeviceInit.h"
//10.18.67.10
CDeviceInit::CDeviceInit(QWidget* parent)
: QWidget(parent)
{
}
void CDeviceInit::stopListen(const long &lListenHandle)
{
if (!NET_DVR_StopListen_V30(lListenHandle))
{
qDebug() << "NET_DVR_StopListen_V30 error is" << NET_DVR_GetLastError() << endl;
/*NET_DVR_Logout(lUserID);
NET_DVR_Cleanup();*/
return;
}
else
{
qDebug() << "close listen success" << endl;
return;
}
}
void CDeviceInit::closeAlarm(const long &lHandle) //撤回布防
{
if (!NET_DVR_CloseAlarmChan_V30(lHandle))
{
qDebug() << "NET_DVR_CloseAlarmChan_V30 error is" << NET_DVR_GetLastError() << endl;
/*NET_DVR_Logout(lUserID);
NET_DVR_Cleanup();*/
return;
}
else
{
qDebug() << "close Alarm success" << endl;
return;
}
}
long CDeviceInit::setupAlarm(const long &lUserID) //启用布防
{
NET_DVR_SETUPALARM_PARAM struSetupParam = { 0 };
struSetupParam.dwSize = sizeof(NET_DVR_SETUPALARM_PARAM);
//上传报警信息类型: 0- 老报警信息(NET_DVR_PLATE_RESULT), 1- 新报警信息(NET_ITS_PLATE_RESULT)
struSetupParam.byAlarmInfoType = 1;
//布防等级:二级布防,针对智能交通设备
struSetupParam.byLevel = 1;
LONG lHandle = NET_DVR_SetupAlarmChan_V41(lUserID, &struSetupParam);
if (lHandle < 0)
{
qDebug() << "NET_DVR_SetupAlarmChan_V41 error is" << NET_DVR_GetLastError() << endl;
/*NET_DVR_Logout(lUserID);
NET_DVR_Cleanup(); */
}
else
{
qDebug() << "setup Alarm success" << endl;
}
return lHandle;
}
int iNum = 0;
void CALLBACK MessageCallBack(LONG lCommand, NET_DVR_ALARMER *pAlarmer, char *pAlarmInfo, DWORD dwBufLen, void* pUser)
{
((CDeviceInit*)pUser)->msgCallback(lCommand, pAlarmer, pAlarmInfo, dwBufLen);
return;
}
bool CDeviceInit::msgCallback(LONG lCommand, NET_DVR_ALARMER *pAlarmer, char *pAlarmInfo, DWORD dwBufLen)
{
int i;
switch (lCommand)
{
case COMM_ALARM:
{
NET_DVR_ALARMINFO struAlarmInfo;
memcpy(&struAlarmInfo, pAlarmInfo, sizeof(NET_DVR_ALARMINFO));
m_iAlarmTypeFlag = 1;
switch (struAlarmInfo.dwAlarmType)
{
case 3: //移动侦测报警
for (i = 0; i < 16; i++) //#define MAX_CHANNUM 16 //最大通道数
{
if (1 == struAlarmInfo.dwChannel[i])
{
qDebug() << "move alarm channel" << i + 1 << endl;
}
}
m_mapAlarmChannelInfo.insert(std::make_pair(pAlarmer->lUserID, struAlarmInfo));
case 6://遮挡报警
for (i = 0; i < 16; i++) //#define MAX_CHANNUM 16 //最大通道数
{
if (1 == struAlarmInfo.dwChannel[i])
{
qDebug() << "hide alarm channel" << i + 1 << endl;
}
}
m_mapAlarmChannelInfo.insert(std::make_pair(pAlarmer->lUserID, struAlarmInfo));
break;
default:
break;
}
}
case COMM_UPLOAD_FACESNAP_RESULT://人脸抓拍结果信息
{
m_iAlarmTypeFlag = 2;
NET_VCA_FACESNAP_RESULT struFaceSnapInfo;
memcpy(&struFaceSnapInfo, pAlarmInfo, sizeof(NET_VCA_FACESNAP_RESULT));
m_mapFaceSnapInfo.insert(std::make_pair(pAlarmer->lUserID, struFaceSnapInfo));
qDebug() << "face snap alarm" << endl;
}
break;
default:
break;
}
m_mapAlarmDeviceInfo.insert(std::make_pair(pAlarmer->lUserID,*pAlarmer));
return TRUE;
}
QString CDeviceInit::getAlarmInfo(const long &lUserID)
{
if (1 == m_iAlarmTypeFlag)
{
m_mapAlarmDeviceIter = m_mapAlarmDeviceInfo.find(lUserID);
return m_mapAlarmDeviceIter->second.sDeviceIP;
}
if (2 == m_iAlarmTypeFlag)
{
m_mapFaceSnapIter = m_mapFaceSnapInfo.find(lUserID);
return m_mapFaceSnapIter->second.struDevInfo.struDevIP.sIpV4;
}
return 0;
}
NET_DVR_ALARMINFO CDeviceInit::getAlarmerChannel(const long &lUserID)
{
m_mapAlarmChannelIter = m_mapAlarmChannelInfo.find(lUserID);
NET_DVR_ALARMINFO struAlarmerChannelInfo = m_mapAlarmChannelIter->second;
return struAlarmerChannelInfo;
}
long CDeviceInit::startListen(const long &lPort)//开始监听
{
//NET_DVR_NETCFG_V30 struNetcfg = { 0 };
//struNetcfg.dwSize = sizeof(NET_DVR_NETCFG_V30);
//struNetcfg.struAlarmHostIpAddr.sIpV4 = strIP;
long lListenHandle;
lListenHandle = NET_DVR_StartListen_V30(NULL, lPort, MessageCallBack, NULL);
if (lListenHandle < 0)
{
qDebug() << "NET_DVR_StartListen_V30 error is" << NET_DVR_GetLastError() << endl;
/*NET_DVR_Logout(lUserID);
NET_DVR_Cleanup(); */
}
else
{
qDebug() << "start listen success" << endl;
}
return lListenHandle;
}
long CDeviceInit::preview(long userID, const int &iChannel, const HWND &hWnd)//获取previewID预览准备
{
NET_DVR_PREVIEWINFO struPreviewInfo = { 0 };
struPreviewInfo.lChannel = iChannel;//通道号,目前设备模拟通道号从1开始,数字通道的起始通道号通过NET_DVR_GetDVRConfig(配置命令NET_DVR_GET_IPPARACFG_V40)获取(dwStartDChan)。
struPreviewInfo.hPlayWnd = hWnd;//播放窗口的句柄,为NULL表示不解码显示。
struPreviewInfo.dwStreamType = 0;//码流类型:0-主码流,1-子码流,2-三码流,3-虚拟码流,以此类推
struPreviewInfo.dwLinkMode = 0;//连接方式:0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4- RTP/RTSP,5- RTP/HTTP,6- HRUDP(可靠传输) ,7- RTSP/HTTPS,8- NPQ
struPreviewInfo.bBlocked = 1; //0 - 非阻塞取流,1 - 阻塞取流
long IRealPreviewHandle = NET_DVR_RealPlay_V40(userID, &struPreviewInfo, NULL, NULL);
if (IRealPreviewHandle < 0)
{
qDebug() << "NET_DVR_RealPlay_V40 error;error number " << NET_DVR_GetLastError();
QMessageBox::warning(NULL, "error", "NET_DVR_RealPlay_V40 error;error number " + QString::number(NET_DVR_GetLastError()));
NET_DVR_Logout(userID);
userID = -1;
return -1;
}
return IRealPreviewHandle;
}
long CDeviceInit::reviewInit(long userID,const HWND &hWnd,QDateTime beginDatetime,QDateTime endDatetime,const long &lChannel)
{
NET_DVR_VOD_PARA_V50 struReviewInfo = { 0 };
struReviewInfo.struBeginTime.wYear = beginDatetime.date().year();
struReviewInfo.struBeginTime.byMonth = beginDatetime.date().month();
struReviewInfo.struBeginTime.byDay = beginDatetime.date().day();
struReviewInfo.struBeginTime.byHour = beginDatetime.time().hour();
struReviewInfo.struBeginTime.byMinute = beginDatetime.time().minute();
struReviewInfo.struBeginTime.bySecond = beginDatetime.time().second();
struReviewInfo.struEndTime.wYear = endDatetime.date().year();
struReviewInfo.struEndTime.byMonth = endDatetime.date().month();
struReviewInfo.struEndTime.byDay = endDatetime.date().day();
struReviewInfo.struEndTime.byHour = endDatetime.time().hour();
struReviewInfo.struEndTime.byMinute = endDatetime.time().minute();
struReviewInfo.struEndTime.bySecond = endDatetime.time().second();
struReviewInfo.struIDInfo.dwChannel = lChannel;
struReviewInfo.hWnd = hWnd;
long lRealReviewHandle = NET_DVR_PlayBackByTime_V50(userID, &struReviewInfo);
if (lRealReviewHandle < 0)
{
qDebug() << "NET_DVR_PlayBackByTime_V50 error;error number " << NET_DVR_GetLastError();
QMessageBox::warning(NULL, "error", "NET_DVR_PlayBackByTime_V50 error;error number " + QString::number(NET_DVR_GetLastError()));
NET_DVR_Logout(userID);
userID = -1;
return -1;
}
return lRealReviewHandle;
}
long CDeviceInit::reviewFileInit(long UserID, const HWND &hWnd, NET_DVR_TIME struStartTime, NET_DVR_TIME struStopTime, const long &lChannel)
{
NET_DVR_VOD_PARA struReviewInfo = { 0 };
struReviewInfo.struBeginTime = struStartTime;
struReviewInfo.struEndTime = struStopTime;
struReviewInfo.hWnd = hWnd;
struReviewInfo.struIDInfo.dwChannel = lChannel;
long lRealReviewHandle = NET_DVR_PlayBackByTime_V40(UserID,&struReviewInfo);
if (lRealReviewHandle < 0)
{
qDebug() << "NET_DVR_PlayBackByTime_V50 error;error number " << NET_DVR_GetLastError();
QMessageBox::warning(NULL, "error", "NET_DVR_PlayBackByTime_V50 error;error number " + QString::number(NET_DVR_GetLastError()));
NET_DVR_Logout(UserID);
UserID = -1;
return -1;
}
return lRealReviewHandle;
}
bool CDeviceInit::initSDK()
{
bool bok = NET_DVR_Init();
if (!bok)
{
qDebug() << "NET_DVR_Init error;error number is"