cli_softandhard.cpp

来自「用vb实现在线考试系统」· C++ 代码 · 共 874 行 · 第 1/2 页

CPP
874
字号
			aa5.m_bSendMode = TCPMODE;
			break;
		case 1:
			aa5.m_bSendMode = UDPMODE;
			break;
		case 2:
			aa5.m_bSendMode = MULTIMODE;
			break;
		case 3:
			aa5.m_bSendMode = DIALING;
			break;
		default:
			aa5.m_bSendMode = TCPMODE;
			break;
		}


		aa5.m_sIPAddress = ip;

		aa5.m_sUserName = m_sUserName;
		aa5.m_sUserPassword=m_sUserPassword;
		aa5.m_bUserCheck = m_bUserCheck;

		aa5.displaypara.nLeft = left;
		aa5.displaypara.nTop = top;
		aa5.displaypara.nWidth = width;
		aa5.displaypara.nHeight = height;
		aa5.displaypara.bToScreen = 1;
		aa5.displaypara.bToVideoOut = 1;
		aa5.displaypara.format =vfYUV422Planar;

		MP4_ClientSetTTL(64);

		nn1 = MP4_ClientStart_Card(&aa5,0,NULL);

        return nn1;
}



/***********************************************************

   软件播放声音
   选定某个播放器播放声音,其他播放器静止。 
   返回TRUE表示成功,返回FALSE表示失败。 
   StockHandle:MP4_ClientStart成功返回的值
************************************************************/
bool _stdcall Cli_PlaySound(LONG StockHandle)
{
    
    if (StockHandle >=0 )
	{
		MP4_ClientAudioStart(StockHandle);
		return MP4_ClientAudioVolume(0xfff0);
	}

}

/**************************************************

  软件停止播放声音 
  返回TRUE表示成功,返回FALSE表示失败。
 
***************************************************/

bool _stdcall Cli_CloseSound()
{
	return MP4_ClientAudioStop();
}

/***************************************************

  硬件播放声音
  输出某一路解码卡的声音。 
  StockHandle:MP4_ClientStart_Card成功返回的值。 
  bAudioPreview:是否使用声音预览。如果使用声音预览,设置TRUE,否则设置FALSE。 
 
***************************************************/
int _stdcall Cli_ClientAudioStart_Card(long StockHandle)
{
	if (StockHandle>=0)
		return MP4_ClientAudioStart_Card(StockHandle);
}


/****************************************************

   关闭某一路解码卡的声音。
   StockHandle:MP4_ClientStart_Card成功返回的值。 
   返回值见上一部分的返回代码说明。

*****************************************************/
int _stdcall Cli_ClientAudioStop_Card(long StockHandle)
{
	if (StockHandle >= 0)
	{
		return MP4_ClientAudioStop_Card(StockHandle);
	}
}

/********************************************************
	Function	: Cli_GetCurrentWin
	描述		: 返回当前通道值
	输入值		:	空
	返回值		:	当前通道值
*********************************************************/
int _stdcall Cli_GetCurrentWin()
{
	return iCurrentWin;
}

/*********************************************************
	Function	:	Cli_ClientCapPicFile_Card
	描述		:	硬件抓图。 
	输入值		:	long  StockHandle :MP4_ClientStart_Card成功返回的值。
					LPSTR saveFileName:保存的文件名。 
	返回值		:	见上一部分的返回代码说明。
	
	注:和软件解码的抓图方式不同,不需要调用回调函数MP4_ClientSetCapPicCallBack。
***********************************************************/
int _stdcall Cli_ClientCapPicFile_Card(long StockHandle, LPSTR saveFileName)
{
	return MP4_ClientCapPicFile_Card(StockHandle,saveFileName);
}

