#include "vfw.h"
#pragma comment(lib, "vfw32.lib")
#pragma comment(lib, "Winmm.lib")
AVIFileInit();
PAVIFILE pAviFile = nullptr;
// 打开AVI文件
int nRet = AVIFileOpen(&pAviFile, "10.82.27.20_00_201908231542_part0.avi", OF_READ, NULL);
if (nRet == 0)
{
// 读取AVI文件的信息
AVIFILEINFO aviFileInfo = { 0 };
AVIFileInfo(pAviFile, &aviFileInfo, sizeof(AVIFILEINFO));
// 提取出AVI文件的某种流,此例为视频流
PAVISTREAM pAviStrem = nullptr;
AVIFileGetStream(pAviFile, &pAviStrem, streamtypeVIDEO, 0);
// 读取流信息
AVISTREAMINFO aviStreamInfo = { 0 };
AVIStreamInfo(pAviStrem, &aviStreamInfo, sizeof(AVISTREAMINFO));
/*
// type 为流格式(音频或视频),handler为压缩方法:如H264
char handler[4],type[4];
handler[0] = stinfo.fccHandler;
handler[1] = stinfo.fccHandler >> 8;
handler[2] = stinfo.fccHandler >> 16;
handler[3] = stinfo.fccHandler >> 24;
type[0] = stinfo.fccType;
type[1] = stinfo.fccType >> 8;
type[2] = stinfo.fccType >> 16;
type[3] = stinfo.fccType >> 24;
//如果是压缩的视频(一般都是压缩的),打开读取压缩桢的函数
PGETFRAME pGetFrame = AVIStreamGetFrameOpen(pAviStrem, NULL);
//返回解压缩后,图像的信息
LPBITMAPINFOHEADER lpbm = (LPBITMAPINFOHEADER)AVIStreamGetFrame(pGetFrame, 1);
//读入并解压缩视频的每一帧
for (int i = 0; i < aviFileInfo.dwLength; i++)
{
memcpy(RGBbuf,(BYTE*)AVIStreamGetFrame(pgf,i)+40,pfi.dwWidth*pfi.dwHeight*3);
}
//关闭读取压缩桢的函数
AVIStreamGetFrameClose(pGetFrame);*/
char* szBuf = new char[500 * 1024];
memset(szBuf, 0, 500 * 1024);
const int headerSize = sizeof(CMD_HEADER) + sizeof(AV_VIDEO_INFO);
while (!m_bExit)
{
for (int i = 0; i < aviFileInfo.dwLength; i++)
{
// 获取编码前数据
AVIStreamRead(pAviStrem, i, 1, szBuf + headerSize, 500 * 1024 - headerSize, NULL, NULL);
}
}
//释放AVI文件指针
AVIFileRelease(pAviFile);
}
AVIFileExit();
03-21
999