VFW是Video For Windows的缩写,使用VFW可以快速开发Windows视频采集软件。VFW开发的资源可以参考MSDN中的Video Capture一节的内容,当然也可以参考网上一些翻译的不错的译文。

VFW为开发人员提供了很多的接口,开发人员可以使用这些接口在视频采集过程中抓取图片、在采集窗口中预览采集的视频、设置采集参数及显示视频源、视频格式、压缩格式的设置对话框。

开发VFW应用程序,首先要在头文件中包含Vfw.h头文件,编译时还要连接Vfw32.lib。

开发VFW视频采集软件,一般的开发步骤如下:

  • 创建视频采集窗口
  • 关联采集窗口与采集驱动程序
  • 设置采集参数
  • 响应用户的操作,开始/结束视频采集

创建视频窗口

      视频窗口与视频采集的驱动程序关联,它接收各种视频采集相关的消息,并根据这些消息控制视频采集设备的各种操作。后续的所有视频采集消息全部发送给视频采集窗口。要创建视频采集窗口可以通过调用capCreateCaptureWindow函数实现。

我们可以通过在MFC的View类中增加一个窗口句柄成员变量来保存capCreateCaptureWindow函数返回的采集窗口句柄,然后在View类的OnCreate函数中添加以下语句。

m_caphwnd = capCreateCaptureWindow(_T("My Capture Window"),WS_CHILD | WS_VISIBLE,0,0,500,600,this->GetSafeHwnd(),1);

连接采集驱动

      创建采集窗口后,需要将采集窗口与采集驱动程序关联起来。

为了验证当前PC机上是否安装的视频采集设备,可以在关联驱动程序之前调用capGetDriverDescription函数枚举一下系统中的采集驱动,参考代码如下:

int i = 0;
 wchar_t sdriver[50];//驱动信息
 wchar_t sver[50];//版本信息

CString m_driverInfo("");
 for ( i = 0; i < 10; i++ ) {
  if ( capGetDriverDescription(i,sdriver,50,sver,50) ) {
   m_driverInfo += sdriver;
   m_driverInfo += "/n";
   m_driverInfo += sver;
   m_driverInfo += "/n";
   memset(sdriver,0,50 * sizeof(wchar_t));
   memset(sver,0,50 * sizeof(wchar_t));
  }
 }
 if ( !m_driverInfo.IsEmpty() ) {

//显示驱动程序信息
  AfxMessageBox(m_driverInfo);
 } else {
  AfxMessageBox(_T("No Capture!"));
 }
      确认当前系统中安装有采集设备后,可以使用capDriverConnect宏向视频采集窗口发送连接采集驱动的消息,参考代码如下:

//关联第一个驱动

capDriverConnect(m_caphwnd,0);

设置采集参数

      在视频采集之前,可以通过capCaptureGetSetup宏取得视频采集参数,然后通过capCaptureSetSetup宏将新设定的采集参数传递到采集窗口,由采集窗口控制采集驱动程序。参考代码如下:

CAPTUREPARMS s;
 capCaptureGetSetup(m_caphwnd,&s,sizeof(CAPTUREPARMS));//取得采集参数
 s.dwRequestMicroSecPerFrame = 33333;//采集一帧花费1/30秒
 s.fAbortLeftMouse = FALSE;//压下鼠标左键不终止采集
 s.fAbortRightMouse = FALSE;//压下鼠标右键不终止采集
 s.fCaptureAudio = TRUE;//c采集音频
 s.fYield = TRUE;//使用一个独立的线程来采集视频,不使用View窗口线程
 capCaptureSetSetup(m_caphwnd,&s,sizeof(CAPTUREPARMS));//设定采集参数

还可以通过capGetVideoFormat宏取得视频格式,然后通过capSetVideoFormat设定视频格式。参考代码如下:

