Directshow 的前世今生,兼谈Media Foundation

来源:互联网 发布:湖北广电网络武汉有线 编辑:程序博客网 时间:2024/05/17 05:01
近来在研究Media Foundation,查了一下资料竟然发现这个被微软官方钦定的Direct Show的继承人既然已经推出有10年的时间了。这不由让人好奇,自推出以来就被人诟病的Direct Show为什么还能在这10年的时间里居然还地位稳固呢?
好了,这一期先不探讨Diret Show地位稳固的原因了,先简单回顾一下Direct Show的发展历史,至于它是否会被MF替换,什么时候会被替换,大家从它的发展历史中也能找到一些答案。
1.1 孕育期(1995~1998)
ActiveMovie,开发代号Quartz,这个由Geraint Davies为微软公司设计的DirectShow的前身,在Windows 3.0时代,是作为一种对当时最流行的媒体平台QuickTime的回应而开发的。ActiveMovie最早的出现是被附加在Windows 95上面的并且需要系统安装了IE3.0。它当时的使命是作为IE的附件播放在其窗口内的媒体文件,正如当时QuickTime为Netscape以及IE提供的服务那样,它的另一个功能是作为Windows视频技术(VFW,Video For Windows)的一个替换,特别地为在VFW架构中难于处理的MPEG(移动图象专家组格式文件)文件提供辅助处理。
1.2 诞生期(1998)在1998年,大致在DirectX 5年代的时候,ActiveMovie被重命名为DirectShow(反映了微软公司在那时正在努力加强“直接地”在一个通常的取名系统之下与硬件合作的技术)并且被包含为" DirectMedia SDK"的一部分。1.3 成长期(1999~2005)在DirectX的7版中,DirectShow变成了DirectX SDK主要组成部分而且如同DirectInput等其它DirectX APIs一样被给予了它自己的位置。甚至之后,DirectShow被主要用来接收来自像一个手提摄像机这样的电视输入装置的数据,而且它从文件中显示数据的能力被广泛用在Windows Media Player上面。1.4 动荡衰落期(2005~2015)从2005年四月起,DirectShow被从DirectX SDK移除,必须单独下载Extra包才能得以支持,之后DirectShow的文档和示例被转移到Windows SDK,DirectShow也正式成为Windows的一个组件。然而,在编译某些DirectShow的示例时,DirectX SDK仍然是必需的。1.5 消亡期(2005~Media Foundation)2005年,微软推出Windows Vistra,与此同时在Windows Vista上推出的新一代多媒体应用库Media Foundation。目的是提供Windows平台一个统一的多媒体影音解决方案,开发者可以通过Media Foundation播放视频或声音文件、进行多媒体文件格式转码,或者将一连串图片编码为视频等等。Media Foundation 是DirectShow为主的旧式多媒体应用程序接口的替代者与继承者,在微软的计划下将逐步汰换DirectShow技术。Media Foundation要求Windows Vista或更高版本,不支持较早期的Windows版本,特别是Windows XP1.6 写在最后微软为什么要推出Media Foundation?为什么Direct Show饱受诟病的同时,MF在推出的接近10年间鲜有人理会?
个人认为,Direct Show在单机视频处理方面是有其优势的,尽管它有学习难、使用复杂等种种问题;另外,也是因为Media Foundation在目前还没能提供与其匹敌的同等能力。

随着Windows 8的推出,微软要建立基于Winows RT的生态圈的推广,目前看Direct Show是被微软官方决心甩掉的,但是,Windows XP兴盛了近年,Windows RT何时能把Windows 7全面替代,还是需要很长时间的。

Media Foundation 架构

Media Foundation (以下简称MF) 架构分为控制层(Control layer),核心层(Core layer)与平台层(Platform layer)。大部分MF功能均由核心层提供,开发者则由控制层来控制行为。一般开发者仅须了解控制层与核心层,几乎不须接触平台层。
Media Foundation提供了两种编程模型,第一种是以Media Session为主的媒体管道模型(Media pipeline)。但是媒体管道模型太过复杂,且曝露过多底层细节,故微软于 Windows 7 上推出第二种编程模型,内含SinkWriter、SourceReader、以及Transcode API三部分,大大简化了MF的使用难度。
媒体管道(pipeline)分三个组成部分:媒体来源(Media Source),媒体接收器(Media Sink)和媒体平台变换(Media Foundation Transforms)。
媒体平台变换(Media Foundation Transforms)推出了一个革新式的技术 DirectX Media Objects (DMOs)。混合DMO的/ MFT的对象也可以创建。应用程序可以使用MFTs内的管道,或直接使用它们作为独立的对象。其种类如下:
  • 音频和视频编解码器
  • 音频和视频效果
  • Multiplexers 和 demultiplexers
  • Tees
  • 色彩空间转换器
  • Sample-rate converters
  • 视频定标器(Video scalers)
微软建议开发人员编写MFTs,取代DirectShow筛选器。
Media Foundation 使用 Enhanced Video Renderer (EVR)作为渲染器。它可以组合多达16个同步流(simultaneous streams),第一流是一个参考流(reference stream)。

0 0
原创粉丝点击