"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".
使用 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".