DirectShow 简介「建议收藏」

DirectShow 简介「建议收藏」一、DirectShow简介DirectShow(简称DShow)是一个Windows平台上的流媒体框架,提供了高质量的多媒体流采集和回放功能。它支持多种多样的媒体文件格式,包括ASF、

大家好,又见面了,我是你们的朋友全栈君。

一、DirectShow 简介

DirectShow(简称 DShow) 是一个 Windows 平台上的流媒体框架,提供了高质量的多媒体流采集和回放功能。它支持多种多样的媒体文件格式,包括 ASF、MPEG、AVI、MP3和WAV 文件,同时支持使用 WDM 驱动或早期的 VFW 驱动来进行多媒体流的采集。

  • DirectShow 大大简化了媒体回放、格式转换和采集工作。但与此同时,它也为用户自定义的解决方案提供了底层流控制框架,从而使用户可以自行创建支持新的文件格式或其他用户的 DirectShow 组件。

  • DirectShow 专为 C ++ 而设计。 Microsoft 不提供用于 DirectShow 的托管 API。

  • DirectShow 是基于组件对象模型(COM)的,因此当你编写 DirectShow 应用程序时,你必须具备 COM 客户端程序编写的知识。对于大部分的应用程序,你不需要实现自己的 COM 对象,DirectShow 提供了大部分你需要的 DirectShow 组件,但是假如你需要编写自己的 DirectShow 组件来进行扩充,那么你必须编写实现 COM 对象。

  • 使用 DirectShow 编写的典型应用程序包括:DVD 播放器、视频编辑程序、AVI 到 ASF 转换器、 MP3 播放器和数字视频采集应用

二、为什么需要 DirectShow

为什么需要 DirectShow?DirectShow 到底能够做什么?带着这两个问题,我们先一起来看多媒体应用开发所面临的挑战:

(1)多媒体数据量巨大,应如何保证数据处理的高效性;

(2)如何让音频和视频时刻保持同步;

(3)如何用简单的方法处理复杂的媒体源问题,包括本地文件、计算机网络、广播电视以及其他一些数码产品等;

(4)如何处理各种各样的媒体格式问题,包括 AVI、ASF、MPEG、DV、MOV 等;

(5)如何支持目标系统中不可预知的硬件。

DirectShow 的设计初衷就是尽量要让应用程序开发人员从复杂的数据传输、硬件差异、同步性等工作中解脱出来,总体应用框架和底层工作由 DirectShow 来完成,这样,基于 DirectShow 框架开发多媒体应用程序就会变得非常简单。

三、DirectShow 架构

DirectShow 的架构如下图所示:

DirectShow 简介「建议收藏」

DirectShow 位于应用层中。它使用一种叫 Filter Graph 的模型来管理整个数据流的处理过程;参与数据处理的各个功能模块叫 Filter;各个 Filter 在 Filter Graph 中按一定的顺序连接成一条 “流水线” 协同工作。( 可以看出 FilterGraph 是 Filter 的容器 )

按照功能来分,Filter 大致分为三类:Source Filters、Transform Filters 和 Rendering Filters。

  • Source Filters 主要负责取得数据,数据源可以是文件、因特网、或者计算机里的采集卡、数字摄像机等,然后将数据往下传输;
  • Transform Fitlers 主要负责数据的格式转换、传输;
  • Rendering Filtes 主要负责数据的最终去向,我们可以将数据送给声卡、显卡进行多媒体的演示,也可以输出到文件进行存储。

在 DirectShow 系统上,我们看到的,即是我们的应用程序(Application)。应用程序要按照一定的意图建立起相应的 Filter Graph,然后通过 Filter Graph Manager 来控制整个的数据处理过程。DirectShow 能在 Filter Graph 运行的时候接收到各种事件,并通过消息的方式发送到我们的应用程序。这样,就实现了应用程序与 DirectShow 系统之间的交互。

