"There are no more endpoints available from the endpoint mapper." 创建或激活 IMFMediaSource 时

"There are no more endpoints available from the endpoint mapper." when creating or activating an IMFMediaSource

使用 Microsoft tutorial on Audio/Video Capture in Media Foundation,我尝试为摄像机创建媒体源。下面的代码直接取自上述教程:

HRESULT CreateVideoCaptureDevice(IMFMediaSource **ppSource)
{
    *ppSource = NULL;

    UINT32 count = 0;

    IMFAttributes *pConfig = NULL;
    IMFActivate **ppDevices = NULL;

    // Create an attribute store to hold the search criteria.
    HRESULT hr = MFCreateAttributes(&pConfig, 1);

    // Request video capture devices.
    if (SUCCEEDED(hr))
    {
        hr = pConfig->SetGUID(
            MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE, 
            MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID
            );
    }

    // Enumerate the devices,
    if (SUCCEEDED(hr))
    {
        hr = MFEnumDeviceSources(pConfig, &ppDevices, &count);
    }

    // Create a media source for the first device in the list.
    if (SUCCEEDED(hr))
    {
        if (count > 0)
        {
            hr = ppDevices[0]->ActivateObject(IID_PPV_ARGS(ppSource));
        }
        else
        {
            hr = MF_E_NOT_FOUND;
        }
    }

    for (DWORD i = 0; i < count; i++)
    {
        ppDevices[i]->Release();
    }
    CoTaskMemFree(ppDevices);
    return hr;
}

在特定机器上(Windows10),执行ActivateObject方法后,传递给hr的结果是如下错误码:

HResult 0x800706d9: "There are no more endpoints available from the endpoint mapper."

使用本教程中描述的替代方法创建源并使用 MFCreateDeviceSource 方法得到相同的结果。

这台机器上的任何摄像机设备都给出相同的结果,但相同的代码在另一台机器上工作得很好。

此错误代码在网络上被多次提及,但似乎总是与连接打印机、加入域或其他网络相关。建议的更改防火墙设置的解决方案没有解决我的问题。

就我而言,罪魁祸首是禁用的服务:Windows Camera Frame Server。

我必须通过服务应用程序启用它(自动启动)并启动它:

此后错误再未发生

在相关说明中,我还必须允许应用程序访问相机:

Local Group Policy: Computer Configuration / Administrative Templates / Windows Components / App Privacy

"Let Windows apps access the camera" must be set to "Not configured".