📄 clientdemo.cpp
字号:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <stdint.h>#include <unistd.h>#include <time.h>#include <pthread.h>#include "hcnetsdk.h"//#define SDK_TEST//#define ANALYZEint VIEW_NUM = 1;#define SERVER_IP "192.0.2.1" #define USER_NAME "admin"#define PASSWD "12345"#define PORT 8000#define LOCAL_IP "192.0.2.2"#define LOCAL_PORT 7200 #define TRUE 1#define FALSE 0#define CIF_WIDTH 352#define CIF_HEIGTH 288#define MAXCHANNUM 3int glUserID = -1;int glRealHandle[MAXCHANNUM] = {-1};int bGetSysHeader[MAXCHANNUM] = {0};int glVoiceHandle = -1; int gbExit = 1;long g_lAnalyzeHandle = -1;DWORD gfMessCallBack(int lCommand, char *sDVRIP, char *pBuf, DWORD dwBufLen, void* dwUser){ int lIndex = -1; int nStartChan = 1;//默认起始通道为1 if(lCommand < EXCEPTION_EXCHANGE) {//报警 int i=0; NET_DVR_ALARMINFO m_alarminfo; memcpy(&m_alarminfo, pBuf, sizeof(NET_DVR_ALARMINFO)); switch (lCommand) { case COMM_ALARM: switch (m_alarminfo.dwAlarmType) { case 0: for (i=0; i<MAX_CHANNUM; i++) { if (m_alarminfo.dwAlarmRelateChannel[i] == 1) { printf("服务器%s发生信号量报警 报警输入%d,触发通道号%d\n", sDVRIP, m_alarminfo.dwAlarmInputNumber+1, i+nStartChan); } } break; case 1: for (i=0; i<MAX_DISKNUM; i++) { if (m_alarminfo.dwDiskNumber[i] == 1) { printf("服务器%s发生硬盘满报警 硬盘号%d \n", sDVRIP, i); } } break; case 2: for (i=0; i<MAX_CHANNUM; i++) { if (m_alarminfo.dwChannel[i] == 1) { printf("服务器%s发生信号丢失报警 通道号%d \n", sDVRIP, i+nStartChan); } } break; case 3: for (i=0; i<MAX_CHANNUM; i++) { if (m_alarminfo.dwChannel[i] == 1) { printf("服务器%s发生移动侦测报警 通道号%d \n", sDVRIP, i+nStartChan); } } break; case 4: for (i=0; i<MAX_DISKNUM; i++) { if (m_alarminfo.dwDiskNumber[i] == 1) { printf("服务器%s发生硬盘未格式化报警 硬盘号%d \n", sDVRIP, i); } } break; case 5: for (i=0; i<MAX_DISKNUM; i++) { if (m_alarminfo.dwDiskNumber[i] == 1) { printf("服务器%s发生读写硬盘出错报警 硬盘号%d \n", sDVRIP, i); } } break; case 6: for (i=0; i<MAX_CHANNUM; i++) { if (m_alarminfo.dwChannel[i] == 1) { printf("服务器%s发生遮挡报警 通道号%d \n", sDVRIP, i+nStartChan); } } break; case 7: for (i=0; i<MAX_CHANNUM; i++) { if (m_alarminfo.dwChannel[i] == 1) { printf("服务器%s发生制式不匹配 通道号%d \n", sDVRIP, i+nStartChan); } } break; case 8: printf("服务器%s发生非法访问! \n", sDVRIP); break; default: printf("报警类型:未知 %d\n",m_alarminfo.dwAlarmType); break; } break; case COMM_TRADEINFO: NET_DVR_TRADEINFO m_TradeInfo; memcpy(&m_TradeInfo, pBuf, sizeof(NET_DVR_TRADEINFO)); printf("服务器%s收到卡号信息%s \n", sDVRIP, m_TradeInfo.CardNumber); break; default: break; } } else {//异常 lIndex = *((int *)pBuf); switch (lCommand) { case EXCEPTION_EXCHANGE: printf("DVR[%s] network exception error:%d\n", sDVRIP, NET_DVR_GetLastError()); break; case EXCEPTION_AUDIOEXCHANGE: printf("lIndex[%d] DVR[%s] vaudioexchange exception error:%d\n", lIndex, sDVRIP, NET_DVR_GetLastError()); break; case EXCEPTION_ALARM: printf("lIndex[%d] DVR[%s] alarm exception error:%d\n", lIndex, sDVRIP, NET_DVR_GetLastError()); break; case EXCEPTION_PREVIEW: printf("lIndex[%d] DVR[%s] preview exception error:%d\n", lIndex, sDVRIP, NET_DVR_GetLastError()); break; case EXCEPTION_SERIAL: printf("lIndex[%d] DVR[%s] serial exception error:%d\n", lIndex, sDVRIP, NET_DVR_GetLastError()); break; default: break; } } return 1;}void SerialDataCallBack( int lSerialHandle, char *pRecvDataBuffer, DWORD dwBufSize, DWORD dwUser ){ static int i=0; fprintf(stderr, "No.[%d]:lSerialHandle[%d], pRecvDataBuffer[%s], dwBufSize[%d], dwUser[%d]\n", ++i, lSerialHandle, pRecvDataBuffer, dwBufSize, dwUser); return;}#ifdef ANALYZEvoid *GetFrameThread(void * pParam){ int i = *(int *)pParam; PACKET_INFO_EX packet; while(gbExit) { if(HIKANA_GetOnePacketEx(g_lAnalyzeHandle, &packet) == 0) { fprintf(stderr, "lRealHandle[%d]: Get StreamData! Type[%d], BufSize[%d], timestamp[%d:%d:%d %d:%d:%d], unFrameNum[%d], unFrameRate[%d], usWidth[%d], usHeight[%d]\n", i, packet.nPacketType, packet.unPacketSize, packet.nYear, packet.nMonth, packet.nDay, packet.nHour, packet.nMinute, packet.nSecond, packet.unFrameNum, packet.unFrameRate, packet.usWidth, packet.usHeight); } usleep(10); }}#endifvoid RealDataCallBack (int lRealHandle, DWORD dwDataType, char *pBuffer, DWORD dwBufSize, DWORD dwUser){ if(dwDataType == NET_DVR_SYSHEAD) { bGetSysHeader[dwUser] = 1; } if(dwDataType == NET_DVR_REALPLAYEXCEPTION) { fprintf(stderr, "RealPlay exception!\n"); } #ifdef ANALYZE AnalyzeDataInputData(dwUser, (unsigned char *)pBuffer, dwBufSize); //HIKANA_InputData(dwUser, (unsigned char *)pBuffer, dwBufSize);#else fprintf(stderr, "lRealHandle[%d]: Get StreamData! Type[%d], BufSize[%d], dwUser[%d]\n", lRealHandle, dwDataType, dwBufSize, dwUser);#endif}void PreviewAnalyzeCallBack_EX (int lRealHandle, PACKET_INFO_EX *strPacketInfo, void* dwUser){ printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"); printf("nPacketType: %d\n", strPacketInfo->nPacketType); printf("unPacketSize: %d\n", strPacketInfo->unPacketSize); printf("nYear: %d\n", strPacketInfo->nYear); printf("nMonth: %d\n", strPacketInfo->nMonth); printf("nDay: %d\n", strPacketInfo->nDay); printf("nHour: %d\n", strPacketInfo->nHour); printf("nMinute: %d\n", strPacketInfo->nMinute); printf("nSecond: %d\n", strPacketInfo->nSecond); printf("unTimeStamp: %d\n", strPacketInfo->unTimeStamp); printf("unFrameNum: %d\n", strPacketInfo->unFrameNum); printf("unFrameRate: %d\n", strPacketInfo->unFrameRate); printf("usWidth: %d\n", strPacketInfo->usWidth); printf("usHeight: %d\n", strPacketInfo->usHeight); printf("unTimeStampHigh: %d\n", strPacketInfo->unTimeStampHigh); printf("unFlag: %d\n", strPacketInfo->unFlag); printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"); printf("\n\n");}void PlaybackCallBack(int lPlayHandle, DWORD dwDataType, char *pBuffer, DWORD dwBufSize, DWORD dwUser){ fprintf(stderr, "lPlaybackHandle[%d]: Get PlayBack StreamData! Type[%d], BufSize[%d], dwUser[%d]\n", lPlayHandle, dwDataType, dwBufSize, dwUser); switch (dwDataType) { case NET_DVR_PLAYBACKOVER: fprintf(stderr, "PlayBack is over!!!\n"); break; case NET_DVR_PLAYBACKNETCLOSE: fprintf(stderr, "net close, pls check it !!!\n"); break; case NET_DVR_PLAYBACK5SNODATA: fprintf(stderr, "no data for 5s!!!\n"); break; default: break; }} void VoiceCallBack(int lVoiceComHandle, char *pRecvDataBuffer, DWORD dwBufSize, DWORD dwUser){ fprintf(stderr, "lVoiceComHandle[%d]: Get voice data! BufSize[%d], dwUser[%d]\n", lVoiceComHandle, dwBufSize, dwUser);} void Wait(){ printf("\n======== Press 'q' to quit ============\n"); do { sleep(1); } while(getc(stdin) != 'q'); }void RealPlay(NET_DVR_DEVICEINFO *devInfo){ int nMode = PTOPTCPMODE; printf("Please input link mode: [0-PTOPTCPMODE; 1-PTOPUDPMODE; 3-PTOPRTPMODE]\n"); scanf("%d", &nMode ); int linkmode = nMode;//PTOPUDPMODE/*PTOPTCPMODE*/PTOPRTPMODE; int usesdl = TRUE; //int usesdl = FALSE; NET_DVR_CLIENTINFO clientInfo; clientInfo.lChannel = devInfo->byStartChan; clientInfo.lLinkMode = linkmode;/* | 0x80000000*///sub-stream: | 0x80000000 clientInfo.hPlayWnd.x = 0; clientInfo.hPlayWnd.y = 0; INITINFO InitInfo; if (usesdl) { InitInfo.uWidth = CIF_WIDTH; InitInfo.uHeight = CIF_HEIGTH; } else { InitInfo.uWidth = 0; InitInfo.uHeight = 0; } if(!NET_DVR_DrawAreaInit(InitInfo)) { printf("DrawAreaInit failed\n"); return; } if(usesdl) { clientInfo.hPlayWnd.uWidth = CIF_WIDTH; clientInfo.hPlayWnd.uHeight = CIF_HEIGTH; } else { clientInfo.hPlayWnd.uWidth = 0; clientInfo.hPlayWnd.uHeight = 0; } clientInfo.sMultiCastIP = "234.5.6.7"; int i; //char filename[80] = {0}; if (devInfo->byChanNum > 1) { VIEW_NUM = 1; } else { VIEW_NUM = 1; } for(i=0; i<VIEW_NUM; i++) { clientInfo.lChannel = devInfo->byStartChan + i; if(usesdl) { clientInfo.hPlayWnd.x = CIF_WIDTH * (i % 2) ; clientInfo.hPlayWnd.y = CIF_HEIGTH * (i / 2); }#ifdef ANALYZE AnalyzeDataOpenStream(i); //g_lAnalyzeHandle = HIKANA_CreateStream(1024*1024); pthread_t hMainThread; pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); gbExit = 1; char reg[1] = {0}; if ( pthread_create( &hMainThread, &attr, GetFrameThread, (void *)&i ) < 0 ) { return ; } #endif glRealHandle[i] = NET_DVR_RealPlay(glUserID, &clientInfo); if(glRealHandle[i] < 0) { printf(" channel:%d RealPlay failed \n", clientInfo.lChannel); return ; } /* time_t t1,t2; while (1) { for (i=0; i<3; i++) { time(&t1); if (!NET_DVR_PTZControlWithSpeed(glRealHandle[i], PAN_LEFT, 0, 4)) { printf( "PTZ left start failed. error[%d]\n", NET_DVR_GetLastError() ); } else printf("PTZ left start...\n"); time(&t2); printf("spend time:%ds\n", t2-t1); sleep(1); time(&t1); if (!NET_DVR_PTZControlWithSpeed(glRealHandle[i], PAN_LEFT, 1, 4)) { printf( "PTZ left stop failed. error[%d]\n", NET_DVR_GetLastError() ); } else printf("PTZ left stop...\n"); time(&t2); printf("spend time:%ds\n", t2-t1); sleep(1); } for (i=0; i<3; i++) { time(&t1); if (!NET_DVR_PTZControlWithSpeed(glRealHandle[i], PAN_RIGHT, 0, 4)) { printf( "PTZ right start failed. error[%d]\n", NET_DVR_GetLastError() ); } else printf("PTZ right start...\n"); time(&t2); printf("spend time:%ds\n", t2-t1); sleep(1); time(&t1); if (!NET_DVR_PTZControlWithSpeed(glRealHandle[i], PAN_RIGHT, 1, 4)) { printf( "PTZ right stop failed. error[%d]\n", NET_DVR_GetLastError() ); } else printf("PTZ right stop...\n"); time(&t2); printf("spend time:%ds\n", t2-t1); sleep(1); } } */#if 1 NET_DVR_SaveRealData(glRealHandle[i], "real.mp4"); /* to set callback function */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -