前言
本章主要實現播放海康錄影檔案,更多播放器說明可以參考《Hikvision H264播放器編程指南V4.8》。
先來一張簡單的效果圖
以下幾個VC++ 代碼 片段:
CPlayerDlg::OnInitDialog()
Hik_PlayM4_SetVolume(PORT,m_SoundSlider.GetPos());
// 其他代碼
//set the capture picture call back function;
Hik_PlayM4_SetDisplayCallBack(PORT,DisplayCBFun);
//set the wave audio call back funtion;
Hik_PlayM4_SetAudioCallBack(PORT,WaveCBFun, (long)this);
// 其他代碼
Hik_PlayM4_SetEncTypeChangeCallBack(PORT,funEncChange,(long)this);
#if (WINVER > 0x0400)
//If do not support multi monitor,may not call!
Hik_PlayM4_InitDDrawDevice();
Hik_PlayM4_SetDDrawDevice(PORT,0);
#endif
//Test adapter Capability;
TestCapability(0);
Hik_PlayM4_SetFileEndMsg(PORT,m_hWnd,WM_FILE_END);
Hik_PlayM4_SetEncChangeMsg(PORT,m_hWnd,WM_ENC_CHANGE);
if(m_strPlayFileName.Compare(""))
{
if(m_bStreamType)
OpenStream();
else
OpenFile();
}
CPlayerDlg::OpenFile()
Hik_PlayM4_SetFileRefCallBack (PORT,FileRefDone,(DWORD)this);
Hik_PlayM4_SetVerifyCallBack(PORT, 0, 0xffffffff, VerifyFun, (DWORD) this);// verify the whole file;
if(!Hik_PlayM4_OpenFile(PORT,m_strPlayFileName.GetBuffer(m_strPlayFileName.GetLength())))
{
m_strPlayFileName="";
CString csError;
csError.Format("Open file failed(%d)",Hik_PlayM4_GetLastError(PORT));
MessageBox(csError);
return ;
}
SetOpenState();
m_nMaxFileTime=Hik_PlayM4_GetFileTime(PORT);
if(!m_nMaxFileTime)
{
MessageBox("File seconds is zero");
return;
}
m_nTotalHour=m_nMaxFileTime/3600;
m_nTotalMinute=(m_nMaxFileTime%3600)/60;
m_nTotalSecond=m_nMaxFileTime%60;
m_nTotalFrames=Hik_PlayM4_GetFileTotalFrames(PORT);
numFrames=m_nTotalFrames;
//If you want to change the display buffer.Do hear!
//Hik_PlayM4_SetDisplayBuf(PORT,25);
Play();
CPlayerDlg::Play()
OnThrow0();
//#ifdef _TEST_CALLBACK
if(m_bConvert)
Hik_PlayM4_SetDecCallBack(PORT,DecCBFun);
else
m_pMainMenu->EnableMenuItem(ID_FILE_CLOSE, FALSE);
//#endif
if(m_bPlaying)
{
Hik_PlayM4_Play(PORT,GetDlgItem(IDC_SHOW)->m_hWnd);
}
else
{
if(m_bStreamType)
{
::SetFilePointer(m_hStreamFile,m_nHeadSize,0,FILE_BEGIN);
Hik_PlayM4_ResetSourceBuffer(PORT);
SetEvent(m_hEventInput);
}
m_bPlaying = Hik_PlayM4_Play(PORT,GetDlgItem(IDC_SHOW)->m_hWnd);
m_bSound=Hik_PlayM4_PlaySound(PORT);
if(m_bPlaying)
SetTimer(PLAY_TIMER,500,NULL);
}
CPlayerDlg::SetOpenState()
Hik_PlayM4_GetPictureSize (PORT,&m_nWidth,&m_nHeight);
Hik_PlayM4_SetOverlayMode(PORT,TRUE,RGB(255,0,255));