如何在c ++中获取网络摄像头视频流字节

时间:2010-06-10 01:00:15

标签: visual-c++ directshow webcam

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

Visual Studio 2008 c ++

1 个答案:

答案 0 :(得分: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();