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

📄 dmserver.c

📁 海康威视视频采集卡linux开发包4.22版
💻 C
字号:
#include <stdio.h>#include <unistd.h>#include <signal.h>#include <stdlib.h>#include <semaphore.h>#include "DataType.h"#include "ds40xxsdk.h"#include "tmserverpu.h"unsigned short format1[] = {16,19,'O','f','f','i','c','e','\0'};unsigned short format2[] = {8,3,_OSD_YEAR4,':',_OSD_MONTH2,':',_OSD_HOUR24,':',_OSD_MINUTE,':',_OSD_SECOND,'\0'};int  gcheckpass(char * usename, int namelen, char * password, int passlen);int gcheckip(int iChannel, char * sIP);void gmessage(char * buf, int iLen);void callback(int channelNum,char * buf,int frametype,int length);	int audio_port = 0;static int done = 0;void poked(int sig){	done = 1;}int main(){	int channelCount;	int i,retVal, chan;	int channelHandle[16];	SERVER_VIDEOINFO videoinfo;	RECT winRect;	STREAM_READ_CALLBACK pStreamRead;	pStreamRead = (STREAM_READ_CALLBACK)callback;		int tei=0;	char data[4];	signal(SIGHUP, poked);	signal(SIGINT, poked);	signal(SIGTERM, poked);	retVal = InitDSPs();	if(retVal == 0){//fixed at 2005.1.13 		fprintf(stderr,"Do InitDSPs Error(%08x)\n",GetLastErrorNum());		return 0;	}	fprintf(stderr,"Success!----InitDSPs()\n");		channelCount = GetTotalChannels();	fprintf(stderr,"channelcount = %d\n",channelCount);	videoinfo.m_channum = channelCount;						MP4_ServerSetNetPort(5050,6050);		if( MP4_ServerStart(&videoinfo) < 0) 	{ 		fprintf(stderr, "Error Number is %x\n",  MP4_ServerGetLastErrorNum());		goto EXIT;	}	MP4_ServerSetBufNum(1,60);		printf("videoinfo at 0x%x, m_channum at 0x%x\n", &videoinfo, &videoinfo.m_channum);		MP4_ServerCheckPassword(gcheckpass);	MP4_ServerCheckIP(gcheckip);	MP4_ServerSetMessage(gmessage);		//open channel		for(i=0;i<channelCount;i++){		channelHandle[i] = ChannelOpen( i ,callback);	}#if 0	sleep(1);	for(chan=0;chan<channelCount;chan++){		usleep(40);		if(SetOsdDisplayMode(channelHandle[chan],0xff,1,0x0000, format1, format2)<0)		{			fprintf(stderr,"<demo_info> set osd failed!\n");			return -1;		}		if(SetOsd(channelHandle[chan],1)<0)		{			fprintf(stderr,"<demo_info> start osd failed!\n");			return -1;		}	}//for(chan=0;cahn<channelCount;chan++)	//SetEncodePictureFormat(channelHandle[1],ENC_QCIF_FORMAT);	sleep(1);	if(SetAudioPreview(channelHandle[audio_port], 1)<0)	{		fprintf(stderr,"<demo_info> set audio failed!\n");		return -1;	}#endif	//start capture	for(i=0;i<channelCount;i++){		if(StartVideoCapture(channelHandle[i])<0)		{			fprintf(stderr,"<demo_info>start video capture failed!error num:0x%x\n", GetLastErrorNum());			return -1;		}	}	fprintf(stderr,"<demo_info> Start video capture ok!\n");	while(!done){		sleep(1);	}	fprintf(stderr,"beging stop!\n");	MP4_ServerStop();	//stop preview	fprintf(stderr,"stop video!\n");	for(i=0;i<channelCount;i++){		StopVideoPreview(channelHandle[i]);	}	fprintf(stderr,"stop audio!\n");	SetAudioPreview(channelHandle[audio_port],0);	fprintf(stderr,"stop motion detection!\n");	//stop motion detect	for(i = 0; i < channelCount; i++)	{		StopMotionDetection(channelHandle[i]);	}	fprintf(stderr,"stop video capture!\n");	//stop capture	for(i=0;i<channelCount;i++){		StopVideoCapture(channelHandle[i]);	}	fprintf(stderr,"close channel!\n");	//close channel	for(i=0;i<channelCount;i++){		ChannelClose(channelHandle[i]);	}EXIT:	fprintf(stderr,"deinit dsp!\n");	retVal = DeInitDSPs();	if(retVal<0){		fprintf(stderr,"Do DeInitDSPs Error(%08x)\n",GetLastErrorNum());					      		return 0;	}	return 0;}void callback(int channelNum,char * buf,int frametype,int length){	int retval;	switch(frametype)	{		case PktSysHeader:		case PktIFrames:		case PktPFrames:		case PktBBPFrames:		case PktAudioFrames:		{			if(channelNum == 0)								fprintf(stderr,".");			retval = MP4_ServerWriteData(channelNum,(char *)buf,length,frametype,0);		#if 0			if(retval==0){				if(0x0001 == frametype)				      fprintf(stderr,"*%d", channelNum);			}			else{				if(channelNum == 0)					fprintf(stderr,".");			}		#endif			break;		}		case PktMotionDetection:			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){	fprintf(stderr,"i am in checkip\n");	fprintf(stderr,"ichannel=%d,ip=%s\n",iChannel,sIP);		return 0;}void gmessage(char * buf, int iLen){	fprintf(stderr,"i am in messagecallback\n");	fprintf(stderr,"len=%d,message=%s\n",iLen,buf);}

⌨️ 快捷键说明

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