2
我的目标是Windows机器。我需要访问指向字节数组的指针,以描述来自附加USB摄像头的单个流帧。我看到了来自windows sdk的playcap directshow示例,但我不明白如何获取原始数据,坦率地说,我不明白视频如何到达窗口。由于除视频捕捉之外我不需要其他任何东西,所以我不想使用opencv。如何在C++中获取摄像头视频流字节
Visual Studio 2008 C++
我的目标是Windows机器。我需要访问指向字节数组的指针,以描述来自附加USB摄像头的单个流帧。我看到了来自windows sdk的playcap directshow示例,但我不明白如何获取原始数据,坦率地说,我不明白视频如何到达窗口。由于除视频捕捉之外我不需要其他任何东西,所以我不想使用opencv。如何在C++中获取摄像头视频流字节
Visual Studio 2008 C++
插入采样采集卡过滤器。将相机源连接到采样卡,然后连接到空渲染器。示例抓取器是一种转换,因此您需要将输出提供给某个位置,但如果不需要渲染它,则null渲染器是一个不错的选择。
您可以使用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,但我有一个很难得到它挂接的权利。我不可能从你那里得到一段代码,对吧?我在期待我应该参加playcap示例,并将samplegrabbber和null渲染器添加到图中,然后使用samplegrabber的回调来获取我需要的信息。 – 2010-06-10 13:22:01
我已经在上面添加了一些简短的代码注释 - 希望有所帮助 – 2010-06-10 18:14:41