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

📄 dummyserver.cpp

📁 嵌入式LIUNX的流媒体控制器程序哦 号可以
💻 CPP
字号:
#include "DummyServer.h"#include "debug.h"CDummyServer::CDummyServer(){//	dbg_print("DummyServer Openned!\n");}CDummyServer::~CDummyServer(){	delete pFrame;}int CDummyServer::Init(int dFrameRate, int nMaxFrame, int nStreamFormat, char *fileName){	char ff[128];	memset(ff,0,128);	sprintf(ff,"%s//%s","//home//Jonathan//box//goserver//data",fileName);	if((fpSource=fopen(ff, "rb"))==NULL)	{		printf("Can not open file %s.\n", fileName);		return 1;	}	pFrame=new unsigned char [MAX_FRAME_LENGTH];	m_nFilePoint=0;	m_nFrameLength=0;	m_dStartTime=0.0;	m_dFrameRate=dFrameRate;	m_nMaxFrame=nMaxFrame;	m_nRollBackCount=0;	m_nStreamFormat=nStreamFormat;	if(nStreamFormat==GO_STREAM)	{		m_SyncWord[0]=0x00;		m_SyncWord[1]=0x00;		m_SyncWord[2]=0x01;		m_SyncWord[3]=0xf0;	}	else if(nStreamFormat==MPEG4_STREAM)	{                m_SyncWord[0]=0x00;                m_SyncWord[1]=0x00;                m_SyncWord[2]=0x01;                m_SyncWord[3]=0xb6;	}//	memcpy(m_SyncWord, syncWord, 4);//	printf("CDummyServer initialized.\n");	return 0;}int CDummyServer::getOneFrame(unsigned char *buffer){	double dTime=0.0;	int nLength;#ifdef LINUX	timeval tv;	timezone tz;	gettimeofday(&tv, &tz);//	printf("Init time: %d, %d\n", tv.tv_sec, tv.tv_usec);	dTime=((double)(tv.tv_sec))*1000000.0 + ((double)(tv.tv_usec));#endif	if(m_nFrameLength==0)		if(m_nStreamFormat==GO_STREAM)		{			if((m_nFrameLength=readNextFrame(pFrame, fpSource))==0)				return -1;			else				frameNum=((((unsigned int)pFrame[4])<<24) & 0x1f000000) + ((((unsigned int)pFrame[5])<<16) & 0x00ff0000) + ((((unsigned int)pFrame[6])<<8) & 0x0000ff00) + ((((unsigned int)pFrame[7])<<0) & 0x000000ff);		}		else		{			if((m_nFrameLength=readNextFrame_MV4(pFrame, fpSource))==0)					return -1;		}	if(frameNum>m_nMaxFrame)	{		m_nFilePoint=0;		m_nRollBackCount++;		m_nFrameLength=0;	}	if(dTime-m_dStartTime>((double)(frameNum+m_nMaxFrame*m_nRollBackCount))*1000000.0/m_dFrameRate)	{//		dbg_print("Frame number: %d, frame length: %d, Time: %d \t", frameNum, m_nFrameLength, (int)(dTime-m_dStartTime));//*		dbg_print("framenum: %d, maxframe: %d, RollBackCount: %d, framecount: %d\t", frameNum, m_nMaxFrame, m_nRollBackCount, frameNum+m_nMaxFrame*m_nRollBackCount);		memcpy(buffer, pFrame, m_nFrameLength);		nLength=m_nFrameLength;		m_nFrameLength=0;		return nLength;	}	return 0;}int CDummyServer::Close(){	fclose(fpSource);	return 0;}int CDummyServer::readNextFrame(unsigned char *buffer, FILE * fp){	unsigned char pTemp[4];	int addToBuffer=0;	int bufferEnd=0;	fseek(fp, m_nFilePoint, SEEK_SET);	while((fread(pTemp, 1, 4, fp)!=0))	{		if(pTemp[0]==m_SyncWord[0] && pTemp[1]==m_SyncWord[1] && pTemp[2]==m_SyncWord[2] && pTemp[3]==m_SyncWord[3])			if(addToBuffer==0)				addToBuffer=1;			else				break;		m_nFilePoint+=4;		if(addToBuffer==1)		{			memcpy(buffer+bufferEnd, pTemp, 4);			bufferEnd+=4;		}	}	return bufferEnd;}int CDummyServer::readNextFrame_MV4(unsigned char *buffer, FILE * fp){	int i;	int addToBuffer=0;	int bufferEnd=0;	int frameHeaderPos=0;	fseek(fp, m_nFilePoint, SEEK_SET);	if(fread(buffer, 1, 100004, fp)==0)		return 0;	for(i=0;i<100000;i++)	{		if(buffer[i]==m_SyncWord[0] && buffer[i+1]==m_SyncWord[1] && buffer[i+2]==m_SyncWord[2] && buffer[i+3]==m_SyncWord[3])		{//			dbg_print("\n*********%d******%d*****\n\n", i, m_nFilePoint);			if(addToBuffer==0)				addToBuffer=1;			else				break;		}		m_nFilePoint++;		bufferEnd++;		if(addToBuffer==0)			frameHeaderPos++;	}	frameNum=(((unsigned int)buffer[frameHeaderPos+4] & 0x0f)<<11)+(((unsigned int)buffer[frameHeaderPos+5])<<3)+(((unsigned int)buffer[frameHeaderPos+6])>>5);//	dbg_print("\n***********frameNum: %d*************\n", frameNum);	return bufferEnd;}	int CDummyServer::StartTime(timeval tv){#ifdef LINUX//	timeval tv;//	timezone tz;//	gettimeofday(&tv, &tz);//	printf("Init time: %d, %d\n", tv.tv_sec, tv.tv_usec);	m_dStartTime=((double)(tv.tv_sec))*1000000.0 + ((double)(tv.tv_usec));#endif	return 0;}

⌨️ 快捷键说明

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