⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dsserver.cpp

📁 是自己开发的程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	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);	// 设防			oldSF = 1;		}		if(((*isSF)==0) && (oldSF == 1))		{			AlarmInfo(0x03,0x03);	// 撤防			oldSF = 0;		}		sleep(1);	}	return NULL;}//==================================================//==================================================//各种回掉函数//==================================================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;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -