📄 dmserver.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 + -