【发布时间】:2020-10-13 05:27:54
【问题描述】:
我已经看到了其他问题,但不知何故它不适合我。 环境:异步模式下的 Windows 10 MediaFoundation/SourceReader。Logitech C922 网络摄像头 1080p pro。
问题:
-
我正在尝试使用 sourcereader 在异步模式下使用媒体基础读取网络摄像头。我正在以 60-65 毫秒的频率调用
::OnReadSample(),而不是预期的 30fps 的 33.33 毫秒。 -
验证人
hr = m_pReader->GetCurrentMediaType(
(DWORD)MF_SOURCE_READER_FIRST_VIDEO_STREAM,
&pType
);
并打印MF_MT_FRAME_RATE 为 30 x 1 的 pType 属性。MIN 和 MAX RANGE 也是 30 x 1。
- 在
::OnReadSample()回调中验证了Mediatype 是否相同。未为MF_SOURCE_READERF_CURRENTMEDIATYPECHANGED位设置流标志。所以 currentmediatype 在内部没有改变。
hr = m_pReader->GetCurrentMediaType(
(DWORD)MF_SOURCE_READER_FIRST_VIDEO_STREAM,
&pt
);
- 我已经设置了 fps,甚至使用
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。
提前致谢。
【问题讨论】:
-
相机在低光照条件下产生的帧数可能会减少。尝试将其指向一些明亮的地方,以排除这种情况。
-
@RomanR。非常感谢。你说的对。确实这就是问题所在。当我在明亮的阳光照射区域进行测试时,我确实每 32-33 毫秒就会获得帧。这是我的期望..知道如何在弱光条件下强制获得 30fps 吗?
-
我认为你不能在这种设备上锁定快门/曝光。您需要一个具有此功能的专用相机。您所看到的是延长曝光,这使得无法进行全帧速率。当您添加光线并制作相机以减少单个帧的曝光时间时,它可以达到 30 个。
标签: frame-rate ms-media-foundation webcam-capture