`
dato0123
  • 浏览: 910362 次
文章分类
社区版块
存档分类
最新评论

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播放网络媒体文件范例

    一个基于DirectShow平台播放网络上(http)媒体文件

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

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

    基于DirectShow的播放器(VC++)

    演示了使用DirectShow播放多媒体文件的基本操作

    DirectShow视频播放器(C#实现的媒体播放器)

    自己用C#写的DirectShow接口实现的媒体播放器,实现了播放、暂停、停止、快进、快退、播放列表、打开文件、将文件夹内所有媒体文件加入播放列表、音量控制、拖动进度条等功能。支持*.mpg;*.avi;*.flv;*.wma;*.mov;*....

    DirectShow使用摄像头和麦克风demo

    利用DirectShow开发摄像头获取图片,打开麦克风等功能。支持VS2005、VS2008、VS...它支持多种多样的媒体文件格式,包括 ASF、MPEG、AVI、MP3和WAV 文件,同时支持使用 WDM 驱动或早期的 VFW 驱动来进行多媒体流的采集。

    DirectShow

    适合广大的流媒体应用 开发人员,以及对Windows平台上多媒体处理感兴趣的编程爱好者、学生学习和参 考。 * 下载内容说明: readme.txt:本说明文件。 Chapter04:第4章用到的代码,其中AppIPTransform为MFC ...

    DirectShow.zip

    DirectShow是微软公司在ActiveMovie和Video for Windows的基础上推出的新一代基于COM(Component Object Model)的流媒体处理的开发包,与DirectX开发包一起发布。DirectShow使用一种叫Filter Graph的模型来管理整个...

    DirectShow采集视频显示,并保存成bmp和yuv文件

    代码简洁,采用DirectShow采集视频,并演示了保存成bmp和yuv的流程,对从事流媒体开发人士很有帮助,稍作修改,即可应用于工作当中。

    DirectShow+实务精选.pdf

    DirectShow是微软公司在ActiveMovie和Video for Windows的基础上推出的新一代基于COM(Component Object Model)的流媒体处理的开发包,与DirectX开发包一起发布。DirectShow使用一种叫Filter Graph的模型来管理整个...

    论文研究-基于DirectShow的MXF文件播放插件 .pdf

    基于DirectShow的MXF文件播放插件,李春亮,李庆国,素材交换格式MXF在广播电视媒体存储与交换中有着广泛的应用。本文基于DirectShow技术开发了MXF播放插件,可直接同步播放封装MPEG-2视频��

    基于DirectShow的WPF播放器(本地和网络)

    基于DirectShow的WPF播放器范例,可以播放本地媒体文件(包括音乐、电影),网络媒体文件(HTTP)(网络连接地址) 本人研究了好几天,累呀

    DirectShow实务精选.rar

    介绍:本书是“DirectShow专业著作”丛书的第二本,...D.1 播放媒体文件的Filter Graph构建过程 452 D.2 两种解决方案 454 D.3 自定义格式文件的生成 455 D.4 Source Filter的开发 457 D.5 体验QQ文件的播放 471

    DirectShow PC 入门参考代码

    适合初次接触DirectShow编程的程序员的一个DirectShow的入门代码,内容很简单——播放一个AVI视频,...测试用的媒体文件可以用DXSDK\Samples\Media\CLOCKTXT.avi 有其他问题可以和我邮件联系。 本资源仅收工本费1分。

    流媒体处理directshow正文

    但如今的多媒体技术却面临着无法处理大量数据、音视频不能同步、难以同时处理来自不同地方,如本地文件,网络,电话广播和数码相机的流媒体、对硬件也有很强的依赖性。诸多问题,阻碍了多媒体技术的大力推广

    DirectShow指定窗口播放视频

    DirectShow在指定的窗口播放,可以设置播放窗口的位置与视频的大小 ...详细的设计文档,再加上完整的源代码,还有用于测试的媒体文件,一条龙服务,即使是基础薄弱的新手也能编写出实用的DShow应用程序!

    H.264 视频解码器在DirectShow 中的设计与实现

    式的媒体文件的回放、音视频采集等高性能要求的多媒体应用,提供完整的解决方案。 为了满足视频存储、视频广播和视频流的需要,ITU2T 和ISO / IECJTC1 联合视频工作 组( JVT) 共同开发制定了视频通信的新一代视频...

    基于DirectShow的简单音、视频播放器

    这个是基于DirectShow的简单音、视频播放器,了解DirectShow的接口,另外还有皮肤管理的选择,也是一个控件,还有调节声音大小的功能,是调用了一个API函数,WaveOutSetVolume,还有直接下载多媒体文件的功能

    DirectShow过滤器-读音频文件过滤器

    本过滤器解析并读取音频文件,将音频解码为未压缩的PCM音频流由输出引脚输出。...输出引脚媒体类型: 主要类型:MEDIATYPE_Audio 子类型:MEDIASUBTYPE_PCM 格式类型:FORMAT_WaveFormatEx 另附DLL注册软件一个。

    DirectShow过滤器-写视频文件过滤器

    本过滤器将未压缩的视频流RGB32和未压缩的音频流PCM,根据输出文件类型进行编码,写入视频文件。可以创作的文件类型为:asf,mp4,wmv。 参见介绍文章:...

    《DirectShow开发指南》范例源代码

    readme.txt:本说明文件。 Chapter04:第4章用到的代码,其中AppIPTransform为MFC Filter的例子, DsDemo是一些演示代码,FilterTitleOverlay是字符叠加Filter的源代码。 Chapter05:第5章用到的代码,其中...

Global site tag (gtag.js) - Google Analytics