DirectShow中的视频捕捉之二

选择一个视频捕捉设备(Select capture device)

如何选择一个视频捕捉设备,可以采用系统设备枚举,详细资料参见Using the System Device Enumerator 。enumerator可以根据filter的种类返回一个设备的monikers。Moniker是一个com对象,可以参见IMoniker的SDK。


对于捕捉设备,下面两种类是相关的。


CLSID_AudioInputDeviceCategory 音频设备
CLSID_VideoInputDeviceCategory 视频设备

 


下面的代码演示了如何枚举一个视频捕捉设备

ICreateDevEnum *pDevEnum = NULL;
IEnumMoniker *pEnum = NULL;

//Create the system device enumerator
HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL,
							  CLSCT_INPROC_SERVER, IID_ICreateDevEnum, 
							  reinterpret_cast<void**>(&pDevEnum));

if(SUCCEEDED(hr))
{
	//创建一个枚举器,枚举视频设备
	hr = pDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, 
										&pEnum, 0);
}

 

IEnumMoniker接口pEnum返回一个IMoniker接口的列表,代表一系列的moniker,你可以显示所有的设备,然后让用户选择一个。
采用IMoniker::BindToStorage方法,返回一个IPropertyBag接口指针。然后调用IPropertyBag::Read读取moniker的属性。下面看看都包含什么属性:


1 FriendlyName 是设备的名字
2 Description 属性仅仅适用于DV和D-VHS/MPEG摄象机,如果这个属性可用,这个属性更详细的描述了设备的资料
3DevicePath 这个属性是不可读的,但是每个设备都有一个独一无二的。你可以用这个属性来区别同一个设备的不同实例


下面的代码演示了如何显示遍历设备的名称 ,接上面的代码

HWND hList;			//Handle to the list box
IMoniker *pMoniker = NULL;
while(pEnum->Next(1, &pMoniker, NULL) == S_OK)
{
	IPropertyBag *pPropBag;
	hr = pMoniker->BindToStorage(0, 0, IID_IPropertyBag, (void**)(&pPropBag));
	if(FAILED(hr))
	{
		pMoniker->Release();
		continue;		//Skip this one, maybe the next one will work
	}
	VARIANT varName;
	hr = pPropBag->Read(L"Description", &varName, 0);
	if(FAILED(hr))
	{
		hr = pPropBag->Read(L"FriendlyName", &varName, 0);
	}
	if(SECCEEDED(hr))
	{
		//Add it to the application's list box
		USES_CONVERSION;
		(long)SendMessage(hList, LB_ADDSTRING, 0, (LPARAM)OLE2T(varName.bstrVal));
		VariantClear(&varName);
	}

	pPropBag->Release();
	pMoniker->Release();
}

 

如果用户选中了一个设备调用IMoniker::BindToObject为设备生成filter,然后将filter加入到graph中。

IBaseFilter *pCap = NULL;
hr = pMoniker->BindToObject(0, 0, IID_IBaseFilter, (void**)&pCap);
if(SECCEEDED(hr))
{
	hr = m_pGraph->AddFilter(pCap, L"Capture Filter");
}

 

 

在WinCE6.0下编译DirectShow相关应用时出现题图中的错误链接的解决方法 1>------ 已启动生成: 项目: CS3GVideo, 配置: Debug CHSINT SDK For WinCE 6.0 (ARMV4I) ------ 1>正在链接... 1>DXFilter.obj : error LNK2001: 无法解析的外部符号 IID_IBaseFilter 1>UDsUtils.obj : error LNK2001: 无法解析的外部符号 IID_I 阅读详情

相关推荐

Directshow中的视频捕捉

