文件读取问题,FileRead函数。
procedure TMainForm.Button1Click(Sender: TObject);
var
iFileHandle: Integer;
iHeadLength: DWORD;
Buffer: array[0..4096-1]of byte;
readNumber: DWORD;
begin//
nPort:= pn_PlayWindow.Tag;
iHeadLength:= Hik_PlayM4_GetFileHeadLength();//文件头长度
iFileHandle:= CreateFile(Pchar(sFileName),GENERIC_READ,FILE_SHARE_READ,nil,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
ReadFile(iFileHandle,Buffer,iHeadLength,readNumber,nil);//成功
Hik_PlayM4_SetFileEndMsg(nPort, MainForm.Handle, WM_REPLAY_PLAYEND);
Hik_PlayM4_SetStreamOpenMode(nPort, STREAME_FILE);//成功
//这个函数执行失败,是不是前面读取数据出问题了?
Hik_PlayM4_OpenStream(nPort, Buffer[0],iHeadLength,SizeOf(Buffer))//将流数据加载到这个函数,这个函数是板卡上的一个封装函数,用于读取流数据,进行下一步操作。
Hik_PlayM4_Play(nPort, pn_PlayWindow.Handle);
while(readNumber > 0) do
begin
if(not Hik_PlayM4_InputData(nPort,Buffer[0],SizeOf(Buffer))) then
begin
showMessage('InputData False');
break;
end;
ReadFile(iFileHandle,Buffer,SizeOf(Buffer),readNumber,nil);
end;
Hik_PlayM4_STOP(nPort);
Hik_PlayM4_CloseFile(nPort);
FileClose(iFileHandle);
end;
//函数声明,
function Hik_PlayM4_OpenStream(nPort: integer; var pFileHeadBuf: byte; nSize: DWORD; nBufPoolSize: DWORD): Boolean; stdcall; external MPG4_REPLAY_SDK;
说明:打开流接口(类似打开文件);
输入参数:pFileHeadBuf用户从卡上得到的文件头数据。
nSize 文件头长度。
nBufPoolSize 设置播放器中存放数据流的缓冲区大小。范围是SOURCE_BUF_MIN~ SOURCE_BUF_MAX。
function Hik_PlayM4_InputData(nPort: integer; var pBuf: byte; nSize: DWORD): Boolean; stdcall; external MPG4_REPLAY_SDK;
说明:输入从卡上得到的流数据;打开流之后才能输入数据。
输入参数:pBuf 缓冲区地址;
nSize缓冲区大小
返回值:TURE,表示已经输入数据。FALSE 表示失败,数据没有输入;