【问题标题】:How to get webcam video stream bytes in c++如何在 C++ 中获取网络摄像头视频流字节
【发布时间】:2011-03-01 23:02:08
【问题描述】:

我的目标是 Windows 机器。我需要访问指向字节数组的指针,该字节数组描述来自附加的 USB 网络摄像头的各个流帧。我从 windows sdk 中看到了 playcap directshow 示例,但我没有看到如何获取原始数据,坦率地说,我不明白视频实际上是如何到达窗口的。由于除了视频捕获之外我真的不需要任何东西,所以我不想使用 opencv。

Visual Studio 2008 c++

【问题讨论】:

    标签: visual-c++ directshow webcam


    【解决方案1】:

    插入采样器过滤器。将相机源连接到样本采集器,然后连接到空渲染器。示例抓取器是一个转换,因此您需要在某处提供输出,但如果您不需要渲染它,空渲染器是一个不错的选择。

    您可以使用 ISampleGrabber 配置样本采集器。您可以为每个帧安排对应用程序的回调,为您提供指向位本身的指针,或指向 IMediaSample 对象的指针,该对象也会为您提供元数据。

    你需要在你的对象上实现 ISampleGrabberCB,然后你需要这样的东西(伪代码)

    IFilterInfoPtr      m_pFilterInfo;
    ISampleGrabberPtr   m_pGrabber;
    
    m_pGrabber = pFilter;
    
    m_pGrabber->SetBufferSamples(false);
    m_pGrabber->SetOneShot(false);
    
    // force to 24-bit mode
    AM_MEDIA_TYPE mt;
    ZeroMemory(&mt, sizeof(mt));
    mt.majortype = MEDIATYPE_Video;
    mt.subtype = MEDIASUBTYPE_RGB24;
    m_pGrabber->SetMediaType(&mt);
    
    m_pGrabber->SetCallback(this, 0);
    // SetCallback increments a refcount on ourselves,
    // but we own the grabber so this is recursive
    /// -- must addref before SetCallback(NULL)
    Release();
    

    【讨论】:

    • 我正在研究 SampleGrabber,但很难将其正确连接。我不可能从你那里得到一个代码 sn-p,对吗?我希望我应该获取 playcap 样本,只需将 samplegrabbber 和 null 渲染器添加到图表中,然后使用 samplegrabber 的回调来获取我需要的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 2013-09-14
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    相关资源
    最近更新 更多