【视频处理工程】1、DirectShow基本概念
2014-02-10 15:37
211 查看
所谓的DirectShow,通常指的是微软提供的Microsoft DirectShow API,这是一种可用于Windows平台上处理音视频回放、采集等工作的应用的流媒体框架。早起的DirectShow框架包含在了DirectX之内一直到DirectX 9.0版本。由于近年来相关资料较少,我们手中的两本相关的书籍《DirectShow开发指南》和《Visual
C++音频视频处理技术及工程实践》中所讲解的内容都是基于这个版本。而此后更新的DirectShow已经被迁移到了Windows SDKs之中。在微软的官方网站上可以免费下载。
经过了多年的发展,DirectShow本身已经略显老旧。因此微软发布了另一种基于COM(组件对象模型)的多媒体应用平台Windows Media Foundation并在逐渐用其取代DirectShow,就如同当年DirectShow取代VFW一样。除此之外,Windows
Media Player SDK作为其更上层的工具也可以完成DirectShow的工作。另外,同著名的开源视频处理工具ffmpeg相结合的产物还有Lav Filter以及ffdshow等,这些内容在适当的时候都将会进行学习。
简单描述一下DirectShow的系统架构:
DirectShow系统位于应用层,其参与数据处理的各个模块被称作filter,各个不同的Filter构成了一个Filter Graph用于表示DirectShow的完整逻辑架构。另外,应用程序通过Filter Graph Manager这个对象实现Filter Graph中数据流的管理,比如调用上层API如“Run”和“Stop”等控制开启和停止数据流。
各种filter:DirectShow中使用的filter主要分为三类:(1)源Filter,主要作用是从文件、流媒体和各种视频获取设备获取数据;(2)变换Filter,主要作用有音视频编解码、数据流的分离/合成和音视频信息的后处理等;(3)渲染Filter,主要负责数据的最终流向,如在显示和播放设备中播放。
从更微观的层面讲,各个Filter之间通过Pin相互连接,形成一条顺序链路。不同的滤波器之间的Pin设置不同,源Filter只有输出Pin,变换Filter有输出和输出Pin,渲染Filter只有输入Pin。本质上讲,通过DirectShow进行视频处理的本质就是通过Pin将Filter连接起来对数据进行逐级处理。
DirectShow开发所需要的SDK开发库:
在完成Windows SDK安装后,需要我们自己生成strmbase.lib和strmbase.lib两个静态库。过程很简单:找到安装Windows SDKs的安装目录(这里我们假定开发环境是Windows 7+Visual Studio 2010),在C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow目录(或者是其他自定义位置)可以找到baseclasses文件夹,用VS打开其中的解决方案baseclasses.sln,分别在Debug和Release模式下编译,之后就可以在Debug和Release目录下分别生成strmbasd.lib和strmbase.lib两个静态库文件。
GraphEdt软件:
graphedt.exe是微软提供的一个实用的应用程序,可以用它直接打开媒体文件并剖析其Filter Graph,也可以手动建立Filter Graph并逐个手动添加。使用File->Render Media File选项打开一个可以支持的视频,就会显示出播放该视频的Filter
Graph,单击play键就会进行播放。
C++音频视频处理技术及工程实践》中所讲解的内容都是基于这个版本。而此后更新的DirectShow已经被迁移到了Windows SDKs之中。在微软的官方网站上可以免费下载。
经过了多年的发展,DirectShow本身已经略显老旧。因此微软发布了另一种基于COM(组件对象模型)的多媒体应用平台Windows Media Foundation并在逐渐用其取代DirectShow,就如同当年DirectShow取代VFW一样。除此之外,Windows
Media Player SDK作为其更上层的工具也可以完成DirectShow的工作。另外,同著名的开源视频处理工具ffmpeg相结合的产物还有Lav Filter以及ffdshow等,这些内容在适当的时候都将会进行学习。
简单描述一下DirectShow的系统架构:
DirectShow系统位于应用层,其参与数据处理的各个模块被称作filter,各个不同的Filter构成了一个Filter Graph用于表示DirectShow的完整逻辑架构。另外,应用程序通过Filter Graph Manager这个对象实现Filter Graph中数据流的管理,比如调用上层API如“Run”和“Stop”等控制开启和停止数据流。
各种filter:DirectShow中使用的filter主要分为三类:(1)源Filter,主要作用是从文件、流媒体和各种视频获取设备获取数据;(2)变换Filter,主要作用有音视频编解码、数据流的分离/合成和音视频信息的后处理等;(3)渲染Filter,主要负责数据的最终流向,如在显示和播放设备中播放。
从更微观的层面讲,各个Filter之间通过Pin相互连接,形成一条顺序链路。不同的滤波器之间的Pin设置不同,源Filter只有输出Pin,变换Filter有输出和输出Pin,渲染Filter只有输入Pin。本质上讲,通过DirectShow进行视频处理的本质就是通过Pin将Filter连接起来对数据进行逐级处理。
DirectShow开发所需要的SDK开发库:
在完成Windows SDK安装后,需要我们自己生成strmbase.lib和strmbase.lib两个静态库。过程很简单:找到安装Windows SDKs的安装目录(这里我们假定开发环境是Windows 7+Visual Studio 2010),在C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow目录(或者是其他自定义位置)可以找到baseclasses文件夹,用VS打开其中的解决方案baseclasses.sln,分别在Debug和Release模式下编译,之后就可以在Debug和Release目录下分别生成strmbasd.lib和strmbase.lib两个静态库文件。
GraphEdt软件:
graphedt.exe是微软提供的一个实用的应用程序,可以用它直接打开媒体文件并剖析其Filter Graph,也可以手动建立Filter Graph并逐个手动添加。使用File->Render Media File选项打开一个可以支持的视频,就会显示出播放该视频的Filter
Graph,单击play键就会进行播放。
相关文章推荐
- 【视频处理工程】4、DirectShow基本开发过程(二)
- 【视频处理工程】3、DirectShow基本开发过程(一)
- 【视频处理工程】5、DirectShow的事件交互和数据流控制机制
- (转)多媒体视频处理的一些基本概念
- 关于DirectShow在Video视频处理方面的的一些基本应用
- 【视频处理工程】2、DirectShow的基本单元:Filter
- 图像处理基本概念、术语
- 图像处理零基础起步之一些基本概念1
- 8_14 日学到的新知识(简单的工厂模式的实现, MVC 模式的基本概念,软件工程中的四种开发模型, 以及软件工程中的一些小知识点)
- 关于视频的一些基本概念——视频格式、视频编码、压缩率的关系
- 音视频开发:[4]16.1 基本概念
- 音视频编码基本概念
- 【Objective-C】OC中字符串(NSString)的基本概念和常用处理方法
- 用opencv处理视频时的一个基本格式
- 音视频编解码技术之视频编码基本概念介绍
- VC+DirectShow对视频进行图片处理(转)
- MPEG4 & H.264学习笔记之二 ------ 视频编码基本概念及时域模型
- VC+DirectShow对视频进行图片处理-VC教程-电脑教程之家.htm
- 数字图像处理的基本概念
- 信号处理的基本概念