"Programming Microsoft DirectShow for Digital Video and Television"中简介的翻译

用于数字视频和电视信号的Microsoft DirectShow编程技术

简介:
20世纪90年代,个人电脑发生了巨大的变化,即进入了一个信息处

理时代,成为了一种定位与字处理和处理表格的设备。在即将进入

21世纪时,个人电脑已经成为了一个多媒体处理机,可以播放音乐

、电影、DVD,也可以在上面玩游戏,还可以在上面看到CNN直播的

新闻。这个巨大的变化在一定程度上归功于个人电脑在处理器、内

存储器和外存储器方面的指数级的惊人发展。当然,这也可以归功

于著名的摩尔定律(该定律十分准确地指出,电脑的中央处理器速

度将每18月提高一倍。)
摩尔定律也许造就了电脑处理多媒体的时代,但实际上是一类全新

的外设产品使电脑处理多媒体的时代成为了历史的主流,比如个人

数字助理、网络摄像头、数码相机、数码摄像机、MP3播放器和时

髦的移动电话。在数码摄像机出现前,只有像史蒂文•斯皮尔伯格

和乔治•卢卡斯这样的人才可能使用电脑剪辑电影。而现在任何一

个个人电脑用户都可以使用Microsoft Windows Movie Maker,

Adobe Premiere或其他数以百记的软件来制作他们自己的电影。这

些电影可以附属在电子邮件中发送到网上,也可以以DVD的形式发

布,这样能获得影院级的视听享受。在家中制作出“好莱坞大片”

正变得越来越简单。
    在这个革命性的过程中,音乐的变化是最大的。1990年,

CD格式正在快速发展。而十年后,CD在音乐上的应用走到了尽头,

已经被一些新的格式所取代,如MP3、Windows Media和RealAudio

等,它们共同的特点是能在保持音质的同时减少大量的存储空间。

一张过去需要整张CD共700 MB空间的音乐专辑现在可以被压缩成大

约64MB大小的MP3 或 Windows Media 文件,然后存入存储卡中,

就可以在电脑、个人数字助理和MP3播放器中播放了。MP3之类的格

式是用来对音乐进行编码和进行音乐传播的,而像Napster、

Gnutella之类的歌曲交换服务也开始出现了,这使得世界各地的唱

片公司十分惊慌。现在音乐下载已经成为一件十分简单的事,甚至

可以用拨号式调制解调器(它不是目前最快的传输设备)来下载,

更重要的是这样的事每天都会发生数以百万次。
    在这个过程中,出现了很多在个人电脑上处理媒体的软件

。它们可以捕捉视频和音频数据,用窄带或宽带的格式编码以保存

数据,并可以被编辑和预览。如果不用这些软件,个人电脑也能以

1990年时的方式工作(只不过快了很多倍),但你只能面对枯燥的

工作方式。
    处于竞争的目的,许多媒体文件格式内部结构的细节都属

于严格保密的信息,而且它们也难以琢磨。几乎所有的编码方式都

使用了非常复杂的数学分析技术来达到把音频和视频信息流压缩成

较少的二进制码。在使用个人电脑进行多媒体编程的早期,这些技

术需要用户自己掌握,往往需要几个月甚至几年。
    如果个人电脑能提供一些处理音频和视频信号的基本功能

,如捕捉、编码解码、剪辑、回放等,那么情况会有所改观。有了

这些帮助,编制程序的人可以把注意力集中到多媒体处理程序的细

节上,而不用担心那些没完没了的、细枝末节的,甚至可能极大地

影响编程的速度。
    我在2001年10月也碰到了这个问题,于是我产生了一个想

法:写一个能把一台家用型数码摄象机作为个人电脑附属设备的程

序。这类数码摄象机用的miniDV带能存储18 GB的数据,相当与30

张CD!
    当我开始做我这个项目时,我对如何用软件来控制数码摄

象机知之甚少,也不知道如何读取数码摄象机上的数据或者向其中

写入数据。我研究了微软的DirectX技术(它包含在操作系统的核

心部分中,是一种处理多媒体的技术)的相关文档,并发现我的很

多问题已由这种技术解决了。微软的DirectShow技术是DirectX技

