[转载]vfw的AVI族函数读取AVI文件

2 篇文章 0 订阅
#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(); 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值