基于DirectShow获取音频视频输入设备列表
2010-10-09 15:48
537 查看
开发工具:
Visual Studio v2010
Windows SDK v7.1
版本历史:
V1.0 2010年10月09日
完成正式版本。
功能描述:
获取音频视频输入设备列表
接口函数:
DS_GetAudioVideoInputDevices
下载地址:
DS_AudioVideoDevices.zip
源代码:
DS_AudioVideoDevices.h
DS_AudioVideoDevices.cpp
Visual Studio v2010
Windows SDK v7.1
版本历史:
V1.0 2010年10月09日
完成正式版本。
功能描述:
获取音频视频输入设备列表
接口函数:
DS_GetAudioVideoInputDevices
下载地址:
DS_AudioVideoDevices.zip
源代码:
DS_AudioVideoDevices.h
/* ---------------------------------------------------------- 文件名称:DS_AudioVideoDevices.h 作者:秦建辉 MSN:splashcn@msn.com 版本历史: V1.0 2010年10月09日 完成正式版本。 功能描述: 获取音频视频输入设备列表 接口函数: DS_GetAudioVideoInputDevices ------------------------------------------------------------ */ #pragma once #include <windows.h> #include <vector> #include <dshow.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: CLSID_AudioInputDeviceCategory:获取音频输入设备列表 CLSID_VideoInputDeviceCategory:获取视频输入设备列表 返回值: 错误代码 说明: 基于DirectShow 列表中的第一个设备为系统缺省设备 capGetDriverDescription只能获得设备驱动名 */ HRESULT DS_GetAudioVideoInputDevices( std::vector<TDeviceName> &vectorDevices, REFGUID guidValue ); #ifdef __cplusplus } #endif
DS_AudioVideoDevices.cpp
#include "DS_AudioVideoDevices.h" #pragma comment(lib, "Strmiids.lib") HRESULT DS_GetAudioVideoInputDevices( std::vector<TDeviceName> &vectorDevices, REFGUID guidValue ) { TDeviceName name; HRESULT hr; // 初始化 vectorDevices.clear(); // 初始化COM hr = CoInitializeEx( NULL, COINIT_APARTMENTTHREADED ); if (FAILED(hr)) { return hr; } // 创建系统设备枚举器实例 ICreateDevEnum *pSysDevEnum = NULL; hr = CoCreateInstance( CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, (void **)&pSysDevEnum ); if (FAILED(hr)) { CoUninitialize(); return hr; } // 获取设备类枚举器 IEnumMoniker *pEnumCat = NULL; hr = pSysDevEnum->CreateClassEnumerator( guidValue, &pEnumCat, 0 ); if (hr == S_OK) { // 枚举设备名称 IMoniker *pMoniker = NULL; ULONG cFetched; while(pEnumCat->Next( 1, &pMoniker, &cFetched ) == S_OK) { IPropertyBag *pPropBag; hr = pMoniker->BindToStorage( NULL, NULL, IID_IPropertyBag, (void **)&pPropBag ); if (SUCCEEDED(hr)) { // 获取设备友好名 VARIANT varName; VariantInit( &varName ); hr = pPropBag->Read( L"FriendlyName", &varName, NULL ); if (SUCCEEDED(hr)) { StringCchCopy( name.FriendlyName, MAX_FRIENDLY_NAME_LENGTH, varName.bstrVal ); // 获取设备Moniker名 LPOLESTR pOleDisplayName = reinterpret_cast<LPOLESTR>(CoTaskMemAlloc(MAX_MONIKER_NAME_LENGTH * 2)); if (pOleDisplayName != NULL) { hr = pMoniker->GetDisplayName( NULL, NULL, &pOleDisplayName ); if (SUCCEEDED(hr)) { StringCchCopy( name.MonikerName, MAX_MONIKER_NAME_LENGTH, pOleDisplayName ); vectorDevices.push_back( name ); } CoTaskMemFree( pOleDisplayName ); } } VariantClear( &varName ); pPropBag->Release(); } pMoniker->Release(); } // End for While pEnumCat->Release(); } pSysDevEnum->Release(); CoUninitialize(); return hr; }
相关文章推荐
- 基于DirectShow获取音频视频输入设备列表
- 基于DirectShow获取音频视频输入设备列表
- 基于Media Foundation获取音频视频输入设备列表
- 基于Media Foundation获取音频视频输入设备列表
- 基于Media Foundation获取音频视频输入设备列表
- 基于DirectShow获取音频视频输入设备列表
- 基于WinPcap获取设备列表
- Atitit 获取本机图像设备视频设备列表 设备检索列表解决方案
- Directshow 如何获取摄像头音视频设备,并判断摄像头是否占用。
- 基于Android 4.2.2的Account Manager源代码分析学习:设备上帐号类型列表的获取
- 第二十篇 Android获取本机图片、音频、视频、文档以及本地文件夹列表
- DirectShow音频设备获取
- JMF获取设备列表失败,获取视频设备失败?
- directshow学习笔记二-----获取视频设备列表
- AForge获取本机视频设备列表
- 1.使用DShow获取本机的视音频设备和自带编解码器列表
- [绍棠] IOS 获取设备本地音视频, 即相册视频, 音频
- 基于winpcap获取设备列表
- directshow实现音频采集设备的输入音量控制和媒体文件播放音量控制
- 用多媒体库 Bass.dll 播放 mp3 [2] - BASS_GetDeviceInfo: 获取当前音频输出设备列表