DirectShow采集视频图像,开发环境的搭建,amcap编译运行

DirectShow采集视频图像,开发环境的搭建,amcap编译运行

实验室要采集USB摄像头数据并显示,下面介绍这两天学习的两种方法。

  • 使用VFW(video 4 windows)类库采集视频
    VFW采集视频数据很简单,有大量的API接口调用即可,在实际操作过程中,发现VFW对Win7/Win8支持相当差,接几个USB摄像头后,capDriverConnect()连接失败,虽然网上给了一些解决方法,但都不靠谱,微软论坛找了半天,也没发现根源,故放弃使用此方法。

  • 使用DirectShow组件来采集视频
    DirectShow是微软开发的的组件,之前和DirectX集成在一起,后来从DirectX中移除,包含Microsoft Windows SDK中,从官网上找了很多资料,下载了半天,也没找到DirectShow,后来干脆从网上下了一个DirectShow压缩包来用。下面具体记录一下怎样编译运行DirectShow中的例子amcap。

    1. 先解压DirectShow SDK到任意目录,此SDK中包含了示例Amcap源码,但并未完全包含我们所需要的库,还需编译BaseClasses工程,才能生成我们需要的基本库baseclasses。
    2. 在VS2013中导入并编译 DirectShow SDK 安装路径下\ Samples\C++\DirectShow\BaseClasses 工程,可以编译为debug版本,也可以编译release 版本。编译成功后在\Samples\C++\DirectShow\BaceClasses\Debug_Unicode\目录下将产
      生相应的库。
    3. 在VS2013中导入Amcap源码,右键点击工程选择 “属性–>配置属性–>VC++目录”
      中进行操作:
      *在包含目录中添加
      DirectShow\Include;
      DirectShow\Samples\C++\DirectShow\BaseClasses;
      *在库目录中添加
      DirectShow\Lib;
      DirectShow\Samples\C++\DirectShow\BaseClasses\Debug_Unicode;
      在“配置属性–>链接器目录”中进行操作:
      *在附加库目录中添加
      DirectShow\Samples\C++\DirectShow\BaseClasses\Debug_Unicode;
      DirectShow\Lib;
      点击工程“右键–>清理–>生成”,将生成exe可执行文件,即可调试。
  • 在实际的操作过程中可能会遇到一些错误:

  • C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\include\atlcore.h(35): fatal error C1189: #error : This file requires _WIN32_WINNT to be #defined at least to 0x0403. Value 0x0501 or higher is recommended.
    ->网上有很多解决方法,修改stdafx.h等,试了一下不行。最后的解决方案是修改预编译处理。鼠标右键项目属性->配置属性->C/C++->预处理器-> 原本是:

_WINDOWS
WINVER=0x0400
DEBUG
WIN32
_DEBUG
_WIN32_WINNT=0x0400

修改为:

_WINDOWS
WINVER=0x0501
DEBUG
WIN32
_DEBUG
_WIN32_WINNT=0x0501

确定,重新编译。

  • LINK : fatal error LNK1104: 无法打开文件“atlsd.lib”
    ->使用VS2013及以上版本会出现此现象,原因是atlsd.lib这个库文件已经移除了,因为我电脑上同时装了VS2012,看里面有这个库文件,所以将VS2013里面的工具集改为VS2012。项目属性->配置属性->常规->平台工具集->visual studio 2012 重新编译OK。

  • strmbasd.lib(dllentry.obj) : error LNK2001: unresolved external symbol “class CFactoryTemplate * g_Templates” (?g_Templates@@3PAVCFactoryTemplate@@A)strmbasd.lib(dllsetup.obj) : error LNK2001: unresolved external symbol “int g_cTemplates” (?g_cTemplates@@3HA)
    ->打开BaseClasses工程,增加”FILTER_DLL” 定义 ,项目属性->配置属性->C/C++->预处理器->预处理器定义 -> FILTER_DLL 。然后再修改BaseClasses项目代码,sysclock.cpp做如下修改:

CFactoryTemplate g_Templates[1] = {
    //{&CLSID_SystemClock, CSystemClock::CreateInstance}
    { L"SystemClock", &CLSID_SystemClock, CSystemClock::CreateInstance}
};

重新编译BaseClasses项目,产生新的strmbasd.lib文件,要看好amcap项目lib目录,需要修改amcap项目lib目录里的strmbasd.lib,之后重新编译amcap项目。

我在实验过程中仅遇到这3个问题,解决后amcap跑起来了,后面进行amcap代码学习阶段。

AMCap源码:http://download.csdn.net/detail/buynow123/9289189

