`
从此醉
  • 浏览: 1045123 次
  • 性别: Icon_minigender_1
  • 来自: US
社区版块
存档分类
最新评论

DirectShow应用——支持Windows Media格式

 
阅读更多

大家知道,微软定义了自己的一种媒体文件类型,叫做ASFAdvanced Systems Format)。ASF其实是一个文件“容器”,它本身并没有规定音视频的压缩格式;在ASF文件中,我们可以包含任何格式的压缩的(包括MPEG-4)、或非压缩的数据。另外,微软提供了独立于DirectX开发环境以外的Windows Media Format SDK(以下简称WMFS ,专门用于支持客户开发ASF相关的应用。那么,我们能不能在DirectShow中开发ASF的应用呢?

答案是肯定的。因为ASF是微软自己的媒体格式,它当然会得到特别的关照。微软提供了一系列的Filter。只是这些Filter的版本关系比较复杂,我们下面先来整理一下。

最早从Windows Media Player (微软的媒体播放器,以下简称WMP6.4,微软使用了一个叫Windows Media SourceFilter,来支持ASF文件的播放。这个Source Filter默认与.asf.wmv.wma扩展名文件关联(即在调用IGraphBuilder::RenderFileIGraphBuilder::AddSourceFilter来播放上述扩展名的文件时,Filter Graph Manager会自动使用Windows Media Source Filter)。下面是典型的使用Windows Media Source Filter来播放ASF文件的Filter Graph参考图:

<shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></path><lock v:ext="edit" aspectratio="t"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 414.75pt; HEIGHT: 98.25pt" type="#_x0000_t75"><img alt="" hspace="" align="baseline" border="0" src="/images/blog_csdn_net/happydeer/13692/o_ASFPlayback1.jpg"></shape>

DirectShow 8.0开始,微软提供了另外两个FilterWM ASF ReaderWM ASF Writer。并且随着DirectShow版本的更新,这两个Filter的版本也在不断更新。(DirectShow 8.1中的这两个Filter使用了WMFS 7.0DirectShow 9.0中的使用了WMFS 7.1。)但是,尽管如此,为了保持向后兼容性,微软还是让Windows Media Source Filter作为播放.asf.wmv.wma文件的默认Source Filter。直到WMFS 9.0(包含有最新版本的WM ASF ReaderWM ASF Writer)的发布,WM ASF Reader才真正完全取代了Windows Media Source Filter。下面是典型的使用WM ASF Reader来播放ASF文件的Filter Graph参考图:

<shape id="_x0000_i1026" style="WIDTH: 376.5pt; HEIGHT: 108.75pt" type="#_x0000_t75"><img alt="" hspace="" align="baseline" border="0" src="/images/blog_csdn_net/happydeer/13692/o_ASFPlayback2.jpg"></shape>

理清了上述的版本关系,编写一个播放一般的ASF文件的应用程序,应该没有什么问题了。而播放另外一些特殊的ASF文件,比如经过了DRM Digital Rights Management)保护的文件,我们还需要提供一些特殊的处理。(更多技术细节请参考SDK中的PlayWndASF例子,这里就不再赘述。)下面,我们要来看一下如何生成我们想要的ASF文件。

上文已经提及,ASF是一个文件“容器”。.asf扩展名是这种格式文件的“统称”,而如果我们生成的Window Media文件只包含音频,我们一般使用.wma扩展名,如果只包含视频、或同时包含音视频,我们一般使用.wmv扩展名。使用WM ASF Writer,有一个重要的概念就是配置(Profile)。通过配置,我们可以设定WM ASF Writer有几个Input pin、生成文件的比特率、压缩质量等等。当WM ASF Writer创建的时候,使用了一个系统默认的配置。如果这个配置不符合我们的具体应用,我们可以通过Filter上的IConfigAsfWriter接口改变配置。有一点需要注意的是,我们在配置WM ASF Writer之前,必须先把它加入到Filter Graph中,而必须等到配置完成后才能进行Pin的连接;运行Filter Graph之前,WM ASF Writer的所有Input pin都要求完成连接,而且各个Input pin上的输入数据要求都是打好时间戳的。还有一个重要的概念需要提醒,WMFS规定,ASF文件必须以音频为基准来播放。所以,一般WM ASF Writer总是需要一个音频的Input pin,即使这个Pin上只是输入一些静音的、低码流的数据。下面是常见的WM ASF Writer三种应用,可供参考:

提示:构建上述Filter Graph,一般有两种切实可行的方法。一种是,一个一个地加入各个Filter,配置WM ASF Writer(如果系统默认配置不符合具体应用时),然后完成整个Filter链路的连接;另一种方法是,使用IGraphBuilder::RenderFile首先构建源文件的播放链路,然后将Renderer FilterFilter Graph中移除,再加入WM ASF Writer,进行必要的配置后完成最终的连接。

总之,微软提供的WM ASF ReaderWM ASF WriterASFDirectShow中的应用提供了“天然的”支持。我们可以在DirectShow环境下,很方便地开发出ASF的应用程序。

分享到:
评论

相关推荐

    基于directshow的基础应用——图像翻转

    修改transform filter,实现图像的左右翻转

    Windows Media Player v7.1 简体中文版

    这是微软公司基于 DirectShow 基础之上开发的媒体播放软件。它提供最广泛,最具可操作性,最方便的多媒体内容。你可以播放更多的文件类型,包括:Windows Media (即以前称为NetShow的), ASF, MPEG-1, MPEG-2, WAV, AVI...

    Windows Media Player也可以播放rm_rmvb解码包(完整版)

    1.解码包含5个rmvb必需的解码文件(cook.dll、drvc.dll、pncrt.dll、sipr.dll、RealMediaSplitter.ax)+注册文件reg.bat。...用vb\vc\vb.net\c#.net+directshow开发播放器且想播放rm\rmvb格式的开发人员

    DirectShow.NET 下最好的 Windows DirectShow 开源封装

    .NET 下最好的 Windows DirectShow 开源封装。 DirectShow.NET LIB 库。 关健字:DirectShow C#.NET 音视频 WINDOWS 视频采集 视频回放

    DirectShow 应用

    DirectShow 应用

    有关DirectShow摄像头编程及DirectShow在WindowsMobile下编程的两篇文章

    有关DirectShow摄像头编程及DirectShow在WindowsMobile下编程的两篇文章,介绍DirectShow的入门知识。

    Windows下通过DirectShow控制USB摄像头,捕获视频流

    Windows下通过DirectShow控制USB摄像头,捕获视频流,并且支持实时抓拍图片,格式为BMP,编译前请自行安装Microsoft DirectX 9.0 SDK

    Developing Microsoft Media Foundation Applications

    Media Foundation是微软在Windows Vista上推出的新一代多媒体应用库,目的是提供Windows平台一个统一的多媒体影音解决方案,开发者可以通过Media Foundation播放视频或声音文件、进行多媒体文件格式转码,或者将...

    Directshow应用

    Directshow应用开发入门

    Directshow Filter常见的MediaType汇总

    你知道H264、AAC、MPEG2、MP4V的媒体格式类型(MediaType)的GUID是什么吗,这个头文件是从MPC工程提取出来的,包含常见的编码格式的媒体类型GUID,方便开发Filter的开发者查阅。

    DirectShow中常见的RGBYUV格式

    DirectShow中常见的RGBYUV格式

    DirectShow开发指南 pdf完整版附随书源码

    第2部分重点讨论了Filter的开发,以及DirectShow应用程序的开发,包括目前非常流行的音视频采集、数码摄像机的支持、非线性编辑等应用。第3部分深入分析了DirectShow SDK提供的部分典型源代码。第4部分结合作者个人...

    VC DirectShow开发指南源码集.rar

    VC DirectShow开发指南源码集,涉及的内容几乎涵盖了在Windows平台上使用DirectShow进行C 编码的方方面面。全书详细介绍了DirectShow的基础知识,重点讨论了Filter的开发,以及DirectShow  应用程序的开发,包括...

    在DirectShow应用程序中使用Intel Media SDK SDK !!!

    我在DirectShow应用程序中声明了一个结构:-mfxFrameInfo outFrameInfo ;,当我尝试构建它时,出现以下错误:“错误2错误C2065:mfxFrameInfo:未声明的标识符”我可能无法正确设置环境。 谁能帮我...

    DirectShow

    应用程序的开发,包括目前非常流行的如音视频采集、数码摄像机的支持、非线性 编辑等应用。第3部深入分析了DirectShow SDK提供的部分典型源代码例子。第 4部分结合作者个人的一些开发实践,通过案例和开放源码分析,...

    《DirectShow开发指南》完整版.rar

    第2部分重点讨论了Filter的开发,以及DirectShow应用程序的开发,包括目前非常流行的音视频采集、数码摄像机的支持、非线性编辑等应用。第3部分深入分析了DirectShow SDK提供的部分典型源代码。第4部分结合作者个人...

    DirectShow开发指南PDF及源码 陆其明(著)

    应用程序的开发,包括目前非常流行的如音视频采集、数码摄像机的支持、非线性 编辑等应用。第3部深入分析了DirectShow SDK提供的部分典型源代码例子。第 4部分结合作者个人的一些开发实践,通过案例和开放源码分析,...

    使用Windows Media Player ActiveX插件播放视频

    演示怎样用WMP的ActiveX控件接口来播放视频文件,除了播放微软支持的格式之外,也能调用第三方插件来播放其他格式(比如MP4、MOV、TS等),建议安装Directshow分离器和解码插件---LAVSplitters,我的其他资源里面有...

    DirectShow实务精选.rar

    附录D 让Windows Media Player播放自定义格式文件 452 D.1 播放媒体文件的Filter Graph构建过程 452 D.2 两种解决方案 454 D.3 自定义格式文件的生成 455 D.4 Source Filter的开发 457 D.5 体验QQ文件的播放 ...

    文件系统驱动编程基础篇之6——DirectShow.pdf

    文件系统驱动编程基础篇之6——DirectShow.pdf

Global site tag (gtag.js) - Google Analytics