基于VFW的AVI视频文件压缩与解压缩方法研究_第1页
基于VFW的AVI视频文件压缩与解压缩方法研究_第2页
基于VFW的AVI视频文件压缩与解压缩方法研究_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于VFW的AVI视频文件压缩与解压缩方法研究摘要:本文首先概述了微软数字视频软件开发包VFW(Video For Windows)的内容与其体系结构,然后针对AVI文件结构进行必要性分析,接着重点讲述如何使用VC+编程技术调用VFW库函数对AVI文件中视频数据进行压缩与解压缩处理,并给出了相关函数或代码。关键词:VFW;AVI;VC+;压缩;解压缩1. 引言VFW(Video for Windows)是Microsoft推出的关于数字视频的一个软件开发包,VFW的核心是AVI文件标准。围绕AVI文件,VFW推出了一整套完整的视频采集、压缩、解压缩、回放和编辑的应用程序接口(API)。VFW接

2、口主要包括多个动态连接库,通过这些组件间的协调合作,来完成视频的捕获、视频压缩及播放功能。本文主要通过VC+编程技术调用其中的AVIFILE.DLL和ICM,以实现对AVI文件中视频数据的压缩、解压缩以及播放操作,并经过几组实验得到了较好的效果。2. AVI文件的结构AVI文件所采用的RIFF(Resource Interchange File Format,资源互换文件格式)文件结构是由4字节的数据块标记FOURCC(four -character code) AVI所标识;且包含一个ID为hdrl的LIST信息块,其主要用于定义AVI文件的数据格式,记录着视频音频的格式参数信息;还包含一个

3、ID为 movi的LIST数据块,其记录着AVI的音视频序列数据,而对于视频流来说,其子块中包含各帧视频图像的数据内容;最后RIFF文件结构包含一个ID为 idxl的索引块,其包含数据块在文件中的位置索引,能有效提高AVI文件的读写速度,当然这部分是可选的。3. AVI文件中视频数据压缩方法我们知道,以未压缩格式存储的AVI视频文件的体积很大。一方面这样会占用大量的硬盘空间;另一方面受限于网络带宽的因素,大体积的AVI视频文件也不便于在互联网络中进行顺畅传输。为此,对AVI视频文件进行有效地压缩处理成为了人们必须要考虑的研究点。微软的VFW库中也包含了这方面的库函数,便于编程人员方便地对AVI

4、视频数据进行压缩处理。下面本文介绍一种通过调用VFW中相关库函数实现压缩AVI视频数据的方法。首先与前边介绍的读取方法一样,使用相关库函数获取一个未压缩AVI视频文件的pgf; 然后调用VFW中为方便用户所提供的“选择压缩器对话框”函数ICCompressorChoose(m_hWnd,ICMF_CHOOSE_KEYFRAME,&bmpinfo_input,NULL,&m_Com,选择压缩类型);来选择一个我们需要的目标压缩编码方式。该函数中bmpinfo_input即为前边所述,使用AVIStreamReadFormat函数返回的BITMAPINFO类型的结构体变量,其描述着

5、原始视频数据的格式信息。当用户选择完目标压缩器后,相关设置信息将会被自动填充到里面的m_Com中,该变量为COMPVARS类型的结构体。接着利用前边m_Com中的目标压缩器句柄以及bmpinfo_input中的BITMAPINFOHEADER结构体变量,调用ICCompressGetFormat函数返回一个目标视频压缩数据的格式信息,这里以类型为BITMAPINFO的结构体变量m_OutInfo存储。正确完成前边的设置操作后,则执行下面的函数完成压缩数据所需的初始化操作,ICCompressBegin(m_Com.hic,(BITMAPINFO*)&bmpinfo_input,(BIT

6、MAPINFO*)m_OutInfo);最后我们再调用如下函数完成一帧视频数据的压缩操作,ICCompress(m_Com.hic,0,&m_OutInfo-bmiHeader,compress_data,& bmpinfo_input.bmiHeader, origin_image,& dwCkID, dwCompFlags,0,0,100,NULL,NULL);其中,compress_data为压缩后的当前帧数据,其应在使用ICCompress前执行如下函数申请内存空间:BYTE *compress_data = (BYTE *) new BYTE; 而origin

7、_image为未压缩的当前帧数据,其应使用下面的语句获取,且每执行ICCompress函数压缩完一帧数据后,应该改变AVIStreamGetFrame函数中lPos的值,以实现对下一帧数据进行压缩,origin_image = (BYTE *)AVIStreamGetFrame(pgf, lPos);origin_image= origin_image+sizeof(BITMAPINFOHEADER);为了将每次压缩完的视频数据重新再写入到AVI文件中,我们每执行完一次ICCompress函数后,应该及时利用函数AVIStreamSetFormat和AVIStreamWrite完成当前帧数据的

8、写入。如此反复不断进行,直到完成最后一帧数据的压缩,同时新的AVI压缩视频文件也完成了写入。受篇幅所限,关于创建AVI文件并写入视频流的具体操作不再讨论,可以查询MSDN获取相关帮助信息。4. 实验与结果分析为了验证本文方法的有效性,笔者进行了两组实验对实际效果加以验证。每组实验均采用由Microsoft Visual C+ 6.0编译环境生成的试验程序对AVI视频素材进行分析处理。该程序基于本文所述的VFW技术方法,可播放压缩或非压缩的AVI视频素材,并可对非压缩的AVI视频数据进行压缩处理。第一组:本组实验主要用于验证对AVI视频文件的读取效果。为此我们准备了采用三种不同的AVI视频编码压

9、制的数据文件,验证本试验程序能够正常读取其中的视频流数据。效果如下图 1,2,3所示:图1 Intel IYUV编码方式的AVI图2 XVID 编码方式的AVI图3 RGB 24位无压缩的AVI透过上述图片数据,我们看到该试验程序可以顺利读取采用不同压缩方式的AVI视频文件,并顺利播放出来,且理论上来说只要在系统中正确安装并注册了相关的AVI解码器,那么都可以被试验程序正常播放。第二组:本组实验主要用于验证对非压缩AVI视频文件的压缩效果,为此我们准备了一段RGB24位非压缩的AVI视频文件,并使用本试验程序调用XVID编码器对其内部视频流数据进行压制,效果如下图4,5,6,7所示:图4 待被

10、压缩的原始AVI视频图5 选择XVID编码器图6 压制过程图7生成的XVID编码的压缩AVI由上述图片数据可以证明该试验程序能够顺利调用系统中的一种编码器,对未压缩的AVI视频文件进行压制,较好地取得了预期效果。 5. 结论经过上面两组实验的图像数据分析,可以证明本文介绍的基于VFW的AVI视频文件压缩与解压缩方法的可行性,为实现AVI数据文件的压缩存储与其能在网络中进行高效传输提供了一定帮助。参考文献:【1】 聂栋栋. 基于网络实现AVI视频流的实时操作 .电脑与信息技术,2002,(1).【2】 徐从东,罗家融,王树坤. 基于VFW的视频图像叠加与播放方法. 计算机工程与设计,2007,28(1)【3】孙涛. 谈谈视频压缩管理器1(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论