#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();
[轉載]vfw的AVI族函數讀取AVI文件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.