2010-06-10 57 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

相關問題