编辑: GXB156399820 | 2019-04-23 |
2)设置视频捕获速率;
3)设置视频源,视频格式以及是否采用视频压 缩,同时设置视频采集的显示模式为Oveday或为 Preview;
4)实时获取每一帧视频数据,将视频流和音频 流捕获并保存到一个AVI文件中;
5)捕获某一帧数字视频数据,并能将捕获的内 容拷贝到另一文件,同时创建并载入RGB格式下的 调色板;
6)将图像和相关调色板复制到制定捕获数据 的文件中,并能将捕获的内容拷贝到另一文件. 1.2实时视频采集的基本流程 创建捕获窗口 注册回调函数设置窗口参数 与视频采集设备连接 捕捉图像到缓存进行处理 视频捕捉设备管理 图1实时视频采集的一般流程 2利用AVICap实现视频数据采集的 方法 为了实现对实时视频流的数据进行采集和处 理,针对实时采集的一般流程对几个重要的宏和函 数加以介绍,其他的宏和函数以及更加详细的信息 请参阅MSDN多媒体SDK相关文档. 2.1创建采集窗口 采集窗口是整个AVICap的核心,基于窗口一 消息模式正是AVICap技术运作的基本模式,通过 capCreateCaptureWindow()创建窗口并获得采集句 柄,并将采集窗口模式设置为非可见模式. 2.2连接采集窗口到指定的采集设备 利用capGetDriverDescfiption函数获得系统中 采集设备等相关信息,用capDriverConnect(in―cap― wnd,index)宏,将采集设备和窗口连接起来.设备 资源用capDfiverDisconnect(m―capwnd)进行管理. 2.3设置采集窗口相关属性 首先使用capsCaptureGetSetup宏获得采集设备 的参数,得到CAPTUREPARAMS结构. 1)设置采集参数.针对处理视频数据的需要, 设置fYield域值. 2)设置结束采集的方式.通过修改CAP- TUI砸PAHAMS结构中的vKeyAbort、fAbortLetMouse和fAbortRightMouse3个变量来定义结束采集的方式. 3)采集时间控制:修改CAPTUREPARAMS结构中 的fLimitEnable和wTimeLimit可以控制采集时间. 2.4设置视频数据格式 对于采集的视频数据,需要设置其采集图像的 高度与宽度信息,通过调用capGetVideoFormat()获得BITMAPINFO结构体,设置结构体变量,调用cap- SetVideoFormat设置新的数据. 2.5登记回调函数 AVICap窗口类提供了其中回调函数,针对实时 采集需要,采用了capSetCallbackOnVideoStream回 调函数,对AVICap采集缓冲区中的视频数据处理. 2.6数据的采集与显示 首先用capFile和capFileAlloc宏设置数据文件 和申请保存空间的大小;
对视频数据的采集与保存 需要调用capCaptureSequenceNoFile宏和capCaptur- eSequence宏. 当采用宏capSetCallbackOnVideoStream和cap― CaptureSequenceNoFile进行视频采集的同时,对数 据进行压缩编码,经过网络传输,通过DrawDib函数 解码,用DrawDibBegin函数将一帧视频数据显示到 视频窗口,用DrawDibClose()函数释放资源.
3 VC++例程 先把与AVICap的相关API调用封装在一个 VideoCapture类内,VideoCapture中重要的接目如表 1所示. 表1 VldeoCapture类 方法 功能 BOOL Initialize() 初始化相关设置,获得设备参数,连 接捕获设备,注册回调函数,设置捕 获参数. BOOL StartCaptum()开始捕获视频数据. BOOL StopCapture()停止捕获视频数据. void DesⅡoy() 清理捕获占用的相关资源. 利用表1设计的VideoCapture类在VC++ NET内建立一个实例,过程如下: 万方数据 第8期 李江华,等:基于vFw实时视频捕获原理与实现 1)建立一基于MFC应用程序工程MyVideoCa. pture,加入前面VideoCapture中的2个文件(Video. Capture.h与VideoCapture.cpp)到工程内. 2)对话框设计窗体必须放置如下3个控件:1 个Picture控件,用来显示捕获到的视频;