如何枚举系统的视音频采集设备

    用Directshow SDK很容易实现该功能,但是开发者必须了解Directshow SDK的一些基础知识,对于不了解Directshow的开发员就有点头疼了。为了更方便他们开发,我封装了一个动态库,可以枚举系统的视音频采集设备(仅支持Windows系统),动态库使用非常简单,因为只有一个接口:

//枚举指定类型的所有采集设备的名称
ENUMDEVICE_API HRESULT EnumDevice(CAPTURE_DEVICE_TYPE type, char * deviceList[], int nListLen, int & iNumCapDevices);

其中,输入参数type是一个枚举类型,定义如下:

enum CAPTURE_DEVICE_TYPE
{
    DSHOW_VIDEO_DEVICE = 0,
    DSHOW_AUDIO_DEVICE,
};

如果要枚举视频采集设备,则传入0;如果枚举音频设备,则传入1。

使用有一个地方要注意:因为DShow需要用到COM,所以调用该接口前外部需要调用COM库的初始化函数:::CoInitialize(NULL);

调用的例子代码:  

 ::CoInitialize(NULL); //调用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

该动态库的下载地址:https://download.csdn.net/download/zhoubotong2012/10907044

你可能感兴趣的:(directshow)