/*************************************************************

    设置抓图回调函数。 
    StockHandle:MP4_ClientStart成功返回的值。
    pBuf:返回图像数据; nSize: 返回图像数据大小。
    nWidth:画面宽,单位像素。 nHeigh:画面高。 
    nStamp:时标信息,单位毫秒。 nType:数据类型, T_RGB32,T_UYVY,详见宏定义说明。 
    nReceaved:保留。 返回TRUE表示成功,返回FALSE表示失败。
    说明:注意要尽快返回,如果要停止回调,可以把回调函数指针CapPicFun设为NULL。
    一旦设置回调函数,则一直有效,直到程序退出

***************************************************************/

bool _stdcall Cli_ClientSetCapPicCallBack(long StockHandle)
{
	return MP4_ClientSetCapPicCallBack(StockHandle,CapPicFun);
}

/**************************************************************

停止抓图

**************************************************************/
void _stdcall Cli_StopCapPic(long stockhandle)
{

     MP4_ClientStopCapture(stockhandle);

}


/*************************************************************

   对服务端的nChannel通道网络连接初始化,
   结束当前所有用户对它的访问。
   返回TRUE表示成功,返回FALSE表示失败。

**************************************************************/


int _stdcall Cli_ResetServerFirstChannel(char *ip,char channelnum)
{
    
	 return MP4_ClientShut(ip,channelnum);

}


/*********************************************************

  设置解码时丢弃B帧的个数。 
  StockHandle:MP4_ClientStart成功返回的值。 
  dNum:丢弃的帧个数。(0,1,2)

***********************************************************/
bool _stdcall Cli_ClientThrowBFrame(long stockhandle,long m_bframenum)
{

   return MP4_ClientThrowBFrame(stockhandle,m_bframenum);

}



/********************************************************

  设置播放质量
  四种播放质量级别
*********************************************************/

void _stdcall Cli_PlayDelayType(long StockHandle,char m_delaytype)
{

		switch(m_delaytype)
		{
		case 0://很流畅
			//30是增加缓冲区的个数
			MP4_ClientSetBufferNum(StockHandle,30);
			//580接受的数据量
			MP4_ClientSetPlayDelay(StockHandle,580);
			break;
		case 1:
			MP4_ClientSetBufferNum(StockHandle,15);
			MP4_ClientSetPlayDelay(StockHandle,40);
			break;
		case 2:
			MP4_ClientSetBufferNum(StockHandle,15);
			MP4_ClientSetPlayDelay(StockHandle,0);
			break;
		case 3:
			MP4_ClientSetBufferNum(StockHandle,0);
			MP4_ClientSetPlayDelay(StockHandle,0);
			break;
		}

}


/************************************************
  开始记录
  开始客户端的数据捕获(直接写文件方式)

************************************************/

bool  _stdcall Cli_StartRecord(LPSTR sDriverPath, long StockHandle,int i,int j,LPSTR RecordDate,							  LPSTR StartTime)
{
	
   if (StockHandle >= 0)
  {      if (j<10)
		  sprintf(filename,"%s:\\save\\S%dN0%dF%sH%s.mp4",sDriverPath, i,j,RecordDate,StartTime);		     		   		   
		 if (j>=10)
           sprintf(filename,"%s:\\save\\S%dN%dF%sH%s.mp4",sDriverPath, i,j,RecordDate,StartTime);		 
 
		 return MP4_ClientStartCaptureFile(StockHandle,filename);
   }
    
}

/*****************************************************
   停止记录
   停止客户端数据的捕获
******************************************************/
bool _stdcall Cli_StopRecord(long StockHandle)
{
	
 	
   if (StockHandle >= 0)
   {
	  return MP4_ClientStopCapture(StockHandle);
	
   }

	StockHandle=-1;

	Sleep(100);

}


/************************************************

  显示模式

*************************************************/
void _stdcall Cli_ShowMode(bool m_showmode)
{    
	if (m_showmode)
	{
		MP4_ClientSetShowMode(NORMALMODE,0);
	}
	else
	{
		MP4_ClientSetShowMode(OVERLAYMODE,COLORREF(0xff00ff));
	}
}