LPBITMAPINFO bitmapinfo;
 DWORD bit_info_size = 0;
 //取得视频格式信息的大小
 bit_info_size = capGetVideoFormatSize(m_caphwnd);
 bitmapinfo = (LPBITMAPINFO)GlobalAlloc(GHND,bit_info_size);
 //取得视频格式信息
 capGetVideoFormat(m_caphwnd,bitmapinfo,bit_info_size);
 //设置视频格式信息
 bitmapinfo->bmiHeader.biCompression = BI_RLE4;//设置压缩格式为JPEG
 bitmapinfo->bmiHeader.biWidth = 640;//设置解压缩后的水平像素为640
 bitmapinfo->bmiHeader.biHeight = 480;//设置解压缩后的垂直像素为480

//设置视频格式
 capSetVideoFormat(m_caphwnd,bitmapinfo,bit_info_size);

注意,如果驱动程序不支持以上参数,以上设定是无效的,驱动程序还是使用默认的设置参数。

开始/结束视频采集

      我们可以在菜单中添加一个视频采集开始的菜单项,在此菜单项的响应函数中使用capCaptureSequence宏开始视频采集。

capCaptureSequence(m_caphwnd);

同样,我们也可以添加视频结束的菜单项,在此菜单项的响应函数中使用capCaptureStop宏终止采集操作,然后使用capFileSaveAs宏将采集的视频保存到指定的文件中,如果不指定文件,默认保存到C盘CAPTURE.AVI文件中。

capCaptureStop(m_caphwnd);
 capFileSaveAs(m_caphwnd,_T("cap.avi"));

我们也可以在采集窗口中预览采集的视频,预览终止后,视频并不保存到文件中。预览的参考代码如下:

//开始预览

capPreview(m_caphwnd,TRUE);

//结束预览

capPreview(m_caphwnd,FALSE);

图片抓取

      我们可以使用capGrabFrameNoStop宏抓取图片,然后使用capFileSaveDIB宏将采集的图片保存为DIB文件,因为DIB文件的大小比JPEG或PNG文件大很多,我们可以使用CImage类将DIB文件转换成JPEG文件或PNG文件。参考代码如下:

CFileDialog fileopen(FALSE,_T("DIB"),NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,_T("*.dib|*.dib|*.jpeg|*.jpeg|*.PNG|*.png|"));
 if ( IDOK == fileopen.DoModal() ) {
  CString path("");
  CString ext("");
  path = fileopen.GetPathName();
  ext = fileopen.GetFileExt();
  capGrabFrameNoStop(m_caphwnd);

capFileSaveDIB(m_caphwnd,path.GetString());

if ( ext != CString("DIB") && ext != CString("dib") ) {  
   CImage myImage;
   myImage.Load(path.GetString());
   myImage.Save(path.GetString());
  }
 }

显示视频源对话框

可以使用capDlgVideoSource宏显示视频源对话框。视频源对话框可以设置视频源设备的一些设置,视频源对话框一般是下面的样子,但设备不同,对话框显示的内容肯能会有所不同。显示视频源对话框的参考代码如下:

capDlgVideoSource(m_caphwnd);

显示视频格式对话框

      可以使用capDlgVideoFormat宏显示视频格式设定对话框。这个对话框可以设定采集视频的格式。参考代码如下:

capDlgVideoFormat(m_caphwnd);

显示压缩设定窗口

      可以通过capDlgVideoCompression宏显示压缩设定窗口。通过这个窗口可以设定视频的压缩格式。参考代码如下:

capDlgVideoCompression(m_caphwnd);

代码请参考:svn://www.svnhost.cn/VC_Project

