123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681 |
- #include "hkcamera.h"
- #include<iostream>
- #include <QDateTime>
- #include<QPushButton>
- #include<QLabel>
- #include<QMessageBox>
- #include <QJsonObject>
- #include <QTextCodec>
- using namespace std;
- void intrusiondetecproc(NET_DVR_ALARMER *pAlarmer, char *pAlarmInfo, DWORD dwBufLen, void* pUser)
- {
-
- QDateTime datetime= QDateTime::currentDateTime();
- QString strtime = datetime.toString("yyyyMMddhhmmss");
- QString qstrdir = "./prjfiles/imgs/idsimg";
- QString qstrfilename = qstrdir + "/" + strtime + ".jpg";
- NET_VCA_RULE_ALARM struVcaAlarm = { 0 };
- memcpy(&struVcaAlarm, pAlarmInfo, sizeof(NET_VCA_RULE_ALARM));
- QString strdevip = struVcaAlarm.struDevInfo.struDevIP.sIpV4;
-
- if (struVcaAlarm.dwPicDataLen > 0 && struVcaAlarm.pImage != NULL)
- {
- HANDLE hFile;
- DWORD dwReturn;
- hFile = CreateFile(QString(qstrfilename).toStdWString().data(), GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
- if (hFile == INVALID_HANDLE_VALUE)
- {
- return;
- }
- BOOL wf = WriteFile(hFile, struVcaAlarm.pImage, struVcaAlarm.dwPicDataLen, &dwReturn, NULL);
- if(!wf){
- int ret = GetLastError();
- return;
- }
- CloseHandle(hFile);
- hFile = INVALID_HANDLE_VALUE;
- }
- WORD wEventType = struVcaAlarm.struRuleInfo.wEventTypeEx;
- switch (wEventType)
- {
- case ENUM_VCA_EVENT_INTRUSION:
- {
- std::cout << "camera_SavePicture save pic :" << "区域入侵报警" ;
- QJsonObject jsonret = ((hkcamera*)pUser)->PostRequestWithFile(qstrfilename, strdevip, ENUM_VCA_EVENT_INTRUSION);
- QJsonValue code = jsonret.value("code");
- if(code == 0 ){
-
- QJsonObject jsonpublish;
- QJsonValue fileUrl = jsonret.value("fileUrl");
- jsonpublish.insert("fileUrl", fileUrl);
- QString qsMessage = QString(QJsonDocument(jsonpublish).toJson());
-
-
- }
- break;
- }
- default:
- {
- std::cout << "其他报警,报警信息类型: " <<wEventType ;
- break;
- }
- }
- }
- void licenseplatedetecproc(NET_DVR_ALARMER *pAlarmer, char *pAlarmInfo, DWORD dwBufLen, void* pUser)
- {
-
- QDateTime datetime= QDateTime::currentDateTime();
- QString strtime = datetime.toString("yyyyMMddhhmmss");
- QString qstrdir = "./prjfiles/imgs/minertransimg";
- QString qstrfilename = qstrdir + "/" + strtime + ".jpg";
- QString qstrfilenamesmall = qstrdir + "/" + strtime + "small.jpg";
- NET_DVR_ALARMER struDvrAlarm = { 0 };
- memcpy(&struDvrAlarm, pAlarmer, sizeof(NET_DVR_ALARMER));
- QString strdevip = struDvrAlarm.sDeviceIP;
- std::cout << "licenseplatedetecproc strdevip :" << strdevip.toStdString();
- NET_DVR_PLATE_RESULT struPlateResult = { 0 };
- memcpy(&struPlateResult, pAlarmInfo, sizeof(NET_DVR_PLATE_RESULT ));
- printf("车牌号: %s\n", struPlateResult.struPlateInfo.sLicense);
- QString sLicense = QTextCodec::codecForName("GB2312")->toUnicode(struPlateResult.struPlateInfo.sLicense);
- HANDLE hFile;
- DWORD dwReturn;
-
-
-
- QString qsip = ((hkcamera*)pUser)->cameramatchmap.value(strdevip);
- LONG userid = ((hkcamera*)pUser)->camerauseridmap.value(qsip);
- if(userid!=-1)
- {
- NET_DVR_JPEGPARA IpJpegPara2;
- IpJpegPara2.wPicQuality=0;
- IpJpegPara2.wPicSize=0xff;
- char* fileName;
- QByteArray ba = qstrfilename.toLatin1();
- fileName=ba.data();
- if(NET_DVR_CaptureJPEGPicture(userid,1,&IpJpegPara2,fileName)==false)
- {
- qDebug() << "NET_DVR_CaptureJPEGPicture error;" << "error number is " << NET_DVR_GetLastError();
- return;
- }
- qDebug() <<"Capture Success!"<<endl;
- }
- ((hkcamera*)pUser)->PostFileWithlicense(qstrfilename, strdevip, sLicense);
- }
- void CALLBACK cbMessageCallback(LONG lCommand, NET_DVR_ALARMER *pAlarmer, char *pAlarmInfo, DWORD dwBufLen, void* pUser)
- {
- int i = 0;
- switch (lCommand)
- {
- case COMM_ALARM_RULE:
- case COMM_ALARM_V30:
- {
- intrusiondetecproc( pAlarmer, pAlarmInfo, dwBufLen, pUser);
- break;
- }
- case COMM_UPLOAD_PLATE_RESULT:
- {
- licenseplatedetecproc(pAlarmer, pAlarmInfo, dwBufLen, pUser);
- }
- default:
- {
-
- std::cout << "其他报警,报警信息类型: " <<lCommand ;
- break;
- }
- }
- return;
- }
- hkcamera::hkcamera(QObject *parent) : QObject(parent)
- {
-
-
- }
- QStringList hkcamera:: getallcameralocations()
- {
- QStringList list;
- for (const QString &key : camerainfomap.keys())
- {
- list.append(key);
- }
- return list;
- }
- void hkcamera:: inicamera(QByteArray jsonData)
- {
- QJsonDocument jsonDocu = QJsonDocument::fromJson(jsonData);
- if(jsonDocu.isObject()){
- QJsonObject objroot = jsonDocu.object();
- QJsonValue cameracfgvalue = objroot.value("cameracfg");
- if(cameracfgvalue.isArray()){
- QJsonArray cameracfgarray = cameracfgvalue.toArray();
- for(int i = 0; i < cameracfgarray.count(); ++i){
- QJsonObject cameracfgobj = cameracfgarray.at(i).toObject();
- QJsonObject *pcamerainfoobj = new QJsonObject(cameracfgobj);
- camerainfomap.insert(cameracfgobj.value("location").toString(), *pcamerainfoobj);
- QString ip;
- int port;
- QString account;
- QString password;
- int function;
- ip = cameracfgobj.value("ip").toString();
- port = cameracfgobj.value("port").toInt();
- account = cameracfgobj.value("account").toString();
- password = cameracfgobj.value("password").toString();
- function = cameracfgobj.value("function").toInt();
- LONG userid = connect( ip, port, account, password, function);
- camerauseridmap.insert(ip, userid);
- }
- }
- QJsonValue cameramatchvalue = objroot.value("cameramatch");
- if(cameramatchvalue.isArray()){
- QJsonArray cameramatcharray = cameramatchvalue.toArray();
- for(int i = 0; i < cameramatcharray.count(); ++i){
- QJsonObject cameramatchobj = cameramatcharray.at(i).toObject();
- QStringList keys = cameramatchobj.keys();
- for(QString key : keys){
- cameramatchmap.insert(key, cameramatchobj.value(key).toString());
- }
- }
- }
- }
- }
- BOOL hkcamera::savepic(QString filename)
- {
- if(-1 == m_playhandle)
- {
- return false;
- }
- QString capImagePath = filename;
- QDir m_capImagePath(capImagePath);
- if (m_capImagePath.exists())
- {
- QFile::remove(capImagePath);
- }
- char* savefilename;
- QByteArray bytefilename = filename.toLatin1();
- savefilename = bytefilename.data();
-
- NET_DVR_SetCapturePictureMode(JPEG_MODE);
- bool pic_status = NET_DVR_CapturePicture(m_playhandle, savefilename);
- if (pic_status)
- {
- std::cout << "camera_SavePicture save pic :" << savefilename << "success";
- }
- else
- {
- std::cout << "camera_SavePicture save pic :" << savefilename << "false";
- }
- return pic_status;
- }
- LONG hkcamera::connect(QString ip, int port, QString name, QString password, int function)
- {
- char* ch_ip;
- char* ch_name;
- char* ch_password;
- QByteArray ba_ip = ip.toLatin1();
- QByteArray ba_name = name.toLatin1();
- QByteArray ba_password = password.toLatin1();
- ch_ip = ba_ip.data();
- ch_name = ba_name.data();
- ch_password = ba_password.data();
-
- bool isok = NET_DVR_Init();
- if (isok == false)
- {
- std::cout << "NET_DVR_Init error;error number is " << NET_DVR_GetLastError();
- return false;
- }
-
- NET_DVR_SetConnectTime(2000, 1);
- NET_DVR_SetReconnect(10000, true);
-
- NET_DVR_USER_LOGIN_INFO struLoginInfo = { 0 };
- struLoginInfo.bUseAsynLogin = 0;
- strcpy(struLoginInfo.sDeviceAddress, ch_ip);
- struLoginInfo.wPort = 8000;
- strcpy(struLoginInfo.sUserName, ch_name);
- strcpy(struLoginInfo.sPassword, ch_password);
-
- NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = { 0 };
- long lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfoV40);
- if (lUserID < 0)
- {
- std::cout << "NET_DVR_Login error;" << "error number is " << NET_DVR_GetLastError();
- printf("Login failed, error code: %d\n", NET_DVR_GetLastError());
- NET_DVR_Cleanup();
- return lUserID;
- }
- if(0 == function){
- return lUserID;
- }
-
-
- NET_DVR_SetDVRMessageCallBack_V30(cbMessageCallback, this);
-
- LONG lHandle;
- NET_DVR_SETUPALARM_PARAM struAlarmParam = { 0 };
- struAlarmParam.dwSize = sizeof(struAlarmParam);
-
-
- struAlarmParam.byAlarmInfoType = 1;
- struAlarmParam.byLevel = 1;
-
-
-
- lHandle = NET_DVR_SetupAlarmChan_V30(lUserID);
- if (lHandle < 0)
- {
- printf("NET_DVR_SetupAlarmChan_V41 error, %d\n", NET_DVR_GetLastError());
- NET_DVR_Logout(lUserID);
- NET_DVR_Cleanup();
- }
- std::cout << "Login userID:" << lUserID;
- m_userid = lUserID;
- return lUserID;
- }
- BOOL hkcamera::displaypic(HWND hWnd)
- {
- NET_DVR_PREVIEWINFO struPlayInfo = { 0 };
- struPlayInfo.hPlayWnd = hWnd;
- struPlayInfo.lChannel = 1;
- struPlayInfo.dwStreamType = 0;
- struPlayInfo.dwLinkMode = 0;
- struPlayInfo.bBlocked = 1;
- LONG IRealPlayHandle = NET_DVR_RealPlay_V40(m_userid, &struPlayInfo, NULL, NULL);
- if (IRealPlayHandle < 0)
- {
- std::cout << "NET_DVR_RealPlay_V40 error;error number " << NET_DVR_GetLastError();
- NET_DVR_Logout(m_userid);
- m_playhandle = IRealPlayHandle;
- return false;
- }
- else
- {
- m_playhandle = IRealPlayHandle;
- return true;
- }
- }
- void hkcamera::stopdisplaypic()
- {
- NET_DVR_StopRealPlay(m_playhandle);
- return;
- }
- QJsonObject hkcamera:: PostRequestWithFile(QString filePath, QString devip, int eventtype )
- {
- QJsonObject qjsonret;
-
- QFileInfo fileInfo(filePath);
- QString fileName =fileInfo.fileName();
- QFile* inputFile = new QFile(filePath);
- inputFile->open(QIODevice::ReadOnly);
-
- QHttpMultiPart* multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
-
- QHttpPart filePart;
- filePart.setHeader(QNetworkRequest::ContentDispositionHeader,
- QVariant(QString("form-data; name=\"file\";filename=\"%1\"").arg(fileName)));
- filePart.setBodyDevice(inputFile);
- inputFile->setParent(multiPart);
- multiPart->append(filePart);
- QHttpPart paramer1Part;
- paramer1Part.setHeader(QNetworkRequest::ContentDispositionHeader,QVariant("form-data; name=\"devip\""));
- paramer1Part.setBody(devip.toUtf8());
- multiPart->append(paramer1Part);
- QHttpPart paramer2Part;
- paramer2Part.setHeader(QNetworkRequest::ContentDispositionHeader,QVariant("form-data; name=\"eventtype\""));
- QString streventtype = QString::number(eventtype);
- paramer2Part.setBody(streventtype.toUtf8());
- multiPart->append(paramer2Part);
-
- QNetworkRequest request;
- QString scheme = "http";
-
- QString serverAddr = "39.104.63.156";
- QString port = "1688";
- QString requestHeader = scheme + QString("://") + serverAddr + QString(":") + port;
- QString fullRequest = requestHeader + "/goaf/sensordata/uploadHikFile";
- request.setUrl(QUrl(fullRequest));
-
- QNetworkAccessManager manager;
- QNetworkReply *reply = manager.post(request,multiPart);
- multiPart->setParent(reply);
- QEventLoop eventLoop;
- QObject::connect(&manager, SIGNAL(finished(QNetworkReply*)),&eventLoop, SLOT(quit()));
- eventLoop.exec(QEventLoop::ExcludeUserInputEvents);
- if(reply->error() != QNetworkReply::NoError)
- {
- qjsonret.insert("code", reply->error());
- return qjsonret;
- }
-
- QByteArray replyData = reply->readAll();
- QJsonParseError json_error;
- QJsonDocument jsonDoc(QJsonDocument::fromJson(replyData, &json_error));
- if(json_error.error != QJsonParseError::NoError)
- {
- qjsonret.insert("code", -1);
- return qjsonret;
- }
- QJsonObject rootObj = jsonDoc.object();
-
- if(rootObj.value("code") == 0)
- {
- QJsonValue rootdata = rootObj.value("data");
- QJsonObject datobj = rootdata.toObject();
- QString codeStr = datobj.value("fileUrl").toString();
- qjsonret.insert("code", 0);
- qjsonret.insert("fileUrl", codeStr);
- return qjsonret;
- }
- else
- {
-
- qjsonret.insert("code", 1);
- return qjsonret;
- }
- }
- void hkcamera:: PostFileWithlicense(QString filePath, QString devip, QString slicense )
- {
- QJsonObject qjsonret;
-
- QFileInfo fileInfo(filePath);
- QString fileName =fileInfo.fileName();
- QFile* inputFile = new QFile(filePath);
- inputFile->open(QIODevice::ReadOnly);
-
- QHttpMultiPart* multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
-
- QHttpPart filePart;
- filePart.setHeader(QNetworkRequest::ContentDispositionHeader,
- QVariant(QString("form-data; name=\"file\";filename=\"%1\"").arg(fileName)));
- filePart.setBodyDevice(inputFile);
- inputFile->setParent(multiPart);
- multiPart->append(filePart);
- QHttpPart paramer1Part;
- paramer1Part.setHeader(QNetworkRequest::ContentDispositionHeader,QVariant("form-data; name=\"devip\""));
- paramer1Part.setBody(devip.toUtf8());
- multiPart->append(paramer1Part);
- QHttpPart paramer2Part;
- paramer2Part.setHeader(QNetworkRequest::ContentDispositionHeader,QVariant("form-data; name=\"license\""));
- paramer2Part.setBody(slicense.toUtf8());
- multiPart->append(paramer2Part);
- QHttpPart paramer3Part;
- QString ocid = "406283";
- paramer3Part.setHeader(QNetworkRequest::ContentDispositionHeader,QVariant("form-data; name=\"ocid\""));
- paramer3Part.setBody(ocid.toUtf8());
- multiPart->append(paramer3Part);
-
- QNetworkRequest request;
- QString scheme = "http";
-
- QString serverAddr = "39.104.63.156";
- QString port = "1888";
- QString requestHeader = scheme + QString("://") + serverAddr + QString(":") + port;
- QString fullRequest = requestHeader + "/trans/allinfo/uploadHikFile";
- request.setUrl(QUrl(fullRequest));
-
- QNetworkAccessManager manager;
- QNetworkReply *reply = manager.post(request,multiPart);
- multiPart->setParent(reply);
- QEventLoop eventLoop;
- QObject::connect(&manager, SIGNAL(finished(QNetworkReply*)),&eventLoop, SLOT(quit()));
- eventLoop.exec(QEventLoop::ExcludeUserInputEvents);
- if(reply->error() != QNetworkReply::NoError)
- {
- qjsonret.insert("code", reply->error());
- return ;
- }
-
- QByteArray replyData = reply->readAll();
- QJsonParseError json_error;
- QJsonDocument jsonDoc(QJsonDocument::fromJson(replyData, &json_error));
- if(json_error.error != QJsonParseError::NoError)
- {
- qjsonret.insert("code", -1);
- return ;
- }
- QJsonObject rootObj = jsonDoc.object();
-
- if(rootObj.value("code") == 0)
- {
- QJsonValue rootdata = rootObj.value("data");
- QJsonObject datobj = rootdata.toObject();
- QString codeStr = datobj.value("fileUrl").toString();
- qjsonret.insert("code", 0);
- qjsonret.insert("fileUrl", codeStr);
- return ;
- }
- else
- {
-
- qjsonret.insert("code", 1);
- return ;
- }
- }
- void hkcamera::logout()
- {
- if(0 != m_userid)
- {
- NET_DVR_Logout(m_userid);
- m_userid = 0;
- m_playhandle = -1;
- }
- }
|