amcap源代码,visual studio 亲测通过,打开摄像头设备。 // File: AMCap.h // // Desc: DirectShow sample code - audio/video capture. // // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ // Macros #define SAFE_RELEASE(x) { if (x) x->Release(); x = NULL; } // device notification definitions #if (WINVER < 0x0500) #define DBT_DEVTYP_DEVICEINTERFACE 0x00000005 // device interface class #define DEVICE_NOTIFY_WINDOW_HANDLE 0x00000000 typedef PVOID HDEVNOTIFY; #endif extern "C" { typedef BOOL (/* WINUSERAPI */ WINAPI *PUnregisterDeviceNotification)( IN HDEVNOTIFY Handle ); typedef HDEVNOTIFY (/* WINUSERAPI */ WINAPI *PRegisterDeviceNotificationA)( IN HANDLE hRecipient, IN LPVOID NotificationFilter, IN DWORD Flags ); typedef HDEVNOTIFY (/* WINUSERAPI */ WINAPI *PRegisterDeviceNotificationW)( IN HANDLE hRecipient, IN LPVOID NotificationFilter, IN DWORD Flags ); } #ifdef UNICODE #define PRegisterDeviceNotification PRegisterDeviceNotificationW #else #define PRegisterDeviceNotification PRegisterDeviceNotificationA #endif // !UNICODE #if (WINVER < 0x0500) typedef struct _DEV_BROADCAST_DEVICEINTERFACE_A { DWORD dbcc_size; DWORD dbcc_devicetype; DWORD dbcc_reserved; GUID dbcc_classguid; char dbcc_name[1]; } DEV_BROADCAST_DEVICEINTERFACE_A, *PDEV_BROADCAST_DEVICEINTERFACE_A; typedef struct _DEV_BROADCAST_DEVICEINTERFACE_W { DWORD dbcc_size; DWORD dbcc_devicetype; DWORD dbcc_reserved; GUID dbcc_classguid; wchar_t dbcc_name[1]; } DEV_BROADCAST_DEVICEINTERFACE_W, *PDEV_BROADCAST_DEVICEINTERFACE_W; #ifdef UNICODE typedef DEV_BROADCAST_DEVICEINTERFACE_W DEV_BROADCAST_DEVICEINTERFACE; typedef PDEV_BROADCAST_DEVICEINTERFACE_W PDEV_BROADCAST_DEVICEINTERFACE; #else typedef DEV_BROADCAST_DEVICEINTERFACE_A DEV_BROADCAST_DEVICEINTERFACE; typedef PDEV_BROADCAST_DEVICEINTERFACE_A PDEV_BROADCAST_DEVICEINTERFACE; #endif // UNICODE #endif // WINVER
### 回答1: AMCap是一款非常简单易用的视频捕获工具,可以实现电脑摄像头的采集视频和音频,并且支持录制视频、拍照、显示摄像头实时画面等功能。AMCap v3.0.9源码是AMCap软件的源代码,可以帮助开发者更好地了解和深入研究AMCap的工作原理和代码实现。 AMCap v3.0.9源码主要由C++语言编写,包含了多个代码文件和头文件,其中包括了许多重要的类和函数。这些类和函数包括了视频捕获、图像处理、音频采集、编解码、显示和保存等方面的内容。通过对AMCap v3.0.9源码进行深入学习和研究,不仅可以熟悉相关的编程技术和算法,还可以拓展自己的知识面和解决实际问题的能力。 同时,AMCap v3.0.9源码也可以为开发者提供参考和借鉴的作用。通过阅读源码,开发者可以学习到一些好的编程习惯、经验和技巧,从而更好地提高自己的编程能力和编程水平。此外,开发者还可以根据自己的需求对AMCap v3.0.9进行二次开发,添加自己的功能和特性,实现更好的用户体验和更高的性能。 总之,AMCap v3.0.9源码是一份非常有价值的代码资源,可以为开发者提供多方面的帮助和指导,让开发者更好地掌握视频捕获和处理等相关的技术,并且可以实现更多的创新和突破。 ### 回答2: Amcap v3.0.9是一个视频捕获软件,它的源码可以让开发者对其进行深度定制和优化。Amcap v3.0.9源码包含了该软件的核心功能和模块的具体实现,这些可以被移植到其他项目中使用。它还包括了网络视频流发现和捕获功能,这可以让用户在需要时轻松接收来自网络摄像头的视频流。同时,该源码还提供了一些示例代码,可以帮助开发者更好地理解和使用软件的各种功能。 当使用这个源码进行开发时,开发者需要注意代码的可移植性和性能优化。例如,开发者可以使用多线程、GPU加速等技术来提高软件的运行效率。此外,为了确保软件的稳定性和安全性,开发者还需要进行有效的测试和代码审查。总之,Amcap v3.0.9源码是一个非常有用的资源,可以帮助开发者构建强大的视频处理应用程序。 ### 回答3: AMCap(V3.0.9)是一款视频捕捉软件,其源码是指该软件的程序文件。AMCap源码是使用Visual C++ 6.0编写,在编写过程中使用了DirectShow、Video for Windows(VFW)和DirectX SDK等技术。 AMCap源码主要包括三个主要的模块,即视频捕获模块、视频显示模块和音频捕获模块。视频捕获模块通过DirectShow技术实现了对相机、播放器、屏幕等视频源的捕获和录制,同时支持对视频格式、分辨率、帧率等参数的设置。视频显示模块通过DirectDraw技术实现了对捕获视频的实时预览和播放,支持对视频窗口的大小、位置和透明度等属性的设置。音频捕获模块使用WaveIn API实现了对内置麦克风、线路输入等音频源的捕获和录制,同时支持对音频格式、采样率、声道数等参数的设置。 由于AMCap源码的使用技术较为复杂,需要一定的编程基础和相关知识,因此其适合于熟练掌握DirectShow、VFW和DirectX技术的开发人员进行二次开发和定制。尽管AMCap源码仅限于个人学习和研究使用,但其提供了一种学习和研究视频捕获和处理技术的好的途径。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值