/*************************************************

    获得已经解码的总帧数

**************************************************/
long _stdcall Cli_ClientGetFrameNum(long StockHandle)
{
	return MP4_ClientGetFrameNum(StockHandle);
}


/****************************************************
设置采样空间大小。
输入参数 :
		wHWCardNo 
		lpRect->top    	采样跳过的行数
		lpRect->left	采样跳过的象素
		lpRect->bottom 采样跳过的行数+有效行
		lpRect->right   	采样跳过的象素+有效象素
		宽度应是4的倍数。
返回值 :		无
**********************************************************/
void  _stdcall Cli_SetVideoRect(WORD wHWCardNo,int top, int left, int bottom, int right) 
{
   RECT lpRect;
	
	lpRect.top=top;
	lpRect.left=left;
	lpRect.bottom=bottom;
	lpRect.right=right;

	MV_SetCurrentCard(wHWCardNo);
	MV_SetVideoRect(&lpRect);
}


/*************************************************

  VC中硬件的实现

**************************************************/
/****************************************
 * 功能:	客户端初始化,硬件卡初始化
			显示图象DIALOG的初始化~
 * 返回值:	解码卡通道个数
 * 
 ****************************************/
int _stdcall Cli_Startup_card()
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	pdlg = new CVideoShow;
	pdlg->Create(CVideoShow::IDD,NULL);
	pdlg->ShowWindow(SW_SHOW);

	return pdlg->InitCard(); 
}

/****************************************
 * 功能:	客户端退出,硬件卡关闭
 * 返回值:	
 * 
 ****************************************/
void _stdcall Cli_Exit_card()
{
	MP4_ClientReleaseDDraw_Card();
	MP4_ClientReleaseDevice_Card();
	MP4_ClientCleanup();
}

/******************************************
 * 功能:	设置分屏的个数
 * 输入值: int iNum: 分屏的个数
 * 返回值: 
 *****************************************/
void _stdcall Cli_SetShowNum(int iNum)
{
	pdlg->splitRect(iNum);
}

/******************************************
 * 功能:	开始客户端图象显示
 * 输入值: LPSHOWPARAMS showParams: 图象显示参数
 * 返回值: 
 *****************************************/
void _stdcall Cli_StartShow(LPSHOWPARAMS showParams)
{
	//AFX_MANAGE_STATE(AfxGetStaticModuleState());
	ShowParams = showParams;
	pdlg->StartShow();
}

/******************************************
 * 功能:	停止客户端图象显示
 * 输入值: long StockHandle: 
 * 返回值: 
 *****************************************/
bool _stdcall Cli_StopShow(long StockHandle)
{
	if (StockHandle >= 0)
	{
		MP4_ClientStopCapture(StockHandle);
		return MP4_ClientStop(StockHandle);
	}
}


BOOL _stdcall Cli_GetWnd(HWND hWnd)
{
	if(hWnd == NULL)
	{
		return FALSE;
	}
	else
	{
		myHwnd = hWnd;
		return TRUE;
	}
}

/****************************************
 *	
 *
 *
 ****************************************/
void mySendMessage(int iMessage, char* strMessage)
{
	//AFX_MANAGE_STATE(AfxGetStaticModuleState()); 
	//SendMessage(pdlg->m_hWnd, iMessage, 0, 0);

	SetWindowText(myHwnd, strMessage);
}

/**************************************************************
 * 以下仅供测试,但效果不好,在程序中其实已经无用
 * 轮寻所用~
 *
 **************************************************************/
//设置轮循参数
void _stdcall Cli_SetSwitchShow(LPSWITCHSHOW params)
{	
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
	SwitchParams = params;
	pdlg->SwitchShow(); 
}

void _stdcall Cli_SwitchShow()
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
}

void _stdcall Cli_StopSwitchShow()
{
	pdlg->StopSwitchShow(); 
}

⌨️ 快捷键说明

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