1. DirectShow概念梳理

最近在做虚拟摄像头和麦克风方面的编程,现在把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 编程的书籍都可用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,417评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,921评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,850评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,945评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,069评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,188评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,239评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,994评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,409评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,735评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,898评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,578评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,205评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,916评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,156评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,722评论 2 363
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,781评论 2 351

推荐阅读更多精彩内容