四、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 的发展历史:

  • 孕育期(1995 ~ 1998)ActiveMovie,开发代号 Quartz,在 Windows 3.0 时代,是作为一种对当时最流行的媒体平台 QuickTime 的回应而开发的。它当时的使命是作为 IE 的插件播放在其窗口内的媒体文件,正如当时 QuickTime 为 Netscape 以及 IE 提供的服务那样,它的另一个功能是作为 VFW 的一个替换,特别地为在 VFW 架构中难于处理的 MPEG 文件提供辅助处理。
  • 诞生期(1998)在这一年,大致在 DirectX 5 的年代,ActiveMovie 被重命名为 DirectShow 并且被包含为 “DirectMedia SDK” 的一部分。
  • 成长期(1999 ~ 2005)在 DirectX 7 中,DirectShow 变成了 DirectX SDK 主要组成部分,而且如同 DirectInput 等其它 DirectX API 一样被赋予了它自己的位置。DirectShow 被主要用来做音视频捕捉和媒体文件的播放(Windows Media Player 就是基于 DShow 开发的)。
  • 动荡衰落期(2005 ~ 至今) 从 2005 年 4 月起,DirectShow 从 DirectX SDK 中移除了,必须单独下载 DirectShow 的 SDK 包才能得以支持,之后 DirectShow 的文档和示例被转移到 Windows SDK,DirectShow 也正式成为 Windows 的一个组件。然而,在编译某些 DirectShow 的 sample 时,DirectX SDK 仍然是必需的。

DirectShow 对数字高清媒体的应用程序确实是非常通用的、万能的,但是,DirectShow 作为一个 20 年的老技术而言已经力不从心了。比如:

  1. Graph 是静态的,要实现动态的 Graph 和 Major format change 是非常困难的。
  2. DirectShow filter 的线程模型是非常复杂的,要完全理解并永不出错是太困难了。
  3. DirectShow filter 只能用于DirectShow。
  4. DirectShow 不支持文件保护(DRM)。

于是便有了 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 简介

Windows多媒体开发框架介绍

《DirectShow开发指南》1.2节 – DirectShow 简介

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/155474.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm调试和运行的区别_pycharm调试debug入门

    pycharm调试和运行的区别_pycharm调试debug入门pycharm运行代码时,启动的是测试方案https://blog.csdn.net/qq_41810188/article/details/107359647

    2022年8月27日
    3
  • springboot使用swagger2生成api文档

    springboot使用swagger2生成api文档一、为什么要用Swagger2?之前开发项目的时候,需要写API文档,项目小接口少的时候一份word就能简单应付,但是随着项目的API的增加,对API文档的维护工作就会越来越繁琐,为此引入能自动生成

    2022年8月16日
    4
  • poj1142_poj是什么意思

    poj1142_poj是什么意思poj1142题解

    2022年10月1日
    0
  • 热拔插更换硬盘方法

    热拔插更换硬盘方法热拔插更换硬盘方法如果要替换的磁盘已做了镜像,推荐如下步骤:1.删除该磁盘上所有逻辑卷的复件,使用rmlvcopy命令或unmirrorvg命令。2.从卷组中删除该磁盘,使用reducevg命令。3.使用rmdev命令删除该磁盘定义。4.物理移除该磁盘。如果磁盘不是可热交换的(hot-swappable),可能要求重启系统。5.使备用的磁盘可用。如果磁盘是可

    2022年5月30日
    33
  • Singular Value Thresholding (SVT) 奇异值阈值

    Singular Value Thresholding (SVT) 奇异值阈值这个算法受到压缩感知中迭代算法的启发,在迭代过程中对矩阵进行SVD,然后将较小的奇异值设置为0,生成新的矩阵进行迭代。该算法运算速度快,对于高位低秩矩阵的恢复非常有效。

    2022年6月2日
    49
  • 服务器支持p2v,菜鸟必知 实施P2V迁移成功的五大秘诀

    服务器支持p2v,菜鸟必知 实施P2V迁移成功的五大秘诀虚拟服务器迁移工具对操作系统、应用和设置进行镜像复制,并转换成虚拟硬盘文件(适用于MicrosoftHyper-V和CitrixXenServer来说)或者虚拟机磁盘格式文件(适用于VMware)。然后P2V转换工具自动诸如虚拟硬件驱动,并启动虚拟机运转起来。多数P2V迁移直截了当,但也会偶尔发生问题。下面,GregShields将分享五条让P2V迁移成功的技巧。一、注意已安装的OEM系统当…

    2022年7月26日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号