MSDN 原文地址 http://msdn.microsoft.com/en-us/library/ms940077.aspx。
声明:本人的英文水平实在不好,因为每次看msdn的时候都需要翻译一下,索性将文章翻译下一,以后就看自己的译文。有很大翻译不到位的地方,请大家多多包涵。
在这篇文章中,视频捕获是指从一个硬件设备中获取视频的应用。代表性的视频捕获设备是摄像机,当然也可以是其他设备。捕获的视频可以存放在磁盘中或者实时回放。
这一部分描述一些你必须理解的使用directShow来捕获的视频的概念。
1. 捕获步骤
2. Capture Graph Builder 捕捉图表生成器
3. 使用Capture Graph Builder创建图表
4. 视频捕获过滤器
5. 选择捕获设备
6. 预览视频
7. 旋转镜头
8. 捕获应用的接口
9. 捕获视频存放到一个文件中
10. 控制捕获图表
11. 视频捕获任务
12. 捕获的高级主题
架构
Directshow使用capture Graph Builder对象来创建视频捕获过滤器。详细参考Capture Graph Builder。这个结构体的创建依赖于摄像设备输出引脚的数量。
两个引脚的摄像设备,一个引脚用来视频捕获,一个用来静态图片的捕获。这样两个引脚的设备,Capture Graph Builder 要插入一个 Smart Tee 过滤器。这个过滤器将输入的视频流分成两部分,一部分用来实际的视频捕获,一部分用于预览。
下面的图表显示了两脚摄像设备的捕获结构图。
(1) DMO wrapper:
DMO DirectX媒体对象(DirectX Media Objects,简称DMOs)
三引脚的摄像设备,一个用来视频捕获,一个用来静态图片,还有一个直接预览引脚。由于预览引脚直接提供了驱动层的预览管道支持,所以Capture Graph Builder不包含Smart Tee。
下面的图表显示了三引脚摄像设备的捕获结构图。
下面是两脚与三脚结构的主要部分描述:
摄像设备
摄像驱动提供OS和实际摄像设备的底层接口
Smart Tee
Smart Tee 过滤器让一个输入的图片数据流分成两个输出流,一个用来世界的视频捕获,一个用来驱动摄像机的取景或者预览窗口。
缓存过滤器
缓冲区过滤器添加到过滤图表中,如果DMO编码连接到主媒体过滤器,这个过滤器插入到过滤图表中使得摄像设备支持不实时的捕获。这使得摄像程序和设备在较低成本的硬件上开发。
颜色空间转换过滤器
这个过滤器将捕获的视频数据从RGB或者YUV颜色空间转换为对应的颜色空间(两个颜色空间互转)。Capture Graph Builder 自动插入这个过滤器到捕获和静态图像管道中,如果视频捕获过滤器的输出引脚的媒体类型和编码或者图像下沉的输入引脚的媒体类型不一样。这个是用的含义是你可以提高捕获图形的性能,确保这些输出和输入引脚的媒体类型相匹配,因此消除了颜色转换这个步骤。
显示预览的视频渲染必须能够回退到基于GDI的渲染。因为GDI是用RGB颜色格式,如果视频捕获过滤器的输入引脚是用YUV颜色格式,Capture Graph Builder 经常插入颜色空间转换过滤器到预览管道。如果视频捕获过滤器的预览暑促是一个RGB格式的并且颜色深度GDI支持,颜色空间转换过滤器会被忽略。
文件写入器
文件写入器是一个多路转接器,由音频和视频数据组合,并且输出到高级系统格式的文件。
DMO组包过滤器
这个过滤器提供一个DirectShow和DMO之间的接口。Windows Media Video 提供了一个DMO。
视频渲染
视频渲染提供图形数据到摄像机取景窗口或者预览窗口。
当视频渲染器通过过滤图标初始化连接,它依赖于GDI。为了支持这个,视频渲染的上游过滤器必须支持RGB颜色空间。基于视频捕获的输出颜色格式,Capture Graph Builder可能需要在视频渲染前插入颜色空间转换过滤器。在分配空间的时候,视频渲染枚举上游过滤器支持的所有的媒体类型。在枚举的过程当中,视频渲染器尝试为每一个枚举到的过滤器创建一个DirectShow表面(surface实在不会翻译)。如果能够成功创建这个DirectShow表面则停止枚举,并且使用这个DirectShow表面作为渲染目标。视频渲染器必须支持GDI模式有两个原因:首先显示硬件可能没有一定的拉伸和缩放操作的原生支持。在这种情况下,视频渲染不能使用DirectDraw调用这些图像操作,而必须通过GDI使用软件例程来代替。其次,在多个剪切区域的情况下,视频渲染会从基于DirectDraw的渲染回退到居于GDI的渲染。在初始化连接时,视频渲染需要使用GDI,正因为如此,上游过滤器需要支持RGB。由于视频捕获驱动不总是让RGB可用,所以需要插入颜色转换。在进入运行模式时,在分配的时间,视频渲染器会枚举上游过滤器支持的所有媒体类型,并且尝试创建DDraw表面。如果有适合的创建的DDraw 表面将会被使用。
影像下沉
图片下沉是一个成像API接口,用来写静态图片。
从上面的描述你可以明白,Capture Graph Builder 可以使用一些不同的过滤器配置一个捕获图来适应硬件和你的设备的编码参数。通过精心策划和协调硬件的能力和你的设备需要的要求可以提高性能。
最好的捕获图形性能来发生时,视频渲染器可以渲染其输出使用DirectDraw,色彩空间转换过滤器时,是不需要在图形或仅仅是作为一个直通滤波器。