`
gaofen100
  • 浏览: 1228143 次
文章分类
社区版块
存档分类
最新评论

DirectShow的视频捕获(1)

 
阅读更多

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,色彩空间转换过滤器时,是不需要在图形或仅仅是作为一个直通滤波器。

分享到:
评论

相关推荐

    通过DirectShow进行视频预览和捕获

    1. **捕获滤波器(Capture Filter)**:这是视频捕获的核心,它可以控制设备的捕获参数,并处理来自设备的数据。 2. **文件写入滤波器(File Writer Filter)**:将捕获的数据写入文件,如ASF Writer Filter用于创建...

    视频捕获源程序 directShow视频捕获

    这个压缩包中的"视频捕获源程序 directShow视频捕获"是一个基于DirectShow的示例程序,它提供了视频捕获的功能,可以帮助开发者深入理解如何利用DirectShow SDK来创建自己的视频捕获应用。 DirectShow主要由两部分...

    VC通过DirectShow进行视频预览和捕获

    对于视频捕获,你还需要配置捕获设备的属性,如分辨率、帧率等,然后使用Sample Grabber或Media Sample Grabber滤镜来截取视频帧。捕获的帧可以保存为文件,或者实时处理。 9. **错误处理**: 在开发过程中,必须...

    directshow 视频捕获例子

    这个压缩包中的内容是一个DirectShow视频捕获的例子,对于初学者或者开发者来说,这是一个非常实用的学习资源。下面将详细解析这个例子中的关键知识点。 1. **DirectShow概念与架构**: DirectShow是一个组件对象...

    利用VC++实现基于DirectShow的视频捕获.pdf

    ### 基于VC++与DirectShow的视频捕获技术详解 #### 引言 在Windows平台上,视频捕获的传统处理方法曾依赖于VFW(Video For Windows)函数,但随着技术的发展,这一传统模式逐渐暴露出其局限性,尤其是在面向对象...

    基于directshow的视频捕获

    基于directshow的视频捕获.pdf,视频捕获,过滤器

    基于DirectShow视频及图片捕获软件的开发

    ### 基于DirectShow视频及图片捕获软件的开发 #### 一、DirectShow概述 **DirectShow** 是微软公司推出的一个强大的流媒体处理框架,主要应用在Windows平台上。DirectShow不仅支持视频和音频的播放,也支持媒体...

    一个简单的基于DirectShow的视频捕获程序

    DirectShow是微软开发的一个强大的...这个简单的DirectShow视频捕获程序的实现,为初学者提供了理解多媒体处理和DirectShow框架的良好起点。通过深入学习和实践,开发者可以构建更复杂的应用,如视频录制、直播推流等。

    基于DirectShow的视频捕获

    #### 五、DirectShow视频捕获实现 在DirectShow中实现视频捕获主要涉及以下步骤: 1. **初始化**:创建过滤器图表管理器对象。 2. **添加过滤器**:将源过滤器(如视频捕获设备)和渲染过滤器添加到过滤器图表中。...

    DirectShow 开发视频捕获.rar

    本压缩包文件"DirectShow 开发视频捕获.rar"显然包含了关于如何使用DirectShow进行视频捕获的实例代码或教程。 在DirectShow中,视频捕获通常涉及以下核心概念和技术: 1. **过滤器(Filters)**:DirectShow的...

    DirectShow视频预览捕获

    这个程序示例是基于DirectShow的视频捕获和预览功能,非常适合初学者学习和理解DirectShow的工作原理。 在DirectShow中,视频捕获涉及到以下几个关键概念: 1. **Filter Graph**:Filter Graph是DirectShow的核心...

    F# + DirectShow.NET 捕获摄像头视频源码

    DirectShow.NET是一个开源项目,它为.NET Framework提供了对Microsoft DirectShow API的全面封装,允许开发者轻松地创建多媒体应用程序,如视频播放器、视频编辑工具以及我们的案例——摄像头视频捕获。 首先,让...

    DirectShow 开发视频捕获_Vc_

    在这个“DirectShow 开发视频捕获_Vc_”项目中,我们将探讨如何使用C++(VC++)和DirectShow API来构建一个视频捕获程序。 1. **DirectShow基础知识**: - DirectShow是Microsoft的Media Foundation之前的多媒体...

    directshow实现视频捕获(源码)vs2005

    代码中,`CCaptureClass`是自定义的类,它封装了DirectShow视频捕获的核心功能。这个类的成员包括对滤波器链表的管理、捕获和预览视频的相关接口。例如,`EnumDevices`方法用于枚举可用的视频设备,`ConfigCameraPin...

    DirectShow视频音频捕捉

    在这个“DirectShow视频音频捕捉”的项目中,我们将深入探讨如何利用DirectShow来实现摄像头画面的捕获以及系统声音的捕获。 首先,`CaptionVideo.vcxproj`和`.vcxproj.user`是Visual Studio的项目文件,用于定义...

    DirectShow进行视频预览和捕获.rar

    DirectShow主要应用于Windows平台,它构建在COM(组件对象模型)之上,提供了丰富的API接口,能够实现高质量的媒体播放、视频捕获、视频编码和解码等多种功能。在视频预览和捕获方面,DirectShow提供了一整套的类和...

    Windows下通过DirectShow控制USB摄像头,捕获视频流

    在这个场景下,我们将使用"视频捕获"过滤器来获取摄像头的实时视频流。 要实现这个功能,你需要具备以下关键步骤: 1. **安装DirectX SDK**:如描述中所述,编译和运行相关的DirectShow程序之前,确保已安装了...

    DirectShow 视频捕获源码示例,C 技术实现.rar

    采用C 的DirectShow技术编写的视频捕获源码示例,测试电脑没有摄像头,可能程序还有些小错误,不过对于了解视频捕获原理及编写方法应该有帮助,有这方面需要的朋友可以下载参考一下。

    C# WinForm DirectShow视频采集及图片抓取实例DxSnap(绝对源码)

    1. **视频捕获设备选择**:项目首先需要识别并枚举系统中可用的视频捕获设备,如内置摄像头或外接USB摄像头。这可以通过`ICaptureGraphBuilder2`接口的`FindSourceByCategory`方法实现。 2. **过滤器图构建**:构建...

Global site tag (gtag.js) - Google Analytics