大家好,又见面了,我是你们的朋友全栈君。
DirectShow(简称 DShow) 是一个 Windows 平台上的流媒体框架,提供了高质量的多媒体流采集和回放功能。它支持多种多样的媒体文件格式,包括 ASF、MPEG、AVI、MP3和WAV 文件,同时支持使用 WDM 驱动或早期的 VFW 驱动来进行多媒体流的采集。
为什么需要 DirectShow?DirectShow 到底能够做什么?带着这两个问题,我们先一起来看多媒体应用开发所面临的挑战:
(1)多媒体数据量巨大,应如何保证数据处理的高效性;
(2)如何让音频和视频时刻保持同步;
(3)如何用简单的方法处理复杂的媒体源问题,包括本地文件、计算机网络、广播电视以及其他一些数码产品等;
(4)如何处理各种各样的媒体格式问题,包括 AVI、ASF、MPEG、DV、MOV 等;
(5)如何支持目标系统中不可预知的硬件。
DirectShow 的设计初衷就是尽量要让应用程序开发人员从复杂的数据传输、硬件差异、同步性等工作中解脱出来,总体应用框架和底层工作由 DirectShow 来完成,这样,基于 DirectShow 框架开发多媒体应用程序就会变得非常简单。
DirectShow 的架构如下图所示:
DirectShow 位于应用层中。它使用一种叫 Filter Graph 的模型来管理整个数据流的处理过程;参与数据处理的各个功能模块叫 Filter;各个 Filter 在 Filter Graph 中按一定的顺序连接成一条 “流水线” 协同工作。( 可以看出 FilterGraph 是 Filter 的容器 )
按照功能来分,Filter 大致分为三类:Source Filters、Transform Filters 和 Rendering Filters。
在 DirectShow 系统上,我们看到的,即是我们的应用程序(Application)。应用程序要按照一定的意图建立起相应的 Filter Graph,然后通过 Filter Graph Manager 来控制整个的数据处理过程。DirectShow 能在 Filter Graph 运行的时候接收到各种事件,并通过消息的方式发送到我们的应用程序。这样,就实现了应用程序与 DirectShow 系统之间的交互。
下面介绍 Direct Show 的前身 – VFW,然后是 DirectShow 的发展历史,最后是微软准备用来替代 DirectShow 的 Media Foundation。
1. VFW
VFW(Video for Windows)是微软于 1992 年推出的关于数字视频的一个 SDK,它能使应用程序通过数字化设备从传统的模拟视频源得到数字化的视频剪辑。VFW 的一个关键思想是播放时不需要专用硬件。为了解决数字视频数据量大的问题,需要对数据进行压缩。VFW 引进了一种叫 AVI 的文件标准,该标准未规定如何对视频进行捕获、压缩及播放,仅规定视频和音频该如何交错存储在硬盘上。VFW 给程序员提供 .VBX 和 AVICap 窗口类的高级编程工具,使程序员能通过发送消息或设置属性来捕获、播放和编辑视频剪辑。
VFW 技术受到的最多批评是它捕获的数据保存到磁盘上会占用大量磁盘空间,有人试验用 640×480 捕获 1s 大约需要10MB,另外 VFW 的体系结构缺乏为视频会议,在线电视等流媒体应用提供强而有效的支持。
2. DirectShow
Direct Show 的发展历史:
DirectShow 对数字高清媒体的应用程序确实是非常通用的、万能的,但是,DirectShow 作为一个 20 年的老技术而言已经力不从心了。比如:
于是便有了 Media Foundation。
3. Media Foundation
2005 年,微软推出 Windows Vista,与此同时在 Windows Vista 上推出了新一代多媒体应用库 Media Foundation(以下简称 MF)。目的是提供 Windows 平台一个统一的多媒体影音解决方案,开发者可以通过 MF 播放视频或声音文件、进行多媒体文件格式转码,或者将一连串图片编码为视频等等。MF 是 DirectShow 为主的旧式多媒体应用程序接口的替代者与继承者,在微软的计划下将逐步汰换 DirectShow 技术。MF 要求Windows Vista 或更高版本,不支持较早期的 Windows 版本,特别是 Windows XP。
看起来 MF 是完美的 DShow 替代者,但实际情况却是 MF 在推出十多年间鲜有人理会。一是 DShow 已经形成了成熟的社区,从硬件到软件到开发库都是非常完备的,而且 Windows 的兼容性也一直非常好,实在没有换代的动力。二是 MF 除了在 DRM 媒体保护(Protected Media Path)方面是天然支持的,其他功能并没有比 DShow 技高一筹,顶多是用着更简单一些。
另外,像最新的 UWP 框架里只支持 MFT,不能用 DShow 的 Filter,所以不确定什么时候会被完全取代。
参考:
《DirectShow开发指南》1.2节 – DirectShow 简介
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/155474.html原文链接:https://javaforall.cn