用DirectShow实现视频采集(一)

DirectShow作为DirectX的一个子集,它为用户提供了强大、方便的多媒体开接口,并且它拥有直接操作硬件的能力,这使得它的效率远胜于用GDI等图形方式编写的多媒体程序。这里结合实践中运用DirectShow实现视频采集(WIN32) 来加深对DirectShow的理解和操作能力。
1.系统环境及开发环境
a.系统支持DirectX(Win 2K以上系统)
b.VC++ 6.0安装有DirectX SDK(最好与系统支持的DirectX版本相同)
c.视频采集设备(如USB摄像头,本文以USB PC Camera 310P为例)
2.基本思想
DirectShow的基本原理是多媒体数据在过滤器图表(Filter Graph)中流动,通过过滤器图表中各过滤器(Filter)实现在功能,最终实现多媒体数据在渲染过滤器(Vendering Filters)中的显示和回放。
前面我们已经知道,一般过滤器可分为三类:源过滤器(Source Filters)、转换过滤器(Transform Filters)、渲染过滤器(Vendering Filters)。它们分别完成数据提供、数据格式转换(压缩编码等)和数据渲染和回放功能。所以,为了实现在WIN32系统下的视频采集,我们首先要构造出一个适当的过滤器图表,然后通过应用程序对过滤器图表的管理来完成视频采集的功能。
这里我们一般需要2至3个过滤器。为什么这个数字会不准确呢?那是因为一方面系统采集设备的驱动模型是不确定的(一般有WDM和VFW两种);另一方面同一采集设备它们的Filter会由于驱动程序的差异造成Filter中引脚(Pin)的不一致;还有就 是不同总线的采集设备(PCI、USB、AGP)它们的Filter也是不一致的。比如:同为USB摄像头,有些Filter有两个输出引脚(Capture和Preview);而有些Filter则只有一个输出引脚(Capture)。这里Previe w引脚用来将做视频预览,Capture引脚用来将输入数据以供编码、保存等用处。
这几个过滤器分别是:
a.Video Capture Filter 采集设备Filter
b.Smart Tee Filter 将没有Preview引脚Filter的Capture引脚分为两支数据流(可选)
c.Video Venderer 视频渲染及回放Filter
通过上面3个过滤器,我们可以构造出一个完整的视频采集过滤器图表(如图1)
点击放大浏览
图1
我们也可以对上面的过滤器图表稍做修改,将它变为一个既可以预览视频,又可以将视频保存为媒体文件的图表(如图2)。
点击放大浏览
图2
图表构造出来后,接下来就午剩下具体的实现了,我们只需依次构造每个Filter,然后将各信Filter的Pin按序相连即可完成图表的构造。最后,我们通过应用程序向图表发送命令(通过图表管理器完成)来控制整个视频采集的流程。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DirectShow是一个用于处理音频和视频流的微软API。它可以用于实现视频采集,也可以用于实现视频播放、视频编辑和视频转码等多种应用。 以下是使用DirectShow实现视频采集的基本步骤: 1.创建DirectShow Filter Graph对象 在代码中创建一个Filter Graph对象,用于管理视频采集过程中的各个组件。 2.创建视频采集设备 使用DirectShow的Device Enumerator接口枚举出系统中可用的视频采集设备,并选择其中一个进行采集。 3.创建视频采集滤镜 使用DirectShow的接口创建视频采集滤镜,并将其添加到Filter Graph中。 4.设置视频采集参数 对视频采集滤镜进行设置,如设置视频格式、分辨率、帧率等参数。 5.创建视频编码滤镜(可选) 如果需要对采集到的视频进行编码,可以使用DirectShow的接口创建视频编码滤镜,并将其添加到Filter Graph中。 6.创建渲染器 使用DirectShow的接口创建一个渲染器,并将其添加到Filter Graph中。 7.连接各个组件 使用DirectShow的接口将视频采集滤镜、视频编码滤镜(可选)和渲染器连接起来,形成一个完整的视频采集流程。 8.开始采集 调用Filter Graph对象的Run()方法,开始视频采集。 9.停止采集 调用Filter Graph对象的Stop()方法,停止视频采集。 10.释放资源 释放创建的各个组件,并释放Filter Graph对象。 以上是使用DirectShow实现视频采集的基本步骤。具体实现可以参考DirectShow SDK中的示例代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值