术中专门用于视频和音频信息处理的一部分,已经可以完全满足我

对数码摄象机的控制要求。使用DirectShow技术,我可以把注意力

集中到如何把数据从硬盘写入数码摄象机中并保存,这是程序的关

键部分。而DirectShow则负责与数码摄象机的通信。我本来预计这

个程序需要两个月来完成,但实际上只用了2个星期就完成了!我

在完成了一个样机后,就开始申请这方面的专利。(十分幸运的是

我在很多年内都将持有这个专利)
    虽然DirectShow是个有用的技术,但包含在DirectX的软

件开发包(SDK)中的文档却是过于深奥了,只适合于对

DirectShow熟悉的用户,而不是广大初学者。所以,我花了不少时

间在读懂文档上。我认为这种文档的最好补充是一本能循序渐进地

指导编程人员了解DirectShow基础知识的书,还应该像烹调书一样

能提供一些不同应用的实例。于是,我就写了这本书,“用于数字

视频和电视信号的Microsoft DirectShow编程技术”。
    我估计微软出版社也认为这是一件有意义的书。





DirectShow技术的发展史
20世纪90年代早期,在Windows 3.1发布之后,人们开发了许多硬

件设备来扩展它图形化用户界面的性能。其中包括使用电荷耦合器

件技术输出低分辨率黑白图象的数字摄像头(就像今天的网络摄像

头)。这些设备通常使用一般用于连接打印机的并口以连接到电脑

上,并通过驱动程序来控制从摄像头传输数据到电脑。随着这类设

备的发展,微软发布了Windows视频技术(VFW),这是一套用于设

备连接并提供基本的视频音频捕捉功能的应用程序开发界面(API

)。VFW技术已经被许多开发人员证明是比较完善的,但它仍有一

定的局限性,例如它难以支持流行的视频格式MPEG,只有重新改写

VFW技术才能做到。
在Windows 95发布前,微软开始进行一名为“水晶”的项目,目的

是建立一套能够是VFW在32位环境下完全支持MPEG的新API。这个项

目看上去并不难,但技术人员发现像数码摄象机和基于个人电脑的

电视卡之类的许多设备即将出现在市场上,而这些设备需要一个更

高技术层面上的支持,甚至比他们在下一代项目中计划的还要复杂

。在仔细考虑后,“水晶”项目的设计者们认识到这个项目不能解

决所有问题,甚至把它集中到一个API中都很难。
于是,“水晶”项目的设计者们选择了一个框架式结构,即组件是

像积木一样搭建的。为了简化一个复杂多媒体应用程序的结构,“

水晶”提供了一些基本组件,称为“滤波器”。它可以完成一些基

本的功能,如从文件中读如数据、通过音箱回放声音、在屏幕上回

放视频等等。
“水晶”使用最新的组件对象模型(COM),把这些滤波器连接成

了“滤波器视图”,使来自任意即时捕捉设备的比特流能传到最终

的输出屏幕上。通过组件对象模型,每个滤波器可以其他已经在滤

波器视图中滤波器的情况。而且由于“水晶”体系下的滤波器是各

自独立的,第三方开发人员也可以为自己的硬件或软件按需创造出

滤波器。由此,“水晶”具有了几乎无限的扩展性。如果你需要使

用一些它没有的功能,你可以通过编写一个自己的滤波器来实现。
“水晶”的开发人员从一个微软的开发项目——“时钟机构”中获

得了一些有用信息,这是一个提供处理流数据的模块化半独立组件

基本框架的项目。从此,“水晶”发展成一套用于视频和音频处理

的完整API,微软于1995年发布了DirectX 多媒体软件开发包

(DirectX Media SDK)的一个部分,即ActiveMovie。而在1996年

,微软把它改名为DirectShow,以表示它和DirectX技术间的关系

,这个名称一直沿用到了今天。
1998年,随着DVD和模拟电视的应用越来越多,DirectShow的后续

版本也加入了对他们的支持。最终在2000年,DirectShow被完整地

集成到了DirectX中,作为DirectX 8的一部分发布。这意味着每台

装有DirectX的使用Windows平台的电脑(现在大部分电脑都是这样

的)可以使用DirectShow的所有功能并使用任何与之兼容的基于

