美文网首页
1. DirectShow概念梳理

1. DirectShow概念梳理

作者: 天之彼方_d26a | 来源:发表于2023-08-24 12:33 被阅读0次

最近在做虚拟摄像头和麦克风方面的编程,现在把DirectShow相关功能做一下梳理。

DirectShow是什么

Microsoft® DirectShow® 是 Microsoft Windows® 平台上流媒体的体系结构。 DirectShow 提供多媒体流的高质量捕获和播放。 它支持多种格式,包括高级系统格式 (ASF) 、电影专家组 (MPEG) 、Audio-Video交错 (AVI) 、MPEG 音频层 3 (MP3) 和 WAV 声音文件。 它支持基于 Windows 驱动程序模型 (WDM) 或视频从数字和模拟设备捕获。 它会自动检测并使用视频和音频加速硬件(如果可用),但也支持没有加速硬件的系统。

DirectShow 基于组件对象模型 (COM) 。 若要编写 DirectShow 应用程序或组件,必须了解 COM 客户端编程。 对于大多数应用程序,无需实现自己的 COM 对象。 DirectShow 提供所需的组件。 但是,如果要通过编写自己的组件来扩展 DirectShow,则必须将它们作为 COM 对象实现。

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

DirectShow 简化了媒体播放、格式转换和捕获任务。 同时,它为需要自定义解决方案的应用程序提供对基础流控制体系结构的访问。 还可以创建自己的 DirectShow 组件以支持新格式或自定义效果。

可以使用 DirectShow 编写的应用程序类型的示例包括文件播放器、电视和 DVD 播放器、视频编辑应用程序、文件格式转换器、音频-视频捕获应用程序、编码器和解码器、数字信号处理器等。

其设计目标是通过将应用程序与数据传输、硬件差异和同步的复杂性隔离开来简化在 Windows 平台上创建数字媒体应用程序的任务。

为了达到流式传输视频和音频所需的吞吐量,DirectShow 尽可能使用 Direct3D 和 DirectSound。 这些技术有效地将数据呈现给用户的声音和图形卡。 DirectShow 通过将媒体数据封装在带时间戳的示例中来同步播放。 为了处理各种可能的源、格式和硬件设备,DirectShow 使用模块化体系结构,其中应用程序混合和匹配称为 filter 的不同软件组件。

DirectShow 提供支持基于 Windows 驱动程序模型 (WDM) 捕获和优化设备的filter ,以及支持 Windows (VfW) 捕获卡的较旧视频的filter ,以及为音频压缩管理器 (ACM) 和视频压缩管理器 (VCM) 接口编写的编解码器。

image.png

如此处所示,DirectShow filter 与各种设备通信和控制,包括本地文件系统、电视调谐器和视频捕获卡、VfW 编解码器、通过 DirectDraw 或 GDI) (的视频显示,以及通过 DirectSound) 卡 (声音。 因此,DirectShow 使应用程序免受这些设备的许多复杂性。 DirectShow 还为某些文件格式提供本机压缩和解压缩filter 。

DirectShow是如何工作的

DirectShow 的构建单元是filter,这里的filter类似于Unix编程中的过滤器结构,每个 filter 有着输入和输出,DirectShow通过将 filter 连接在一起来执行任何任务,以便一个 filter 的输出成为另一个 filter 的输入,举个微软官方的例子:


image.png

“文件源” filter 从硬盘读取 AVI 文件。 AVI 拆分器 filter 将文件分析为两个流:一个压缩的视频流和一个音频流。 AVI 解压缩器 filter 解码视频帧。 视频呈现器 filter 使用 DirectDraw 或 GDI 将帧绘制到显示器。 默认 DirectSound 设备 filter 使用 DirectSound 播放音频流。

当然,以上是举个例子,所以陈述了所有的过程。实际上应用程序不必管理所有这些数据流过程,相反,filter 由名为 Filter Graph Manager 的高级组件控制。 应用程序进行高级 API 调用,例如“运行” (以在图形中移动数据) 或“停止” (来停止数据流) 。 如果需要对流操作进行更多控制,可以直接通过 COM 接口访问 filter 。 Filter Graph 管理器还会将事件通知传递给应用程序。

Filter Graph 管理器还有另一个用途:它通过连接 filter 为应用程序提供生成 filter 图的方法。 (DirectShow 还提供各种帮助程序对象来简化此过程。这些内容在文档中进行了全面介绍。)

如何创建使用DirectShow的程序

  1. 应用程序创建 Filter Graph Manager 的实例。
  2. 应用程序使用 Filter Graph 管理器生成 filter 图。 关系图中的具体的 filter 集将取决于应用程序。
  3. 应用程序使用 Filter Graph 管理器来控制 filter 并通过 filter 流式传输数据。 在整个过程中,应用程序还将响应来自 Filter Graph 管理器的事件。处理完成后,应用程序将释放 Filter Graph 管理器和所有 filter 。

DirectShow 基于 COM;Filter Graph 管理器和filter 都是 COM 对象。 在开始对 DirectShow 进行编程之前,应大致了解 COM 客户端编程。 许多有关 COM 编程的书籍都可用。

相关文章

  • 使用Gstreamer 作为数据源输出视频数据 II 媒体类型

    Directshow的媒体类型结构 在directshow中,对于push模式的source filter来说,有...

  • 2023-02-19

    1.其实还是不会坐观。。要有体系化概念 2.框架要类比,先梳理框架,再从顶到底梳理知识

  • 1.概念

    概念 Data structure:数据结构是用一种特殊的方式组织(排列)和存储数据的一种容器。Algorithm...

  • 基础概念梳理

    稀里糊涂的浸泡了一个月,胡乱学了很多东西,慢慢的懂了点。从TensorFlow进入这个领域,刚明白这只是机器学习框...

  • 路由概念梳理

    那我们第一步再来深化一下路由的概念 我们类比一下 我们说一个世界地图,有几个大洲,大洲下面是国家,国家下面还有省、...

  • 概念梳理:耐心

    耐心是什么? 百科上面的解释是:1.不急躁、不厌烦。 2.指不急躁、不厌烦的性...

  • 视频播放器基础知识

    1.视频播放器原理 播放一个视频文件的流程如下: 2.常用播放器 1)跨平台系列(非DirectShow框架) ...

  • 使用Gstreamer 作为数据源输出视频数据 IV Sourc

    作为virtual camera程序,gstreamer部分需要向directshow部分提供媒体数据和媒体类型信...

  • 2.软件工程-知识结构梳理

    1.信息系统建设-知识结构梳理2.软件工程-知识结构梳理 软件过程改进-概念与原则(——>质量管理) 软件开发方法...

  • C#Forage(摄像头)

    先去nuget安装 控件拖入 引用包using AForge.Video.DirectShow;打开摄像头.关闭摄...

网友评论

      本文标题:1. DirectShow概念梳理

      本文链接:https://www.haomeiwen.com/subject/gtimmdtx.html