Frameworks IMFSourceReader为某些分辨率提供错误0x80070491 我试图从微软MediaFoundation(Windows 7 X64)上的IfFaseDealDead从5MP UVC相机中拍摄视频。在第一次回调OnReadSample()之前,所有操作都与文档一样,在任何API调用上都没有错误。OnReadSample()的hrStatus参数为“0x80070491索引中指定的键不匹配”

Frameworks IMFSourceReader为某些分辨率提供错误0x80070491 我试图从微软MediaFoundation(Windows 7 X64)上的IfFaseDealDead从5MP UVC相机中拍摄视频。在第一次回调OnReadSample()之前,所有操作都与文档一样,在任何API调用上都没有错误。OnReadSample()的hrStatus参数为“0x80070491索引中指定的键不匹配”,frameworks,media,ms-media-foundation,Frameworks,Media,Ms Media Foundation,当我将分辨率设置为1080p时,即使5MP是相机的本机分辨率,并且5MP(2592x1944)枚举为可用格式,它也可以正常工作 我在微软的文档中找不到任何东西可以说这种行为是出于设计,但到目前为止似乎是一致的。还有人让IMFSourceReader以超过1080便士的价格工作吗 当Microsoft MFCaptureToFile示例被迫选择本机分辨率时,我看到了相同的效果: HRESULT nativeTypeErrorCode=S_正常; DWORD计数=0; UINT32流量指数=0; U

当我将分辨率设置为1080p时,即使5MP是相机的本机分辨率,并且5MP(2592x1944)枚举为可用格式,它也可以正常工作

我在微软的文档中找不到任何东西可以说这种行为是出于设计,但到目前为止似乎是一致的。还有人让IMFSourceReader以超过1080便士的价格工作吗

当Microsoft MFCaptureToFile示例被迫选择本机分辨率时,我看到了相同的效果:

HRESULT nativeTypeErrorCode=S_正常;
DWORD计数=0;
UINT32流量指数=0;
UINT32所需宽度=2592;
UINT32所需高度=1944;
而(nativeTypeErrorCode==S_OK)
{
IMFMediaType*nativeType=NULL;
nativeTypeErrorCode=m_pReader->GetNativeMediaType(流索引、计数和nativeType);
如果(nativeTypeErrorCode!=S_OK)继续;
//获取媒体类型
GUID nativeGuid={0};
hr=nativeType->GetGUID(MF\u MT\u子类型和nativeGuid);
如果(失败(hr))返回hr;
UINT32宽度、高度;
hr=::MFGetAttributeSize(nativeType、MF_MT_FRAME_SIZE、宽度和高度);
如果(失败(hr))返回hr;
如果(nativeGuid==MFVideoFormat\u YUY2&&width==requiredWidth&&height==requiredheight)
{
//找到本机配置,设置它
hr=m_pReader->SetCurrentMediaType(streamIndex,NULL,nativeType);
如果(失败(hr))返回hr;
打破
}
安全释放(&nativeType);
计数++;
}

Media Framework是否有一些未记录的最高分辨率?

事实证明,问题出在我使用的摄像头上,而不是Media streaming Framework或UVC摄像头


我已经切换回使用DirectShow示例抓取,到目前为止似乎工作正常。

我在windows 7上使用从Amazon.com(ELP-USBFHD01M-L21)获得的usb摄像头模块遇到了同样的问题。默认分辨率1920x1080x30fps(MJPEG)工作正常,但当我尝试选择1280x720x60fps(也是MJPEG,不是h.264)时,我在ReadSample回调中得到0x80070491错误。其他各种分辨率都可以正常工作,例如640x480x120fps。1280x720x9fps(YUY2)也可以工作

在Direct Show中,摄像机以1280x720x60fps的速度工作正常

不幸的是,1280x720x60fps是我想用Oculus Rift做一些相当低延迟的增强现实的分辨率

有趣的是,在Windows10技术预览中,1280x720x60fps与MFCaptureD3D示例配合使用效果良好。我尝试将ksthunk.sys和usbvideo.sys驱动程序从我的windows 10安装复制到我的windows 7计算机,但即使在“禁用驱动程序签名”模式下引导时,它们也无法加载

在网络上四处查看之后,似乎有很多人用各种各样的摄像头遇到了这个问题。我将不得不使用DirectShow来进行视频捕获,这很烦人,因为它是一个非常旧的API,不能与应用商店应用程序一起使用

我知道这是一个相当模糊的问题,但由于微软似乎已经在Windows10中修复了它,如果他们将修复后的版本移植到Windows7中,那就太好了。事实上,我不能使用他们推荐的MediaFoundation API,因为它不能运行在我必须运行的大多数机器上。

在任何情况下,如果您遇到此问题,并且Windows 10是一个选项,请尝试解决此问题


Max Behensky

对此进行快速更新,IMFSourceReader回调在除1080p之外的任何分辨率上都会失败。640x480和720p均失败,错误与2592x1944相同。已在联想ThinkPad集成摄像头上确认。352x28在媒体基础上不起作用,但在DirectShow中运行。似乎Mf仍然与大多数摄像头不兼容。它报告说它是受支持的,但实际上异步读卡器不工作,同步读卡器返回此错误。我遇到了完全相同的问题-特别是一个摄像头。你知道是什么原因造成的吗?我试图避免重写我的DDSE应用程序。你有没有发现Wi7下使用媒体基础的问题?现在遇到了完全相同的问题。。。