DirectShow的应用程序。DirectX 8同时提供了对Windows Media技

术的支持,使用该技术可以在较低带宽的条件下传递数据并使用

DirectShow的剪辑功能来处理高质量的音频和视频信息。
微软在发布Windows ME时加入了一个新的应用程序,Windows 影片

制作器(Windows Movie Maker)。它基于DirectShow技术,为数

码摄象机的初级用户提供了易于操作的视频捕捉、编辑和输出功能

,这显示了DirectShow API的强大功能。在DirectX 8发布后的两

年内,我们可以认为大多数流行的视频编辑软件都使用了

DirectShow技术来处理在许多数码摄象机间进行通信的问题。他们

作出了与我相同的选择,使用了DirectShow技术来处理那些会耗费

很多时间来研究、编码、测试的低层次工作。
随着DirectX 9的发布(就在最近,我完成本书时),除了视频混

合回放滤波器(Video Mixing Renderer filter)之外,其中的

DirectShow部分并没有很大的变化。视频混合回放(VMR)技术使

编程者可以把多个视频流合成一个,然后在窗口中播放或用作“贴

图材质”(有点像壁纸,用于Direct3D技术创造的3D物体的表面)


几乎所有的录制或播放视频或音频的Windows平台下的应用软件和

工具都能使用DirectShow技术。DirectShow技术的应用有很多,其

中两个最为典型的例子是前面提到过的Windows Movie Maker和

Windows Media Player。自Windows ME版后,它们都作为微软操作

系统的标准组件与之一同发布。而现在,每天都有数以百万记的人

在使用它们。







DirectShow的功能
    DirectShow的功能可以被分为3大类,分别代表了3种

DirectShow滤波器的基本类型。DirectShow技术可以从麦克风或音

频输入口得到音频数据,控制数码摄像机或D-VHS格式的录像机(

一种可以存储高分辨率数字图像的新型录像机),也可以从网络摄

像头之类的实时摄像头中采集视频和音频信息。DirectShow也能把

一个文件当作实时流打开,这样你就能打开以前采集的信息了。
    当多媒体流被采集到了电脑中后,就能用DirectShow滤波

器来对它进行转换处理。转换滤波器能实现许多功能,比如把彩色

视频转换成黑白视频、改变视频流的大小、在音频流中加入回声效

果等。这些滤波器能够像积木一样一个个连接起来,直到得到预想

的结果。音频和视频流可以被拆分并同时输入到多个滤波器中,就

像在有线电视或卫星接收器的同轴电缆上加装分配器一样。多媒体

流也复合使用,或者多路合并,使2个或2个以上的流能合并成一个

流。使用这种技术,可以把一个声道的音频信息加入到一个视频流

中,并使它们同步。
    在经过转换滤波器的复杂处理后,就只需要把多媒体流通

过显示设备、音响和其他设备回放。DirectShow中内建了不少回放

滤波器,例如在一个窗口中播放视频。你也可以把多媒体流存到硬

盘上或存到像数码摄像机的设备上。
    大多数基于DirectShow的应用程序都不需要使用

DirectShow的所有功能。例如Windows Media Player不怎么需要视

频采集,但需要支持许多多媒体文件格式,如MP3、MPEG、AVI、

WAV、Windows Media等等。你可以把几乎所有格式的多媒体文件(

除了Apple QuickTime和RealNetworks media等格式)交给Windows

Media Player,它能毫不费力地播放这些格式的文件。这是因为

Windows Media Player继承了DirectShow的所有功能,能播放各式

各样的多媒体文件。
    而Windows Movie Maker则几乎用到了DirectShow的所有

功能。它为与数码摄像机或网络摄像头连接并处理提供了全方位的

支持。采集了视频信息后,可以进行编辑、优化,加入时间帧的支

持,也可以混入一个声道,再以一个新的个性化文件的形式存储到

硬盘或数码摄像机上。你甚至可以把一个高带宽高分辨率的影片以

低带宽低分辨率的格式存到硬盘上,并附到电子邮件中或在网站上

发布。这些功能全部源于DirectShow技术,而Windows Movie

Maker只不过是调用了它们而已。
    DirectShow的易用性使人们可以用它快速开发应用程序。

