概述:通过DirectShow实现本机摄像头的视频采集,以及利用dshow模块通过手动实现IPin和IBaseFilter等实现虚拟摄像头。
总结:我们知道目前pc平台的视频采集主要有DirectShow和MediaFoundiation,而且虚拟摄像头的实现一般也是利用dshow的baseclass模块进行实现,而我们则选择通过手动实现IPin和IBaseFilter模块抛弃baseclass,从而对于DShow的采集内部流程更加了解。
首先简单介绍一下DirectShow:
DShow是windows平台上的流媒体框架,主要提供了媒体流的采集和回放功能,主要支持的格式有ASF,MPEG,AVI,MP3,WAV等。同时支持使用wdm驱动或者早期的vfw驱动进行媒体流的采集。
DirectShow是建立在组件对象模型(com)上的,因此当我们编写DirectShow应用时,需要具备Com的编写知识,后续我们会简单介绍,现在我们简单介绍一下DirectShow的接口,也是我们外部调用的一些常用接口。
IGrapBuilder:构造Filter Graph接口,建立和管理一系列的Filter。
IMediaControl:控制多媒体流在过滤图表中的流动,如启动停止等。
IVideoWindow:控制视频渲染窗口的属性。
IBaseFilter:用于定义一个具体的FIlter,实现多媒体数据的处理。
IPin:用于管理两个Filter之间的Pin,从而实现连接Filter。
ISampleGrabberCB:ISampleGrabber的回调接口,主要用于实现采集数据回调。
DirectShow程序是由