bool clsCfgParam::funcNET_IO_PREV_CHAN_START_Cam(DEVICE *d,char *recvbuf,int iChannel) { BOOL bMaster = (BOOL)recvbuf; NET_DVR_CLIENTINFO ndci; ZeroMemory(&ndci,sizeof(ndci)); ndci.hPlayWnd = NULL; ndci.lChannel = 1; ndci.lLinkMode = 0; if (!bMaster) { ndci.lLinkMode &= 0x80000000; } NET_IO_NET_REALPLAY_PARAM* pParam; if (bMaster) { pParam = &d->MainParam; } else { pParam = &d->SubParam; } if ((d->PlayHandle < 0 && bMaster)||(d->SubHandle < 0 && !bMaster)) { if (bMaster) { d->PlayHandle = NET_DVR_RealPlay_V30(d->LoginHandle,&ndci,RealDataCallBack_V30,pParam); TRACE("Play chan %d,Main\n",iChannel); } else { d->SubHandle = NET_DVR_RealPlay_V30(d->LoginHandle,&ndci,RealDataCallBack_V30,pParam); TRACE("Play chan %d,Sub\n",iChannel); } } if ((d->PlayHandle < 0 && bMaster)||(d->SubHandle < 0 && !bMaster)) { clsNetIONvr::m_CLog.SaveLogInfo("²¥·Åʧ°Ü£¡"); return false; } BOOL ret; if (bMaster) { ret = NET_DVR_MakeKeyFrame(d->LoginHandle,d->PlayHandle); } else { ret = NET_DVR_MakeKeyFrameSub(d->LoginHandle,d->SubHandle); } if (ret < 0) { clsNetIONvr::m_CLog.SaveLogInfo("ÖØÖÃI֡ʧ°Ü"); return false; } return true; }
bool CHaikangSDK::PtzStartPlay(char *sip,int nPort,int channel,char *user,char *psw,HWND hWnd) { //--------------------------------------- // 注册设备 NET_DVR_DEVICEINFO_V30 struDeviceInfo; m_ptzLoginHandle = NET_DVR_Login_V30(sip, nPort, user, psw, &struDeviceInfo); if (m_ptzLoginHandle < 0) { return false; } //--------------------------------------- //启动预览并设置回调数据流 NET_DVR_CLIENTINFO ClientInfo = {0}; //需要SDK解码时句柄设为有效值,仅取流不解码时可设为空 ClientInfo.hPlayWnd = hWnd; ClientInfo.lChannel = channel; //预览通道号 //主码流 ClientInfo.lLinkMode = 0; ClientInfo.sMultiCastIP = NULL; //多播地址,需要多播预览时配置 BOOL bPreviewBlock = false; m_ptzRealHandle = NET_DVR_RealPlay_V30(m_ptzLoginHandle, &ClientInfo, NULL, this, 0); if (m_ptzRealHandle < 0) { NET_DVR_Logout(m_ptzLoginHandle); m_ptzLoginHandle = -1; return false; } return true; }
_XBool _XHIKCamera::init(_XCameraData &data) { if(m_isInited) return XTrue; m_cameraWidth = data.w; m_cameraHeight = data.h; //width = &m_cameraWidth; //height = & m_cameraHeight; m_buffSize = m_cameraWidth * m_cameraHeight * 3; m_cameraTexWidth = m_cameraWidth; m_cameraTexHeight = m_cameraHeight; //初始化摄像头并连接设备 NET_DVR_Init(); //初始化 m_lUserID = NET_DVR_Login_V30(data.ipAddress,data.port,data.userName,data.pwd,&m_structDeviceInfo); if(m_lUserID < 0) {//连接设备失败 printf("Login error, %d\n", NET_DVR_GetLastError()); NET_DVR_Cleanup(); return XFalse; } //下面开始连接回调函数并分配内存空间 m_dataRGB = createArrayMem<unsigned char>(m_buffSize); //分配内存空间 if(m_dataRGB == NULL) return XFalse; memset(m_dataRGB,0,m_buffSize); m_dataRGBOut = createArrayMem<unsigned char>(m_buffSize); if(m_dataRGBOut == NULL) return XFalse; haveNewFrame = &m_haveNewFrame; pOutRGB = m_dataRGB; NET_DVR_SetExceptionCallBack_V30(0,NULL,g_ExceptionCallBack,NULL); NET_DVR_CLIENTINFO ClientInfo = {0}; ClientInfo.hPlayWnd = NULL; //需要SDK解码时句柄设为有效值,仅取流不解码时可设为空 ClientInfo.lChannel = 0; //预览通道号 ClientInfo.lLinkMode = 0; //最高位(31)为0表示主码流,为1表示子码流0~30位表示连接方式:0-TCP方式;1-UDP方式;2-多播方式;3-RTP方式; ClientInfo.sMultiCastIP = NULL; //多播地址,需要多播预览时配置 //BOOL bPreviewBlock = XFalse; //请求码流过程是否阻塞,0:否,1:是 m_lRealPlayHandle = NET_DVR_RealPlay_V30(m_lUserID,&ClientInfo,NULL,NULL,XFalse); if(m_lRealPlayHandle < 0) { printf("NET_DVR_RealPlay_V30 error\n"); NET_DVR_Logout(m_lUserID); NET_DVR_Cleanup(); return XFalse; } if(!NET_DVR_SetRealDataCallBack(m_lRealPlayHandle,g_RealDataCallBack_V30,0)) { printf("NET_DVR_SetRealDataCallBack error\n"); } m_cameraTex.createTexture(m_cameraWidth,m_cameraHeight,COLOR_RGB); //不允许进行2的n次方扩展,这回造成不兼容 m_cameraSprite.init(m_cameraWidth,m_cameraHeight,0); m_haveNewFrame = XFalse; m_isInited = XTrue; return XTrue; }
bool CHaikangSDK::StartPlay(int screenNo,char *name,char *sip,int nPort,int channel, char *user,char *psw,HWND hWnd,int subtype,int Direction) { if(m_LoginHandle[screenNo] != -1) { StopPlay(screenNo); } //--------------------------------------- // 注册设备 m_direction[screenNo]=Direction; NET_DVR_DEVICEINFO_V30 struDeviceInfo; m_LoginHandle[screenNo] = NET_DVR_Login_V30(sip, nPort, user, psw, &struDeviceInfo); if (m_LoginHandle[screenNo] < 0) { DlgMain->ShowCameraMessage(name,"Login error!",FALSE); printf("Login error, %d\n", NET_DVR_GetLastError()); //NET_DVR_Cleanup(); return false; } //--------------------------------------- //设置异常消息回调函数 NET_DVR_SetExceptionCallBack_V30(0, NULL,g_ExceptionCallBack, NULL); //--------------------------------------- //启动预览并设置回调数据流 NET_DVR_CLIENTINFO ClientInfo = {0}; //需要SDK解码时句柄设为有效值,仅取流不解码时可设为空 ClientInfo.hPlayWnd = NULL; ClientInfo.lChannel = channel; //预览通道号 //最高位(31)为0表示主码流,为1表示子码流0~30位表示连接方式:0-TCP方式;1-UDP方式;2-多播方式;3-RTP方式; if(subtype == 0) ClientInfo.lLinkMode = 0; else ClientInfo.lLinkMode = 0x80000000; ClientInfo.sMultiCastIP = NULL; //多播地址,需要多播预览时配置 BOOL bPreviewBlock = false; //请求码流过程是否阻塞,0:否,1:是 m_RealHandle[screenNo] = NET_DVR_RealPlay_V30(m_LoginHandle[screenNo], &ClientInfo, g_RealDataCallBack_V30, this, 0); if (m_RealHandle[screenNo] < 0) { DlgMain->ShowCameraMessage(name,"Play error!",FALSE); printf("NET_DVR_RealPlay_V30 error\n"); NET_DVR_Logout(m_LoginHandle[screenNo]); // NET_DVR_Cleanup(); m_LoginHandle[screenNo] = -1; return false; } DlgMain->ShowCameraMessage(name,"连接成功",FALSE); return true; }
LONG CPlayer::HKStartMonitor(HWND hWnd, LONG lChannel, char *sMultiCastIP) { NET_DVR_CLIENTINFO struPlayInfo; struPlayInfo.hPlayWnd = hWnd; struPlayInfo.lChannel = lChannel; struPlayInfo.lLinkMode = 0; struPlayInfo.sMultiCastIP = sMultiCastIP; m_lPlayHandle = NET_DVR_RealPlay_V30(m_hkDVRUserID, &struPlayInfo, NULL, 0, 0); return m_lPlayHandle; }
bool clsCfgParam::funcNET_IO_PREV_CHAN_HEAD_Cam(DEVICE *d,int iChannel,char *recvbuf,char *sendbuf,int *iLen,void *pNetIoNvr) { BOOL bMaster = (BOOL)recvbuf; if (bMaster) { printf_s("Begin to get chan %d Head,Main\n",iChannel); if (d->HeadLength <= 0) { NET_DVR_CLIENTINFO ndci; ZeroMemory(&ndci,sizeof(ndci)); ndci.hPlayWnd = NULL; ndci.lChannel = 1; ndci.lLinkMode = 0; if (!bMaster) { ndci.lLinkMode &= 0x80000000; } NET_IO_NET_REALPLAY_PARAM* pParam; if (bMaster) { pParam = &d->MainParam; } else { pParam = &d->SubParam; } pParam->p = pNetIoNvr; pParam->chan = iChannel; pParam->bMaster = (BOOL)recvbuf; if (d->PlayHandle < 0) { d->PlayHandle = NET_DVR_RealPlay_V30(d->LoginHandle,&ndci,RealDataCallBack_V30,pParam); } if (d->PlayHandle < 0) { clsNetIONvr::m_CLog.SaveLogInfo("²¥·Åʧ°Ü£¡"); } else { printf_s("Already begin to get chan %d Head,Main\n",iChannel); int i = 1000; while(d->HeadLength <= 0) { i--; Sleep(1); if (i < 0) { *iLen = d->HeadLength; printf_s("Failed to get chan %d Head,Main\n",iChannel); return 0; } } memcpy_s(sendbuf, 300, d->Head, d->HeadLength); *iLen = d->HeadLength; printf_s("Get chan %d Head,Main, len is %d\n",iChannel, *iLen); } } else { memcpy_s(sendbuf, 300, d->Head, d->HeadLength); *iLen = d->HeadLength; } } else { printf_s("Begin to get chan %d Head,Sub\n",iChannel); if (d->SubHeadLength <= 0) { NET_DVR_CLIENTINFO ndci; ZeroMemory(&ndci,sizeof(ndci)); ndci.hPlayWnd = NULL; ndci.lChannel = 1; ndci.lLinkMode = 0; if (!bMaster) { ndci.lLinkMode &= 0x80000000; } NET_IO_NET_REALPLAY_PARAM* pParam; if (bMaster) { pParam = &d->MainParam; } else { pParam = &d->SubParam; } pParam->p = pNetIoNvr; pParam->chan = iChannel; pParam->bMaster = (BOOL)recvbuf; if (d->SubHandle < 0) { d->SubHandle = NET_DVR_RealPlay_V30(d->LoginHandle,&ndci,RealDataCallBack_V30,pParam); } if (d->SubHandle < 0) { clsNetIONvr::m_CLog.SaveLogInfo("²¥·Åʧ°Ü£¡"); } else { int i = 800; while(d->SubHeadLength <= 0) { i--; Sleep(1); if (i < 0) { *iLen = d->SubHeadLength; return 0; } } memcpy_s(sendbuf, 300, d->SubHead, d->SubHeadLength); *iLen = d->SubHeadLength; } } else { memcpy_s(sendbuf, 300, d->SubHead, d->SubHeadLength); *iLen = d->SubHeadLength; } } return true; }
void * HK_Store_Thread(void * para){ /*info to login HK camera*/ char HK_userName[] = "admin"; char HK_password[] = "12345"; int stopResult = 0; LONG lUserID = 0; LONG streamHandle = 0; //unsigned int NVR_recordHandle = 0; NET_DVR_DEVICEINFO_V30 struDeviceInfo; NET_DVR_CLIENTINFO ClientInfo = {0}; //ClientInfo.hPlayWnd = NULL; ClientInfo.lChannel = 1; ClientInfo.lLinkMode = 0; ClientInfo.sMultiCastIP = NULL; RecordParas *t_para = (RecordParas *)para; HKcameraArgs hkargs; //hkargs.NVR_LoginID = t_para->NVR_LoginID;//nvr server loginID strcpy(hkargs.NAR_cameraID, t_para->cameraID);//the VolID in nvr server hkargs.block_flag = 0; hkargs.NAR_recordHandle = 0; hkargs.HK_streamHandle = &streamHandle; while(1){ //-----------Init NET_DVR_Init(); hkargs.block_flag = 0; //------------Set Connecttime and ReconnectTime NET_DVR_SetConnectTime(2000,1); NET_DVR_SetReconnect(10000,TRUE); //-------------HKLogin lUserID = NET_DVR_Login_V30(t_para->cameraIP, t_para->cameraPort, HK_userName, HK_password, &struDeviceInfo); if(lUserID < 0){ syslog(LOG_ERR,"connect HK IPC %s failed! errorCode: %d\n", t_para->cameraIP, NET_DVR_GetLastError()); NET_DVR_Cleanup();//clear all the info continue; } syslog(LOG_ERR,"connect HK IPC %s sucess!\n", t_para->cameraIP); //set exception callback function NET_DVR_SetExceptionCallBack_V30(0, NULL, HK_RP_Exp_Callback, &hkargs); //get data stream and store streamHandle = NET_DVR_RealPlay_V30(lUserID, &ClientInfo, HK_Store_CallBack, &hkargs, 0); if(streamHandle < 0){ NET_DVR_Logout(lUserID);//get wrong handle ,logout NET_DVR_Cleanup(); continue; } while(!hkargs.block_flag){ } stopResult = NET_DVR_StopRealPlay(streamHandle); syslog(LOG_INFO,"(InHKTransdata) stoped real play ? result:%d\n", stopResult); NET_DVR_Logout_V30(lUserID); syslog(LOG_INFO,"(InHKTransdata) HKcamera Logout(loginID was %d)\n",lUserID); NET_DVR_Cleanup(); if(hkargs.block_flag == 1){ break; } } return NULL; }
bool CDevHKPreview::StartRealPlay() { NET_DVR_CLIENTINFO ; NET_DVR_RealPlay_V30(); }
int saveData() { long lRealPlayHandle; NET_DVR_CLIENTINFO ClientInfo = {0}; #if (defined(_WIN32) || defined(_WIN_WCE)) || defined(__APPLE__) ClientInfo.hPlayWnd = NULL; #elif defined(__linux__) ClientInfo.hPlayWnd = 0; #endif ClientInfo.lChannel = 1; //channel NO. //ClientInfo.lLinkMode = 0x40000000; //Record when breaking network. ClientInfo.lLinkMode = 0; ClientInfo.sMultiCastIP = NULL; printf("Start realplay...\n"); //getchar(); //lRealPlayHandle = NET_DVR_RealPlay_V30(lUserID, &ClientInfo, g_RealDataCallBack_V30, NULL, 0); lRealPlayHandle = NET_DVR_RealPlay_V30(lUserID, &ClientInfo,NULL,NULL,0); if (lRealPlayHandle < 0) { printf("pyd1---NET_DVR_RealPlay_V30 error\n"); return HPR_ERROR; } //Set rtsp callback function of getting stream. //NET_DVR_SetStandardDataCallBack(lRealPlayHandle, g_StdDataCallBack, 0); printf("Start save data...\n"); time_t nowtime; struct tm *timeinfo; time(&nowtime); timeinfo = localtime(&nowtime); sprintf(fileName,"%d%02d%02d-%02d-%02d-%02d.mp4",1900+timeinfo->tm_year,1+timeinfo->tm_mon,timeinfo->tm_mday,timeinfo->tm_hour,timeinfo->tm_min,timeinfo->tm_sec); int iRet,fd; fd = open(fileName,O_RDWR|O_CREAT|O_TRUNC|O_APPEND,S_IRWXU|S_IRGRP|S_IROTH); close(fd); iRet = NET_DVR_SaveRealData(lRealPlayHandle,fileName); if(!iRet) { printf("pyd1---NET_DVR_SaveRealData error:%s\n",NET_DVR_GetLastError()); NET_DVR_StopSaveRealData(lRealPlayHandle); NET_DVR_Logout(lUserID); NET_DVR_Cleanup(); return 1; } //getchar(); /* #ifdef _WIN32 Sleep(5000); //millisecond #elif defined(__linux__) ||defined(__APPLE__) sleep(30); //second #endif */ while(saveFlag) wait(NULL); printf("save data success!\n"); //stop NET_DVR_StopSaveRealData(lRealPlayHandle); //NET_DVR_StopRealPlay(lRealPlayHandle); //NET_DVR_Logout(lUserID); //NET_DVR_Logout_V30(lUserID); //cleanup //NET_DVR_Cleanup(); return HPR_OK; }