面对一个特定问题时,可以编写一个特定的DirectShow滤波器来解

决。在大学和研究机构(也包括微软)的许多工程,如机器视觉(

使用电脑识别图像)和其他视频音频处理工程(包括实时信号处理

)中,都得到了广泛的应用。再看了这本书后,写一个DirectShow

滤波器将变得十分简单。许多有一定C++基础的人都能独立写出一

个滤波器。
    当然,DirectShow技术也会遇到一些它不能解决的问题,

这时你最好自己来解决它们。这类问题主要在视频处理的高端应用

上,如面对每秒有数百万字节的高质量视频流或多个摄像头同时输

出的混合流时。现在这类应用程序甚至使目前最快的电脑在处理器

速度、内存和网络带宽上达到了极限。这并不意味着你永远不能用

DirectShow技术处理高质量的被采集信息或实时的多摄像头信息编

辑。你完全可以编写出这类应用程序。但问题是你找不到足够快的

电脑来运行这类程序。也许你会用15000美元买一台3 GHz的双处理

器Pentium 4系统(当然如果你对这类高性能要求的工作有兴趣,

也许会有足够的钱来买)。
    在任何情况下,DirectShow技术都不可能神奇到能处理所

有视频。视频处理需要大量的处理器和内存资源,很多DirectShow

应用程序都会用尽电脑的所有资源。所以在你决定在项目中使用

DirectShow技术之前,应该对这项技术有一个准确的估计。

DirectShow是一个不错的多媒体处理框架,但不是完美无缺的。对

DirectShow技术的理解完全取决与你自己。
    


硬件、软件的基本要求
    尽管基于DirectShow的应用程序在大部分电脑上都能使用

,我仍建议你在使用书中附录的代码前先看以下以下要求,从而确

保代码的正常使用。如果你的机器配置与我所述的有较大的区别,

那么得出的结果与书上提到的也会有很多不同。尽管你可以在一台

486档次的电脑上播放MP3格式的音频,但是在同一台机器上进行

MP3文件的编码则会耗费许多时间,大多数人都不能忍受那么长时

间的等待。而在处理视频流时,你应该找一台最好的机器有足够快

的中央处理器、足够大的内存和硬盘。能运行本书附录例子的基本

配置如下,见表格。
表1-1.基本硬件要求
    CPU                        至

少1 GHz以上的Intel Celeron, Pentium III, or Pentium 4; AMD

Duron or Athlon处理器
    内存                    至少256 MB

;建议512 MB以上,可以获得更好的效果
    硬盘                    至少30 GB

,其中至少有15 GB剩余空间
    显卡                    ATI Radeon

8500 All-In-Wonder(或相当级别的带有TV调谐器的显卡)
    声卡                    任何带有麦

克风和线路输入的DirectShow兼容声卡
    网络摄像头                Logitech

QuickCam Pro 3000(该款摄像头自带麦克风;如果你的摄像头没

有带麦克风,你可以自己再买一个)
    数码摄像机                Sony DRC-

