基于Media Foundation获取音频视频输入设备列表

开发工具:

Visual Studio v2010

Windows SDK v7.1

版本历史:

V1.0 2010年10月09日

  • 完成正式版本。

功能描述:

获取音频视频输入设备列表

 

接口函数:

MF_GetAudioVideoInputDevices 

下载地址:

MF_AudioVideoDevices.zip

源代码:

MF_AudioVideoDevices.h

/* ---------------------------------------------------------- 文件名称:MF_AudioVideoDevices.h 作者:秦建辉 MSN:[email protected] 版本历史: V1.0 2010年10月09日 完成正式版本。 功能描述: 获取音频视频输入设备列表 接口函数: MF_GetAudioVideoInputDevices ------------------------------------------------------------ */ #pragma once #include #include #include #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 &vectorDevices, REFGUID guidValue ); #ifdef __cplusplus } #endif    

MF_AudioVideoDevices.cpp

#include "MF_AudioVideoDevices.h" #include #pragma comment(lib, "Mfplat.lib") #pragma comment(lib, "Mf.lib") HRESULT MF_GetAudioVideoInputDevices( std::vector &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; }    

你可能感兴趣的:(基于Media Foundation获取音频视频输入设备列表)