if CheckIsVcd(gszFileName) then
//注意:流式播放不支持Dat文件.不过,我们可以在这里欺骗一下它.它就播放了.嘿嘿
begin
iDatHeadPos:=GetPacketHead(gszFileName);
FileSeek(Buf^.hFile,iDatHeadPos,soFrombegin
ning);
end;
for i := 0 to MAX_BUF_NUMBER-1do
//GetMem(Buf^.Buffer,MAX_BUF_SIZE + 2);
Buf^.Buffer:=GlobalAllocPtr(GMEM_FIXED,MAX_BUF_SIZE + 2);
//Buf^.Buffer:=GetMemory(MAX_BUF_SIZE + 2);
Buf^.wIndex := 0;
Buf^.dwSize := 0;
//存储缓冲区结构到用户段
FMPSet(hMPEGStream,FMPI_STM_USER, DWORD(Buf));
//在到缓冲区3/4时,触发填充下一个缓冲区
FMPSet(hMPEGStream, FMPI_BUF_POS, DWORD(Trunc(MAX_BUF_SIZE* 0.75)));
end;
FMPM_BUF_POS://读数据
begin
if bIsCyFile then
//如果该视频文件是加密文件
begin
//TempBuf
ReadFile(Buf^.hFile,TempBuf,MAX_BUF_SIZE,iRead,nil);
if (TempBuf[iRead-3]=67) and (TempBuf[iRead-2]=74) and (TempBuf[iRead-1]=84) then
iRead:=iRead-3;//哈哈,文件的最后三个字节为'CJT',丢弃此标志
UnCryptBuf(TempBuf,iRead);//解密
CopyMemory(Buf^.Buffer[Buf^.wIndex],@TempBuf,iRead);
Buf^.dwSize:=iRead;
end
else
//原始文件,直接读到缓冲区即可
ReadFile(Buf^.hFile,Buf^.Buffer[Buf^.wIndex]^,MAX_BUF_SIZE,Buf^.dwSize,nil);
//强烈注意!!!!
end;