`
java-mans
  • 浏览: 11816881 次
文章分类
社区版块
存档分类
最新评论

DirectShow和媒体文件

 
阅读更多

//=====================================================================
//TITLE:
// DirectShow和媒体文件
//AUTHOR:
// norains
//DATE:
// Monday 24-May-2010
//Environment:
// Windows CE 5.0
//=====================================================================

自从在blog上公布了CMedia的完全源代码后,就陆续接到不少邮件和提问,无非是询问CMedia能播放什么样的格式;或是破口大骂,将CMedia损得一无是处,因为该类什么视频文件都无法播放;当然也有好的,对CMedia赞不绝口,称其为万能的播放类。

为什么同样的源代码,却能得到如此截然不同的评论呢?有感于此,我觉得应该写一写这其中的奥秘了。

如果你是DirectShow的高手,那么你可以不必再往下看了,因为之后的内容没有足以让你深究的价值,仅仅是给初学者的扫盲而已--并且还是尽可能地简洁。

我们首先要知道,我blog上的CMedia其实只是对DirectShow在文件播放方面的一个封装而已,本质上还是彻头彻尾的DirectShow。

先简单地看一下DirectShow的最基础框架:


其实完整的框图不仅止于此,但那些对于我们从总体了解并无过多帮助,因此简略为此。

首先看一下框图最中间的"系统"。这个最好理解,也没什么可说的,就是我们的WinCE系统。

其次是调用者,即播放器,也就是我blog的CMedia。它通过一定的协议,向系统咨询媒体文件的播放。

最后是filter,其实际是解码器。能不能播放,播放的效果如何,都取决于该部分。

而这三部分之中,只有相邻的是可见的。比如播放器只知道系统,filter也只知道系统,而播放器和filter两者是无法互相知晓的。

那为什么同样的CMedia在不同的系统下播放的情况完全不同呢?

我们以一个非常简单的例子说明。

学校要举行校际比赛,需要找一个跑步跑得快的学生。体育老师走到班级A门口问:"有谁跑步跑得快的?"没人回答。然后体育老师走到班级B门口问:"有谁跑步跑得快的?"这时候小明站出来了。

对于这个例子,体育老师就相当于调用者,问话内容就是协议,不同的班级就相当于不同的系统,小明那就想当然的是filter。

体育老师(调用着)还是原来的体育老师,问话的内容(协议)也是相同的,但在不同的班级(系统),得到的结果是不同的(一个能满足要求,另一个则否)。

具体到文章最前面的情况,就很容易解释了。虽然是同样的CMedia代码,但在不同的系统里,因为所具备的filter不同,所以播放情形就迥然不同。

那系统的差异性是如何造成的呢?其实在系统编译的情况下已经决定了。在定制系统时,系统工程师有没有选择相应的filter,决定了你后期播放器的兼容程度。当然咯,这些filter在WinCE下是很少的,更多依赖的是BSP厂家的功力。

最后说一下,这个和网络上流行的TCP/MP是不同的。TCP/MP并不是采用标准的directshow,而是自己有解码库,是采用自己的库来解码的,完全不依赖于系统。这样有好处也有坏处,好处是播放的格式固定,在这个系统能解码,那么在另外一个系统自然也能工作正常;坏处是,很多BSP厂家都会根据自己硬件来做filter,以加快解码速度,而这些filter无法为其所用,造成同样的硬件平台,用TCP/MP播放会比用directshow播放更为不流畅。

分享到:
评论

相关推荐

    directshow 头文件与库文件

    通过阅读和理解这个文件,开发者可以学习如何在C++中操作DirectShow对象和接口。 2. **strmif.h**:这是Stream Interface头文件,包含了DirectShow的核心接口,如`IAMFilterGraph`、`IAMMediaStream`和`IAMCrossbar...

    DirectShow播放视频文件的命令行简单实现

    源滤镜负责读取媒体文件,转换滤镜用于处理数据(如解码),而渲染滤镜则将数据显示在屏幕上。通过连接这些滤镜,可以构建一个数据流处理图,即“过滤器图”。 实现DirectShow播放器的第一步是创建一个过滤器图。这...

    directshow 获取avi文件的全部帧保存为BMP文件

    DirectShow是一种由微软开发的多媒体框架,用于处理视频和音频流。在本项目中,我们关注的是如何使用DirectShow从AVI文件中提取所有帧并将其保存为BMP图像文件。AVI(Audio Video Interleave)是一种常见的视频格式...

    在中Visual Studio NET 2003利用DirectShow播放媒体文件(一).docx

    一个简单的DirectShow应用可能包括打开并播放媒体文件的功能。这通常会涉及到以下步骤: 1. 初始化DirectShow环境,创建Filter Graph管理器实例。 2. 构建Filter Graph,包括媒体源Filter(如文件源Filter),分离器...

    基于Directshow的媒体播放器技术

    - **过滤器参数设置**:根据媒体文件的特性设置过滤器的相关参数,以达到最佳播放效果。 #### 五、结论 基于DirectShow的媒体播放器技术具有很高的灵活性和扩展性,通过精心设计的过滤器图和高效的缓冲机制,可以...

    DirectShow流媒体信息获取及图象转换.rar_DirectShow_DirectShow流媒体信息获取

    这个压缩包文件"DirectShow流媒体信息获取及图象转换.rar"包含了关于如何利用DirectShow获取流媒体信息以及进行图像转换的详细资料,主要关注点在于理解和应用DirectShow的相关技术。 1. **DirectShow基础**:...

    DirectShow播放网络媒体文件范例

    通过DirectShow_Win32这个压缩包文件,你可以找到相关的示例代码和资源,帮助你理解和实现DirectShow播放网络媒体文件的功能。在学习和使用过程中,务必仔细阅读文档,理解每个接口和方法的作用,以及如何正确地构建...

    Directshow filter编写例程(二)读取文件

    通过调试和优化,确保在不同文件大小和系统环境下都能稳定运行,从而实现高效的媒体文件播放。 总的来说,这个例程展示了如何利用DirectShow框架和IAsyncReader接口,创建一个能从文件中异步读取数据的自定义Filter...

    DirectShow9 媒体播放程式

    9. **媒体文件格式支持**:DirectShow能够处理多种文件格式,如AVI、WMV、MP4等,通过不同的源过滤器和解码器过滤器实现。 10. **网络流媒体**:除了本地文件,DirectShow还支持RTSP、HTTP等协议的网络流媒体播放,...

    基于directshow的媒体播放器

    基于DirectShow的媒体播放器,如描述中提到的,是一个C++项目,适合用作毕业设计,以展示对媒体处理技术的理解和应用。 1. **DirectShow原理**: DirectShow是微软的组件对象模型(COM)的一部分,它通过一系列的...

    DirectShow 插件文件

    3. **编码/解码器**:DirectShow插件经常包含特定的编码器和解码器,用于处理不同格式的媒体文件。配置时,要确保这些编码解码器被正确识别和使用。 4. **兼容性**:DirectShow插件必须与目标平台和应用程序兼容。...

    DirectShow(流媒体播放器)

    4. 学习如何处理媒体文件的读取和解码,以及渲染过程。 5. 掌握错误处理和状态控制,确保播放的稳定性和流畅性。 通过深入学习DirectShow,不仅可以创建自定义的流媒体播放器,还可以用于更复杂的多媒体应用,如...

    directshow入门讲解的PPT文件

    1. 使用DirectShow SDK:包含了头文件、库文件和示例代码,帮助开发者开始编程。 2. 创建自定义滤波器:通过继承BaseFilter类并实现所需接口来创建新的功能滤波器。 3. 构建过滤图:通过Filter Graph Manager添加...

    采用directshow技术来编写的多媒体播放器源码

    `DirectShow.pas` 文件是源代码文件,通常包含类定义、方法和事件处理程序,使得开发者可以使用Delphi来操作DirectShow过滤器和图形过滤器图。而`.dcu` 文件是Delphi的编译单元,相当于其他语言中的编译后库或头文件...

    Delphi使用微软Directshow实现流媒体音频转换.rar

    Delphi流媒体音频转换程序,采用微软公司提供的DirectX->DirectShow实现了网络流媒体到指定格式音频文件的转换.<1>. res文件夹中是源代码  <2>. text中是一点点心得  <3>. Bin文件夹中是生成的目标(windows服务)...

    DirectShow生成wav文件filter

    在给定的标题和描述中,我们关注的是如何利用DirectShow生成WAV文件,并特别提到了一个名为"wavDest"的过滤器。 WAV是微软定义的一种无损音频格式,存储原始音频数据。在DirectShow中,过滤器是构建媒体处理管道的...

    Directshow播放文件封装类---VideoPlayGraph(evr).zip

    这个"Directshow播放文件封装类---VideoPlayGraph(evr).zip"资源包含两个核心文件:VideoPlayGraph.cpp和VideoPlayGraph.h,它们很可能定义了一个C++类,用于简化使用DirectShow播放多媒体文件的过程。 在...

    DirectShow

    - 实时性:DirectShow支持实时处理,适用于直播和流媒体应用。 - 兼容性:它支持多种编码标准和文件格式,如MPEG、WMV、MP3等。 - 扩展性:开发者可以通过编写自定义过滤器来扩展其功能。 - 高级控制:可以精确...

    使用DirectShow做的多媒体播放器

    通过DirectShow,开发者可以轻松地集成各种媒体源,如硬盘上的文件、网络流或DVD等,同时支持多种编码和容器格式,如MP3、WAV、AVI、WMV等。 在开发过程中,source文件夹可能包含了整个播放器的源代码。这些源代码...

Global site tag (gtag.js) - Google Analytics