使用VFW开发视频采集软件相关推荐

  1. 开发视频直播软件需要注重哪些功能?

    视频直播给人们的日常生活带来了极大的改变,因此,开发一款视频直播类APP软件,设计的基础是用户的需求,前沿市场信息等.那么,开发视频直播软件需要注重哪些功能呢?下面就跟着摩杜云小杜一起来看看吧! 开发 ...

  2. linux视频采集软件,嵌入式LINUX环境下视频采集

    Video for Linux two(Video4Linux2)简称V4L2,是V4L的改进版.V4L2是linux操作系统下用于采集图片.视频和音频数据的API接口,配合适当的视频采集设备和相应的 ...

  3. B站视频采集软件(哔哩哔哩)

    B站视频采集软件(哔哩哔哩),可以按照关键词.分类和作者主页批量采集,详细功能见软件截图:

  4. 用Delphi开发视频聊天软件

    一.引言 我们知道视频聊天软件的关键技术在于采集视频,并实时传输给聊天软件在线的人.对于视频的采集,这里采用微软公司的关于数字视频的一个软件包VFW(Video for Windows).相信很多人对 ...

  5. VFW开发视频应用程序

    当前,在Windows 平台下开发视频应用程序一般采用两种方式:一种是基于视频采集卡所附带的二次软件开发包SDK(Software development kit)进行.这种方式的优点是应用方便,容易 ...

  6. linux 视频采集软件,视频采集、截图多媒体处理工具FFmpeg

    多媒体处理工具 FFmpeg 多媒体视频处理工具fmpeg有非常强大的功能包括视频采集功能.视频格式转换.视频抓图.给视频加水引等FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的 ...

  7. iOS音视频开发——视频采集

    1.认识 AVCapture 系列 AVCapture 系列是 AVFoundation 框架为我们提供的用于管理输入设备.采集.输出.预览等一系列接口,其工作原理如下: \1. AVCaptureD ...

  8. linux视频采集软件,基于Video4Linux的视频图像采集实现 - 看看网

    一.Video4Linux简介 Video4Linux是Linux内核里支持影像设备的一组APIs,配合适当的视频采集设备和相应的驱动程序,可以实现影像采集.AM/FM广播.频道切换等功能,在远程会议 ...

  9. 边缘风行视频采集软件V1.0

    风行视频上的视频清晰度高,且没有水印,网上还未见有风行视频的采集共计,所以无论往任何平台搬运,都是视频来源的首选渠道.

最新文章

  1. python保存图片到指定路径_python将处理好的图像保存到指定目录下的方法
  2. shell处理curl返回数据_shell神器curl用法笔记
  3. optee中core_init_mmu_regs函数解读
  4. 专栏 | 基于 Jupyter 的特征工程手册:特征选择(一)
  5. [蓝桥杯][历届试题]网络寻路-dfs,图的遍历
  6. SharePoint 2010 RBS 安装和配置遇到的一个问题
  7. linux常用命令技巧--更新中
  8. lvs mysql 端口_LVS配置及多端口服务配置
  9. 兆观毫米波监护仪亮相CMEF 开创养老监护新时代
  10. Spring Boot+HATEOAS快速介绍与示例
  11. 最全面的AndroidStudio配置指南总结-包括护眼模式
  12. python—pickle模块的dump与load函数
  13. Rsync+inotify   组合使用同步方案
  14. A simple BBS demo including(CRUD) - 1
  15. J2EE 第二阶段项目之JUnit4进行单元测试(五)
  16. 人工智能会取代程序员吗?
  17. SAP中英文转换--中文转英文
  18. 电影在计算机中用什么形式保存,教你如何将 DVD 电影永久保存到电脑里
  19. CAD软件中怎么合并表格?CAD表格合并技巧
  20. 基于ES7243E ADC芯片I2S接口在BES平台上LINE-IN驱动开发

热门文章

  1. 各种测试的定义、负载测试和压力测试的区别
  2. 一位大四学弟来找我帮忙
  3. java操作RabbitMQ添加队列、消费队列和三个交换机
  4. 第二行代码第三章笔记
  5. 《网络营销实战密码》推荐
  6. 汇编语言复习题及详细答案1(老师给的题 自己写的答案)
  7. 佳能邮箱服务器,如何指定发送设置(电子邮件/ 文件服务器) (MF4680)
  8. java计算机毕业设计幼儿早教系统软件设计与实现(附源码、数据库)
  9. 移动支付开发:小程序微信支付开发测试
  10. 利用Python调用Windows API,实现任务管理器功能