现在的位置: 首页 > 综合 > 正文

【视频处理工程】1、DirectShow基本概念

2014年09月05日 ⁄ 综合 ⁄ 共 1545字 ⁄ 字号 评论关闭

所谓的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键就会进行播放。



抱歉!评论已关闭.