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 + -
显示快捷键?