本篇文档主要描述关于用Directshow进行视频开发的一些技术主要包括下面内容1关于视频捕捉(About Video Capture in Dshow) 2选择一个视频捕捉设备(Select capture device) 3预览视频(Previewing Video) 4如何捕捉视频流并保存到文件(Capture video to File) 5将设备从系统中移走时的事件通知(Device r

智慧的鱼 1万+

DirectShow获取摄像头信息,打开摄像头例子Amcap

DirectShow自带例子,入门必备,提供给找不到的同学。

windows下视频捕捉VFW和DirectShow

说起视频捕捉问题,先来看一下视频捕捉卡。根据使用的驱动程序的不同来分类,目前市场上大致有两种捕捉卡:VFW (Video for Windows)卡和WDM (Windows Driver Model)卡。前者是一种趋于废弃的驱动模型,而后者是前者的替代模型;WDM还支持更多新的

5426

Flir相机spinnaker库配置缺少directshow

1>VideoInput.obj : error LNK2001: 无法解析的外部符号 IID_ICreateDevEnum 1>VideoInput.obj : error LNK2001: 无法解析的外部符号 IID_IBaseFilter 1>VideoInput.obj : error LNK2001: 无法解析的外部符号 CLSID_SystemDeviceEnum 1>VideoInput.obj : error LNK2001: 无法解析的外部符号 CLSID_Vide

cutemypig的博客 2055

创建一个类型枚举器,指向系统的视频设备列表

创建一个类型枚举器,指向系统的视频设备列表

Y12231819的博客 576

Directshow 捕捉视频入门篇

这篇文章是介绍关于视频捕捉硬件的一些基础知识及硬件输入输出引脚的一些预备知识。

CreatedSign的专栏 2235

Directshow中的视频捕捉(转)

Directshow中的视频捕捉(转) &nbsp; &nbsp; 本篇文档主要描述关于用Directshow进行视频开发的一些技术主要包括下面内容 1关于视频捕捉(About Video Capture in Dshow) 2选择一个视频捕捉设备(Select capture device) 3预览视频(Previewing Video) 4如何捕捉视频流并保...

ett_qin的博客 812

Directshow视频捕捉

<br />Directshow(SDK)学习笔记九_视频捕捉<br />摘要:本篇文档主要描述关于用Directshow进行视频开发的一些技术<br />主要包括下面内容<br /> 1关于视频捕捉(About Video Capture in Dshow)2选择一个视频捕捉设备(Select capture device)3预览视频(Previewing Video)4如何捕捉视频流并保存到文件(Capture video to File)5将设备从系统中移走时的事件通知(Device remove N

n567656756765676567的专栏 844

DirectShow视频捕捉应用研究

摘要 本文将对从捕捉设备和从播放文件中进行视频捕捉涉及的有关驱动(Driver)与应用的模型和接口进行研究和分析,比较其Windows与Windows CE中的不同,从而提出在Windows CE下实现视频捕捉数据流的方法。  关键字 DirectShow视频捕捉,驱动,Windows CE系统  引言  随着多媒体技术的不断发展,相应的软件与硬件层出不穷,现在与多媒体视频会议(Video Co

Briver Song的专栏 1986

DirectShow中的视频捕捉之一

关于视频捕捉(About Video Capture in Dshow)1) 视频捕捉Graph的构建一个能够捕捉音频或者视频的graph图都称之为捕捉graph图。捕捉graph图比一般的文件回放graph图要复杂许多,dshow提供了一个Capture Graph Builder COM组件使得捕捉graph图的生成更加简单。Capture Graph Builder提供了一个ICapture...

镜花水月 414

基于MFC和DirectShow实现简易视频捕捉

本文还有配套的精品资源,点击获取 简介:MFC (Microsoft Foundation Classes) 是用于构建Windows应用程序的C++类库。本项目介绍如何通过DirectShow技术在MFC中实现视频捕捉,包括DirectShow Filter Graph的构建、设备捕获、样本抓取以及用户界面交互等方面。提供了一个可以直接运行的示例程序,并阐述了关键知识点,...

weixin_35756624的博客 1453

Directshow 视频捕捉入门篇 二

下面的代码来结束如何选择一个视频捕捉设备,就是我们平常说的摄像头 选择一个视频捕捉设备(Select capture device) 如何选择一个视频捕捉设备,可以采用系统设备枚举,详细资料参见Using the System Device Enumerator 。enumerator可以根据filter的种类返回一个设备的monikers。Moniker是一个com对象,可以参见IM

CreatedSign的专栏 1511

DirectShow编程实现摄像头视频捕捉

前言   DirectShow是微软公司提供的一套在Windows平台上进行流媒体处理的开发包,与DirectX开发包一起发布。DirectShow为多媒体流的捕捉和回放提供了强有力的支持。用DirectShow开发应用程序,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。   DirectShow是基于COM的,为了编写DirectShow应用...

weixin_33887443的博客 429

Directshow(SDK)学习笔记九_视频捕捉

摘要:本篇文档主要描述关于用Directshow进行视频开发的一些技术主要包括下面内容1关于视频捕捉(About Video Capture in Dshow) 2选择一个视频捕捉设备(Select capture device) 3预览视频(Previewing Video) 4如何捕捉视频流并保存到文件(Capture video to File) 5将设备从系统中移走时的事件通知(Devic

dankes 2934
上一篇: DirectShow中的视频捕捉之一
下一篇: DirectShow中的视频捕捉之三
guhaoxin
博客等级 码龄18年 6粉丝 163原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值