2010-06-10 166 views
2

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

Visual Studio 2008 C++

回答

1

插入采样采集卡过滤器。将相机源连接到采样卡,然后连接到空渲染器。示例抓取器是一种转换,因此您需要将输出提供给某个位置,但如果不需要渲染它,则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(); 
+0

我一直在寻找进入SampleGrabber,但我有一个很难得到它挂接的权利。我不可能从你那里得到一段代码,对吧?我在期待我应该参加playcap示例,并将samplegrabbber和null渲染器添加到图中,然后使用samplegrabber的回调来获取我需要的信息。 – 2010-06-10 13:22:01

+0

我已经在上面添加了一些简短的代码注释 - 希望有所帮助 – 2010-06-10 18:14:41

相关问题