【发布时间】:2021-10-08 19:35:47
【问题描述】:
使用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;
}
在特定机器(Windows 10)上,执行ActivateObject方法后,传给hr的结果为如下错误码:
HResult 0x800706d9:“端点映射器没有更多可用的端点。”
使用教程中描述的替代方法创建源并使用 MFCreateDeviceSource 方法,得到相同的结果。
这台机器上的任何摄像机设备都给出相同的结果,但另一台机器上的相同代码可以正常工作。
此错误代码在网络上被多次引用,但似乎总是与连接到打印机、加入域或其他网络内容有关。更改防火墙设置的建议解决方案没有解决我的问题。
【问题讨论】:
标签: c++ windows ms-media-foundation