视频捕捉应用

视频捕捉应用
     由于项目需要,涉及到视频捕捉的应用,以前只是做过音频捕捉的程序,因此对视频捕捉就不是很熟悉了,就在网上搜了一下,果然IT方面的资料就是比其他方向的资料要全的多,一搜一大堆。
   视频捕捉大体分为两种实现方式:
   1.采用发消息的方式:
     采用API实现,SendMessage函数实现视频采集,这种实现方式功能简单,自定义功能不强,可说没有,但是代码很少。相对来说实现起来很简单,网上有现成的代码。
   2.采用DirectX Show:
      采用这种方式,代码比较多,也比较复杂,如果全部自己写确实浪费时间,特别是时间比较紧的时候,所有如果有现成封装好的库的话,会是一种很好的选择,这种事情国内可能很难找到,国外可就不一样,早就有人封装好了,从COM包装到在COM包装之上的封装都做好了,呵呵外国人还真好啊,。
   要下载这个库,可以到codeproject网站上去找,表说不知道codeproject是什么东西!
上面既有封装好的库,也有示例代码,不过示例代码异常比较多,的要好好修改。

  下载好的库有源代码的,分两个dll文件,DShowNET.dll和DirectX.Capture.dll,有了这两个dll完成视频捕捉就很容易了.

   DShowNET.dll ---->对DirectX Show COM接口的封装.
   DirectX.Capture.dll ---->对DShowNET.dll进行上层封装.
在使用的时候直接使用DirectX.Capture.dll这个dll就可以了不要调用底层dll DShowNET.dll.
 
   DirectX Show ---> DShowNET.dll ---> DirectX.Capture.dll ---> GUI
 

视频捕捉

01-29

#if !defined(AFX_CAPTUREVIDEO_H__F5345AA4_A39F_4B07_B843_3D87C4287AA0__INCLUDED_)rn#define AFX_CAPTUREVIDEO_H__F5345AA4_A39F_4B07_B843_3D87C4287AA0__INCLUDED_rnrn#if _MSC_VER > 1000rn#pragma oncern#endif // _MSC_VER > 1000rn// aptureVideo.h : header filern//rn#include //DS接口、基类的定义rn#include rn/////////////////////////////////////////////////////////////////////////////rn// CaptureVideo windowrnrn#include rnrn#include rn#ifndef SAFE_RELEASErn#define SAFE_RELEASE( x ) \rnif ( NULL != x ) \rn \rn x->Release( ); \rn x = NULL; \rnrn#endifrnrnclass CaptureVideo : public CWndrnrn// Constructionrnpublic:rn CaptureVideo();rnrn// Attributesrnpublic:rnrn// Operationsrnpublic:rnrn// Overridesrn // ClassWizard generated virtual function overridesrn //AFX_VIRTUAL(CaptureVideo)rn //AFX_VIRTUALrnrn// Implementationrnpublic:rn HRESULT Init(int iDeviceID,HWND hWnd);rn void GrabOneFrame(BOOL bGrab);rn virtual ~CaptureVideo();rnrn // Generated message map functionsrnprotected:rn HRESULT InitCaptureGraphBuilder();rn HRESULT SetupVideoWindow();rn void ResizeVideoWindow();rn void FreeMediaType(AM_MEDIA_TYPE& mt);rn //AFX_MSG(CaptureVideo)rn // NOTE - the ClassWizard will add and remove member functions here.rn //AFX_MSGrn DECLARE_MESSAGE_MAP()rnprivate:rn HWND m_hWnd;rn IGraphBuilder *m_pGB;rn ICaptureGraphBuilder2* m_pCapture;rn IBaseFilter* m_pBF;rn IMediaControl* m_pMC;rn IVideoWindow* m_pVW;rn CComPtr m_pGrabber;rnrn;rnrnCComPtr m_pGrabber;rn我这儿定义有什么错吗?怎么解决呢,我用的是VC6.0+DirectShow9.0rn编译器接示,rnc:\ds\apturevideo.h(68) : error C2065: 'ISampleGrabber' : undeclared identifierrnc:\ds\apturevideo.h(68) : error C2955: 'CComPtr' : use of class template requires template argument listrn c:\program files\microsoft visual studio\vc98\atl\include\atlbase.h(563) : see declaration of 'CComPtr'

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试

关闭