TRV900或相似型号的(大多数带FireWire/IEEE 1394接口的数码摄

像机都可以,但某些旧型号的Canon相机可能与DirectShow不兼容




表1-2.基本软件要求
    操作系统                打过SP1补

丁包的Windows XP系统(部分用于个人录影机的DirectShow功能只

能在这个版本上运行)
    开发工具                Microsoft

Visual Studio .NET或Visual C++ .NET
    DirectX开发包            至少DirectX 9
    Windows Media开发包        至少Windows Media

SDK 9
Windows Media Player        至少Windows Media Player 9
Windows Media Encoder    至少Windows Media Encoder 9


    在你运行书上的例子前,应该先安装表中所有的软硬件。

在软硬件的配置(特别是硬件配置)很难与表中列出的完全一致,

个人电脑的配置是千差万别的。但是软件配置则应该尽可能做到和

我所说的一样。这本书是基于最新版的DirectX SDK 9、Windows

XP(为了支持第7章中所述的功能必需安装SP1补丁包)、Windows

Media Format 9系列软件开发包和Windows Media Player 9

Series等软件。如果这些软件配置中有部分出现问题,那么例子就

可能不能运行,而你却以为是自己的小错误引起的问题。
    最新版的Windows Media Player和Windows XP的补丁包都

可以从微软的网站上下载。在你试图继续深入了解DirectShow技术

前,应该先确保软件配置上和我所述的一致。




本书的结构
    这本书是写给DirectShow的初学者的,你不需要知道任何

DirectShow的知识,甚至不需要知道音频和视频知识就可以起步了

。如果你已经对DirectShow十分熟悉了,可以把前三章简单浏览一

遍。把它们浏览一遍也可以看看这些内容中是否有自己不熟悉的。
    这本书的第一部分包含了DirectShow滤波器的基本常识,

这是基于DirectShow的应用程序的核心部分。如前面所述,滤波器

分为3类:捕捉滤波器、转换滤波器和回放滤波器。它们连在一起

构成了处理多媒体流的整个系统。我们可以通过DirectShow预构造

应用程序来说明这点。该应用程序被称为“GraphEdit”,能为你

提供一个处理DirectShow滤波器的可视化环境,你只要动几下鼠标

就可以做出一个新的基于DirectShow的应用程序。接下去我们将深

入研究一些基于微软组件对象模型(COM)技术的C++程序和

DirectShow滤波器的接口界面,并写一些能播放多种媒体格式文件

的简单的C++程序(每个只有几十行)。如果你只需要挟个播放媒

体文件的程序,那么这些基本知识就够了。
    了解了基本知识后,我们将继续深入研究DirectShow。本

书第二部分的层次安排对应了三种基本滤波器。我们将研究如何从

总多源中捕捉视频和音频信息,如摄像机、电视卡和摄像头。各种

设备都有其不同的特点,所以每个章节分别叙述了一种设备。每章

都提供了一个实例,你可以用它来构建你自己的应用程序(就是重

用这些代码)。接下来我们将研究DirectShow的编辑功能,它能把

视频和音频流分开再将它们从新通过时间帧技术组合起来。最后我

们将研究一个DirectShow中刚加入的部分——混合视频回放(VMR

)。这个能把多个视频流合成为一个。读完第九章后,你会对如何

使用DirectShow进行多媒体数据捕捉、编辑和回放有个深刻的认识


    在第三部分中,你将学会如何编写一个DirectShow转换滤

波器。当你看完这部分后,你可以随心所欲地运用DirectShow技术

。你可以编写一个DirectShow滤波器或者创建一个可以用在其它

DirectShow程序中的DirectX媒体组件(DMO)。我们从一个把彩色

流转换黑白流的滤波器入手,研究适用于大部分滤波器的结构。通

过使用另一个DirectShow滤波器——“Sample Grabber”来捕获经

过滤波器的媒体流,这样你就知道如何在DirectShow技术中加入自

己的处理方法了。这部分之后将是源滤波器,你能学会创建源滤波

器,产生待处理的多媒体流。最后我们将研究DMO,创建一个能在

DirectShow或DirectSound及DirectX的音频库中使用的音频延迟模

块。
    余下两章将涉及两个DirectShow中比较特别的部分:AVI

格式和Windows Media格式。这也许会吸引一部分编程人员。我们

将深入研究AVI格式的每个细节,如果你曾编写过类似处理多媒体

流的代码,那么这部分是很容易的。Windows Media格式是一种在

创建和管理许多多媒体格式方面提供前所未有的易用性的全新架构

。我们将学会如何在程序中组成Windows Media流。
    一个DirectShow的帮助可能有1000多页。DirectX SDK中

有关于DirectShow的完整而且权威的帮助文档。这本书作为帮助文

档的补充可以使你比较容易地熟悉DirectShow技术。在你看完这本

书后,你会发现默默无闻的DirectShow技术其实是在以在大多数硬

件平台上都能处理多媒体信息的微软Windows系统中一个十分有用

的部分。创建一个基于DirectShow的应用程序也不再是空想,读完

这本书后你就会做了。
    尽管这本书已经被反复校对过,我仍会认真对待您在书中

发现的任何错误。您可以通过我的电子邮件

(mark@playfulworld.com)与我联系,我会在后续版本中更正这

类错误。谢谢您使用本书。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值