基于Media Foundation获取音频视频输入设备列表
2015-07-15 10:43
429 查看
摘自:秦建辉的专栏
Visual Studio v2010
Windows SDK v7.1
版本历史:
V1.0 2010年10月09日
完成正式版本。
功能描述:
获取音频视频输入设备列表
接口函数:
MF_GetAudioVideoInputDevices
下载地址:
MF_AudioVideoDevices.zip
源代码:
MF_AudioVideoDevices.h
[cpp]
view plaincopyprint?
/* ----------------------------------------------------------
文件名称:MF_AudioVideoDevices.h
作者:秦建辉
MSN:splashcn@msn.com
版本历史:
V1.0 2010年10月09日
完成正式版本。
功能描述:
获取音频视频输入设备列表
接口函数:
MF_GetAudioVideoInputDevices
------------------------------------------------------------ */
#pragma once
#include <windows.h>
#include <vector>
#include <Mfidl.h>
#ifndef MACRO_GROUP_DEVICENAME
#define MACRO_GROUP_DEVICENAME
#define MAX_FRIENDLY_NAME_LENGTH 128
#define MAX_MONIKER_NAME_LENGTH 256
typedef struct _TDeviceName
{
WCHAR FriendlyName[MAX_FRIENDLY_NAME_LENGTH]; // 设备友好名
WCHAR MonikerName[MAX_MONIKER_NAME_LENGTH]; // 设备Moniker名
} TDeviceName;
#endif
#ifdef __cplusplus
extern "C"
{
#endif
/*
功能:获取音频视频输入设备列表
参数说明:
vectorDevices:用于存储返回的设备友好名及Moniker名
guidValue:
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_GUID:获取音频输入设备列表
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID:获取视频输入设备列表
返回值:
错误代码
说明:
基于Media Foundation
列表中的第一个设备为系统缺省设备
capGetDriverDescription只能获得设备驱动名
操作系统要求Windows 7及以上版本(关键)
*/
HRESULT MF_GetAudioVideoInputDevices( std::vector<TDeviceName> &vectorDevices, REFGUID guidValue );
#ifdef __cplusplus
}
#endif
MF_AudioVideoDevices.cpp
[cpp]
view plaincopyprint?
#include "MF_AudioVideoDevices.h"
#include <Mfapi.h>
#pragma comment(lib, "Mfplat.lib")
#pragma comment(lib, "Mf.lib")
HRESULT MF_GetAudioVideoInputDevices( std::vector<TDeviceName> &vectorDevices, REFGUID guidValue )
{
TDeviceName name;
HRESULT hr;
// 初始化
vectorDevices.clear();
// 初始化Media Foundation
hr = MFStartup( MF_VERSION, MFSTARTUP_LITE );
if (SUCCEEDED(hr))
{
// 创建属性搜索页
IMFAttributes *pAttributes = NULL;
hr = MFCreateAttributes( &pAttributes, 1 ); // 要求Windows Vista
if (SUCCEEDED(hr))
{
// 设置搜索关键字-枚举音频视频设备
hr = pAttributes->SetGUID( MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE, guidValue );
if (SUCCEEDED(hr))
{
// 获取搜索结果
IMFActivate **ppDevices = NULL;
UINT32 dwCount = 0;
hr = MFEnumDeviceSources( pAttributes, &ppDevices, &dwCount ); // 要求Windows 7
if (SUCCEEDED(hr))
{
if (dwCount == 0)
{ // 没有找到
hr = E_FAIL;
}
for (DWORD i = 0; i < dwCount; i++)
{
// 获取设备友好名
ppDevices[i]->GetString( MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME, name.FriendlyName, MAX_FRIENDLY_NAME_LENGTH, NULL );
// 获取设备Moniker名
ppDevices[i]->GetString( MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK, name.MonikerName, MAX_MONIKER_NAME_LENGTH, NULL );
// 加入列表
vectorDevices.push_back( name );
// 释放资源
ppDevices[i]->Release();
}
// 释放内存
CoTaskMemFree( ppDevices );
}
}
pAttributes->Release();
}
// 关闭Media Foundation
MFShutdown();
}
return hr;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
摘自:秦建辉的专栏
个人独立博客:http://www.firstsolver.com/wordpress/
开发工具:Visual Studio v2010
Windows SDK v7.1
版本历史:
V1.0 2010年10月09日
完成正式版本。
功能描述:
获取音频视频输入设备列表
接口函数:
MF_GetAudioVideoInputDevices
下载地址:
MF_AudioVideoDevices.zip
源代码:
MF_AudioVideoDevices.h
[cpp]
view plaincopyprint?
/* ----------------------------------------------------------
文件名称:MF_AudioVideoDevices.h
作者:秦建辉
MSN:splashcn@msn.com
版本历史:
V1.0 2010年10月09日
完成正式版本。
功能描述:
获取音频视频输入设备列表
接口函数:
MF_GetAudioVideoInputDevices
------------------------------------------------------------ */
#pragma once
#include <windows.h>
#include <vector>
#include <Mfidl.h>
#ifndef MACRO_GROUP_DEVICENAME
#define MACRO_GROUP_DEVICENAME
#define MAX_FRIENDLY_NAME_LENGTH 128
#define MAX_MONIKER_NAME_LENGTH 256
typedef struct _TDeviceName
{
WCHAR FriendlyName[MAX_FRIENDLY_NAME_LENGTH]; // 设备友好名
WCHAR MonikerName[MAX_MONIKER_NAME_LENGTH]; // 设备Moniker名
} TDeviceName;
#endif
#ifdef __cplusplus
extern "C"
{
#endif
/*
功能:获取音频视频输入设备列表
参数说明:
vectorDevices:用于存储返回的设备友好名及Moniker名
guidValue:
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_GUID:获取音频输入设备列表
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID:获取视频输入设备列表
返回值:
错误代码
说明:
基于Media Foundation
列表中的第一个设备为系统缺省设备
capGetDriverDescription只能获得设备驱动名
操作系统要求Windows 7及以上版本(关键)
*/
HRESULT MF_GetAudioVideoInputDevices( std::vector<TDeviceName> &vectorDevices, REFGUID guidValue );
#ifdef __cplusplus
}
#endif
/* ---------------------------------------------------------- 文件名称:MF_AudioVideoDevices.h 作者:秦建辉 MSN:splashcn@msn.com 版本历史: V1.0 2010年10月09日 完成正式版本。 功能描述: 获取音频视频输入设备列表 接口函数: MF_GetAudioVideoInputDevices ------------------------------------------------------------ */ #pragma once #include <windows.h> #include <vector> #include <Mfidl.h> #ifndef MACRO_GROUP_DEVICENAME #define MACRO_GROUP_DEVICENAME #define MAX_FRIENDLY_NAME_LENGTH 128 #define MAX_MONIKER_NAME_LENGTH 256 typedef struct _TDeviceName { WCHAR FriendlyName[MAX_FRIENDLY_NAME_LENGTH]; // 设备友好名 WCHAR MonikerName[MAX_MONIKER_NAME_LENGTH]; // 设备Moniker名 } TDeviceName; #endif #ifdef __cplusplus extern "C" { #endif /* 功能:获取音频视频输入设备列表 参数说明: vectorDevices:用于存储返回的设备友好名及Moniker名 guidValue: MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_GUID:获取音频输入设备列表 MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID:获取视频输入设备列表 返回值: 错误代码 说明: 基于Media Foundation 列表中的第一个设备为系统缺省设备 capGetDriverDescription只能获得设备驱动名 操作系统要求Windows 7及以上版本(关键) */ HRESULT MF_GetAudioVideoInputDevices( std::vector<TDeviceName> &vectorDevices, REFGUID guidValue ); #ifdef __cplusplus } #endif
MF_AudioVideoDevices.cpp
[cpp]
view plaincopyprint?
#include "MF_AudioVideoDevices.h"
#include <Mfapi.h>
#pragma comment(lib, "Mfplat.lib")
#pragma comment(lib, "Mf.lib")
HRESULT MF_GetAudioVideoInputDevices( std::vector<TDeviceName> &vectorDevices, REFGUID guidValue )
{
TDeviceName name;
HRESULT hr;
// 初始化
vectorDevices.clear();
// 初始化Media Foundation
hr = MFStartup( MF_VERSION, MFSTARTUP_LITE );
if (SUCCEEDED(hr))
{
// 创建属性搜索页
IMFAttributes *pAttributes = NULL;
hr = MFCreateAttributes( &pAttributes, 1 ); // 要求Windows Vista
if (SUCCEEDED(hr))
{
// 设置搜索关键字-枚举音频视频设备
hr = pAttributes->SetGUID( MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE, guidValue );
if (SUCCEEDED(hr))
{
// 获取搜索结果
IMFActivate **ppDevices = NULL;
UINT32 dwCount = 0;
hr = MFEnumDeviceSources( pAttributes, &ppDevices, &dwCount ); // 要求Windows 7
if (SUCCEEDED(hr))
{
if (dwCount == 0)
{ // 没有找到
hr = E_FAIL;
}
for (DWORD i = 0; i < dwCount; i++)
{
// 获取设备友好名
ppDevices[i]->GetString( MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME, name.FriendlyName, MAX_FRIENDLY_NAME_LENGTH, NULL );
// 获取设备Moniker名
ppDevices[i]->GetString( MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK, name.MonikerName, MAX_MONIKER_NAME_LENGTH, NULL );
// 加入列表
vectorDevices.push_back( name );
// 释放资源
ppDevices[i]->Release();
}
// 释放内存
CoTaskMemFree( ppDevices );
}
}
pAttributes->Release();
}
// 关闭Media Foundation
MFShutdown();
}
return hr;
}
#include "MF_AudioVideoDevices.h" #include <Mfapi.h> #pragma comment(lib, "Mfplat.lib") #pragma comment(lib, "Mf.lib") HRESULT MF_GetAudioVideoInputDevices( std::vector<TDeviceName> &vectorDevices, REFGUID guidValue ) { TDeviceName name; HRESULT hr; // 初始化 vectorDevices.clear(); // 初始化Media Foundation hr = MFStartup( MF_VERSION, MFSTARTUP_LITE ); if (SUCCEEDED(hr)) { // 创建属性搜索页 IMFAttributes *pAttributes = NULL; hr = MFCreateAttributes( &pAttributes, 1 ); // 要求Windows Vista if (SUCCEEDED(hr)) { // 设置搜索关键字-枚举音频视频设备 hr = pAttributes->SetGUID( MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE, guidValue ); if (SUCCEEDED(hr)) { // 获取搜索结果 IMFActivate **ppDevices = NULL; UINT32 dwCount = 0; hr = MFEnumDeviceSources( pAttributes, &ppDevices, &dwCount ); // 要求Windows 7 if (SUCCEEDED(hr)) { if (dwCount == 0) { // 没有找到 hr = E_FAIL; } for (DWORD i = 0; i < dwCount; i++) { // 获取设备友好名 ppDevices[i]->GetString( MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME, name.FriendlyName, MAX_FRIENDLY_NAME_LENGTH, NULL ); // 获取设备Moniker名 ppDevices[i]->GetString( MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK, name.MonikerName, MAX_MONIKER_NAME_LENGTH, NULL ); // 加入列表 vectorDevices.push_back( name ); // 释放资源 ppDevices[i]->Release(); } // 释放内存 CoTaskMemFree( ppDevices ); } } pAttributes->Release(); } // 关闭Media Foundation MFShutdown(); } return hr; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关文章推荐
- 图像的灰度化以及二值图函数
- 百度PUSH PHP服务器端
- GNU Linux系统变量(sysctl配置命令)综合使用
- CSV格式转成libsvm标准格式的小程序
- web前端基础 什么是对象
- 聚类结果的评估指标及其JAVA实现
- Android 实现蘑菇街购物车动画效果
- 菜鸟vimer成长记——第2.0章、模式初探
- MVC授权不通过之后不执行任何自定义ActionFilter
- weblogic启动报错之未修改hosts产生错误
- 黑马程序员--IOS基础第二天(C语言)
- fragment重复问题
- centos 6 运行docker 后ssh 连不进容器问题
- 怎么用电脑看电视和点播电视剧电影,电脑上玩手机android游戏
- 软件工程就业方向
- OC和C对比学习
- Objective-C对象模型--类对象和元类对象
- CentOS yum No package available.
- easyui datagrid 避免初始化就加载数据
- GRE写作必备句型