本文转载自:冷月醉雪大神的DirectShow 简介
DirectShow 是一个 Windows 平台上的流媒体框架,提供了高质量的多媒体流采集和回放功能。它支持多种多样的媒体文件格式,包括 ASF、MPEG、AVI、MP3和WAV 文件,同时支持使用 WDM 驱动或早期的 VFW 驱动来进行多媒体流的采集。DirectShow 整合了其他的 DirectX 技术,能自动地侦测并好使用可利用的音视频硬件加速,也能支持没有硬件加速的系统。
DirectShow 大大简化了媒体回放、格式转换和采集工作。但与此同时,它也为用户自定义的解决方案提供了底层流控制框架,从而使用户可以自行创建支持新的文件格式或其他用户的 DirectShow 组件。
DirectShow 专为 C ++ 而设计。 Microsoft 不提供用于 DirectShow 的托管 API。
DirectShow 是基于组件对象模型(COM)的,因此当你编写 DirectShow 应用程序时,你必须具备 COM 客户端程序编写的知识。对于大部分的应用程序,你不需要实现自己的 COM 对象,DirectShow 提供了大部分你需要的 DirectShow 组件,但是假如你需要编写自己的 DirectShow 组件来进行扩充,那么你必须编写实现 COM 对象。
使用 DirectShow 编写的典型应用程序包括:DVD 播放器、视频编辑程序、AVI 到 ASF 转换器、 MP3 播放器和数字视频采集应用。
多媒体应用开发由于其特殊性,因此需要处理一些特殊的问题:
高效性:多媒体包含了大量的需要快速处理的数据
协调性:音频和视频必须同步,以便它们同时开始或停止,并以同一速率播放
多样性:数据可能有多种来源,如本地文件、网络、电视广播和视频摄像机。同时它们也可能以各种各样的格式出现,如 AVI、ASF、MPEG 和 DV。
可移植性:程序员无法预知用户最终在其终端用户系统中使用的硬件设备。
从上面的问题可以看出,在多媒体程序设计中,这些典型问题是多媒体程序开发的关键问题,也是普遍问题。如果每次的程序设计都要根据不同的软硬件重新设计编程解决这些问题,无疑会给程序员开发带来极大的工作量,很显然这是不希望的。DirectShow 就是被设计用来解决这些难题的。它主要的设计目的,就是通过将复杂的数据传输、硬件的多样性和同步问题从应用程序中独立出来,从而简化在 Windows 平台上数字媒体应用程序的开发任务。总体应用程序框架和底层工作由 DirectShow 来完成,使得基于 DirectShow 框架的多媒体应用程序开发变得非常简单。
当视频和音频数据被转化为数据流之后,是实现数据流的快速处理,DirectShow 会尽可能地使用 DirectDraw 和 DirectSound,从而高效地将数据送到用户的声音和图形设备中进行播放。同步则是通过在媒体数据封装成数据块,并加入时间戳来实现的。而 DirectShow 模块化的架构,使其可以轻松操纵各种各样的数据源、文件格式和硬件设备,采用这样的架构,应用程序只需完成 Filter 组合和匹配即可。
参考:
原文:https://www.cnblogs.com/linuxAndMcu/p/12054554.html