1、视频捕捉图形管理器接口
CComPtr<ICaptureGraphBuilder2> m_pCaptureGraphBuilder;
2、视频捕捉设备
查找设备
HANDLE FindFirstDevice(DeviceSearchType searchType, LPCVOID pvSearchParam, __out PDEVMGR_DEVICE_INFORMATION pdi);
绑定设备
//创建视频捕捉Filter
CHK(m_pVideoCaptureFilter.CoCreateInstance(CLSID_VideoCapture));
//得到视频捕捉属性页接口
CHK(m_pVideoCaptureFilter->QueryInterface(&m_pPropertyBag ));
//视频设备属性页
CComPtr<IPersistPropertyBag> m_pPropertyBag ;
3、视频捕捉filter的pin
预览 pin 和捕捉 和和捕捉 pin
视频捕捉 Filter都提供了预览和捕捉的输出 pin,预览 pin 用来将视频流在屏幕上显示,捕捉pin 用来将视频流写入文件。
预览 pin和输出 pin有下面的区别:
1 为了保证捕捉 pin 对视频桢流量,预览 pin 必要的时候可以停止。
2 经过捕捉 pin 的视频桢都有时间戳,但是预览 pin 的视频流没有时间戳。
预览 pin 的视频流之所以没有时间戳的原因在于 filter 图表管理器在视频流里加一个很小的latency,如果捕捉时间被认为就是 render 时间的话,视频 renderFilter 就认为视频流有一个小小的延迟,如果此时 render filter试图连续播放的时候,就会丢桢。去掉时间戳就保证了视频桢来了就可以播放,不用等待,也不丢桢。
预览 pin的种类GUID 为PIN_CATEGORY_PREVIEW
捕捉 pin的种类GUID 为PIN_CATEGORY_CAPTURE
4、预览视频
CHK(m_pCaptureGraphBuilder->RenderStream( &PIN_CATEGORY_PREVIEW,
5、捕捉视频保存为文件
m_pCaptureGraphBuilder->RenderStream( &PIN_CATEGORY_CAPTURE
m_pCaptureGraphBuilder->RenderStream