?? dsserver.cpp
字號:
pthread_t hPreviewThread; pthread_t hAlarmThread; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); pthread_create(&hPreviewThread, &attr, intermediary, (void *)NULL); pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); pthread_create(&hAlarmThread, &attr, loopWaitAlarm, (void *)NULL);}void* DsServer::loopWaitAlarm(void *ptr){ while(*isExit == 0){ if(*isAlarm0) AlarmInfo(0x01,0x00); // 通道1手動報警 if(*isAlarm1) AlarmInfo(0x01,0x01); // 通道2手動報警 if(*isAlarm2) AlarmInfo(0x01,0x02); // 通道3手動報警 if(*isAlarm3) AlarmInfo(0x01,0x03); // 通道4手動報警 if(((*isSF)==1) && (oldSF == 0)) { AlarmInfo(0x02,0x03); // 設(shè)防 oldSF = 1; } if(((*isSF)==0) && (oldSF == 1)) { AlarmInfo(0x03,0x03); // 撤防 oldSF = 0; } sleep(1); } return NULL;}//==================================================//==================================================//各種回掉函數(shù)//==================================================void disconnect_callback(int nport, char* sIP){ net_flag[nport]--; if(net_flag[nport]==0) { memset(net_head_flag, 0, sizeof(net_head_flag)); }// printf("\r\nthe client from ip %s to channel %d disconnect!\n", sIP,nport);}int checkIpAndPass(int channel, char *username, int namelen, char *password, int passlen, char *sIP){// printf("Check IP: channel = %d, IP= %s; username = %s, namelen = %d, password = %s, passname = %d\n", channel, sIP, username, namelen, password, passlen); return 0;}void start_capture_callback(int port) //for server start{ if(*(gRecord+port*sizeof(unsigned short)) && ( port < *channelCount)){//fixed at 2004.11.11 //g_timer_start(count_timer); StartVideoCapture(channelHandle[port]); HW_PlaySound(channelHandle[port]); HW_SetVolume(channelHandle[port],0xffff); if(gSubRecord[port]) { StartSubVideoCapture(channelHandle[port]); fprintf(stderr,"<demo_info> start sub channel capture for chan%d!\n", port); } }}void stop_capture_callback(int port) //for server stop{ if(*(gRecord+port*sizeof(unsigned short)) && (port < *channelCount)){//fixed at 2004.11.11 //g_timer_stop(count_timer); StopVideoCapture(channelHandle[port]); HW_SetAudioPreview(channelHandle[port], 0); SetAudioPreview(channelHandle[port],0); }}//===================================================================void AlarmInfo(unsigned char a,unsigned char b){ struct sockaddr_in client_addr; int listenfd; TAlarm alarmInfo; memset(&client_addr, 0, sizeof(client_addr)); memset(&alarmInfo,0,sizeof(TAlarm)); listenfd = socket(AF_INET, SOCK_STREAM, 0); if(listenfd < 0) { printf("%s \n", " listen from middle server."); return; } client_addr.sin_family = AF_INET; client_addr.sin_port = htons(5001); inet_aton(alarmip, &client_addr.sin_addr); if(connect(listenfd, (struct sockaddr*)&client_addr, sizeof(struct sockaddr)) == -1) { printf("%s \n", " connect error from middle server!"); close(listenfd); return; } switch(a) { case 0x00: //req.code =0; //strcpy(req.s_name,"源杰DVR"); //sprintf(req.s_msg ,"通道 %d 有可疑移動物體...",b); alarmInfo.iType = htons(0x01); alarmInfo.iAlarmType = htons(0x03); alarmInfo.iChannel = htons(b); alarmInfo.iReserve = htons(0); send(listenfd,(char *)&alarmInfo,sizeof(TAlarm),0); break; case 0x01: /*req.code =0; strcpy(req.s_name,"源杰DVR"); strcpy(req.s_msg ,"通道1手動報警!");*/ alarmInfo.iType = htons(0x01); alarmInfo.iAlarmType = htons(0x02); alarmInfo.iChannel = htons(b+1); alarmInfo.iReserve = htons(0); send(listenfd,(char *)&alarmInfo,sizeof(TAlarm),0); switch(b) { case 0x00: *isAlarm0 =0; break; case 0x01: *isAlarm1 =0; break; case 0x02: *isAlarm2 =0; break; case 0x03: *isAlarm3 =0; break; default: break; } break; case 0x02: alarmInfo.iType = htons(0x01); alarmInfo.iAlarmType = htons(0x06); alarmInfo.iChannel = htons(b); alarmInfo.iReserve = htons(0); send(listenfd,(char *)&alarmInfo,sizeof(TAlarm),0); break; case 0x03: alarmInfo.iType = htons(0x01); alarmInfo.iAlarmType = htons(0x07); alarmInfo.iChannel = htons(b); alarmInfo.iReserve = htons(0); send(listenfd,(char *)&alarmInfo,sizeof(TAlarm),0); break; } if(listenfd) close(listenfd);// fprintf(stderr,"\n=====================ALARM=======================\n");}void callback(int channelNum,char * buf,int frametype,int length){ int retval,subType; #if 0 if((channelNum == 0) && (frametype != PktAudioFrames)) printf("channel=%d, frametype=0x%x, framelength=%6d\n", channelNum,frametype,length); #endif subType = GetSubChannelStreamType(buf, frametype); switch(frametype) { case PktSubIFrames: case PktSubPFrames: case PktSubBBPFrames: case PktSubSysHeader: { if(frametype == PktSubSysHeader){ fprintf(stderr,"<info> have get the sub channel sys header for chan%d!\n", channelNum); memcpy(cifqciffile_head[channelNum], buf, length); *head_size = length; } if(*(gRecord+channelNum*sizeof(unsigned short)) && cifqcif_fd[channelNum] && ((subType == 2)||(subType == 4)||(subType == 5))){ if(gMoveRecord ==0) write(cifqcif_fd[channelNum], buf, length); else if(gMoveRecord && isMoving[channelNum]) write(cifqcif_fd[channelNum], buf, length); } break; } case PktSysHeader: case PktIFrames: case PktPFrames: case PktBBPFrames: case PktAudioFrames: case PktSFrames: { if(gSubRecord[channelNum] == 0) { if(frametype == PktSysHeader){ memcpy(file_head+channelNum*40, buf, length); *head_size = length; } if(*(gRecord+channelNum*sizeof(unsigned short)) && *(record_fd+channelNum)){ if(gMoveRecord == 0 ) { write(*(record_fd+channelNum), buf, length); *(gCurrentFileSize+channelNum*sizeof(unsigned long)) += length; }else if((gMoveRecord && isMoving[channelNum]) || frametype==PktSysHeader) { write(*(record_fd+channelNum), buf, length); *(gCurrentFileSize+channelNum*sizeof(unsigned long)) += length; } //add at 2005.6.2 to create the index file /*nodeinfo[channelNum].FilePos += length; if(frametype == PktSysHeader) nodeinfo[channelNum].FrameNum=0; if(frametype == PktIFrames) { write(index_fd[channelNum], &nodeinfo[channelNum], sizeof(nodeinfo[channelNum])); // fprintf(stderr,"<demo_info> write to index file!\n"); nodeinfo[channelNum].FrameNum++; } if(frametype == PktBBPFrames) nodeinfo[channelNum].FrameNum+=3;*/ } /*if(net_flag[channelNum]){ if(net_head_flag[channelNum] == 0){ if(frametype != PktSysHeader){ MP4_ServerWriteDataEx(channelNum,file_head[channelNum], head_size, PktSysHeader, 0,0); } else MP4_ServerWriteDataEx(channelNum,(char*)buf,length,frametype, 0,0); net_head_flag[channelNum] = 1; } else { MP4_ServerWriteDataEx(channelNum,(char*)buf,length,frametype, 0,0); } }*/ MP4_ServerWriteData(channelNum,(char *)buf,length,frametype,0); } //retval = MP4_ServerWriteData(channelNum,(char *)buf,length,frametype,0); break; } case PktMotionDetection://printf("PKt isSF = %d\n",*isSF); //if(*isSF) //AlarmInfo(0,channelNum); break; default: break; }}int gcheckpass(char * usename, int namelen, char * password, int passlen){// fprintf(stderr,"i am in checkpass\n");// fprintf(stderr,"usename=%s\n,pass=%s\n",usename,password);// fprintf(stderr,"lenname=%d,passlen=%d\n",namelen,passlen); return 0;}int gcheckip(int iChannel, char * sIP){ net_flag[iChannel]++;// fprintf(stderr,"i am in checkip\n");// fprintf(stderr,"ichannel=%d,ip=%s\n",iChannel,sIP); return 0;}void gmessage(char * buf, int iLen){ char ts[100]; char msg[50]; char myIP[50]; char par[6][4]; int i=0,j=0; //int fd = -1; memset(par,0,24); memset(msg,0,50); strncpy(msg,buf,iLen); char *token = strtok(msg,","); while(token!=NULL) { strcpy(par[i] ,token); token = strtok(NULL,","); i++; } if(atoi(par[0]) == 11){ j=atoi(par[1]); SetVideoPara(channelHandle[j],atoi(par[2]),atoi(par[3]),atoi(par[4]),atoi(par[5])); } if(atoi(par[0])==22) { // fd = OpenAdrPort(COM_PORT); //printf("par[1]=%d,par[2]=%d,par[3]=%d.fd=%d\n",atoi(par[1]),atoi(par[2]),atoi(par[3]),fd); if(fd >= 0) { switch(atoi(par[2])) { case 0: CameraStop(fd,(unsigned int)(atoi(par[1])+1)); break; case 1: PanLeft(fd,(unsigned int)(atoi(par[1])+1),(unsigned int)(atoi(par[3]))); break; case 2: PanRight(fd,(unsigned int)(atoi(par[1])+1),(unsigned int)(atoi(par[3]))); break; case 3: TiltUp(fd,(unsigned int)(atoi(par[1])+1),(unsigned int)(atoi(par[3]))); break; case 4: TiltDown(fd,(unsigned int)(atoi(par[1])+1),(unsigned int)(atoi(par[3]))); break; case 5: AutoScan(fd,(unsigned int)(atoi(par[1])+1)); break; case 6: #ifdef Pelco_D ManualScan(fd,(unsigned int)(atoi(par[1])+1)); #else CameraStop(fd,(unsigned int)(atoi(par[1])+1)); #endif break; case 7: PanTilt(fd,(unsigned int)(atoi(par[1])+1), (unsigned int)0,(unsigned int)(atoi(par[3])), (unsigned int)0,(unsigned int)(atoi(par[3]))); break; case 8: PanTilt(fd,(unsigned int)(atoi(par[1])+1), (unsigned int)0,(unsigned int)(atoi(par[3])), (unsigned int)1,(unsigned int)(atoi(par[3]))); break; case 9: PanTilt(fd,(unsigned int)(atoi(par[1])+1), (unsigned int)1,(unsigned int)(atoi(par[3])), (unsigned int)0,(unsigned int)(atoi(par[3]))); break; case 10: PanTilt(fd,(unsigned int)(atoi(par[1])+1), (unsigned int)1,(unsigned int)(atoi(par[3])), (unsigned int)1,(unsigned int)(atoi(par[3]))); break; case 11: AutoFocusOn(fd,(unsigned int)(atoi(par[1])+1)); SetFocusSpeed(fd,(unsigned int)(atoi(par[1])+1), (unsigned int)(atoi(par[3]))); AutoFocusAuto(fd,(unsigned int)(atoi(par[1])+1)); break; case 12: AutoFocusOff(fd,(unsigned int)(atoi(par[1])+1)); break; case 13: AutoFocusOff(fd,(unsigned int)(atoi(par[1])+1)); SetFocusSpeed(fd,(unsigned int)(atoi(par[1])+1), (unsigned int)(atoi(par[3]))); FocusNear(fd,(unsigned int)(atoi(par[1])+1)); break; case 14: AutoFocusOff(fd,(unsigned int)(atoi(par[1])+1)); SetFocusSpeed(fd,(unsigned int)(atoi(par[1])+1), (unsigned int)(atoi(par[3]))); FocusFar(fd,(unsigned int)(atoi(par[1])+1)); break; case 15: break; case 16: break; case 17: SetZoomSpeed(fd,(unsigned int)(atoi(par[1])+1), (unsigned int)(atoi(par[3]))); ZoomTele(fd,(unsigned int)(atoi(par[1])+1)); break; case 18: SetZoomSpeed(fd,(unsigned int)(atoi(par[1])+1), (unsigned int)(atoi(par[3]))); ZoomWide(fd,(unsigned int)(atoi(par[1])+1)); break; case 19: AutoIrisOn(fd,(unsigned int)(atoi(par[1])+1)); AutoIrisAuto(fd,(unsigned int)(atoi(par[1])+1)); break; case 20: AutoIrisOff(fd,(unsigned int)(atoi(par[1])+1)); break; case 21: AutoIrisOff(fd,(unsigned int)(atoi(par[1])+1)); IrisClose(fd,(unsigned int)(atoi(par[1])+1)); break; case 22: AutoIrisOff(fd,(unsigned int)(atoi(par[1])+1)); IrisOpen(fd,(unsigned int)(atoi(par[1])+1)); break; default: break; } } //CloseAdrPort(fd); } memset(buf,0,strlen(buf));}void motiondetectcallback(ULONG channel,int bMotion,void * content){ static time_t lastTime = 0; time_t nowTime; if(*isSF && isMoving[channel] != bMotion && isMoving[channel]==0) { nowTime = time(NULL); if((lastTime == 0) || ((nowTime - lastTime) >= 1800)) { lastTime = nowTime; AlarmInfo(0x00,(unsigned char)channel); } } isMoving[channel] = bMotion;}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -