S
shuang
Unregistered / Unconfirmed
GUEST, unregistred user!
C++里的函数:
Hik_PlayM4_SetFileRefCallBack(LONG nPort, void (__stdcall *pFileRefDone)(DWORD nPort,DWORD nUser),DWORD nUser);设置回调函数指针,文件索引建立后回调。为了能在文件中准确快速的定位,我们在文件打开的时候生成文件索引
输入参数:
SetFileRefCallBack:回调函数指针
nUser:用户数据
回调函数声明 Void fileRefDone(DWord nPort,Dword nUser)
参数说明:nPort播放器通道号
nUser用户数据
说明:它是多媒体播放器中的一个在文件打开后播放之前用的一个
建立索引的函数,建立索引的目的是为了可以实现,可以任意指定时间点进行播放。
这是播放器程序(VC++)的一部分
//完成文件索引回调函数
void CALLBACK FileRefDone(DWORD nReserved,DWORD nUser);
/////////////////////////////////////////////////////////////////////////////
//功能:打开文件
////////////////////////////////////////////////////////////////////////////
void CPlayerDlg::OnFileOpen()
{
//如果已经打开,则先关闭;
if(m_bOpen)
{
if(m_bStreamType)
CloseStream();
else
CloseFile();
}
if(!BrowseFile(&m_strPlayFileName))
return;
if(m_bStreamType)
OpenStream();
else
OpenFile();
}
void CPlayerDlg::OpenFile()
{
TRACE("Open fileNAME IS:%s",m_strPlayFileName);
//生成文件索引;
Hik_PlayM4_SetFileRefCallBack(PORT,FileRefDone,(DWORD)this);
if(!Hik_PlayM4_OpenFile(PORT,m_strPlayFileName.GetBuffer(m_strPlayFileName.GetLength())))
{
m_strPlayFileName="";
CString csError;
csError.Format("文件打不开(%d)",Hik_PlayM4_GetLastError(PORT));
MessageBox(csError);
return ;
}
SetOpenState();
m_nMaxFileTime=Hik_PlayM4_GetFileTime(PORT);
if(!m_nMaxFileTime)
{
MessageBox("文件总时间为0");
return;
}
m_nTotalHour=m_nMaxFileTime/3600;
m_nTotalMinute=(m_nMaxFileTime%3600)/60;
m_nTotalSecond=m_nMaxFileTime%60;
m_nTotalFrames=Hik_PlayM4_GetFileTotalFrames(PORT);
//如果要设置在此设置;
//Hik_PlayM4_SetDisplayBuf(PORT,25);
Play();
}
////////////////////////////////////////////////////////////////////////
//功能:文件索引完成后回调此函数,通知用户可以使用相关接口
///////////////////////////////////////////////////////////////////////
void CALLBACK FileRefDone(DWORD nReserved,DWORD nUser)
{
CPlayerDlg* pOwner=(CPlayerDlg*)nUser;
pOwner->m_bFileRefCreated=TRUE;
pOwner->ChangeUI();
}
//////////////////////////////////////////////////////////////////////////
//功能:文件索引完成后,改变界面;
//////////////////////////////////////////////////////////////////////////
void CPlayerDlg::ChangeUI()
{
if(m_bFileRefCreated)
{
CButton *pButton;
pButton = (CButton *)GetDlgItem(IDC_STEPBACK);
pButton->EnableWindow(TRUE);
m_pMainMenu->EnableMenuItem(ID_CUT_FILE,MF_ENABLED);
m_pMainMenu->EnableMenuItem(ID_SEEK,MF_ENABLED);
}
}
请问
(1)声明部分:
void CALLBACK FileRefDone(DWORD nReserved,DWORD nUser);
void CALLBACK FileRefDone(DWORD nReserved,DWORD nUser)
{
CPlayerDlg* pOwner=(CPlayerDlg*)nUser;
pOwner->m_bFileRefCreated=TRUE;
pOwner->ChangeUI();
}
(2)调用部分:
void CPlayerDlg::OpenFile()
{
TRACE("Open fileNAME IS:%s",m_strPlayFileName);
//生成文件索引;
Hik_PlayM4_SetFileRefCallBack(PORT,FileRefDone,(DWORD)this);
.........
}
请教高手在delphi中如何用?
我是这样写的总是报该程序执行非法操作,很苦恼!
type
PpFileRefDone = function(nPort:integer;
nUser: word): integer;
stdcall;//procedure(nPort: Real;
nUser: real);
stdcall;
function PlayM4_SetFileRefCallBack(nPort: integer;
pFileRefDone: PpFileRefDone;
nUser: word): Boolean;
stdcall;
private
Function pFileRefDone(nPort:real;
nUser: real): integer;
stdcall;
public
{ Public declarations }
end;
var
RefDone:string;//='1'表示索引建立完成
Function TForm_af_jk.pFileRefDone(nPort:real;
nUser: real): integer;
stdcall;
begin
RefDone:='1';
// ChangeUI;
end;
procedure TForm_af_jk.SBtn_playClick(Sender: TObject);
var frd: PpFileRefDone;
begin
//先关再开
PlayM4_stop(1);
PlayM4_closeFile(1);
// PlayM4_RealeseDDraw();
if edit1.text='' then
begin
showmessage('请选择录像文件');
exit;
end;
if not FileExists(edit1.text+'.mpg') then
begin
showmessage('此录像文件不存在');
exit;
end;
PlayM4_OpenFile(1,edit1.text+'.mpg');
//建立索引
PlayM4_SetFileRefCallBack(1, frd,0);
// PlayM4_RefreshPlay(1);
PlayM4_Play(1,Form_af_jk.Panel1.handle);
if RefDone='1' then
showmessage('111');
end;
Hik_PlayM4_SetFileRefCallBack(LONG nPort, void (__stdcall *pFileRefDone)(DWORD nPort,DWORD nUser),DWORD nUser);设置回调函数指针,文件索引建立后回调。为了能在文件中准确快速的定位,我们在文件打开的时候生成文件索引
输入参数:
SetFileRefCallBack:回调函数指针
nUser:用户数据
回调函数声明 Void fileRefDone(DWord nPort,Dword nUser)
参数说明:nPort播放器通道号
nUser用户数据
说明:它是多媒体播放器中的一个在文件打开后播放之前用的一个
建立索引的函数,建立索引的目的是为了可以实现,可以任意指定时间点进行播放。
这是播放器程序(VC++)的一部分
//完成文件索引回调函数
void CALLBACK FileRefDone(DWORD nReserved,DWORD nUser);
/////////////////////////////////////////////////////////////////////////////
//功能:打开文件
////////////////////////////////////////////////////////////////////////////
void CPlayerDlg::OnFileOpen()
{
//如果已经打开,则先关闭;
if(m_bOpen)
{
if(m_bStreamType)
CloseStream();
else
CloseFile();
}
if(!BrowseFile(&m_strPlayFileName))
return;
if(m_bStreamType)
OpenStream();
else
OpenFile();
}
void CPlayerDlg::OpenFile()
{
TRACE("Open fileNAME IS:%s",m_strPlayFileName);
//生成文件索引;
Hik_PlayM4_SetFileRefCallBack(PORT,FileRefDone,(DWORD)this);
if(!Hik_PlayM4_OpenFile(PORT,m_strPlayFileName.GetBuffer(m_strPlayFileName.GetLength())))
{
m_strPlayFileName="";
CString csError;
csError.Format("文件打不开(%d)",Hik_PlayM4_GetLastError(PORT));
MessageBox(csError);
return ;
}
SetOpenState();
m_nMaxFileTime=Hik_PlayM4_GetFileTime(PORT);
if(!m_nMaxFileTime)
{
MessageBox("文件总时间为0");
return;
}
m_nTotalHour=m_nMaxFileTime/3600;
m_nTotalMinute=(m_nMaxFileTime%3600)/60;
m_nTotalSecond=m_nMaxFileTime%60;
m_nTotalFrames=Hik_PlayM4_GetFileTotalFrames(PORT);
//如果要设置在此设置;
//Hik_PlayM4_SetDisplayBuf(PORT,25);
Play();
}
////////////////////////////////////////////////////////////////////////
//功能:文件索引完成后回调此函数,通知用户可以使用相关接口
///////////////////////////////////////////////////////////////////////
void CALLBACK FileRefDone(DWORD nReserved,DWORD nUser)
{
CPlayerDlg* pOwner=(CPlayerDlg*)nUser;
pOwner->m_bFileRefCreated=TRUE;
pOwner->ChangeUI();
}
//////////////////////////////////////////////////////////////////////////
//功能:文件索引完成后,改变界面;
//////////////////////////////////////////////////////////////////////////
void CPlayerDlg::ChangeUI()
{
if(m_bFileRefCreated)
{
CButton *pButton;
pButton = (CButton *)GetDlgItem(IDC_STEPBACK);
pButton->EnableWindow(TRUE);
m_pMainMenu->EnableMenuItem(ID_CUT_FILE,MF_ENABLED);
m_pMainMenu->EnableMenuItem(ID_SEEK,MF_ENABLED);
}
}
请问
(1)声明部分:
void CALLBACK FileRefDone(DWORD nReserved,DWORD nUser);
void CALLBACK FileRefDone(DWORD nReserved,DWORD nUser)
{
CPlayerDlg* pOwner=(CPlayerDlg*)nUser;
pOwner->m_bFileRefCreated=TRUE;
pOwner->ChangeUI();
}
(2)调用部分:
void CPlayerDlg::OpenFile()
{
TRACE("Open fileNAME IS:%s",m_strPlayFileName);
//生成文件索引;
Hik_PlayM4_SetFileRefCallBack(PORT,FileRefDone,(DWORD)this);
.........
}
请教高手在delphi中如何用?
我是这样写的总是报该程序执行非法操作,很苦恼!
type
PpFileRefDone = function(nPort:integer;
nUser: word): integer;
stdcall;//procedure(nPort: Real;
nUser: real);
stdcall;
function PlayM4_SetFileRefCallBack(nPort: integer;
pFileRefDone: PpFileRefDone;
nUser: word): Boolean;
stdcall;
private
Function pFileRefDone(nPort:real;
nUser: real): integer;
stdcall;
public
{ Public declarations }
end;
var
RefDone:string;//='1'表示索引建立完成
Function TForm_af_jk.pFileRefDone(nPort:real;
nUser: real): integer;
stdcall;
begin
RefDone:='1';
// ChangeUI;
end;
procedure TForm_af_jk.SBtn_playClick(Sender: TObject);
var frd: PpFileRefDone;
begin
//先关再开
PlayM4_stop(1);
PlayM4_closeFile(1);
// PlayM4_RealeseDDraw();
if edit1.text='' then
begin
showmessage('请选择录像文件');
exit;
end;
if not FileExists(edit1.text+'.mpg') then
begin
showmessage('此录像文件不存在');
exit;
end;
PlayM4_OpenFile(1,edit1.text+'.mpg');
//建立索引
PlayM4_SetFileRefCallBack(1, frd,0);
// PlayM4_RefreshPlay(1);
PlayM4_Play(1,Form_af_jk.Panel1.handle);
if RefDone='1' then
showmessage('111');
end;