刘广文 李相伟 陈广秋
(1、长春理工大学,吉林 长春 130022 2、空军航空大学,吉林 长春 130022)
以多媒体为代表的信息技术和信息产业的发展和应用对人类社会产生的影响和作用越来越显著,但是多媒体信息带来了“信息爆炸”,无疑给存储器的存储容量、通信干线的信道传输率以及计算机的速度都增加了极大的压力。数据压缩技术是个行之有效的方法,通过数据压缩手段把信息数据量压下来,以压缩形式存储和传输,既紧缩节约了存储空间,又提高了通信千线的传输效率,同时也使计算机实时处理音频、视频信息,以保证播放出高质量的视频、音频节目成为可能。VFW(Video for Windows)是Microsoft公司推出的关于数字视频的一个软件包,它能使应用程序数字化并播放从传统模拟视频源得到的视频剪辑。VFW的一个关键思想是播放时不需要专用硬件,为了解决数字视频数据量大的问题,需要对数据进行压缩。于是,它引进了AVI文件标准,该标准未规定如何对视频进行捕获、压缩及播放,仅规定视频和音频该如何存储在硬盘上,在AVI文件中交替存储视频帧和与之相匹配的音频数据,VFW给程序员提供。
VFW主要由以下6个模块组成。
(1)AVICAP.DLL:包括了执行视频捕获的函数,它给AVI文件I/O和视频、音频设备驱动程序提供了一个高级接口。
(2)MSVIDEO.DLL:用一套特殊的DrawDib函数来处理屏幕上的视频操作。
(3)MCIAVI.DRV:此驱动程序包括对VFW的MCI命令的解释器。
(4)AVIFILE.DLL:支持由标准多媒体I/O(MMIO)函数提供的更高的命令来访问.AVI文件。
(5)压缩管理器(ICM):管理用于视频压缩-解压缩的编解码器(CODEC)。
(6)音频压缩管理器ACM:提供与ICM相似的服务,不同的是它适于波形音频。
Visual C++在支持VFW方面提供有vfw32.lib、msacm32.lib、winmm.lib 等类似的库。特别是它提供了功能强大、简单易行、类似于MCIWnd的窗口类AVICap为应用程序提供了一个简单的、基于消息的接口,使之能访问视频和波形音频硬件,并能在将视频流捕获到硬盘上的过程中进行控制。而用视频捕捉设备驱动程序才能真正控制视频流的大小。捕捉设备驱动程序和相应的底层硬件决定了视频捕捉的方方面面,包括可接受的视频源、显示方式、格式以及压缩方式。一个音频驱动程序会指定被捕捉到的音频数据的存储格式和压缩方式。
可以用WM-CAP-DRIVER-GET-CAPS消息(或者capDriverGetCaps宏)来得到连接到当前捕捉窗口的硬件的性能。这个消息通过CAPDRIVERCAPS结构返回设备驱动程序和硬件的性能信息。
每个捕捉驱动器都可以提供4个对话框来控制视频的数字化和捕捉过程,为了减少视频数据的大小,它们还会定义视频的压缩属性。视频源对话框用于控制视频输入频道的选择和一些影响视频图像被数字化的帧缓冲的参数选择。这个对话框枚举连续视频源的捕捉卡的信号种类,并且控制颜色、对比度、饱和度的改变。如果视频捕捉驱动程序支持,还可以用WMCAP-DLG-VIDEOSOURCE消息(或者capDlgVideoSource宏)来更新和显示这个对话框。
一个捕捉驱动程序能提供两个方法来显示输入视频流:预览和叠加模式。如果两个方法都提供了,用户就可以从中选择一种使用了。
预览模式将数字帧从捕捉设备传到系统内存,然后用图形设备接口(GUI)函数来把这些帧显示到捕捉窗口上。当父窗口失去焦点时,应用程序会减小预览频率,而当父窗口得到焦点时,应用程序会增加预览频率。因为预览操作很比较消耗CPU资源,这一操作会减小系统的整体响应时间。
有3条消息用来控制预览操作。
(1)通过把WM-CAP-SET-PREVIEW消息(或capPreview宏)发送给捕捉窗口来使预览模式有效或者失效。
(2)通过把WM-CAP-SET-PREVIEWRA TE消息(或capPreviewRate宏)发送给捕捉窗口来设置在预览模式夏帧的显示频率。
(3)用WM-CAP-SET-ShCALE消息(或capPreviewScale宏)来使预览模式的缩放有效或者无效。
可以发送WM-CAP-GET-VIDEOFORMAT消息给捕捉窗口(或者用capGetVideoFormat和capGetVideoFormatSize宏)来得到视频格式的结构和该结构的大小。而向捕捉窗口发送WM-CAP-SET-VIDEOFORMAT消息(或者用capSetVideoFormat宏)则可以设置视频格式。
CAPTUREPARMS结构体里面包含了许多视频流捕捉的控制参数,控制视频捕捉过程中的几个方面,对它进行操作可以完成一些功能:指定帧频率;指定申请的视频缓冲区的大小;使音频捕捉有效或无效;指定捕捉间隔;指定MCI设备在捕捉过程中是否使用;指定键盘或者鼠标来控制捕捉结束;指定捕捉中的默认视频类别。
可以发送WM-CAP-GET-SEQUENCESETUP消息给捕捉窗口(或者用capCaptureGetSetup宏)来得到一个CAPTUREPARM S结构体类型的返回值,里面有当前的捕捉设备。而要设备捕捉窗口的设备,要先把设备值填充到一个CAPTUREPARMS结构体内,然后把它作为参数,用WM-CAP-GET-SEQUENCESETUP消息(或者capCaptureGetSetup宏)发送给捕捉窗口。
可以发送WM-CAP-GET-AUDIOFORMAT消息给捕捉窗口(或者用capGetAudioFormat和capGetAudioFormatSize宏)来得到音频数据的格式和该格式结构体的大小。默认的捕捉音频格式是mono、8-bitHE和11kHz PCM。当用WM-CAP-GET-AUDIOFORMAT消息得到格式时,通常会用WAVEFORMATEX结构。可以向捕捉窗口发送WM-CAP-SET-AUDIOFORMAT消息(或者用capSetAudioFormat宏)来设置音频格式。设置时要传入一个WAVEFORMAT、WAVEGORMATEX或者PCMWAV EFORMAT结构的指针,到底选用哪种结构取决于音频类型。
[1]黎洪松.数字视频技术及其应用[M].清华大学出版社,1997.
[2]精英科技编著.视频压缩与音频编码技术[M].中国电力出版社,1999.
[3]胡国荣.数字视频及其压缩标准[M].北京广播学院出版社,2000.
[4]黄卫农,赖宏彬,陈健.MPEG-4视频编码算法结构分析[J].上海交通大学信号处理研究所 电视技术[J],2000年7月总第217期.
[5]刘玮.Visual C++视频/音频开发实用工程案例精选[M].人民邮电出版社,1992.
[6]钟玉琢,王琪,贺玉文.基于对象的多媒体数据压缩编码国际标准MPEG-4及其校验模型[M].科学出版社,2000.