使用VFW开发视频采集软件
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开发视频采集软件相关推荐
- 开发视频直播软件需要注重哪些功能?
视频直播给人们的日常生活带来了极大的改变,因此,开发一款视频直播类APP软件,设计的基础是用户的需求,前沿市场信息等.那么,开发视频直播软件需要注重哪些功能呢?下面就跟着摩杜云小杜一起来看看吧! 开发 ...
- linux视频采集软件,嵌入式LINUX环境下视频采集
Video for Linux two(Video4Linux2)简称V4L2,是V4L的改进版.V4L2是linux操作系统下用于采集图片.视频和音频数据的API接口,配合适当的视频采集设备和相应的 ...
- B站视频采集软件(哔哩哔哩)
B站视频采集软件(哔哩哔哩),可以按照关键词.分类和作者主页批量采集,详细功能见软件截图:
- 用Delphi开发视频聊天软件
一.引言 我们知道视频聊天软件的关键技术在于采集视频,并实时传输给聊天软件在线的人.对于视频的采集,这里采用微软公司的关于数字视频的一个软件包VFW(Video for Windows).相信很多人对 ...
- VFW开发视频应用程序
当前,在Windows 平台下开发视频应用程序一般采用两种方式:一种是基于视频采集卡所附带的二次软件开发包SDK(Software development kit)进行.这种方式的优点是应用方便,容易 ...
- linux 视频采集软件,视频采集、截图多媒体处理工具FFmpeg
多媒体处理工具 FFmpeg 多媒体视频处理工具fmpeg有非常强大的功能包括视频采集功能.视频格式转换.视频抓图.给视频加水引等FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的 ...
- iOS音视频开发——视频采集
1.认识 AVCapture 系列 AVCapture 系列是 AVFoundation 框架为我们提供的用于管理输入设备.采集.输出.预览等一系列接口,其工作原理如下: \1. AVCaptureD ...
- linux视频采集软件,基于Video4Linux的视频图像采集实现 - 看看网
一.Video4Linux简介 Video4Linux是Linux内核里支持影像设备的一组APIs,配合适当的视频采集设备和相应的驱动程序,可以实现影像采集.AM/FM广播.频道切换等功能,在远程会议 ...
- 边缘风行视频采集软件V1.0
风行视频上的视频清晰度高,且没有水印,网上还未见有风行视频的采集共计,所以无论往任何平台搬运,都是视频来源的首选渠道.
最新文章
- python保存图片到指定路径_python将处理好的图像保存到指定目录下的方法
- shell处理curl返回数据_shell神器curl用法笔记
- optee中core_init_mmu_regs函数解读
- 专栏 | 基于 Jupyter 的特征工程手册:特征选择(一)
- [蓝桥杯][历届试题]网络寻路-dfs,图的遍历
- SharePoint 2010 RBS 安装和配置遇到的一个问题
- linux常用命令技巧--更新中
- lvs mysql 端口_LVS配置及多端口服务配置
- 兆观毫米波监护仪亮相CMEF 开创养老监护新时代
- Spring Boot+HATEOAS快速介绍与示例
- 最全面的AndroidStudio配置指南总结-包括护眼模式
- python—pickle模块的dump与load函数
- Rsync+inotify 组合使用同步方案
- A simple BBS demo including(CRUD) - 1
- J2EE 第二阶段项目之JUnit4进行单元测试(五)
- 人工智能会取代程序员吗?
- SAP中英文转换--中文转英文
- 电影在计算机中用什么形式保存,教你如何将 DVD 电影永久保存到电脑里
- CAD软件中怎么合并表格?CAD表格合并技巧
- 基于ES7243E ADC芯片I2S接口在BES平台上LINE-IN驱动开发