Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Frame rate 如何为Windows 10笔记本电脑上的网络摄像头捕获设置IMFSourceReader的帧速率_Frame Rate_Ms Media Foundation_Webcam Capture - Fatal编程技术网

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

Frame rate 如何为Windows 10笔记本电脑上的网络摄像头捕获设置IMFSourceReader的帧速率,frame-rate,ms-media-foundation,webcam-capture,Frame Rate,Ms Media Foundation,Webcam Capture,我已经看到了其他的问题,但不知怎么的,它不适合我。 环境:异步模式下的Windows 10 MediaFoundation/SourceReader.,Logitech C922网络摄像头1080p pro 问题: 我试图用SoeLealDad在异步模式下使用媒体基金会来阅读网络摄像头。我正在以60-65毫秒的频率调用::OnReadSample(),而不是30帧每秒预期的33.33毫秒 证实 以及打印MF\u MT\u FRAME\u RATE为30 x 1的pType属性。MIN和MAX

我已经看到了其他的问题,但不知怎么的,它不适合我。 环境:异步模式下的Windows 10 MediaFoundation/SourceReader.,Logitech C922网络摄像头1080p pro

问题:

我试图用SoeLealDad在异步模式下使用媒体基金会来阅读网络摄像头。我正在以60-65毫秒的频率调用
::OnReadSample()
,而不是30帧每秒预期的33.33毫秒

  • 证实

  • 以及打印
    MF\u MT\u FRAME\u RATE
    为30 x 1的pType属性。
    MIN
    MAX范围也都是30 x 1

  • ::OnReadSample()
    回调中验证Mediatype是否相同。未为
    MF\u SOURCE\u READERF\u CURRENTMEDIATYPECHANGED
    位设置流标志。所以currentmediatype在内部没有改变
  • 我已经设置了fps,甚至使用 在上面的页面上显示了确切的函数,但仍然会每隔64毫秒左右调用一次。 下面是正在使用的
    pType
    的快照
  • 请说明在这种情况下可能缺少什么。我得到的是15fps,而不是要求的30fps。我列举了设备的媒体类型,它支持30fps


    提前感谢。

    这可能是因为您正在
    IMFSourceReader
    上设置调整后的媒体类型,而不是
    IMFMediaSource
    的处理程序

    下面显示了完整工作的片段。注意:正在
    pSourceMediaTypeHandler
    上设置定制的媒体类型,而不是
    pVideoReader
    。有关变量声明等,请参见示例源代码

    /----设置网络摄像头视频源-----
    检查\u HR(从设备获取视频源(网络摄像头\u设备\u索引,&pvideource,&pvideoreder),
    “无法获取网络摄像头视频源。”);
    检查\u HR(pvideoreder->SetStreamSelection((DWORD)MF\u SOURCE\u READER\u FIRST\u VIDEO\u STREAM,TRUE),
    “未能在源读取器上设置第一个视频流。”);
    选中(pVideoSource->CreatePresentationDescriptor(&pSourcePresentationDescriptor),
    “未能从媒体源创建演示文稿描述符。”);
    检查\u HR(pSourcePresentationDescriptor->GetStreamDescriptorByIndex(0,&fsselected,&pSourceStreamDescriptor),
    “未能从表示描述符获取源流描述符。”);
    检查\u HR(pSourceStreamDescriptor->GetMediaTypeHandler(&pSourceMediaTypeHandler),
    “无法获取源媒体类型处理程序。”);
    DWORD srcMediaTypeCount=0;
    检查\u HR(pSourceMediaTypeHandler->GetMediaTypeCount(&srcMediaTypeCount),
    “无法获取源媒体类型计数。”);
    //-----尝试在网络摄像头源上设置所需的媒体类型-----
    选中_HR(MFCreateMediaType(&pWebcamSourceType),“未能创建网络摄像头输出媒体类型”。);
    检查\u HR(查找匹配视频类型(pSourceMediaTypeHandler、网络摄像头像素格式、视频宽度、视频高度、视频帧率、pWebcamSourceType),
    “未找到匹配的网络摄像头媒体类型。”);
    //如果介质类型来自支持的类型列表,则无需进行此检查。
    //如果媒体类型是手动构造的,则此选项非常有用。它留在这里是为了演示。
    选中_HR(pSourceMediaTypeHandler->IsMediaTypeSupported(pWebcamSourceType和pWebCamMatchingType),“网络摄像头不支持请求的选项。”);
    if(pWebCamMatchingType!=NULL){
    //如果IsMediaTypeSupported为我们提供了最匹配的媒体类型,请使用该类型。
    检查_HR(pSourceMediaTypeHandler->SetCurrentMediaType(pWebCamMatchingType),“未能在源上设置媒体类型。”);
    }
    否则{
    //如果IsMediaTypeSupported没有为我们提供新类型,则检查的类型必须足够好,才能使用该类型。
    检查_HR(pSourceMediaTypeHandler->SetCurrentMediaType(pWebcamSourceType),“未能在源上设置媒体类型。”);
    }
    检查\u HR(pSourceMediaTypeHandler->GetCurrentMediaType(&pVideoSourceOutputType),
    “从第一个视频流检索当前媒体类型时出错。”);
    
    std::cout相机在弱光条件下可能会产生较少的帧。试着把它指向某个光明的地方,以排除这一点。谢谢。你是对的。事实上,这就是问题所在。当我在阳光明媚的地方测试时,我确实每32-33毫秒就得到一帧。这是我的期望。。你知道如何在弱光条件下强制获得30fps吗?我不认为你能在这种设备上锁定快门/曝光。如果存在此功能,则需要专门的摄像头。你所看到的是延长曝光时间,这使得它不可能达到全帧速率。当您添加灯光并使相机缩短单个帧的曝光时间时,它可以拍摄完整的30帧。谢谢您的回复。请尝试更高的fps,比如说30fps,然后观察相同的情况。就像罗马人一样。R已经指出,我的代码没有任何变化,在低光条件下给出15fps,在好光条件下给出30fps。因此,网络摄像头似乎没有固定的fps,但也取决于光线条件。谢谢
    hr = m_pReader->GetCurrentMediaType(
                (DWORD)MF_SOURCE_READER_FIRST_VIDEO_STREAM, 
                &pType
                );
    
    hr = m_pReader->GetCurrentMediaType(
                    (DWORD)MF_SOURCE_READER_FIRST_VIDEO_STREAM, 
                    &pt
                    );
    
    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
    
    Attempting to convert sample, sample duration 2000000, sample time 863168227222, evr timestamp 0.
    Attempting to convert sample, sample duration 2000000, sample time 863170145312, evr timestamp 2000000.
    Attempting to convert sample, sample duration 2000000, sample time 863172227244, evr timestamp 4000000.
    Attempting to convert sample, sample duration 2000000, sample time 863174144901, evr timestamp 6000000.
    Attempting to convert sample, sample duration 2000000, sample time 863176225938, evr timestamp 8000000.
    Attempting to convert sample, sample duration 2000000, sample time 863178147388, evr timestamp 10000000.
    Attempting to convert sample, sample duration 2000000, sample time 863180225543, evr timestamp 12000000.