如何枚举系统的视音频采集设备
? ??用Directshow SDK很容易實(shí)現(xiàn)該功能,但是開發(fā)者必須了解Directshow SDK的一些基礎(chǔ)知識,對于不了解Directshow的開發(fā)員就有點(diǎn)頭疼了。為了更方便他們開發(fā),我封裝了一個(gè)動(dòng)態(tài)庫,可以枚舉系統(tǒng)的視音頻采集設(shè)備(僅支持Windows系統(tǒng)),動(dòng)態(tài)庫使用非常簡單,因?yàn)橹挥幸粋€(gè)接口:
//枚舉指定類型的所有采集設(shè)備的名稱
ENUMDEVICE_API HRESULT EnumDevice(CAPTURE_DEVICE_TYPE type, char * deviceList[], int nListLen, int & iNumCapDevices);
其中,輸入?yún)?shù)type是一個(gè)枚舉類型,定義如下:
enum CAPTURE_DEVICE_TYPE
{
?? ?DSHOW_VIDEO_DEVICE = 0,
?? ?DSHOW_AUDIO_DEVICE,
};
如果要枚舉視頻采集設(shè)備,則傳入0;如果枚舉音頻設(shè)備,則傳入1。
使用有一個(gè)地方要注意:因?yàn)镈Show需要用到COM,所以調(diào)用該接口前外部需要調(diào)用COM庫的初始化函數(shù):::CoInitialize(NULL);
調(diào)用的例子代碼:??
?::CoInitialize(NULL); //調(diào)用DirectShow SDK的API需要用到COM庫int iVideoCapDevNum = 0;int iAudioCapDevNum = 0;char * DevicesArray[20];for(int i=0; i<20; i++){DevicesArray[i] = new char[256];memset(DevicesArray[i], 0, 256);}HRESULT hr;hr = EnumDevice(DSHOW_VIDEO_DEVICE, DevicesArray, sizeof(DevicesArray)/sizeof(DevicesArray[0]), iVideoCapDevNum);if(hr == S_OK){for(int i=0; i<iVideoCapDevNum; i++){CString strDevName = DevicesArray[i];}}hr = EnumDevice(DSHOW_AUDIO_DEVICE, DevicesArray, sizeof(DevicesArray)/sizeof(DevicesArray[0]), iAudioCapDevNum);if(hr == S_OK){for(int i=0; i<iAudioCapDevNum; i++){CString strDevName = DevicesArray[i];}}for(int i=0; i<20; i++){delete DevicesArray[i];DevicesArray[i] = NULL;}該動(dòng)態(tài)庫的下載地址:https://download.csdn.net/download/zhoubotong2012/10907044
總結(jié)
以上是生活随笔為你收集整理的如何枚举系统的视音频采集设备的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.8Linux下的软件管理
- 下一篇: 戴尔G7 7588 Windows 10