如何为Windows 10笔记本电脑上的网络摄像头捕获设置IMFSourceReader的帧速率

问题描述

我已经看到了其他问题,但是不知何故对我不起作用。 环境:Windows 10 MediaFoundation / SourceReader处于异步模式。LogitechC922网络摄像头1080p专业版。

问题:

  1. 我正在尝试使用SourceReader在异步模式下使用Media Foundation阅读网络摄像头。我接到::OnReadSample()的呼叫频率为60-65毫秒,而不是30fps的33.33毫秒。

  2. 验证人

hr = m_pReader->GetCurrentMediaType(
            (DWORD)MF_SOURCE_READER_FIRST_VIDEO_STREAM,&pType
            );

,并且MF_MT_FRAME_RATE为30 x 1的pType的打印属性。MINMAX RANGE均为30 x 1。

  1. ::OnReadSample()回调中得到验证,并且Mediatype相同。没有为MF_SOURCE_READERF_CURRENTMEDIATYPECHANGED位设置流标志。因此,currentmediatype在内部没有改变。
hr = m_pReader->GetCurrentMediaType(
                (DWORD)MF_SOURCE_READER_FIRST_VIDEO_STREAM,&pt
                );
  1. 即使使用 https://docs.microsoft.com/en-us/windows/win32/medfound/how-to-set-the-video-capture-frame-rate上一页的确切功能,但仍每64毫秒左右调用一次。 以下是正在使用的pType的快照。
MF_MT_FRAME_SIZE    640 x 480
MF_MT_AVG_BITRATE   147456000
MF_MT_YUV_MATRIX    2
MF_MT_MAJOR_TYPE    MFMediaType_Video
MF_MT_VIDEO_LIGHTING    3
MF_MT_DEFAULT_STRIDE    1280
MF_MT_VIDEO_CHROMA_SITING   6
MF_MT_AM_FORMAT_TYPE    {F72A76A0-EB0A-11D0-ACE4-0000C0CC16BA}
MF_MT_FIXED_SIZE_SAMPLES    1
MF_MT_VIDEO_NOMINAL_RANGE   2
MF_MT_FRAME_RATE    30 x 1
MF_MT_PIXEL_ASPECT_RATIO    1 x 1
MF_MT_ALL_SAMPLES_INDEPENDENT   1
MF_MT_FRAME_RATE_RANGE_MIN  30 x 1
MF_MT_SAMPLE_SIZE   614400
MF_MT_VIDEO_PRIMARIES   2
MF_MT_INTERLACE_MODE    2
MF_MT_FRAME_RATE_RANGE_MAX  30 x 1
MF_MT_SUBTYPE   MFVideoFormat_YUY2

请提出在这种情况下可能缺少的内容。我得到的是15fps,而不是30fps。我已经列举了设备的媒体类型,它支持30fps。

谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)