2024年8月21日发(作者:)
维普资讯
・
研究开发・・・・・・ 电脑知识与技术
基于VFW的视频媒体捕捉方法的实现
彭佩
(毕节学院,贵州551700)
摘要:随着多媒体信息技术的飞速发展,多方视频会议和视频捕捉等网络通讯在人们的日常工作生活中扮演着越来越重要的角色。
其中.视频捕捉是实现上述应用的基本环节。所谓视频捕捉,即指通过专用视频采集硬件设备获取视频数据,再经过相应的软件平台对数
据进行一定处理.以满足人们的特定需求。微软的vF、ⅣSDK便是实现这一基本环节中软件平台的有效工具。
关键词:V :多媒体;视频 .
中图分类号:TP31 1 文献标识码:A 文章编号:1009—3044(2oos)l7—0160-02
Use the VFW Carries on the Video Frequency Medium to Catch
PENG Pei
(Bijie Universi ̄,Guizhou 55 1700,China)
Abstract:Fly technically to develop soon along with the mulit—media information,in many ways the video frequency meeting and video
rfequency catch etc.,the network communication plays a more and more important role in people S daily pursuit life.Among them,video fre-
quency S catch is the basic link that carries out all above—mentioned application.The SO—called video frequency catch,then point to coRect the
hardware equipments to obtain the video frequency data through the appropriation video frequency,has been correspond again of hte software
platform logarithms according to carry on a certain processing to sads people S particular need.The VF SDK of the Microsoft woulds be to
carry OUt the valid tool of hte software platform in this basic link,
Key wordS:VFW;Multimedia;Video frequency
1 VFW SDK简介
能强大、简单易行的窗口类AVICap。笔者下面就以AVICap类为
在Microsoft的所有开发平台和应用软件中,自始至终贯穿着
例结合自己的开发体会.比较详细的探讨一下AVlCap类在视频
一
个重要思想,即设备无关性和开放性。VFw便是这一思想的卓
捕捉方面的应用。
然体现。
2 AVlCap窗口类编程
VFW是Video For Windows的缩写,是Microsoft推出的关于
AVlCap为应用程序提供了一个简单的、基于消息的接口,使
数字视频解决方案的一个功能比较强大的SDK包。C++的封装特 之能够访问视频和波形音频硬件,并能够在视频流捕获到硬盘上
性在VFw的编程应用中得到了充分体现。VFw的体系结构如图
的过程中进行控制。这些接口函数,是高级的,经过了优化的,我
l。
们利用它们来创建自己的应用程序具有较大的灵活性。
下面是视频捕捉以及处理过程中涉及到的几个很重要的结
构:
(1)CAPSTATUS
此结构定义了捕获窗口的当前状态,如:以象素为单位表示
图像的高、宽、预览和重叠方式的标志量,尺寸缩放的标志量等
等。
(2)CAPDRIVERCAPS
此结构定义了捕获驱动器的能力,如有无视频叠加能力,以
及能否通过用户直接操作捕获窗口而查看视频源、视频格式、视
频源、视频显示。
图1 vFW的体系结构
(3)CAPTRUEPARMS
可以看出VFW主要由上述一系列动态链接库(DIJL)和驱动 此结构包含控制视频流捕获过程的一些参数,如捕获时间限
程序模块组成。其中,AVlCap.DLL包含了执行视频捕获的函数,
制、指定键盘或者鼠标键以终止捕获、捕获帧频等。
它给AVI文件I,0和视频、音频设备驱动程序提供一个高级接
以上3个结构都专门有对应的函数来设置和获得相应结构
口;ICM管理用于视频压缩和解压缩的CODEC(编解码器);ACM
所包含的相应信息。
提供的服务与ICM的比较类似,不过它的适用对象是波形音频;
(4)VIDEOHDR
MCIAVI.DRV为驱动程序,完成对VFw中MCI命令的解释; 此结构用于定义视频数据块的头信息。其数据成员lp Data
MSVIDEO.DLL用一套DrawDib函数来处理监控屏幕上的视频操 表示指向数据缓存的指针,dwBufferLength表示数据缓存的大小。
作。
这两个数据成员,我们在编写回调函数时经常用到。
通过以上几个模块的相互协调合作,可以比较方便和灵活的
3具体实现过程
完成对视频流的捕获、操作和管理。特别是avieap.dll中提供了功
3.1捕捉的初始化
收稿日期:2006-04-03
作者简介:彭佩(1976-),女,贵州人,研究方向:计算机多媒体技术。
160 ¨螂 术
维普资讯
电脑知识与技术
由于我们使用的是VFW接口,所以。第一步应该注意检测视
频卡驱动程序是否支持VFⅣ接口。笔者使用的是天敏的SDK
2000.若驱动程序支持VFⅣ接口.我们可以建立一个视频采集窗
口.在后续发送消息或者使用宏的过程中都要使用到该窗口。用
来接收视频捕捉驱动程序发来的消息和数据,从而才能进一步发
生动作。
建立视频采集窗口的主要函数为capCreateCaptureWindow0。
例程如下:
RECIT rc:
GetWindowRect(hParentWnd,&rc1:
hWndCap=capCreateCaptureWindow((LPSTR)“My Capture
Window”,
//Windows name
£ ISIBLEIWS—CHILD
//Style of windows
O,0,160,120,
//Coordinate and width&height of iwndows
(HWND)hwndParent,
//Handle of parent window
(int ̄
//Child window ID
);
成功则返回视频捕捉窗口的句柄。视频捕捉窗口hWndCap
与其父窗口hwndParent有着相同的坐标原点。
视频采集窗口建立后,再将其与视频设备驱动程序相连。程
序如下所示:
BOK=capDriverconnect(hWndCap,nlndex);
3.2捕捉参数的设置
一
般视频驱动程序允许设置的参数包括视频显示刷新率、视
频格式、视频源选择等。这些设置对应于大多数视频驱动可以提
供的四个对话框。而这些对话框都定义在视频捕捉驱动中。
对于Video Display对话框.如果系统捕捉设备支持overlay
模式,我们可以发送WM—CAP_DLG_VIDEODISPLAY来使用。另
外三个对话框,Video Source用于控制选择视频来源,Video Com.
pression用于控制压缩品质.Video Format用于定义视频帧的精度
以及深度。
如果卡支持以上三个对话框的话.我们可以分别使用capD1.
gVideoSource。capDlgVideoCompression和capDlgVideoForma宏来
启用。
此外,通过使用宏capCaptureGetSetup.我们可以得到当前进
行捕捉的参数设置或者默认的参数设置。该宏返回一个CAP-
FUREPARMS结构。
我们可以通过设置或者改变此结构中的相应成员变量来达
到设置某些捕捉性能参数的目的。例如:
(1)捕捉时间:
成员fLimitEnabled指示是否有时间限度,wTimeLimit指示是
否有最大时间限制.单位为秒;
(21捕捉速度:
即当前捕捉任务每秒钟捕捉的帧数.保存在成员变量dwRe.
questMicroSecPerFrame中。
在我们设置或者改变好以上参数之后.只需使用capCapture.
SetSetup(HWND hWnd,APTUREPARMS S,int wSize)宏,即发送
WM—CAP
_
SET_SEQUENCE—SETUP消息,即可以更新这些捕捉参
数,从而达到我们的目的(其中hWnd为设置窗口的句柄。S指向
・・・・・・研究开发・
一
个用于存储返回值的CAPDRIVERCAPS结构的指针.wSize为
CAPDRIVERCAPS结构的大小)。
3-3回调函数的设置
vFⅣ通过为捕捉窗口登记回调函数来通知程序视频事件的
发生。例如捕捉出错的消息,捕捉一副图象成功的消息。或者采集
窗口状态发生改变时等。通过回调函数,我们可以歌得捕获到的
图象的原始数据,进而可以对这些原始数据进行处理以满足我们
特定的应用要求。
AVICap利用capSetCallbackOnVideoStream0消息宏函数设置
流回调函数.利用capSetCallbackOnFrame0宏函数来设置帧回调
函数.利用capSetCallbackOnError0消息宏函数设置出错回调函
数。这些回调函数在采集卡的驱动程序向Windows发出中断的消
息时由Windows操作系统来响应.即此时由操作系统本身调用这
些回调函数。
上述设置的流回调函数,通常当视频缓冲区满时被调用。帧
回调函数,当每采集完一帧数据时被调用,通过调用我们可以获
得图像显示之前的原始数据,从而对它进行处理。
回调函数及时地反映了诸如帧图像的捕获完成、采集卡的状
态改变、捕获后台线程让出CPU控制权等重要信息.在应用程序
中有着很重要的应用。
3.4设置捕获窗口的显示模式
AVICap类在实现视频显示时.捕捉驱动程序可以以预览和
重叠两种方式来实现实时视频流的显示。
(11预览方式(Preview)
预览方式将数字化的帧从捕捉硬件系统传到系统内存。然后
用GDI(graphics device interface)函数在捕捉窗口中显示。当父窗
口失去焦点时,预览速度将变慢。由于该方式使用的是CPU资源,
故可以提高系统的一般性能。但需要占用较大量的CPU时间。
(21重叠方式(Overlay)
该模式的视频显示.相对于预览方式来说有比较好的连贯
性。可以通过使用capOveday宏,即发送WM
—
CAP
_
SET_OVER.
LAY消息.来允许或者禁止该方式。这种方式没有占用CPU资
源.视频卡将VGA的输出信号与它本身的输出信号先进行叠加
合并,之后再通过缓冲区在监视器上显示。
3.5结束捕捉
结束捕捉时应该做一些清除工作。比如已分配的内存的释
放.断开视频捕捉驱动程序与捕捉窗口之间的连接.销毁捕捉窗
口对象等。
4结束语
AVICap窗口类为捕获数字视频流及其相关操作和处理提供
了很大的方便。基于此思想开发出来的视频捕捉应用程序.界面
形象直观,性能稳定,并且有着较好的灵活性和可扩展性。整个视
频采集的主要步骤可以总结如下:创建捕获窗口;采集设备并获
取其状态信息;设置窗口相关参数;设置窗口显示模式;捕获图像
到文件或者缓存备用;终止捕捉并断开与设备的连接。
参考文献:
【1]David J.Kruglinski(美).Visual C++技术内幕【M】.北京:清华
大学出版社.2002.
【2】官章全,韩云君等.Visual C++高级编程范例【M】.北京:电子
工业出版社.2001.
【3]Jeff Prosise(美).MFC Windows程序设计【M】.北京:清华大学
出版社.2002.
16l
发布评论